vendor: 87,657 bytes, lines 1-3228
1/*! 2 * jQuery JavaScript Library v3.7.1 3 * https://jquery.com/ 4 * 5 * Copyright OpenJS Foundation and other contributors 6 * Released under the MIT license 7 * https://jquery.org/license 8 * 9 * Date: 2023-08-28T13:37Z 10 */ 11( function( global, factory ) { 12 13 "use strict"; 14 15 if ( typeof module === "object" && typeof module.exports === "object" ) { 16 17 // For CommonJS and CommonJS-like environments where a proper `window` 18 // is present, execute the factory and get jQuery. 19 // For environments that do not have a `window` with a `document` 20 // (such as Node.js), expose a factory as module.exports. 21 // This accentuates the need for the creation of a real `window`. 22 // e.g. var jQuery = require("jquery")(window); 23 // See ticket trac-14549 for more info. 24 module.exports = global.document ? 25 factory( global, true ) : 26 function( w ) { 27 if ( !w.document ) { 28 throw new Error( "jQuery requires a window with a document" ); 29 } 30 return factory( w ); 31 }; 32 } else { 33 factory( global ); 34 } 35 36// Pass this if window is not defined yet 37} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 38 39// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 40// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 41// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 42// enough that all such attempts are guarded in a try block. 43"use strict"; 44 45var arr = []; 46 47var getProto = Object.getPrototypeOf; 48 49var slice = arr.slice; 50 51var flat = arr.flat ? function( array ) { 52 return arr.flat.call( array ); 53} : function( array ) { 54 return arr.concat.apply( [], array ); 55}; 56 57 58var push = arr.push; 59 60var indexOf = arr.indexOf; 61 62var class2type = {}; 63 64var toString = class2type.toString; 65 66var hasOwn = class2type.hasOwnProperty; 67 68var fnToString = hasOwn.toString; 69 70var ObjectFunctionString = fnToString.call( Object ); 71 72var support = {}; 73 74var isFunction = function isFunction( obj ) { 75 76 // Support: Chrome <=57, Firefox <=52 77 // In some browsers, typeof returns "function" for HTML <object> elements 78 // (i.e., `typeof document.createElement( "object" ) === "function"`). 79 // We don't want to classify *any* DOM node as a function. 80 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 81 // Plus for old WebKit, typeof returns "function" for HTML collections 82 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 83 return typeof obj === "function" && typeof obj.nodeType !== "number" && 84 typeof obj.item !== "function"; 85 }; 86 87 88var isWindow = function isWindow( obj ) { 89 return obj != null && obj === obj.window; 90 }; 91 92 93var document = window.document; 94 95 96 97 var preservedScriptAttributes = { 98 type: true, 99 src: true, 100 nonce: true, 101 noModule: true 102 }; 103 104 function DOMEval( code, node, doc ) { 105 doc = doc || document; 106 107 var i, val, 108 script = doc.createElement( "script" ); 109 110 script.text = code; 111 if ( node ) { 112 for ( i in preservedScriptAttributes ) { 113 114 // Support: Firefox 64+, Edge 18+ 115 // Some browsers don't support the "nonce" property on scripts. 116 // On the other hand, just using `getAttribute` is not enough as 117 // the `nonce` attribute is reset to an empty string whenever it 118 // becomes browsing-context connected. 119 // See https://github.com/whatwg/html/issues/2369 120 // See https://html.spec.whatwg.org/#nonce-attributes 121 // The `node.getAttribute` check was added for the sake of 122 // `jQuery.globalEval` so that it can fake a nonce-containing node 123 // via an object. 124 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 125 if ( val ) { 126 script.setAttribute( i, val ); 127 } 128 } 129 } 130 doc.head.appendChild( script ).parentNode.removeChild( script ); 131 } 132 133 134function toType( obj ) { 135 if ( obj == null ) { 136 return obj + ""; 137 } 138 139 // Support: Android <=2.3 only (functionish RegExp) 140 return typeof obj === "object" || typeof obj === "function" ? 141 class2type[ toString.call( obj ) ] || "object" : 142 typeof obj; 143} 144/* global Symbol */ 145// Defining this global in .eslintrc.json would create a danger of using the global 146// unguarded in another place, it seems safer to define global only for this module 147 148 149 150var version = "3.7.1", 151 152 rhtmlSuffix = /HTML$/i, 153 154 // Define a local copy of jQuery 155 jQuery = function( selector, context ) { 156 157 // The jQuery object is actually just the init constructor 'enhanced' 158 // Need init if jQuery is called (just allow error to be thrown if not included) 159 return new jQuery.fn.init( selector, context ); 160 }; 161 162jQuery.fn = jQuery.prototype = { 163 164 // The current version of jQuery being used 165 jquery: version, 166 167 constructor: jQuery, 168 169 // The default length of a jQuery object is 0 170 length: 0, 171 172 toArray: function() { 173 return slice.call( this ); 174 }, 175 176 // Get the Nth element in the matched element set OR 177 // Get the whole matched element set as a clean array 178 get: function( num ) { 179 180 // Return all the elements in a clean array 181 if ( num == null ) { 182 return slice.call( this ); 183 } 184 185 // Return just the one element from the set 186 return num < 0 ? this[ num + this.length ] : this[ num ]; 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 199 // Return the newly-formed element set 200 return ret; 201 }, 202 203 // Execute a callback for every element in the matched set. 204 each: function( callback ) { 205 return jQuery.each( this, callback ); 206 }, 207 208 map: function( callback ) { 209 return this.pushStack( jQuery.map( this, function( elem, i ) { 210 return callback.call( elem, i, elem ); 211 } ) ); 212 }, 213 214 slice: function() { 215 return this.pushStack( slice.apply( this, arguments ) ); 216 }, 217 218 first: function() { 219 return this.eq( 0 ); 220 }, 221 222 last: function() { 223 return this.eq( -1 ); 224 }, 225 226 even: function() { 227 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 228 return ( i + 1 ) % 2; 229 } ) ); 230 }, 231 232 odd: function() { 233 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 234 return i % 2; 235 } ) ); 236 }, 237 238 eq: function( i ) { 239 var len = this.length, 240 j = +i + ( i < 0 ? len : 0 ); 241 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 242 }, 243 244 end: function() { 245 return this.prevObject || this.constructor(); 246 }, 247 248 // For internal use only. 249 // Behaves like an Array's method, not like a jQuery method. 250 push: push, 251 sort: arr.sort, 252 splice: arr.splice 253}; 254 255jQuery.extend = jQuery.fn.extend = function() { 256 var options, name, src, copy, copyIsArray, clone, 257 target = arguments[ 0 ] || {}, 258 i = 1, 259 length = arguments.length, 260 deep = false; 261 262 // Handle a deep copy situation 263 if ( typeof target === "boolean" ) { 264 deep = target; 265 266 // Skip the boolean and the target 267 target = arguments[ i ] || {}; 268 i++; 269 } 270 271 // Handle case when target is a string or something (possible in deep copy) 272 if ( typeof target !== "object" && !isFunction( target ) ) { 273 target = {}; 274 } 275 276 // Extend jQuery itself if only one argument is passed 277 if ( i === length ) { 278 target = this; 279 i--; 280 } 281 282 for ( ; i < length; i++ ) { 283 284 // Only deal with non-null/undefined values 285 if ( ( options = arguments[ i ] ) != null ) { 286 287 // Extend the base object 288 for ( name in options ) { 289 copy = options[ name ]; 290 291 // Prevent Object.prototype pollution 292 // Prevent never-ending loop 293 if ( name === "__proto__" || target === copy ) { 294 continue; 295 } 296 297 // Recurse if we're merging plain objects or arrays 298 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 299 ( copyIsArray = Array.isArray( copy ) ) ) ) { 300 src = target[ name ]; 301 302 // Ensure proper type for the source value 303 if ( copyIsArray && !Array.isArray( src ) ) { 304 clone = []; 305 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 306 clone = {}; 307 } else { 308 clone = src; 309 } 310 copyIsArray = false; 311 312 // Never move original objects, clone them 313 target[ name ] = jQuery.extend( deep, clone, copy ); 314 315 // Don't bring in undefined values 316 } else if ( copy !== undefined ) { 317 target[ name ] = copy; 318 } 319 } 320 } 321 } 322 323 // Return the modified object 324 return target; 325}; 326 327jQuery.extend( { 328 329 // Unique for each copy of jQuery on the page 330 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 331 332 // Assume jQuery is ready without the ready module 333 isReady: true, 334 335 error: function( msg ) { 336 throw new Error( msg ); 337 }, 338 339 noop: function() {}, 340 341 isPlainObject: function( obj ) { 342 var proto, Ctor; 343 344 // Detect obvious negatives 345 // Use toString instead of jQuery.type to catch host objects 346 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 347 return false; 348 } 349 350 proto = getProto( obj ); 351 352 // Objects with no prototype (e.g., `Object.create( null )`) are plain 353 if ( !proto ) { 354 return true; 355 } 356 357 // Objects with prototype are plain iff they were constructed by a global Object function 358 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 359 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 360 }, 361 362 isEmptyObject: function( obj ) { 363 var name; 364 365 for ( name in obj ) { 366 return false; 367 } 368 return true; 369 }, 370 371 // Evaluates a script in a provided context; falls back to the global one 372 // if not specified. 373 globalEval: function( code, options, doc ) { 374 DOMEval( code, { nonce: options && options.nonce }, doc ); 375 }, 376 377 each: function( obj, callback ) { 378 var length, i = 0; 379 380 if ( isArrayLike( obj ) ) { 381 length = obj.length; 382 for ( ; i < length; i++ ) { 383 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 384 break; 385 } 386 } 387 } else { 388 for ( i in obj ) { 389 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 390 break; 391 } 392 } 393 } 394 395 return obj; 396 }, 397 398 399 // Retrieve the text value of an array of DOM nodes 400 text: function( elem ) { 401 var node, 402 ret = "", 403 i = 0, 404 nodeType = elem.nodeType; 405 406 if ( !nodeType ) { 407 408 // If no nodeType, this is expected to be an array 409 while ( ( node = elem[ i++ ] ) ) { 410 411 // Do not traverse comment nodes 412 ret += jQuery.text( node ); 413 } 414 } 415 if ( nodeType === 1 || nodeType === 11 ) { 416 return elem.textContent; 417 } 418 if ( nodeType === 9 ) { 419 return elem.documentElement.textContent; 420 } 421 if ( nodeType === 3 || nodeType === 4 ) { 422 return elem.nodeValue; 423 } 424 425 // Do not include comment or processing instruction nodes 426 427 return ret; 428 }, 429 430 // results is for internal usage only 431 makeArray: function( arr, results ) { 432 var ret = results || []; 433 434 if ( arr != null ) { 435 if ( isArrayLike( Object( arr ) ) ) { 436 jQuery.merge( ret, 437 typeof arr === "string" ? 438 [ arr ] : arr 439 ); 440 } else { 441 push.call( ret, arr ); 442 } 443 } 444 445 return ret; 446 }, 447 448 inArray: function( elem, arr, i ) { 449 return arr == null ? -1 : indexOf.call( arr, elem, i ); 450 }, 451 452 isXMLDoc: function( elem ) { 453 var namespace = elem && elem.namespaceURI, 454 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 455 456 // Assume HTML when documentElement doesn't yet exist, such as inside 457 // document fragments. 458 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 459 }, 460 461 // Support: Android <=4.0 only, PhantomJS 1 only 462 // push.apply(_, arraylike) throws on ancient WebKit 463 merge: function( first, second ) { 464 var len = +second.length, 465 j = 0, 466 i = first.length; 467 468 for ( ; j < len; j++ ) { 469 first[ i++ ] = second[ j ]; 470 } 471 472 first.length = i; 473 474 return first; 475 }, 476 477 grep: function( elems, callback, invert ) { 478 var callbackInverse, 479 matches = [], 480 i = 0, 481 length = elems.length, 482 callbackExpect = !invert; 483 484 // Go through the array, only saving the items 485 // that pass the validator function 486 for ( ; i < length; i++ ) { 487 callbackInverse = !callback( elems[ i ], i ); 488 if ( callbackInverse !== callbackExpect ) { 489 matches.push( elems[ i ] ); 490 } 491 } 492 493 return matches; 494 }, 495 496 // arg is for internal usage only 497 map: function( elems, callback, arg ) { 498 var length, value, 499 i = 0, 500 ret = []; 501 502 // Go through the array, translating each of the items to their new values 503 if ( isArrayLike( elems ) ) { 504 length = elems.length; 505 for ( ; i < length; i++ ) { 506 value = callback( elems[ i ], i, arg ); 507 508 if ( value != null ) { 509 ret.push( value ); 510 } 511 } 512 513 // Go through every key on the object, 514 } else { 515 for ( i in elems ) { 516 value = callback( elems[ i ], i, arg ); 517 518 if ( value != null ) { 519 ret.push( value ); 520 } 521 } 522 } 523 524 // Flatten any nested arrays 525 return flat( ret ); 526 }, 527 528 // A global GUID counter for objects 529 guid: 1, 530 531 // jQuery.support is not used in Core but other projects attach their 532 // properties to it so it needs to exist. 533 support: support 534} ); 535 536if ( typeof Symbol === "function" ) { 537 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 538} 539 540// Populate the class2type map 541jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 542 function( _i, name ) { 543 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 544 } ); 545 546function isArrayLike( obj ) { 547 548 // Support: real iOS 8.2 only (not reproducible in simulator) 549 // `in` check used to prevent JIT error (gh-2145) 550 // hasOwn isn't used here due to false negatives 551 // regarding Nodelist length in IE 552 var length = !!obj && "length" in obj && obj.length, 553 type = toType( obj ); 554 555 if ( isFunction( obj ) || isWindow( obj ) ) { 556 return false; 557 } 558 559 return type === "array" || length === 0 || 560 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 561} 562 563 564function nodeName( elem, name ) { 565 566 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 567 568} 569var pop = arr.pop; 570 571 572var sort = arr.sort; 573 574 575var splice = arr.splice; 576 577 578var whitespace = "[\\x20\\t\\r\\n\\f]"; 579 580 581var rtrimCSS = new RegExp( 582 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 583 "g" 584); 585 586 587 588 589// Note: an element does not contain itself 590jQuery.contains = function( a, b ) { 591 var bup = b && b.parentNode; 592 593 return a === bup || !!( bup && bup.nodeType === 1 && ( 594 595 // Support: IE 9 - 11+ 596 // IE doesn't have `contains` on SVG. 597 a.contains ? 598 a.contains( bup ) : 599 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 600 ) ); 601}; 602 603 604 605 606// CSS string/identifier serialization 607// https://drafts.csswg.org/cssom/#common-serializing-idioms 608var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 609 610function fcssescape( ch, asCodePoint ) { 611 if ( asCodePoint ) { 612 613 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 614 if ( ch === "\0" ) { 615 return "\uFFFD"; 616 } 617 618 // Control characters and (dependent upon position) numbers get escaped as code points 619 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 620 } 621 622 // Other potentially-special ASCII characters get backslash-escaped 623 return "\\" + ch; 624} 625 626jQuery.escapeSelector = function( sel ) { 627 return ( sel + "" ).replace( rcssescape, fcssescape ); 628}; 629 630 631 632 633var preferredDoc = document, 634 pushNative = push; 635 636( function() { 637 638var i, 639 Expr, 640 outermostContext, 641 sortInput, 642 hasDuplicate, 643 push = pushNative, 644 645 // Local document vars 646 document, 647 documentElement, 648 documentIsHTML, 649 rbuggyQSA, 650 matches, 651 652 // Instance-specific data 653 expando = jQuery.expando, 654 dirruns = 0, 655 done = 0, 656 classCache = createCache(), 657 tokenCache = createCache(), 658 compilerCache = createCache(), 659 nonnativeSelectorCache = createCache(), 660 sortOrder = function( a, b ) { 661 if ( a === b ) { 662 hasDuplicate = true; 663 } 664 return 0; 665 }, 666 667 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 668 "loop|multiple|open|readonly|required|scoped", 669 670 // Regular expressions 671 672 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 673 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 674 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 675 676 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 677 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 678 679 // Operator (capture 2) 680 "*([*^$|!~]?=)" + whitespace + 681 682 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 683 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 684 whitespace + "*\\]", 685 686 pseudos = ":(" + identifier + ")(?:\\((" + 687 688 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 689 // 1. quoted (capture 3; capture 4 or capture 5) 690 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 691 692 // 2. simple (capture 6) 693 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 694 695 // 3. anything else (capture 2) 696 ".*" + 697 ")\\)|)", 698 699 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 700 rwhitespace = new RegExp( whitespace + "+", "g" ), 701 702 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 703 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 704 whitespace + "*" ), 705 rdescend = new RegExp( whitespace + "|>" ), 706 707 rpseudo = new RegExp( pseudos ), 708 ridentifier = new RegExp( "^" + identifier + "$" ), 709 710 matchExpr = { 711 ID: new RegExp( "^#(" + identifier + ")" ), 712 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 713 TAG: new RegExp( "^(" + identifier + "|[*])" ), 714 ATTR: new RegExp( "^" + attributes ), 715 PSEUDO: new RegExp( "^" + pseudos ), 716 CHILD: new RegExp( 717 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 718 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 719 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 720 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 721 722 // For use in libraries implementing .is() 723 // We use this for POS matching in `select` 724 needsContext: new RegExp( "^" + whitespace + 725 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 726 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 727 }, 728 729 rinputs = /^(?:input|select|textarea|button)$/i, 730 rheader = /^h\d$/i, 731 732 // Easily-parseable/retrievable ID or TAG or CLASS selectors 733 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 734 735 rsibling = /[+~]/, 736 737 // CSS escapes 738 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 739 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 740 "?|\\\\([^\\r\\n\\f])", "g" ), 741 funescape = function( escape, nonHex ) { 742 var high = "0x" + escape.slice( 1 ) - 0x10000; 743 744 if ( nonHex ) { 745 746 // Strip the backslash prefix from a non-hex escape sequence 747 return nonHex; 748 } 749 750 // Replace a hexadecimal escape sequence with the encoded Unicode code point 751 // Support: IE <=11+ 752 // For values outside the Basic Multilingual Plane (BMP), manually construct a 753 // surrogate pair 754 return high < 0 ? 755 String.fromCharCode( high + 0x10000 ) : 756 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 757 }, 758 759 // Used for iframes; see `setDocument`. 760 // Support: IE 9 - 11+, Edge 12 - 18+ 761 // Removing the function wrapper causes a "Permission Denied" 762 // error in IE/Edge. 763 unloadHandler = function() { 764 setDocument(); 765 }, 766 767 inDisabledFieldset = addCombinator( 768 function( elem ) { 769 return elem.disabled === true && nodeName( elem, "fieldset" ); 770 }, 771 { dir: "parentNode", next: "legend" } 772 ); 773 774// Support: IE <=9 only 775// Accessing document.activeElement can throw unexpectedly 776// https://bugs.jquery.com/ticket/13393 777function safeActiveElement() { 778 try { 779 return document.activeElement; 780 } catch ( err ) { } 781} 782 783// Optimize for push.apply( _, NodeList ) 784try { 785 push.apply( 786 ( arr = slice.call( preferredDoc.childNodes ) ), 787 preferredDoc.childNodes 788 ); 789 790 // Support: Android <=4.0 791 // Detect silently failing push.apply 792 // eslint-disable-next-line no-unused-expressions 793 arr[ preferredDoc.childNodes.length ].nodeType; 794} catch ( e ) { 795 push = { 796 apply: function( target, els ) { 797 pushNative.apply( target, slice.call( els ) ); 798 }, 799 call: function( target ) { 800 pushNative.apply( target, slice.call( arguments, 1 ) ); 801 } 802 }; 803} 804 805function find( selector, context, results, seed ) { 806 var m, i, elem, nid, match, groups, newSelector, 807 newContext = context && context.ownerDocument, 808 809 // nodeType defaults to 9, since context defaults to document 810 nodeType = context ? context.nodeType : 9; 811 812 results = results || []; 813 814 // Return early from calls with invalid selector or context 815 if ( typeof selector !== "string" || !selector || 816 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 817 818 return results; 819 } 820 821 // Try to shortcut find operations (as opposed to filters) in HTML documents 822 if ( !seed ) { 823 setDocument( context ); 824 context = context || document; 825 826 if ( documentIsHTML ) { 827 828 // If the selector is sufficiently simple, try using a "get*By*" DOM method 829 // (excepting DocumentFragment context, where the methods don't exist) 830 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 831 832 // ID selector 833 if ( ( m = match[ 1 ] ) ) { 834 835 // Document context 836 if ( nodeType === 9 ) { 837 if ( ( elem = context.getElementById( m ) ) ) { 838 839 // Support: IE 9 only 840 // getElementById can match elements by name instead of ID 841 if ( elem.id === m ) { 842 push.call( results, elem ); 843 return results; 844 } 845 } else { 846 return results; 847 } 848 849 // Element context 850 } else { 851 852 // Support: IE 9 only 853 // getElementById can match elements by name instead of ID 854 if ( newContext && ( elem = newContext.getElementById( m ) ) && 855 find.contains( context, elem ) && 856 elem.id === m ) { 857 858 push.call( results, elem ); 859 return results; 860 } 861 } 862 863 // Type selector 864 } else if ( match[ 2 ] ) { 865 push.apply( results, context.getElementsByTagName( selector ) ); 866 return results; 867 868 // Class selector 869 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 870 push.apply( results, context.getElementsByClassName( m ) ); 871 return results; 872 } 873 } 874 875 // Take advantage of querySelectorAll 876 if ( !nonnativeSelectorCache[ selector + " " ] && 877 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 878 879 newSelector = selector; 880 newContext = context; 881 882 // qSA considers elements outside a scoping root when evaluating child or 883 // descendant combinators, which is not what we want. 884 // In such cases, we work around the behavior by prefixing every selector in the 885 // list with an ID selector referencing the scope context. 886 // The technique has to be used as well when a leading combinator is used 887 // as such selectors are not recognized by querySelectorAll. 888 // Thanks to Andrew Dupont for this technique. 889 if ( nodeType === 1 && 890 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 891 892 // Expand context for sibling selectors 893 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 894 context; 895 896 // We can use :scope instead of the ID hack if the browser 897 // supports it & if we're not changing the context. 898 // Support: IE 11+, Edge 17 - 18+ 899 // IE/Edge sometimes throw a "Permission denied" error when 900 // strict-comparing two documents; shallow comparisons work. 901 // eslint-disable-next-line eqeqeq 902 if ( newContext != context || !support.scope ) { 903 904 // Capture the context ID, setting it first if necessary 905 if ( ( nid = context.getAttribute( "id" ) ) ) { 906 nid = jQuery.escapeSelector( nid ); 907 } else { 908 context.setAttribute( "id", ( nid = expando ) ); 909 } 910 } 911 912 // Prefix every selector in the list 913 groups = tokenize( selector ); 914 i = groups.length; 915 while ( i-- ) { 916 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 917 toSelector( groups[ i ] ); 918 } 919 newSelector = groups.join( "," ); 920 } 921 922 try { 923 push.apply( results, 924 newContext.querySelectorAll( newSelector ) 925 ); 926 return results; 927 } catch ( qsaError ) { 928 nonnativeSelectorCache( selector, true ); 929 } finally { 930 if ( nid === expando ) { 931 context.removeAttribute( "id" ); 932 } 933 } 934 } 935 } 936 } 937 938 // All others 939 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 940} 941 942/** 943 * Create key-value caches of limited size 944 * @returns {function(string, object)} Returns the Object data after storing it on itself with 945 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 946 * deleting the oldest entry 947 */ 948function createCache() { 949 var keys = []; 950 951 function cache( key, value ) { 952 953 // Use (key + " ") to avoid collision with native prototype properties 954 // (see https://github.com/jquery/sizzle/issues/157) 955 if ( keys.push( key + " " ) > Expr.cacheLength ) { 956 957 // Only keep the most recent entries 958 delete cache[ keys.shift() ]; 959 } 960 return ( cache[ key + " " ] = value ); 961 } 962 return cache; 963} 964 965/** 966 * Mark a function for special use by jQuery selector module 967 * @param {Function} fn The function to mark 968 */ 969function markFunction( fn ) { 970 fn[ expando ] = true; 971 return fn; 972} 973 974/** 975 * Support testing using an element 976 * @param {Function} fn Passed the created element and returns a boolean result 977 */ 978function assert( fn ) { 979 var el = document.createElement( "fieldset" ); 980 981 try { 982 return !!fn( el ); 983 } catch ( e ) { 984 return false; 985 } finally { 986 987 // Remove from its parent by default 988 if ( el.parentNode ) { 989 el.parentNode.removeChild( el ); 990 } 991 992 // release memory in IE 993 el = null; 994 } 995} 996 997/** 998 * Returns a function to use in pseudos for input types 999 * @param {String} type 1000 */ 1001function createInputPseudo( type ) { 1002 return function( elem ) { 1003 return nodeName( elem, "input" ) && elem.type === type; 1004 }; 1005} 1006 1007/** 1008 * Returns a function to use in pseudos for buttons 1009 * @param {String} type 1010 */ 1011function createButtonPseudo( type ) { 1012 return function( elem ) { 1013 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 1014 elem.type === type; 1015 }; 1016} 1017 1018/** 1019 * Returns a function to use in pseudos for :enabled/:disabled 1020 * @param {Boolean} disabled true for :disabled; false for :enabled 1021 */ 1022function createDisabledPseudo( disabled ) { 1023 1024 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 1025 return function( elem ) { 1026 1027 // Only certain elements can match :enabled or :disabled 1028 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 1029 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 1030 if ( "form" in elem ) { 1031 1032 // Check for inherited disabledness on relevant non-disabled elements: 1033 // * listed form-associated elements in a disabled fieldset 1034 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 1035 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 1036 // * option elements in a disabled optgroup 1037 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 1038 // All such elements have a "form" property. 1039 if ( elem.parentNode && elem.disabled === false ) { 1040 1041 // Option elements defer to a parent optgroup if present 1042 if ( "label" in elem ) { 1043 if ( "label" in elem.parentNode ) { 1044 return elem.parentNode.disabled === disabled; 1045 } else { 1046 return elem.disabled === disabled; 1047 } 1048 } 1049 1050 // Support: IE 6 - 11+ 1051 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 1052 return elem.isDisabled === disabled || 1053 1054 // Where there is no isDisabled, check manually 1055 elem.isDisabled !== !disabled && 1056 inDisabledFieldset( elem ) === disabled; 1057 } 1058 1059 return elem.disabled === disabled; 1060 1061 // Try to winnow out elements that can't be disabled before trusting the disabled property. 1062 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 1063 // even exist on them, let alone have a boolean value. 1064 } else if ( "label" in elem ) { 1065 return elem.disabled === disabled; 1066 } 1067 1068 // Remaining elements are neither :enabled nor :disabled 1069 return false; 1070 }; 1071} 1072 1073/** 1074 * Returns a function to use in pseudos for positionals 1075 * @param {Function} fn 1076 */ 1077function 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 jQuery selector context 1097 * @param {Element|Object=} context 1098 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1099 */ 1100function testContext( context ) { 1101 return context && typeof context.getElementsByTagName !== "undefined" && context; 1102} 1103 1104/** 1105 * Sets document-related variables once based on the current document 1106 * @param {Element|Object} [node] An element or document object to use to set the document 1107 * @returns {Object} Returns the current document 1108 */ 1109function setDocument( node ) { 1110 var subWindow, 1111 doc = node ? node.ownerDocument || node : preferredDoc; 1112 1113 // Return early if doc is invalid or already selected 1114 // Support: IE 11+, Edge 17 - 18+ 1115 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1116 // two documents; shallow comparisons work. 1117 // eslint-disable-next-line eqeqeq 1118 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 1119 return document; 1120 } 1121 1122 // Update global variables 1123 document = doc; 1124 documentElement = document.documentElement; 1125 documentIsHTML = !jQuery.isXMLDoc( document ); 1126 1127 // Support: iOS 7 only, IE 9 - 11+ 1128 // Older browsers didn't support unprefixed `matches`. 1129 matches = documentElement.matches || 1130 documentElement.webkitMatchesSelector || 1131 documentElement.msMatchesSelector; 1132 1133 // Support: IE 9 - 11+, Edge 12 - 18+ 1134 // Accessing iframe documents after unload throws "permission denied" errors 1135 // (see trac-13936). 1136 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 1137 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 1138 if ( documentElement.msMatchesSelector && 1139 1140 // Support: IE 11+, Edge 17 - 18+ 1141 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1142 // two documents; shallow comparisons work. 1143 // eslint-disable-next-line eqeqeq 1144 preferredDoc != document && 1145 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 1146 1147 // Support: IE 9 - 11+, Edge 12 - 18+ 1148 subWindow.addEventListener( "unload", unloadHandler ); 1149 } 1150 1151 // Support: IE <10 1152 // Check if getElementById returns elements by name 1153 // The broken getElementById methods don't pick up programmatically-set names, 1154 // so use a roundabout getElementsByName test 1155 support.getById = assert( function( el ) { 1156 documentElement.appendChild( el ).id = jQuery.expando; 1157 return !document.getElementsByName || 1158 !document.getElementsByName( jQuery.expando ).length; 1159 } ); 1160 1161 // Support: IE 9 only 1162 // Check to see if it's possible to do matchesSelector 1163 // on a disconnected node. 1164 support.disconnectedMatch = assert( function( el ) { 1165 return matches.call( el, "*" ); 1166 } ); 1167 1168 // Support: IE 9 - 11+, Edge 12 - 18+ 1169 // IE/Edge don't support the :scope pseudo-class. 1170 support.scope = assert( function() { 1171 return document.querySelectorAll( ":scope" ); 1172 } ); 1173 1174 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 1175 // Make sure the `:has()` argument is parsed unforgivingly. 1176 // We include `*` in the test to detect buggy implementations that are 1177 // _selectively_ forgiving (specifically when the list includes at least 1178 // one valid selector). 1179 // Note that we treat complete lack of support for `:has()` as if it were 1180 // spec-compliant support, which is fine because use of `:has()` in such 1181 // environments will fail in the qSA path and fall back to jQuery traversal 1182 // anyway. 1183 support.cssHas = assert( function() { 1184 try { 1185 document.querySelector( ":has(*,:jqfake)" ); 1186 return false; 1187 } catch ( e ) { 1188 return true; 1189 } 1190 } ); 1191 1192 // ID filter and find 1193 if ( support.getById ) { 1194 Expr.filter.ID = function( id ) { 1195 var attrId = id.replace( runescape, funescape ); 1196 return function( elem ) { 1197 return elem.getAttribute( "id" ) === attrId; 1198 }; 1199 }; 1200 Expr.find.ID = function( id, context ) { 1201 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1202 var elem = context.getElementById( id ); 1203 return elem ? [ elem ] : []; 1204 } 1205 }; 1206 } else { 1207 Expr.filter.ID = function( id ) { 1208 var attrId = id.replace( runescape, funescape ); 1209 return function( elem ) { 1210 var node = typeof elem.getAttributeNode !== "undefined" && 1211 elem.getAttributeNode( "id" ); 1212 return node && node.value === attrId; 1213 }; 1214 }; 1215 1216 // Support: IE 6 - 7 only 1217 // getElementById is not reliable as a find shortcut 1218 Expr.find.ID = function( id, context ) { 1219 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1220 var node, i, elems, 1221 elem = context.getElementById( id ); 1222 1223 if ( elem ) { 1224 1225 // Verify the id attribute 1226 node = elem.getAttributeNode( "id" ); 1227 if ( node && node.value === id ) { 1228 return [ elem ]; 1229 } 1230 1231 // Fall back on getElementsByName 1232 elems = context.getElementsByName( id ); 1233 i = 0; 1234 while ( ( elem = elems[ i++ ] ) ) { 1235 node = elem.getAttributeNode( "id" ); 1236 if ( node && node.value === id ) { 1237 return [ elem ]; 1238 } 1239 } 1240 } 1241 1242 return []; 1243 } 1244 }; 1245 } 1246 1247 // Tag 1248 Expr.find.TAG = function( tag, context ) { 1249 if ( typeof context.getElementsByTagName !== "undefined" ) { 1250 return context.getElementsByTagName( tag ); 1251 1252 // DocumentFragment nodes don't have gEBTN 1253 } else { 1254 return context.querySelectorAll( tag ); 1255 } 1256 }; 1257 1258 // Class 1259 Expr.find.CLASS = function( className, context ) { 1260 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 1261 return context.getElementsByClassName( className ); 1262 } 1263 }; 1264 1265 /* QSA/matchesSelector 1266 ---------------------------------------------------------------------- */ 1267 1268 // QSA and matchesSelector support 1269 1270 rbuggyQSA = []; 1271 1272 // Build QSA regex 1273 // Regex strategy adopted from Diego Perini 1274 assert( function( el ) { 1275 1276 var input; 1277 1278 documentElement.appendChild( el ).innerHTML = 1279 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 1280 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 1281 "<option selected=''></option></select>"; 1282 1283 // Support: iOS <=7 - 8 only 1284 // Boolean attributes and "value" are not treated correctly in some XML documents 1285 if ( !el.querySelectorAll( "[selected]" ).length ) { 1286 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 1287 } 1288 1289 // Support: iOS <=7 - 8 only 1290 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 1291 rbuggyQSA.push( "~=" ); 1292 } 1293 1294 // Support: iOS 8 only 1295 // https://bugs.webkit.org/show_bug.cgi?id=136851 1296 // In-page `selector#id sibling-combinator selector` fails 1297 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 1298 rbuggyQSA.push( ".#.+[+~]" ); 1299 } 1300 1301 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 1302 // In some of the document kinds, these selectors wouldn't work natively. 1303 // This is probably OK but for backwards compatibility we want to maintain 1304 // handling them through jQuery traversal in jQuery 3.x. 1305 if ( !el.querySelectorAll( ":checked" ).length ) { 1306 rbuggyQSA.push( ":checked" ); 1307 } 1308 1309 // Support: Windows 8 Native Apps 1310 // The type and name attributes are restricted during .innerHTML assignment 1311 input = document.createElement( "input" ); 1312 input.setAttribute( "type", "hidden" ); 1313 el.appendChild( input ).setAttribute( "name", "D" ); 1314 1315 // Support: IE 9 - 11+ 1316 // IE's :disabled selector does not pick up the children of disabled fieldsets 1317 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 1318 // In some of the document kinds, these selectors wouldn't work natively. 1319 // This is probably OK but for backwards compatibility we want to maintain 1320 // handling them through jQuery traversal in jQuery 3.x. 1321 documentElement.appendChild( el ).disabled = true; 1322 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 1323 rbuggyQSA.push( ":enabled", ":disabled" ); 1324 } 1325 1326 // Support: IE 11+, Edge 15 - 18+ 1327 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 1328 // Adding a temporary attribute to the document before the selection works 1329 // around the issue. 1330 // Interestingly, IE 10 & older don't seem to have the issue. 1331 input = document.createElement( "input" ); 1332 input.setAttribute( "name", "" ); 1333 el.appendChild( input ); 1334 if ( !el.querySelectorAll( "[name='']" ).length ) { 1335 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 1336 whitespace + "*(?:''|\"\")" ); 1337 } 1338 } ); 1339 1340 if ( !support.cssHas ) { 1341 1342 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 1343 // Our regular `try-catch` mechanism fails to detect natively-unsupported 1344 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 1345 // in browsers that parse the `:has()` argument as a forgiving selector list. 1346 // https://drafts.csswg.org/selectors/#relational now requires the argument 1347 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 1348 rbuggyQSA.push( ":has" ); 1349 } 1350 1351 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 1352 1353 /* Sorting 1354 ---------------------------------------------------------------------- */ 1355 1356 // Document order sorting 1357 sortOrder = function( a, b ) { 1358 1359 // Flag for duplicate removal 1360 if ( a === b ) { 1361 hasDuplicate = true; 1362 return 0; 1363 } 1364 1365 // Sort on method existence if only one input has compareDocumentPosition 1366 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 1367 if ( compare ) { 1368 return compare; 1369 } 1370 1371 // Calculate position if both inputs belong to the same document 1372 // Support: IE 11+, Edge 17 - 18+ 1373 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1374 // two documents; shallow comparisons work. 1375 // eslint-disable-next-line eqeqeq 1376 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 1377 a.compareDocumentPosition( b ) : 1378 1379 // Otherwise we know they are disconnected 1380 1; 1381 1382 // Disconnected nodes 1383 if ( compare & 1 || 1384 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 1385 1386 // Choose the first element that is related to our preferred document 1387 // Support: IE 11+, Edge 17 - 18+ 1388 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1389 // two documents; shallow comparisons work. 1390 // eslint-disable-next-line eqeqeq 1391 if ( a === document || a.ownerDocument == preferredDoc && 1392 find.contains( preferredDoc, a ) ) { 1393 return -1; 1394 } 1395 1396 // Support: IE 11+, Edge 17 - 18+ 1397 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1398 // two documents; shallow comparisons work. 1399 // eslint-disable-next-line eqeqeq 1400 if ( b === document || b.ownerDocument == preferredDoc && 1401 find.contains( preferredDoc, b ) ) { 1402 return 1; 1403 } 1404 1405 // Maintain original order 1406 return sortInput ? 1407 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 1408 0; 1409 } 1410 1411 return compare & 4 ? -1 : 1; 1412 }; 1413 1414 return document; 1415} 1416 1417find.matches = function( expr, elements ) { 1418 return find( expr, null, null, elements ); 1419}; 1420 1421find.matchesSelector = function( elem, expr ) { 1422 setDocument( elem ); 1423 1424 if ( documentIsHTML && 1425 !nonnativeSelectorCache[ expr + " " ] && 1426 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 1427 1428 try { 1429 var ret = matches.call( elem, expr ); 1430 1431 // IE 9's matchesSelector returns false on disconnected nodes 1432 if ( ret || support.disconnectedMatch || 1433 1434 // As well, disconnected nodes are said to be in a document 1435 // fragment in IE 9 1436 elem.document && elem.document.nodeType !== 11 ) { 1437 return ret; 1438 } 1439 } catch ( e ) { 1440 nonnativeSelectorCache( expr, true ); 1441 } 1442 } 1443 1444 return find( expr, document, null, [ elem ] ).length > 0; 1445}; 1446 1447find.contains = function( context, elem ) { 1448 1449 // Set document vars if needed 1450 // Support: IE 11+, Edge 17 - 18+ 1451 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1452 // two documents; shallow comparisons work. 1453 // eslint-disable-next-line eqeqeq 1454 if ( ( context.ownerDocument || context ) != document ) { 1455 setDocument( context ); 1456 } 1457 return jQuery.contains( context, elem ); 1458}; 1459 1460 1461find.attr = function( elem, name ) { 1462 1463 // Set document vars if needed 1464 // Support: IE 11+, Edge 17 - 18+ 1465 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1466 // two documents; shallow comparisons work. 1467 // eslint-disable-next-line eqeqeq 1468 if ( ( elem.ownerDocument || elem ) != document ) { 1469 setDocument( elem ); 1470 } 1471 1472 var fn = Expr.attrHandle[ name.toLowerCase() ], 1473 1474 // Don't get fooled by Object.prototype properties (see trac-13807) 1475 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 1476 fn( elem, name, !documentIsHTML ) : 1477 undefined; 1478 1479 if ( val !== undefined ) { 1480 return val; 1481 } 1482 1483 return elem.getAttribute( name ); 1484}; 1485 1486find.error = function( msg ) { 1487 throw new Error( "Syntax error, unrecognized expression: " + msg ); 1488}; 1489 1490/** 1491 * Document sorting and removing duplicates 1492 * @param {ArrayLike} results 1493 */ 1494jQuery.uniqueSort = function( results ) { 1495 var elem, 1496 duplicates = [], 1497 j = 0, 1498 i = 0; 1499 1500 // Unless we *know* we can detect duplicates, assume their presence 1501 // 1502 // Support: Android <=4.0+ 1503 // Testing for detecting duplicates is unpredictable so instead assume we can't 1504 // depend on duplicate detection in all browsers without a stable sort. 1505 hasDuplicate = !support.sortStable; 1506 sortInput = !support.sortStable && slice.call( results, 0 ); 1507 sort.call( results, sortOrder ); 1508 1509 if ( hasDuplicate ) { 1510 while ( ( elem = results[ i++ ] ) ) { 1511 if ( elem === results[ i ] ) { 1512 j = duplicates.push( i ); 1513 } 1514 } 1515 while ( j-- ) { 1516 splice.call( results, duplicates[ j ], 1 ); 1517 } 1518 } 1519 1520 // Clear input after sorting to release objects 1521 // See https://github.com/jquery/sizzle/pull/225 1522 sortInput = null; 1523 1524 return results; 1525}; 1526 1527jQuery.fn.uniqueSort = function() { 1528 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 1529}; 1530 1531Expr = jQuery.expr = { 1532 1533 // Can be adjusted by the user 1534 cacheLength: 50, 1535 1536 createPseudo: markFunction, 1537 1538 match: matchExpr, 1539 1540 attrHandle: {}, 1541 1542 find: {}, 1543 1544 relative: { 1545 ">": { dir: "parentNode", first: true }, 1546 " ": { dir: "parentNode" }, 1547 "+": { dir: "previousSibling", first: true }, 1548 "~": { dir: "previousSibling" } 1549 }, 1550 1551 preFilter: { 1552 ATTR: function( match ) { 1553 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 1554 1555 // Move the given value to match[3] whether quoted or unquoted 1556 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 1557 .replace( runescape, funescape ); 1558 1559 if ( match[ 2 ] === "~=" ) { 1560 match[ 3 ] = " " + match[ 3 ] + " "; 1561 } 1562 1563 return match.slice( 0, 4 ); 1564 }, 1565 1566 CHILD: function( match ) { 1567 1568 /* matches from matchExpr["CHILD"] 1569 1 type (only|nth|...) 1570 2 what (child|of-type) 1571 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 1572 4 xn-component of xn+y argument ([+-]?\d*n|) 1573 5 sign of xn-component 1574 6 x of xn-component 1575 7 sign of y-component 1576 8 y of y-component 1577 */ 1578 match[ 1 ] = match[ 1 ].toLowerCase(); 1579 1580 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 1581 1582 // nth-* requires argument 1583 if ( !match[ 3 ] ) { 1584 find.error( match[ 0 ] ); 1585 } 1586 1587 // numeric x and y parameters for Expr.filter.CHILD 1588 // remember that false/true cast respectively to 0/1 1589 match[ 4 ] = +( match[ 4 ] ? 1590 match[ 5 ] + ( match[ 6 ] || 1 ) : 1591 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 1592 ); 1593 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 1594 1595 // other types prohibit arguments 1596 } else if ( match[ 3 ] ) { 1597 find.error( match[ 0 ] ); 1598 } 1599 1600 return match; 1601 }, 1602 1603 PSEUDO: function( match ) { 1604 var excess, 1605 unquoted = !match[ 6 ] && match[ 2 ]; 1606 1607 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 1608 return null; 1609 } 1610 1611 // Accept quoted arguments as-is 1612 if ( match[ 3 ] ) { 1613 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 1614 1615 // Strip excess characters from unquoted arguments 1616 } else if ( unquoted && rpseudo.test( unquoted ) && 1617 1618 // Get excess from tokenize (recursively) 1619 ( excess = tokenize( unquoted, true ) ) && 1620 1621 // advance to the next closing parenthesis 1622 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 1623 1624 // excess is a negative index 1625 match[ 0 ] = match[ 0 ].slice( 0, excess ); 1626 match[ 2 ] = unquoted.slice( 0, excess ); 1627 } 1628 1629 // Return only captures needed by the pseudo filter method (type and argument) 1630 return match.slice( 0, 3 ); 1631 } 1632 }, 1633 1634 filter: { 1635 1636 TAG: function( nodeNameSelector ) { 1637 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 1638 return nodeNameSelector === "*" ? 1639 function() { 1640 return true; 1641 } : 1642 function( elem ) { 1643 return nodeName( elem, expectedNodeName ); 1644 }; 1645 }, 1646 1647 CLASS: function( className ) { 1648 var pattern = classCache[ className + " " ]; 1649 1650 return pattern || 1651 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 1652 "(" + whitespace + "|$)" ) ) && 1653 classCache( className, function( elem ) { 1654 return pattern.test( 1655 typeof elem.className === "string" && elem.className || 1656 typeof elem.getAttribute !== "undefined" && 1657 elem.getAttribute( "class" ) || 1658 "" 1659 ); 1660 } ); 1661 }, 1662 1663 ATTR: function( name, operator, check ) { 1664 return function( elem ) { 1665 var result = find.attr( elem, name ); 1666 1667 if ( result == null ) { 1668 return operator === "!="; 1669 } 1670 if ( !operator ) { 1671 return true; 1672 } 1673 1674 result += ""; 1675 1676 if ( operator === "=" ) { 1677 return result === check; 1678 } 1679 if ( operator === "!=" ) { 1680 return result !== check; 1681 } 1682 if ( operator === "^=" ) { 1683 return check && result.indexOf( check ) === 0; 1684 } 1685 if ( operator === "*=" ) { 1686 return check && result.indexOf( check ) > -1; 1687 } 1688 if ( operator === "$=" ) { 1689 return check && result.slice( -check.length ) === check; 1690 } 1691 if ( operator === "~=" ) { 1692 return ( " " + result.replace( rwhitespace, " " ) + " " ) 1693 .indexOf( check ) > -1; 1694 } 1695 if ( operator === "|=" ) { 1696 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 1697 } 1698 1699 return false; 1700 }; 1701 }, 1702 1703 CHILD: function( type, what, _argument, first, last ) { 1704 var simple = type.slice( 0, 3 ) !== "nth", 1705 forward = type.slice( -4 ) !== "last", 1706 ofType = what === "of-type"; 1707 1708 return first === 1 && last === 0 ? 1709 1710 // Shortcut for :nth-*(n) 1711 function( elem ) { 1712 return !!elem.parentNode; 1713 } : 1714 1715 function( elem, _context, xml ) { 1716 var cache, outerCache, node, nodeIndex, start, 1717 dir = simple !== forward ? "nextSibling" : "previousSibling", 1718 parent = elem.parentNode, 1719 name = ofType && elem.nodeName.toLowerCase(), 1720 useCache = !xml && !ofType, 1721 diff = false; 1722 1723 if ( parent ) { 1724 1725 // :(first|last|only)-(child|of-type) 1726 if ( simple ) { 1727 while ( dir ) { 1728 node = elem; 1729 while ( ( node = node[ dir ] ) ) { 1730 if ( ofType ? 1731 nodeName( node, name ) : 1732 node.nodeType === 1 ) { 1733 1734 return false; 1735 } 1736 } 1737 1738 // Reverse direction for :only-* (if we haven't yet done so) 1739 start = dir = type === "only" && !start && "nextSibling"; 1740 } 1741 return true; 1742 } 1743 1744 start = [ forward ? parent.firstChild : parent.lastChild ]; 1745 1746 // non-xml :nth-child(...) stores cache data on `parent` 1747 if ( forward && useCache ) { 1748 1749 // Seek `elem` from a previously-cached index 1750 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 1751 cache = outerCache[ type ] || []; 1752 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 1753 diff = nodeIndex && cache[ 2 ]; 1754 node = nodeIndex && parent.childNodes[ nodeIndex ]; 1755 1756 while ( ( node = ++nodeIndex && node && node[ dir ] || 1757 1758 // Fallback to seeking `elem` from the start 1759 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 1760 1761 // When found, cache indexes on `parent` and break 1762 if ( node.nodeType === 1 && ++diff && node === elem ) { 1763 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 1764 break; 1765 } 1766 } 1767 1768 } else { 1769 1770 // Use previously-cached element index if available 1771 if ( useCache ) { 1772 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 1773 cache = outerCache[ type ] || []; 1774 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 1775 diff = nodeIndex; 1776 } 1777 1778 // xml :nth-child(...) 1779 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 1780 if ( diff === false ) { 1781 1782 // Use the same loop as above to seek `elem` from the start 1783 while ( ( node = ++nodeIndex && node && node[ dir ] || 1784 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 1785 1786 if ( ( ofType ? 1787 nodeName( node, name ) : 1788 node.nodeType === 1 ) && 1789 ++diff ) { 1790 1791 // Cache the index of each encountered element 1792 if ( useCache ) { 1793 outerCache = node[ expando ] || 1794 ( node[ expando ] = {} ); 1795 outerCache[ type ] = [ dirruns, diff ]; 1796 } 1797 1798 if ( node === elem ) { 1799 break; 1800 } 1801 } 1802 } 1803 } 1804 } 1805 1806 // Incorporate the offset, then check against cycle size 1807 diff -= last; 1808 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 1809 } 1810 }; 1811 }, 1812 1813 PSEUDO: function( pseudo, argument ) { 1814 1815 // pseudo-class names are case-insensitive 1816 // https://www.w3.org/TR/selectors/#pseudo-classes 1817 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 1818 // Remember that setFilters inherits from pseudos 1819 var args, 1820 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 1821 find.error( "unsupported pseudo: " + pseudo ); 1822 1823 // The user may use createPseudo to indicate that 1824 // arguments are needed to create the filter function 1825 // just as jQuery does 1826 if ( fn[ expando ] ) { 1827 return fn( argument ); 1828 } 1829 1830 // But maintain support for old signatures 1831 if ( fn.length > 1 ) { 1832 args = [ pseudo, pseudo, "", argument ]; 1833 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 1834 markFunction( function( seed, matches ) { 1835 var idx, 1836 matched = fn( seed, argument ), 1837 i = matched.length; 1838 while ( i-- ) { 1839 idx = indexOf.call( seed, matched[ i ] ); 1840 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 1841 } 1842 } ) : 1843 function( elem ) { 1844 return fn( elem, 0, args ); 1845 }; 1846 } 1847 1848 return fn; 1849 } 1850 }, 1851 1852 pseudos: { 1853 1854 // Potentially complex pseudos 1855 not: markFunction( function( selector ) { 1856 1857 // Trim the selector passed to compile 1858 // to avoid treating leading and trailing 1859 // spaces as combinators 1860 var input = [], 1861 results = [], 1862 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 1863 1864 return matcher[ expando ] ? 1865 markFunction( function( seed, matches, _context, xml ) { 1866 var elem, 1867 unmatched = matcher( seed, null, xml, [] ), 1868 i = seed.length; 1869 1870 // Match elements unmatched by `matcher` 1871 while ( i-- ) { 1872 if ( ( elem = unmatched[ i ] ) ) { 1873 seed[ i ] = !( matches[ i ] = elem ); 1874 } 1875 } 1876 } ) : 1877 function( elem, _context, xml ) { 1878 input[ 0 ] = elem; 1879 matcher( input, null, xml, results ); 1880 1881 // Don't keep the element 1882 // (see https://github.com/jquery/sizzle/issues/299) 1883 input[ 0 ] = null; 1884 return !results.pop(); 1885 }; 1886 } ), 1887 1888 has: markFunction( function( selector ) { 1889 return function( elem ) { 1890 return find( selector, elem ).length > 0; 1891 }; 1892 } ), 1893 1894 contains: markFunction( function( text ) { 1895 text = text.replace( runescape, funescape ); 1896 return function( elem ) { 1897 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 1898 }; 1899 } ), 1900 1901 // "Whether an element is represented by a :lang() selector 1902 // is based solely on the element's language value 1903 // being equal to the identifier C, 1904 // or beginning with the identifier C immediately followed by "-". 1905 // The matching of C against the element's language value is performed case-insensitively. 1906 // The identifier C does not have to be a valid language name." 1907 // https://www.w3.org/TR/selectors/#lang-pseudo 1908 lang: markFunction( function( lang ) { 1909 1910 // lang value must be a valid identifier 1911 if ( !ridentifier.test( lang || "" ) ) { 1912 find.error( "unsupported lang: " + lang ); 1913 } 1914 lang = lang.replace( runescape, funescape ).toLowerCase(); 1915 return function( elem ) { 1916 var elemLang; 1917 do { 1918 if ( ( elemLang = documentIsHTML ? 1919 elem.lang : 1920 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 1921 1922 elemLang = elemLang.toLowerCase(); 1923 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 1924 } 1925 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 1926 return false; 1927 }; 1928 } ), 1929 1930 // Miscellaneous 1931 target: function( elem ) { 1932 var hash = window.location && window.location.hash; 1933 return hash && hash.slice( 1 ) === elem.id; 1934 }, 1935 1936 root: function( elem ) { 1937 return elem === documentElement; 1938 }, 1939 1940 focus: function( elem ) { 1941 return elem === safeActiveElement() && 1942 document.hasFocus() && 1943 !!( elem.type || elem.href || ~elem.tabIndex ); 1944 }, 1945 1946 // Boolean properties 1947 enabled: createDisabledPseudo( false ), 1948 disabled: createDisabledPseudo( true ), 1949 1950 checked: function( elem ) { 1951 1952 // In CSS3, :checked should return both checked and selected elements 1953 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 1954 return ( nodeName( elem, "input" ) && !!elem.checked ) || 1955 ( nodeName( elem, "option" ) && !!elem.selected ); 1956 }, 1957 1958 selected: function( elem ) { 1959 1960 // Support: IE <=11+ 1961 // Accessing the selectedIndex property 1962 // forces the browser to treat the default option as 1963 // selected when in an optgroup. 1964 if ( elem.parentNode ) { 1965 // eslint-disable-next-line no-unused-expressions 1966 elem.parentNode.selectedIndex; 1967 } 1968 1969 return elem.selected === true; 1970 }, 1971 1972 // Contents 1973 empty: function( elem ) { 1974 1975 // https://www.w3.org/TR/selectors/#empty-pseudo 1976 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 1977 // but not by others (comment: 8; processing instruction: 7; etc.) 1978 // nodeType < 6 works because attributes (2) do not appear as children 1979 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 1980 if ( elem.nodeType < 6 ) { 1981 return false; 1982 } 1983 } 1984 return true; 1985 }, 1986 1987 parent: function( elem ) { 1988 return !Expr.pseudos.empty( elem ); 1989 }, 1990 1991 // Element/input types 1992 header: function( elem ) { 1993 return rheader.test( elem.nodeName ); 1994 }, 1995 1996 input: function( elem ) { 1997 return rinputs.test( elem.nodeName ); 1998 }, 1999 2000 button: function( elem ) { 2001 return nodeName( elem, "input" ) && elem.type === "button" || 2002 nodeName( elem, "button" ); 2003 }, 2004 2005 text: function( elem ) { 2006 var attr; 2007 return nodeName( elem, "input" ) && elem.type === "text" && 2008 2009 // Support: IE <10 only 2010 // New HTML5 attribute values (e.g., "search") appear 2011 // with elem.type === "text" 2012 ( ( attr = elem.getAttribute( "type" ) ) == null || 2013 attr.toLowerCase() === "text" ); 2014 }, 2015 2016 // Position-in-collection 2017 first: createPositionalPseudo( function() { 2018 return [ 0 ]; 2019 } ), 2020 2021 last: createPositionalPseudo( function( _matchIndexes, length ) { 2022 return [ length - 1 ]; 2023 } ), 2024 2025 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 2026 return [ argument < 0 ? argument + length : argument ]; 2027 } ), 2028 2029 even: createPositionalPseudo( function( matchIndexes, length ) { 2030 var i = 0; 2031 for ( ; i < length; i += 2 ) { 2032 matchIndexes.push( i ); 2033 } 2034 return matchIndexes; 2035 } ), 2036 2037 odd: createPositionalPseudo( function( matchIndexes, length ) { 2038 var i = 1; 2039 for ( ; i < length; i += 2 ) { 2040 matchIndexes.push( i ); 2041 } 2042 return matchIndexes; 2043 } ), 2044 2045 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 2046 var i; 2047 2048 if ( argument < 0 ) { 2049 i = argument + length; 2050 } else if ( argument > length ) { 2051 i = length; 2052 } else { 2053 i = argument; 2054 } 2055 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 2072Expr.pseudos.nth = Expr.pseudos.eq; 2073 2074// Add button/input type pseudos 2075for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 2076 Expr.pseudos[ i ] = createInputPseudo( i ); 2077} 2078for ( i in { submit: true, reset: true } ) { 2079 Expr.pseudos[ i ] = createButtonPseudo( i ); 2080} 2081 2082// Easy API for creating new setFilters 2083function setFilters() {} 2084setFilters.prototype = Expr.filters = Expr.pseudos; 2085Expr.setFilters = new setFilters(); 2086 2087function tokenize( selector, parseOnly ) { 2088 var matched, match, tokens, type, 2089 soFar, groups, preFilters, 2090 cached = tokenCache[ selector + " " ]; 2091 2092 if ( cached ) { 2093 return parseOnly ? 0 : cached.slice( 0 ); 2094 } 2095 2096 soFar = selector; 2097 groups = []; 2098 preFilters = Expr.preFilter; 2099 2100 while ( soFar ) { 2101 2102 // Comma and first run 2103 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 2104 if ( match ) { 2105 2106 // Don't consume trailing commas as valid 2107 soFar = soFar.slice( match[ 0 ].length ) || soFar; 2108 } 2109 groups.push( ( tokens = [] ) ); 2110 } 2111 2112 matched = false; 2113 2114 // Combinators 2115 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 2116 matched = match.shift(); 2117 tokens.push( { 2118 value: matched, 2119 2120 // Cast descendant combinators to space 2121 type: match[ 0 ].replace( rtrimCSS, " " ) 2122 } ); 2123 soFar = soFar.slice( matched.length ); 2124 } 2125 2126 // Filters 2127 for ( type in Expr.filter ) { 2128 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 2129 ( match = preFilters[ type ]( match ) ) ) ) { 2130 matched = match.shift(); 2131 tokens.push( { 2132 value: matched, 2133 type: type, 2134 matches: match 2135 } ); 2136 soFar = soFar.slice( matched.length ); 2137 } 2138 } 2139 2140 if ( !matched ) { 2141 break; 2142 } 2143 } 2144 2145 // Return the length of the invalid excess 2146 // if we're just parsing 2147 // Otherwise, throw an error or return tokens 2148 if ( parseOnly ) { 2149 return soFar.length; 2150 } 2151 2152 return soFar ? 2153 find.error( selector ) : 2154 2155 // Cache the tokens 2156 tokenCache( selector, groups ).slice( 0 ); 2157} 2158 2159function toSelector( tokens ) { 2160 var i = 0, 2161 len = tokens.length, 2162 selector = ""; 2163 for ( ; i < len; i++ ) { 2164 selector += tokens[ i ].value; 2165 } 2166 return selector; 2167} 2168 2169function addCombinator( matcher, combinator, base ) { 2170 var dir = combinator.dir, 2171 skip = combinator.next, 2172 key = skip || dir, 2173 checkNonElements = base && key === "parentNode", 2174 doneName = done++; 2175 2176 return combinator.first ? 2177 2178 // Check against closest ancestor/preceding element 2179 function( elem, context, xml ) { 2180 while ( ( elem = elem[ dir ] ) ) { 2181 if ( elem.nodeType === 1 || checkNonElements ) { 2182 return matcher( elem, context, xml ); 2183 } 2184 } 2185 return false; 2186 } : 2187 2188 // Check against all ancestor/preceding elements 2189 function( elem, context, xml ) { 2190 var oldCache, outerCache, 2191 newCache = [ dirruns, doneName ]; 2192 2193 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2194 if ( xml ) { 2195 while ( ( elem = elem[ dir ] ) ) { 2196 if ( elem.nodeType === 1 || checkNonElements ) { 2197 if ( matcher( elem, context, xml ) ) { 2198 return true; 2199 } 2200 } 2201 } 2202 } else { 2203 while ( ( elem = elem[ dir ] ) ) { 2204 if ( elem.nodeType === 1 || checkNonElements ) { 2205 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 2206 2207 if ( skip && nodeName( elem, skip ) ) { 2208 elem = elem[ dir ] || elem; 2209 } else if ( ( oldCache = outerCache[ key ] ) && 2210 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 2211 2212 // Assign to newCache so results back-propagate to previous elements 2213 return ( newCache[ 2 ] = oldCache[ 2 ] ); 2214 } else { 2215 2216 // Reuse newcache so results back-propagate to previous elements 2217 outerCache[ key ] = newCache; 2218 2219 // A match means we're done; a fail means we have to keep checking 2220 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 2221 return true; 2222 } 2223 } 2224 } 2225 } 2226 } 2227 return false; 2228 }; 2229} 2230 2231function elementMatcher( matchers ) { 2232 return matchers.length > 1 ? 2233 function( elem, context, xml ) { 2234 var i = matchers.length; 2235 while ( i-- ) { 2236 if ( !matchers[ i ]( elem, context, xml ) ) { 2237 return false; 2238 } 2239 } 2240 return true; 2241 } : 2242 matchers[ 0 ]; 2243} 2244 2245function multipleContexts( selector, contexts, results ) { 2246 var i = 0, 2247 len = contexts.length; 2248 for ( ; i < len; i++ ) { 2249 find( selector, contexts[ i ], results ); 2250 } 2251 return results; 2252} 2253 2254function condense( unmatched, map, filter, context, xml ) { 2255 var elem, 2256 newUnmatched = [], 2257 i = 0, 2258 len = unmatched.length, 2259 mapped = map != null; 2260 2261 for ( ; i < len; i++ ) { 2262 if ( ( elem = unmatched[ i ] ) ) { 2263 if ( !filter || filter( elem, context, xml ) ) { 2264 newUnmatched.push( elem ); 2265 if ( mapped ) { 2266 map.push( i ); 2267 } 2268 } 2269 } 2270 } 2271 2272 return newUnmatched; 2273} 2274 2275function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 2276 if ( postFilter && !postFilter[ expando ] ) { 2277 postFilter = setMatcher( postFilter ); 2278 } 2279 if ( postFinder && !postFinder[ expando ] ) { 2280 postFinder = setMatcher( postFinder, postSelector ); 2281 } 2282 return markFunction( function( seed, results, context, xml ) { 2283 var temp, i, elem, matcherOut, 2284 preMap = [], 2285 postMap = [], 2286 preexisting = results.length, 2287 2288 // Get initial elements from seed or context 2289 elems = seed || 2290 multipleContexts( selector || "*", 2291 context.nodeType ? [ context ] : context, [] ), 2292 2293 // Prefilter to get matcher input, preserving a map for seed-results synchronization 2294 matcherIn = preFilter && ( seed || !selector ) ? 2295 condense( elems, preMap, preFilter, context, xml ) : 2296 elems; 2297 2298 if ( matcher ) { 2299 2300 // If we have a postFinder, or filtered seed, or non-seed postFilter 2301 // or preexisting results, 2302 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 2303 2304 // ...intermediate processing is necessary 2305 [] : 2306 2307 // ...otherwise use results directly 2308 results; 2309 2310 // Find primary matches 2311 matcher( matcherIn, matcherOut, context, xml ); 2312 } else { 2313 matcherOut = matcherIn; 2314 } 2315 2316 // Apply postFilter 2317 if ( postFilter ) { 2318 temp = condense( matcherOut, postMap ); 2319 postFilter( temp, [], context, xml ); 2320 2321 // Un-match failing elements by moving them back to matcherIn 2322 i = temp.length; 2323 while ( i-- ) { 2324 if ( ( elem = temp[ i ] ) ) { 2325 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 2326 } 2327 } 2328 } 2329 2330 if ( seed ) { 2331 if ( postFinder || preFilter ) { 2332 if ( postFinder ) { 2333 2334 // Get the final matcherOut by condensing this intermediate into postFinder contexts 2335 temp = []; 2336 i = matcherOut.length; 2337 while ( i-- ) { 2338 if ( ( elem = matcherOut[ i ] ) ) { 2339 2340 // Restore matcherIn since elem is not yet a final match 2341 temp.push( ( matcherIn[ i ] = elem ) ); 2342 } 2343 } 2344 postFinder( null, ( matcherOut = [] ), temp, xml ); 2345 } 2346 2347 // Move matched elements from seed to results to keep them synchronized 2348 i = matcherOut.length; 2349 while ( i-- ) { 2350 if ( ( elem = matcherOut[ i ] ) && 2351 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 2352 2353 seed[ temp ] = !( results[ temp ] = elem ); 2354 } 2355 } 2356 } 2357 2358 // Add elements to results, through postFinder if defined 2359 } else { 2360 matcherOut = condense( 2361 matcherOut === results ? 2362 matcherOut.splice( preexisting, matcherOut.length ) : 2363 matcherOut 2364 ); 2365 if ( postFinder ) { 2366 postFinder( null, results, matcherOut, xml ); 2367 } else { 2368 push.apply( results, matcherOut ); 2369 } 2370 } 2371 } ); 2372} 2373 2374function matcherFromTokens( tokens ) { 2375 var checkContext, matcher, j, 2376 len = tokens.length, 2377 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 2378 implicitRelative = leadingRelative || Expr.relative[ " " ], 2379 i = leadingRelative ? 1 : 0, 2380 2381 // The foundational matcher ensures that elements are reachable from top-level context(s) 2382 matchContext = addCombinator( function( elem ) { 2383 return elem === checkContext; 2384 }, implicitRelative, true ), 2385 matchAnyContext = addCombinator( function( elem ) { 2386 return indexOf.call( checkContext, elem ) > -1; 2387 }, implicitRelative, true ), 2388 matchers = [ function( elem, context, xml ) { 2389 2390 // Support: IE 11+, Edge 17 - 18+ 2391 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2392 // two documents; shallow comparisons work. 2393 // eslint-disable-next-line eqeqeq 2394 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 2395 ( checkContext = context ).nodeType ? 2396 matchContext( elem, context, xml ) : 2397 matchAnyContext( elem, context, xml ) ); 2398 2399 // Avoid hanging onto element 2400 // (see https://github.com/jquery/sizzle/issues/299) 2401 checkContext = null; 2402 return ret; 2403 } ]; 2404 2405 for ( ; i < len; i++ ) { 2406 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 2407 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 2408 } else { 2409 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 2410 2411 // Return special upon seeing a positional matcher 2412 if ( matcher[ expando ] ) { 2413 2414 // Find the next relative operator (if any) for proper handling 2415 j = ++i; 2416 for ( ; j < len; j++ ) { 2417 if ( Expr.relative[ tokens[ j ].type ] ) { 2418 break; 2419 } 2420 } 2421 return setMatcher( 2422 i > 1 && elementMatcher( matchers ), 2423 i > 1 && toSelector( 2424 2425 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 2426 tokens.slice( 0, i - 1 ) 2427 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 2428 ).replace( rtrimCSS, "$1" ), 2429 matcher, 2430 i < j && matcherFromTokens( tokens.slice( i, j ) ), 2431 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 2432 j < len && toSelector( tokens ) 2433 ); 2434 } 2435 matchers.push( matcher ); 2436 } 2437 } 2438 2439 return elementMatcher( matchers ); 2440} 2441 2442function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 2443 var bySet = setMatchers.length > 0, 2444 byElement = elementMatchers.length > 0, 2445 superMatcher = function( seed, context, xml, results, outermost ) { 2446 var elem, j, matcher, 2447 matchedCount = 0, 2448 i = "0", 2449 unmatched = seed && [], 2450 setMatched = [], 2451 contextBackup = outermostContext, 2452 2453 // We must always have either seed elements or outermost context 2454 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 2455 2456 // Use integer dirruns iff this is the outermost matcher 2457 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 2458 len = elems.length; 2459 2460 if ( outermost ) { 2461 2462 // Support: IE 11+, Edge 17 - 18+ 2463 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2464 // two documents; shallow comparisons work. 2465 // eslint-disable-next-line eqeqeq 2466 outermostContext = context == document || context || outermost; 2467 } 2468 2469 // Add elements passing elementMatchers directly to results 2470 // Support: iOS <=7 - 9 only 2471 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 2472 // elements by id. (see trac-14142) 2473 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 2474 if ( byElement && elem ) { 2475 j = 0; 2476 2477 // Support: IE 11+, Edge 17 - 18+ 2478 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2479 // two documents; shallow comparisons work. 2480 // eslint-disable-next-line eqeqeq 2481 if ( !context && elem.ownerDocument != document ) { 2482 setDocument( elem ); 2483 xml = !documentIsHTML; 2484 } 2485 while ( ( matcher = elementMatchers[ j++ ] ) ) { 2486 if ( matcher( elem, context || document, xml ) ) { 2487 push.call( results, elem ); 2488 break; 2489 } 2490 } 2491 if ( outermost ) { 2492 dirruns = dirrunsUnique; 2493 } 2494 } 2495 2496 // Track unmatched elements for set filters 2497 if ( bySet ) { 2498 2499 // They will have gone through all possible matchers 2500 if ( ( elem = !matcher && elem ) ) { 2501 matchedCount--; 2502 } 2503 2504 // Lengthen the array for every element, matched or not 2505 if ( seed ) { 2506 unmatched.push( elem ); 2507 } 2508 } 2509 } 2510 2511 // `i` is now the count of elements visited above, and adding it to `matchedCount` 2512 // makes the latter nonnegative. 2513 matchedCount += i; 2514 2515 // Apply set filters to unmatched elements 2516 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 2517 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 2518 // no element matchers and no seed. 2519 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 2520 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 2521 // numerically zero. 2522 if ( bySet && i !== matchedCount ) { 2523 j = 0; 2524 while ( ( matcher = setMatchers[ j++ ] ) ) { 2525 matcher( unmatched, setMatched, context, xml ); 2526 } 2527 2528 if ( seed ) { 2529 2530 // Reintegrate element matches to eliminate the need for sorting 2531 if ( matchedCount > 0 ) { 2532 while ( i-- ) { 2533 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 2534 setMatched[ i ] = pop.call( results ); 2535 } 2536 } 2537 } 2538 2539 // Discard index placeholder values to get only actual matches 2540 setMatched = condense( setMatched ); 2541 } 2542 2543 // Add matches to results 2544 push.apply( results, setMatched ); 2545 2546 // Seedless set matches succeeding multiple successful matchers stipulate sorting 2547 if ( outermost && !seed && setMatched.length > 0 && 2548 ( matchedCount + setMatchers.length ) > 1 ) { 2549 2550 jQuery.uniqueSort( results ); 2551 } 2552 } 2553 2554 // Override manipulation of globals by nested matchers 2555 if ( outermost ) { 2556 dirruns = dirrunsUnique; 2557 outermostContext = contextBackup; 2558 } 2559 2560 return unmatched; 2561 }; 2562 2563 return bySet ? 2564 markFunction( superMatcher ) : 2565 superMatcher; 2566} 2567 2568function compile( selector, match /* Internal Use Only */ ) { 2569 var i, 2570 setMatchers = [], 2571 elementMatchers = [], 2572 cached = compilerCache[ selector + " " ]; 2573 2574 if ( !cached ) { 2575 2576 // Generate a function of recursive functions that can be used to check each element 2577 if ( !match ) { 2578 match = tokenize( selector ); 2579 } 2580 i = match.length; 2581 while ( i-- ) { 2582 cached = matcherFromTokens( match[ i ] ); 2583 if ( cached[ expando ] ) { 2584 setMatchers.push( cached ); 2585 } else { 2586 elementMatchers.push( cached ); 2587 } 2588 } 2589 2590 // Cache the compiled function 2591 cached = compilerCache( selector, 2592 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 2593 2594 // Save selector and tokenization 2595 cached.selector = selector; 2596 } 2597 return cached; 2598} 2599 2600/** 2601 * A low-level selection function that works with jQuery's compiled 2602 * selector functions 2603 * @param {String|Function} selector A selector or a pre-compiled 2604 * selector function built with jQuery selector compile 2605 * @param {Element} context 2606 * @param {Array} [results] 2607 * @param {Array} [seed] A set of elements to match against 2608 */ 2609function select( selector, context, results, seed ) { 2610 var i, tokens, token, type, find, 2611 compiled = typeof selector === "function" && selector, 2612 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 2613 2614 results = results || []; 2615 2616 // Try to minimize operations if there is only one selector in the list and no seed 2617 // (the latter of which guarantees us context) 2618 if ( match.length === 1 ) { 2619 2620 // Reduce context if the leading compound selector is an ID 2621 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 2622 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 2623 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 2624 2625 context = ( Expr.find.ID( 2626 token.matches[ 0 ].replace( runescape, funescape ), 2627 context 2628 ) || [] )[ 0 ]; 2629 if ( !context ) { 2630 return results; 2631 2632 // Precompiled matchers will still verify ancestry, so step up a level 2633 } else if ( compiled ) { 2634 context = context.parentNode; 2635 } 2636 2637 selector = selector.slice( tokens.shift().value.length ); 2638 } 2639 2640 // Fetch a seed set for right-to-left matching 2641 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 2642 while ( i-- ) { 2643 token = tokens[ i ]; 2644 2645 // Abort if we hit a combinator 2646 if ( Expr.relative[ ( type = token.type ) ] ) { 2647 break; 2648 } 2649 if ( ( find = Expr.find[ type ] ) ) { 2650 2651 // Search, expanding context for leading sibling combinators 2652 if ( ( seed = find( 2653 token.matches[ 0 ].replace( runescape, funescape ), 2654 rsibling.test( tokens[ 0 ].type ) && 2655 testContext( context.parentNode ) || context 2656 ) ) ) { 2657 2658 // If seed is empty or no tokens remain, we can return early 2659 tokens.splice( i, 1 ); 2660 selector = seed.length && toSelector( tokens ); 2661 if ( !selector ) { 2662 push.apply( results, seed ); 2663 return results; 2664 } 2665 2666 break; 2667 } 2668 } 2669 } 2670 } 2671 2672 // Compile and execute a filtering function if one is not provided 2673 // Provide `match` to avoid retokenization if we modified the selector above 2674 ( compiled || compile( selector, match ) )( 2675 seed, 2676 context, 2677 !documentIsHTML, 2678 results, 2679 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 2680 ); 2681 return results; 2682} 2683 2684// One-time assignments 2685 2686// Support: Android <=4.0 - 4.1+ 2687// Sort stability 2688support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 2689 2690// Initialize against the default document 2691setDocument(); 2692 2693// Support: Android <=4.0 - 4.1+ 2694// Detached nodes confoundingly follow *each other* 2695support.sortDetached = assert( function( el ) { 2696 2697 // Should return 1, but returns 4 (following) 2698 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 2699} ); 2700 2701jQuery.find = find; 2702 2703// Deprecated 2704jQuery.expr[ ":" ] = jQuery.expr.pseudos; 2705jQuery.unique = jQuery.uniqueSort; 2706 2707// These have always been private, but they used to be documented as part of 2708// Sizzle so let's maintain them for now for backwards compatibility purposes. 2709find.compile = compile; 2710find.select = select; 2711find.setDocument = setDocument; 2712find.tokenize = tokenize; 2713 2714find.escape = jQuery.escapeSelector; 2715find.getText = jQuery.text; 2716find.isXML = jQuery.isXMLDoc; 2717find.selectors = jQuery.expr; 2718find.support = jQuery.support; 2719find.uniqueSort = jQuery.uniqueSort; 2720 2721 /* eslint-enable */ 2722 2723} )(); 2724 2725 2726var dir = function( elem, dir, until ) { 2727 var matched = [], 2728 truncate = until !== undefined; 2729 2730 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 2731 if ( elem.nodeType === 1 ) { 2732 if ( truncate && jQuery( elem ).is( until ) ) { 2733 break; 2734 } 2735 matched.push( elem ); 2736 } 2737 } 2738 return matched; 2739}; 2740 2741 2742var siblings = function( n, elem ) { 2743 var matched = []; 2744 2745 for ( ; n; n = n.nextSibling ) { 2746 if ( n.nodeType === 1 && n !== elem ) { 2747 matched.push( n ); 2748 } 2749 } 2750 2751 return matched; 2752}; 2753 2754 2755var rneedsContext = jQuery.expr.match.needsContext; 2756 2757var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 2758 2759 2760 2761// Implement the identical functionality for filter and not 2762function winnow( elements, qualifier, not ) { 2763 if ( isFunction( qualifier ) ) { 2764 return jQuery.grep( elements, function( elem, i ) { 2765 return !!qualifier.call( elem, i, elem ) !== not; 2766 } ); 2767 } 2768 2769 // Single element 2770 if ( qualifier.nodeType ) { 2771 return jQuery.grep( elements, function( elem ) { 2772 return ( elem === qualifier ) !== not; 2773 } ); 2774 } 2775 2776 // Arraylike of elements (jQuery, arguments, Array) 2777 if ( typeof qualifier !== "string" ) { 2778 return jQuery.grep( elements, function( elem ) { 2779 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 2780 } ); 2781 } 2782 2783 // Filtered directly for both simple and complex selectors 2784 return jQuery.filter( qualifier, elements, not ); 2785} 2786 2787jQuery.filter = function( expr, elems, not ) { 2788 var elem = elems[ 0 ]; 2789 2790 if ( not ) { 2791 expr = ":not(" + expr + ")"; 2792 } 2793 2794 if ( elems.length === 1 && elem.nodeType === 1 ) { 2795 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 2796 } 2797 2798 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 2799 return elem.nodeType === 1; 2800 } ) ); 2801}; 2802 2803jQuery.fn.extend( { 2804 find: function( selector ) { 2805 var i, ret, 2806 len = this.length, 2807 self = this; 2808 2809 if ( typeof selector !== "string" ) { 2810 return this.pushStack( jQuery( selector ).filter( function() { 2811 for ( i = 0; i < len; i++ ) { 2812 if ( jQuery.contains( self[ i ], this ) ) { 2813 return true; 2814 } 2815 } 2816 } ) ); 2817 } 2818 2819 ret = this.pushStack( [] ); 2820 2821 for ( i = 0; i < len; i++ ) { 2822 jQuery.find( selector, self[ i ], ret ); 2823 } 2824 2825 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 2826 }, 2827 filter: function( selector ) { 2828 return this.pushStack( winnow( this, selector || [], false ) ); 2829 }, 2830 not: function( selector ) { 2831 return this.pushStack( winnow( this, selector || [], true ) ); 2832 }, 2833 is: function( selector ) { 2834 return !!winnow( 2835 this, 2836 2837 // If this is a positional/relative selector, check membership in the returned set 2838 // so $("p:first").is("p:last") won't return true for a doc with two "p". 2839 typeof selector === "string" && rneedsContext.test( selector ) ? 2840 jQuery( selector ) : 2841 selector || [], 2842 false 2843 ).length; 2844 } 2845} ); 2846 2847 2848// Initialize a jQuery object 2849 2850 2851// A central reference to the root jQuery(document) 2852var rootjQuery, 2853 2854 // A simple way to check for HTML strings 2855 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 2856 // Strict HTML recognition (trac-11290: must start with <) 2857 // Shortcut simple #id case for speed 2858 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 2859 2860 init = jQuery.fn.init = function( selector, context, root ) { 2861 var match, elem; 2862 2863 // HANDLE: $(""), $(null), $(undefined), $(false) 2864 if ( !selector ) { 2865 return this; 2866 } 2867 2868 // Method init() accepts an alternate rootjQuery 2869 // so migrate can support jQuery.sub (gh-2101) 2870 root = root || rootjQuery; 2871 2872 // Handle HTML strings 2873 if ( typeof selector === "string" ) { 2874 if ( selector[ 0 ] === "<" && 2875 selector[ selector.length - 1 ] === ">" && 2876 selector.length >= 3 ) { 2877 2878 // Assume that strings that start and end with <> are HTML and skip the regex check 2879 match = [ null, selector, null ]; 2880 2881 } else { 2882 match = rquickExpr.exec( selector ); 2883 } 2884 2885 // Match html or make sure no context is specified for #id 2886 if ( match && ( match[ 1 ] || !context ) ) { 2887 2888 // HANDLE: $(html) -> $(array) 2889 if ( match[ 1 ] ) { 2890 context = context instanceof jQuery ? context[ 0 ] : context; 2891 2892 // Option to run scripts is true for back-compat 2893 // Intentionally let the error be thrown if parseHTML is not present 2894 jQuery.merge( this, jQuery.parseHTML( 2895 match[ 1 ], 2896 context && context.nodeType ? context.ownerDocument || context : document, 2897 true 2898 ) ); 2899 2900 // HANDLE: $(html, props) 2901 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 2902 for ( match in context ) { 2903 2904 // Properties of context are called as methods if possible 2905 if ( isFunction( this[ match ] ) ) { 2906 this[ match ]( context[ match ] ); 2907 2908 // ...and otherwise set as attributes 2909 } else { 2910 this.attr( match, context[ match ] ); 2911 } 2912 } 2913 } 2914 2915 return this; 2916 2917 // HANDLE: $(#id) 2918 } else { 2919 elem = document.getElementById( match[ 2 ] ); 2920 2921 if ( elem ) { 2922 2923 // Inject the element directly into the jQuery object 2924 this[ 0 ] = elem; 2925 this.length = 1; 2926 } 2927 return this; 2928 } 2929 2930 // HANDLE: $(expr, $(...)) 2931 } else if ( !context || context.jquery ) { 2932 return ( context || root ).find( selector ); 2933 2934 // HANDLE: $(expr, context) 2935 // (which is just equivalent to: $(context).find(expr) 2936 } else { 2937 return this.constructor( context ).find( selector ); 2938 } 2939 2940 // HANDLE: $(DOMElement) 2941 } else if ( selector.nodeType ) { 2942 this[ 0 ] = selector; 2943 this.length = 1; 2944 return this; 2945 2946 // HANDLE: $(function) 2947 // Shortcut for document ready 2948 } else if ( isFunction( selector ) ) { 2949 return root.ready !== undefined ? 2950 root.ready( selector ) : 2951 2952 // Execute immediately if ready is not present 2953 selector( jQuery ); 2954 } 2955 2956 return jQuery.makeArray( selector, this ); 2957 }; 2958 2959// Give the init function the jQuery prototype for later instantiation 2960init.prototype = jQuery.fn; 2961 2962// Initialize central reference 2963rootjQuery = jQuery( document ); 2964 2965 2966var rparentsprev = /^(?:parents|prev(?:Until|All))/, 2967 2968 // Methods guaranteed to produce a unique set when starting from a unique set 2969 guaranteedUnique = { 2970 children: true, 2971 contents: true, 2972 next: true, 2973 prev: true 2974 }; 2975 2976jQuery.fn.extend( { 2977 has: function( target ) { 2978 var targets = jQuery( target, this ), 2979 l = targets.length; 2980 2981 return this.filter( function() { 2982 var i = 0; 2983 for ( ; i < l; i++ ) { 2984 if ( jQuery.contains( this, targets[ i ] ) ) { 2985 return true; 2986 } 2987 } 2988 } ); 2989 }, 2990 2991 closest: function( selectors, context ) { 2992 var cur, 2993 i = 0, 2994 l = this.length, 2995 matched = [], 2996 targets = typeof selectors !== "string" && jQuery( selectors ); 2997 2998 // Positional selectors never match, since there's no _selection_ context 2999 if ( !rneedsContext.test( selectors ) ) { 3000 for ( ; i < l; i++ ) { 3001 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 3002 3003 // Always skip document fragments 3004 if ( cur.nodeType < 11 && ( targets ? 3005 targets.index( cur ) > -1 : 3006 3007 // Don't pass non-elements to jQuery#find 3008 cur.nodeType === 1 && 3009 jQuery.find.matchesSelector( cur, selectors ) ) ) { 3010 3011 matched.push( cur ); 3012 break; 3013 } 3014 } 3015 } 3016 } 3017 3018 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 3019 }, 3020 3021 // Determine the position of an element within the set 3022 index: function( elem ) { 3023 3024 // No argument, return index in parent 3025 if ( !elem ) { 3026 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 3027 } 3028 3029 // Index in selector 3030 if ( typeof elem === "string" ) { 3031 return indexOf.call( jQuery( elem ), this[ 0 ] ); 3032 } 3033 3034 // Locate the position of the desired element 3035 return indexOf.call( this, 3036 3037 // If it receives a jQuery object, the first element is used 3038 elem.jquery ? elem[ 0 ] : elem 3039 ); 3040 }, 3041 3042 add: function( selector, context ) { 3043 return this.pushStack( 3044 jQuery.uniqueSort( 3045 jQuery.merge( this.get(), jQuery( selector, context ) ) 3046 ) 3047 ); 3048 }, 3049 3050 addBack: function( selector ) { 3051 return this.add( selector == null ? 3052 this.prevObject : this.prevObject.filter( selector ) 3053 ); 3054 } 3055} ); 3056 3057function sibling( cur, dir ) { 3058 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 3059 return cur; 3060} 3061 3062jQuery.each( { 3063 parent: function( elem ) { 3064 var parent = elem.parentNode; 3065 return parent && parent.nodeType !== 11 ? parent : null; 3066 }, 3067 parents: function( elem ) { 3068 return dir( elem, "parentNode" ); 3069 }, 3070 parentsUntil: function( elem, _i, until ) { 3071 return dir( elem, "parentNode", until ); 3072 }, 3073 next: function( elem ) { 3074 return sibling( elem, "nextSibling" ); 3075 }, 3076 prev: function( elem ) { 3077 return sibling( elem, "previousSibling" ); 3078 }, 3079 nextAll: function( elem ) { 3080 return dir( elem, "nextSibling" ); 3081 }, 3082 prevAll: function( elem ) { 3083 return dir( elem, "previousSibling" ); 3084 }, 3085 nextUntil: function( elem, _i, until ) { 3086 return dir( elem, "nextSibling", until ); 3087 }, 3088 prevUntil: function( elem, _i, until ) { 3089 return dir( elem, "previousSibling", until ); 3090 }, 3091 siblings: function( elem ) { 3092 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 3093 }, 3094 children: function( elem ) { 3095 return siblings( elem.firstChild ); 3096 }, 3097 contents: function( elem ) { 3098 if ( elem.contentDocument != null && 3099 3100 // Support: IE 11+ 3101 // <object> elements with no `data` attribute has an object 3102 // `contentDocument` with a `null` prototype. 3103 getProto( elem.contentDocument ) ) { 3104 3105 return elem.contentDocument; 3106 } 3107 3108 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 3109 // Treat the template element as a regular one in browsers that 3110 // don't support it. 3111 if ( nodeName( elem, "template" ) ) { 3112 elem = elem.content || elem; 3113 } 3114 3115 return jQuery.merge( [], elem.childNodes ); 3116 } 3117}, function( name, fn ) { 3118 jQuery.fn[ name ] = function( until, selector ) { 3119 var matched = jQuery.map( this, fn, until ); 3120 3121 if ( name.slice( -5 ) !== "Until" ) { 3122 selector = until; 3123 } 3124 3125 if ( selector && typeof selector === "string" ) { 3126 matched = jQuery.filter( selector, matched ); 3127 } 3128 3129 if ( this.length > 1 ) { 3130 3131 // Remove duplicates 3132 if ( !guaranteedUnique[ name ] ) { 3133 jQuery.uniqueSort( matched ); 3134 } 3135 3136 // Reverse order for parents* and prev-derivatives 3137 if ( rparentsprev.test( name ) ) { 3138 matched.reverse(); 3139 } 3140 } 3141 3142 return this.pushStack( matched ); 3143 }; 3144} ); 3145var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 3146 3147 3148 3149// Convert String-formatted options into Object-formatted ones 3150function createOptions( options ) { 3151 var object = {}; 3152 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 3153 object[ flag ] = true; 3154 } ); 3155 return object; 3156} 3157 3158/* 3159 * Create a callback list using the following parameters: 3160 * 3161 * options: an optional list of space-separated options that will change how 3162 * the callback list behaves or a more traditional option object 3163 * 3164 * By default a callback list will act like an event callback list and can be 3165 * "fired" multiple times. 3166 * 3167 * Possible options: 3168 * 3169 * once: will ensure the callback list can only be fired once (like a Deferred) 3170 * 3171 * memory: will keep track of previous values and will call any callback added 3172 * after the list has been fired right away with the latest "memorized" 3173 * values (like a Deferred) 3174 * 3175 * unique: will ensure a callback can only be added once (no duplicate in the list) 3176 * 3177 * stopOnFalse: interrupt callings when a callback returns false 3178 * 3179 */ 3180jQuery.Callbacks = function( options ) { 3181 3182 // Convert options from String-formatted to Object-formatted if needed 3183 // (we check in cache first) 3184 options = typeof options === "string" ? 3185 createOptions( options ) : 3186 jQuery.extend( {}, options ); 3187 3188 var // Flag to know if list is currently firing 3189 firing, 3190 3191 // Last fire value for non-forgettable lists 3192 memory, 3193 3194 // Flag to know if list was already fired 3195 fired, 3196 3197 // Flag to prevent firing 3198 locked, 3199 3200 // Actual callback list 3201 list = [], 3202 3203 // Queue of execution data for repeatable lists 3204 queue = [], 3205 3206 // Index of currently firing callback (modified by add/remove as needed) 3207 firingIndex = -1, 3208 3209 // Fire callbacks 3210 fire = function() { 3211 3212 // Enforce single-firing 3213 locked = locked || options.once; 3214 3215 // Execute callbacks for all pending executions, 3216 // respecting firingIndex overrides and runtime changes 3217 fired = firing = true; 3218 for ( ; queue.length; firingIndex = -1 ) { 3219 memory = queue.shift(); 3220 while ( ++firingIndex < list.length ) { 3221 3222 // Run callback and check for early termination 3223 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 3224 options.stopOnFalse ) { 3225 3226 // Jump to end and forget the data so .add doesn't re-fire 3227 firingIndex = list.length; 3228 memory = false;
vendor: 4,918 bytes, lines 3229-3438
3229 } 3230 } 3231 } 3232 3233 // Forget the data if we're done with it 3234 if ( !options.memory ) { 3235 memory = false; 3236 } 3237 3238 firing = false; 3239 3240 // Clean up if we're done firing for good 3241 if ( locked ) { 3242 3243 // Keep an empty list if we have data for future add calls 3244 if ( memory ) { 3245 list = []; 3246 3247 // Otherwise, this object is spent 3248 } else { 3249 list = ""; 3250 } 3251 } 3252 }, 3253 3254 // Actual Callbacks object 3255 self = { 3256 3257 // Add a callback or a collection of callbacks to the list 3258 add: function() { 3259 if ( list ) { 3260 3261 // If we have memory from a past run, we should fire after adding 3262 if ( memory && !firing ) { 3263 firingIndex = list.length - 1; 3264 queue.push( memory ); 3265 } 3266 3267 ( function add( args ) { 3268 jQuery.each( args, function( _, arg ) { 3269 if ( isFunction( arg ) ) { 3270 if ( !options.unique || !self.has( arg ) ) { 3271 list.push( arg ); 3272 } 3273 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 3274 3275 // Inspect recursively 3276 add( arg ); 3277 } 3278 } ); 3279 } )( arguments ); 3280 3281 if ( memory && !firing ) { 3282 fire(); 3283 } 3284 } 3285 return this; 3286 }, 3287 3288 // Remove a callback from the list 3289 remove: function() { 3290 jQuery.each( arguments, function( _, arg ) { 3291 var index; 3292 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 3293 list.splice( index, 1 ); 3294 3295 // Handle firing indexes 3296 if ( index <= firingIndex ) { 3297 firingIndex--; 3298 } 3299 } 3300 } ); 3301 return this; 3302 }, 3303 3304 // Check if a given callback is in the list. 3305 // If no argument is given, return whether or not list has callbacks attached. 3306 has: function( fn ) { 3307 return fn ? 3308 jQuery.inArray( fn, list ) > -1 : 3309 list.length > 0; 3310 }, 3311 3312 // Remove all callbacks from the list 3313 empty: function() { 3314 if ( list ) { 3315 list = []; 3316 } 3317 return this; 3318 }, 3319 3320 // Disable .fire and .add 3321 // Abort any current/pending executions 3322 // Clear all callbacks and values 3323 disable: function() { 3324 locked = queue = []; 3325 list = memory = ""; 3326 return this; 3327 }, 3328 disabled: function() { 3329 return !list; 3330 }, 3331 3332 // Disable .fire 3333 // Also disable .add unless we have memory (since it would have no effect) 3334 // Abort any pending executions 3335 lock: function() { 3336 locked = queue = []; 3337 if ( !memory && !firing ) { 3338 list = memory = ""; 3339 } 3340 return this; 3341 }, 3342 locked: function() { 3343 return !!locked; 3344 }, 3345 3346 // Call all callbacks with the given context and arguments 3347 fireWith: function( context, args ) { 3348 if ( !locked ) { 3349 args = args || []; 3350 args = [ context, args.slice ? args.slice() : args ]; 3351 queue.push( args ); 3352 if ( !firing ) { 3353 fire(); 3354 } 3355 } 3356 return this; 3357 }, 3358 3359 // Call all the callbacks with the given arguments 3360 fire: function() { 3361 self.fireWith( this, arguments ); 3362 return this; 3363 }, 3364 3365 // To know if the callbacks have already been called at least once 3366 fired: function() { 3367 return !!fired; 3368 } 3369 }; 3370 3371 return self; 3372}; 3373 3374 3375function Identity( v ) { 3376 return v; 3377} 3378function Thrower( ex ) { 3379 throw ex; 3380} 3381 3382function adoptValue( value, resolve, reject, noValue ) { 3383 var method; 3384 3385 try { 3386 3387 // Check for promise aspect first to privilege synchronous behavior 3388 if ( value && isFunction( ( method = value.promise ) ) ) { 3389 method.call( value ).done( resolve ).fail( reject ); 3390 3391 // Other thenables 3392 } else if ( value && isFunction( ( method = value.then ) ) ) { 3393 method.call( value, resolve, reject ); 3394 3395 // Other non-thenables 3396 } else { 3397 3398 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 3399 // * false: [ value ].slice( 0 ) => resolve( value ) 3400 // * true: [ value ].slice( 1 ) => resolve() 3401 resolve.apply( undefined, [ value ].slice( noValue ) ); 3402 } 3403 3404 // For Promises/A+, convert exceptions into rejections 3405 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 3406 // Deferred#then to conditionally suppress rejection. 3407 } catch ( value ) { 3408 3409 // Support: Android 4.0 only 3410 // Strict mode functions invoked without .call/.apply get global-object context 3411 reject.apply( undefined, [ value ] ); 3412 } 3413} 3414 3415jQuery.extend( { 3416 3417 Deferred: function( func ) { 3418 var tuples = [ 3419 3420 // action, add listener, callbacks, 3421 // ... .then handlers, argument index, [final state] 3422 [ "notify", "progress", jQuery.Callbacks( "memory" ), 3423 jQuery.Callbacks( "memory" ), 2 ], 3424 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 3425 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 3426 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 3427 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 3428 ], 3429 state = "pending", 3430 promise = { 3431 state: function() { 3432 return state; 3433 }, 3434 always: function() { 3435 deferred.done( arguments ).fail( arguments ); 3436 return this; 3437 }, 3438 "catch": function( fn ) {
vendor: 70,494 bytes, lines 3439-6050
3439 return promise.then( null, fn ); 3440 }, 3441 3442 // Keep pipe for back-compat 3443 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 3444 var fns = arguments; 3445 3446 return jQuery.Deferred( function( newDefer ) { 3447 jQuery.each( tuples, function( _i, tuple ) { 3448 3449 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 3450 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 3451 3452 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 3453 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 3454 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 3455 deferred[ tuple[ 1 ] ]( function() { 3456 var returned = fn && fn.apply( this, arguments ); 3457 if ( returned && isFunction( returned.promise ) ) { 3458 returned.promise() 3459 .progress( newDefer.notify ) 3460 .done( newDefer.resolve ) 3461 .fail( newDefer.reject ); 3462 } else { 3463 newDefer[ tuple[ 0 ] + "With" ]( 3464 this, 3465 fn ? [ returned ] : arguments 3466 ); 3467 } 3468 } ); 3469 } ); 3470 fns = null; 3471 } ).promise(); 3472 }, 3473 then: function( onFulfilled, onRejected, onProgress ) { 3474 var maxDepth = 0; 3475 function resolve( depth, deferred, handler, special ) { 3476 return function() { 3477 var that = this, 3478 args = arguments, 3479 mightThrow = function() { 3480 var returned, then; 3481 3482 // Support: Promises/A+ section 2.3.3.3.3 3483 // https://promisesaplus.com/#point-59 3484 // Ignore double-resolution attempts 3485 if ( depth < maxDepth ) { 3486 return; 3487 } 3488 3489 returned = handler.apply( that, args ); 3490 3491 // Support: Promises/A+ section 2.3.1 3492 // https://promisesaplus.com/#point-48 3493 if ( returned === deferred.promise() ) { 3494 throw new TypeError( "Thenable self-resolution" ); 3495 } 3496 3497 // Support: Promises/A+ sections 2.3.3.1, 3.5 3498 // https://promisesaplus.com/#point-54 3499 // https://promisesaplus.com/#point-75 3500 // Retrieve `then` only once 3501 then = returned && 3502 3503 // Support: Promises/A+ section 2.3.4 3504 // https://promisesaplus.com/#point-64 3505 // Only check objects and functions for thenability 3506 ( typeof returned === "object" || 3507 typeof returned === "function" ) && 3508 returned.then; 3509 3510 // Handle a returned thenable 3511 if ( isFunction( then ) ) { 3512 3513 // Special processors (notify) just wait for resolution 3514 if ( special ) { 3515 then.call( 3516 returned, 3517 resolve( maxDepth, deferred, Identity, special ), 3518 resolve( maxDepth, deferred, Thrower, special ) 3519 ); 3520 3521 // Normal processors (resolve) also hook into progress 3522 } else { 3523 3524 // ...and disregard older resolution values 3525 maxDepth++; 3526 3527 then.call( 3528 returned, 3529 resolve( maxDepth, deferred, Identity, special ), 3530 resolve( maxDepth, deferred, Thrower, special ), 3531 resolve( maxDepth, deferred, Identity, 3532 deferred.notifyWith ) 3533 ); 3534 } 3535 3536 // Handle all other returned values 3537 } else { 3538 3539 // Only substitute handlers pass on context 3540 // and multiple values (non-spec behavior) 3541 if ( handler !== Identity ) { 3542 that = undefined; 3543 args = [ returned ]; 3544 } 3545 3546 // Process the value(s) 3547 // Default process is resolve 3548 ( special || deferred.resolveWith )( that, args ); 3549 } 3550 }, 3551 3552 // Only normal processors (resolve) catch and reject exceptions 3553 process = special ? 3554 mightThrow : 3555 function() { 3556 try { 3557 mightThrow(); 3558 } catch ( e ) { 3559 3560 if ( jQuery.Deferred.exceptionHook ) { 3561 jQuery.Deferred.exceptionHook( e, 3562 process.error ); 3563 } 3564 3565 // Support: Promises/A+ section 2.3.3.3.4.1 3566 // https://promisesaplus.com/#point-61 3567 // Ignore post-resolution exceptions 3568 if ( depth + 1 >= maxDepth ) { 3569 3570 // Only substitute handlers pass on context 3571 // and multiple values (non-spec behavior) 3572 if ( handler !== Thrower ) { 3573 that = undefined; 3574 args = [ e ]; 3575 } 3576 3577 deferred.rejectWith( that, args ); 3578 } 3579 } 3580 }; 3581 3582 // Support: Promises/A+ section 2.3.3.3.1 3583 // https://promisesaplus.com/#point-57 3584 // Re-resolve promises immediately to dodge false rejection from 3585 // subsequent errors 3586 if ( depth ) { 3587 process(); 3588 } else { 3589 3590 // Call an optional hook to record the error, in case of exception 3591 // since it's otherwise lost when execution goes async 3592 if ( jQuery.Deferred.getErrorHook ) { 3593 process.error = jQuery.Deferred.getErrorHook(); 3594 3595 // The deprecated alias of the above. While the name suggests 3596 // returning the stack, not an error instance, jQuery just passes 3597 // it directly to `console.warn` so both will work; an instance 3598 // just better cooperates with source maps. 3599 } else if ( jQuery.Deferred.getStackHook ) { 3600 process.error = jQuery.Deferred.getStackHook(); 3601 } 3602 window.setTimeout( process ); 3603 } 3604 }; 3605 } 3606 3607 return jQuery.Deferred( function( newDefer ) { 3608 3609 // progress_handlers.add( ... ) 3610 tuples[ 0 ][ 3 ].add( 3611 resolve( 3612 0, 3613 newDefer, 3614 isFunction( onProgress ) ? 3615 onProgress : 3616 Identity, 3617 newDefer.notifyWith 3618 ) 3619 ); 3620 3621 // fulfilled_handlers.add( ... ) 3622 tuples[ 1 ][ 3 ].add( 3623 resolve( 3624 0, 3625 newDefer, 3626 isFunction( onFulfilled ) ? 3627 onFulfilled : 3628 Identity 3629 ) 3630 ); 3631 3632 // rejected_handlers.add( ... ) 3633 tuples[ 2 ][ 3 ].add( 3634 resolve( 3635 0, 3636 newDefer, 3637 isFunction( onRejected ) ? 3638 onRejected : 3639 Thrower 3640 ) 3641 ); 3642 } ).promise(); 3643 }, 3644 3645 // Get a promise for this deferred 3646 // If obj is provided, the promise aspect is added to the object 3647 promise: function( obj ) { 3648 return obj != null ? jQuery.extend( obj, promise ) : promise; 3649 } 3650 }, 3651 deferred = {}; 3652 3653 // Add list-specific methods 3654 jQuery.each( tuples, function( i, tuple ) { 3655 var list = tuple[ 2 ], 3656 stateString = tuple[ 5 ]; 3657 3658 // promise.progress = list.add 3659 // promise.done = list.add 3660 // promise.fail = list.add 3661 promise[ tuple[ 1 ] ] = list.add; 3662 3663 // Handle state 3664 if ( stateString ) { 3665 list.add( 3666 function() { 3667 3668 // state = "resolved" (i.e., fulfilled) 3669 // state = "rejected" 3670 state = stateString; 3671 }, 3672 3673 // rejected_callbacks.disable 3674 // fulfilled_callbacks.disable 3675 tuples[ 3 - i ][ 2 ].disable, 3676 3677 // rejected_handlers.disable 3678 // fulfilled_handlers.disable 3679 tuples[ 3 - i ][ 3 ].disable, 3680 3681 // progress_callbacks.lock 3682 tuples[ 0 ][ 2 ].lock, 3683 3684 // progress_handlers.lock 3685 tuples[ 0 ][ 3 ].lock 3686 ); 3687 } 3688 3689 // progress_handlers.fire 3690 // fulfilled_handlers.fire 3691 // rejected_handlers.fire 3692 list.add( tuple[ 3 ].fire ); 3693 3694 // deferred.notify = function() { deferred.notifyWith(...) } 3695 // deferred.resolve = function() { deferred.resolveWith(...) } 3696 // deferred.reject = function() { deferred.rejectWith(...) } 3697 deferred[ tuple[ 0 ] ] = function() { 3698 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 3699 return this; 3700 }; 3701 3702 // deferred.notifyWith = list.fireWith 3703 // deferred.resolveWith = list.fireWith 3704 // deferred.rejectWith = list.fireWith 3705 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 3706 } ); 3707 3708 // Make the deferred a promise 3709 promise.promise( deferred ); 3710 3711 // Call given func if any 3712 if ( func ) { 3713 func.call( deferred, deferred ); 3714 } 3715 3716 // All done! 3717 return deferred; 3718 }, 3719 3720 // Deferred helper 3721 when: function( singleValue ) { 3722 var 3723 3724 // count of uncompleted subordinates 3725 remaining = arguments.length, 3726 3727 // count of unprocessed arguments 3728 i = remaining, 3729 3730 // subordinate fulfillment data 3731 resolveContexts = Array( i ), 3732 resolveValues = slice.call( arguments ), 3733 3734 // the primary Deferred 3735 primary = jQuery.Deferred(), 3736 3737 // subordinate callback factory 3738 updateFunc = function( i ) { 3739 return function( value ) { 3740 resolveContexts[ i ] = this; 3741 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 3742 if ( !( --remaining ) ) { 3743 primary.resolveWith( resolveContexts, resolveValues ); 3744 } 3745 }; 3746 }; 3747 3748 // Single- and empty arguments are adopted like Promise.resolve 3749 if ( remaining <= 1 ) { 3750 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 3751 !remaining ); 3752 3753 // Use .then() to unwrap secondary thenables (cf. gh-3000) 3754 if ( primary.state() === "pending" || 3755 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 3756 3757 return primary.then(); 3758 } 3759 } 3760 3761 // Multiple arguments are aggregated like Promise.all array elements 3762 while ( i-- ) { 3763 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 3764 } 3765 3766 return primary.promise(); 3767 } 3768} ); 3769 3770 3771// These usually indicate a programmer mistake during development, 3772// warn about them ASAP rather than swallowing them by default. 3773var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 3774 3775// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 3776// captured before the async barrier to get the original error cause 3777// which may otherwise be hidden. 3778jQuery.Deferred.exceptionHook = function( error, asyncError ) { 3779 3780 // Support: IE 8 - 9 only 3781 // Console exists when dev tools are open, which can happen at any time 3782 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 3783 window.console.warn( "jQuery.Deferred exception: " + error.message, 3784 error.stack, asyncError ); 3785 } 3786}; 3787 3788 3789 3790 3791jQuery.readyException = function( error ) { 3792 window.setTimeout( function() { 3793 throw error; 3794 } ); 3795}; 3796 3797 3798 3799 3800// The deferred used on DOM ready 3801var readyList = jQuery.Deferred(); 3802 3803jQuery.fn.ready = function( fn ) { 3804 3805 readyList 3806 .then( fn ) 3807 3808 // Wrap jQuery.readyException in a function so that the lookup 3809 // happens at the time of error handling instead of callback 3810 // registration. 3811 .catch( function( error ) { 3812 jQuery.readyException( error ); 3813 } ); 3814 3815 return this; 3816}; 3817 3818jQuery.extend( { 3819 3820 // Is the DOM ready to be used? Set to true once it occurs. 3821 isReady: false, 3822 3823 // A counter to track how many items to wait for before 3824 // the ready event fires. See trac-6781 3825 readyWait: 1, 3826 3827 // Handle when the DOM is ready 3828 ready: function( wait ) { 3829 3830 // Abort if there are pending holds or we're already ready 3831 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 3832 return; 3833 } 3834 3835 // Remember that the DOM is ready 3836 jQuery.isReady = true; 3837 3838 // If a normal DOM Ready event fired, decrement, and wait if need be 3839 if ( wait !== true && --jQuery.readyWait > 0 ) { 3840 return; 3841 } 3842 3843 // If there are functions bound, to execute 3844 readyList.resolveWith( document, [ jQuery ] ); 3845 } 3846} ); 3847 3848jQuery.ready.then = readyList.then; 3849 3850// The ready event handler and self cleanup method 3851function completed() { 3852 document.removeEventListener( "DOMContentLoaded", completed ); 3853 window.removeEventListener( "load", completed ); 3854 jQuery.ready(); 3855} 3856 3857// Catch cases where $(document).ready() is called 3858// after the browser event has already occurred. 3859// Support: IE <=9 - 10 only 3860// Older IE sometimes signals "interactive" too soon 3861if ( document.readyState === "complete" || 3862 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 3863 3864 // Handle it asynchronously to allow scripts the opportunity to delay ready 3865 window.setTimeout( jQuery.ready ); 3866 3867} else { 3868 3869 // Use the handy event callback 3870 document.addEventListener( "DOMContentLoaded", completed ); 3871 3872 // A fallback to window.onload, that will always work 3873 window.addEventListener( "load", completed ); 3874} 3875 3876 3877 3878 3879// Multifunctional method to get and set values of a collection 3880// The value/s can optionally be executed if it's a function 3881var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 3882 var i = 0, 3883 len = elems.length, 3884 bulk = key == null; 3885 3886 // Sets many values 3887 if ( toType( key ) === "object" ) { 3888 chainable = true; 3889 for ( i in key ) { 3890 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 3891 } 3892 3893 // Sets one value 3894 } else if ( value !== undefined ) { 3895 chainable = true; 3896 3897 if ( !isFunction( value ) ) { 3898 raw = true; 3899 } 3900 3901 if ( bulk ) { 3902 3903 // Bulk operations run against the entire set 3904 if ( raw ) { 3905 fn.call( elems, value ); 3906 fn = null; 3907 3908 // ...except when executing function values 3909 } else { 3910 bulk = fn; 3911 fn = function( elem, _key, value ) { 3912 return bulk.call( jQuery( elem ), value ); 3913 }; 3914 } 3915 } 3916 3917 if ( fn ) { 3918 for ( ; i < len; i++ ) { 3919 fn( 3920 elems[ i ], key, raw ? 3921 value : 3922 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 3923 ); 3924 } 3925 } 3926 } 3927 3928 if ( chainable ) { 3929 return elems; 3930 } 3931 3932 // Gets 3933 if ( bulk ) { 3934 return fn.call( elems ); 3935 } 3936 3937 return len ? fn( elems[ 0 ], key ) : emptyGet; 3938}; 3939 3940 3941// Matches dashed string for camelizing 3942var rmsPrefix = /^-ms-/, 3943 rdashAlpha = /-([a-z])/g; 3944 3945// Used by camelCase as callback to replace() 3946function fcamelCase( _all, letter ) { 3947 return letter.toUpperCase(); 3948} 3949 3950// Convert dashed to camelCase; used by the css and data modules 3951// Support: IE <=9 - 11, Edge 12 - 15 3952// Microsoft forgot to hump their vendor prefix (trac-9572) 3953function camelCase( string ) { 3954 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 3955} 3956var acceptData = function( owner ) { 3957 3958 // Accepts only: 3959 // - Node 3960 // - Node.ELEMENT_NODE 3961 // - Node.DOCUMENT_NODE 3962 // - Object 3963 // - Any 3964 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 3965}; 3966 3967 3968 3969 3970function Data() { 3971 this.expando = jQuery.expando + Data.uid++; 3972} 3973 3974Data.uid = 1; 3975 3976Data.prototype = { 3977 3978 cache: function( owner ) { 3979 3980 // Check if the owner object already has a cache 3981 var value = owner[ this.expando ]; 3982 3983 // If not, create one 3984 if ( !value ) { 3985 value = {}; 3986 3987 // We can accept data for non-element nodes in modern browsers, 3988 // but we should not, see trac-8335. 3989 // Always return an empty object. 3990 if ( acceptData( owner ) ) { 3991 3992 // If it is a node unlikely to be stringify-ed or looped over 3993 // use plain assignment 3994 if ( owner.nodeType ) { 3995 owner[ this.expando ] = value; 3996 3997 // Otherwise secure it in a non-enumerable property 3998 // configurable must be true to allow the property to be 3999 // deleted when data is removed 4000 } else { 4001 Object.defineProperty( owner, this.expando, { 4002 value: value, 4003 configurable: true 4004 } ); 4005 } 4006 } 4007 } 4008 4009 return value; 4010 }, 4011 set: function( owner, data, value ) { 4012 var prop, 4013 cache = this.cache( owner ); 4014 4015 // Handle: [ owner, key, value ] args 4016 // Always use camelCase key (gh-2257) 4017 if ( typeof data === "string" ) { 4018 cache[ camelCase( data ) ] = value; 4019 4020 // Handle: [ owner, { properties } ] args 4021 } else { 4022 4023 // Copy the properties one-by-one to the cache object 4024 for ( prop in data ) { 4025 cache[ camelCase( prop ) ] = data[ prop ]; 4026 } 4027 } 4028 return cache; 4029 }, 4030 get: function( owner, key ) { 4031 return key === undefined ? 4032 this.cache( owner ) : 4033 4034 // Always use camelCase key (gh-2257) 4035 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 4036 }, 4037 access: function( owner, key, value ) { 4038 4039 // In cases where either: 4040 // 4041 // 1. No key was specified 4042 // 2. A string key was specified, but no value provided 4043 // 4044 // Take the "read" path and allow the get method to determine 4045 // which value to return, respectively either: 4046 // 4047 // 1. The entire cache object 4048 // 2. The data stored at the key 4049 // 4050 if ( key === undefined || 4051 ( ( key && typeof key === "string" ) && value === undefined ) ) { 4052 4053 return this.get( owner, key ); 4054 } 4055 4056 // When the key is not a string, or both a key and value 4057 // are specified, set or extend (existing objects) with either: 4058 // 4059 // 1. An object of properties 4060 // 2. A key and value 4061 // 4062 this.set( owner, key, value ); 4063 4064 // Since the "set" path can have two possible entry points 4065 // return the expected data based on which path was taken[*] 4066 return value !== undefined ? value : key; 4067 }, 4068 remove: function( owner, key ) { 4069 var i, 4070 cache = owner[ this.expando ]; 4071 4072 if ( cache === undefined ) { 4073 return; 4074 } 4075 4076 if ( key !== undefined ) { 4077 4078 // Support array or space separated string of keys 4079 if ( Array.isArray( key ) ) { 4080 4081 // If key is an array of keys... 4082 // We always set camelCase keys, so remove that. 4083 key = key.map( camelCase ); 4084 } else { 4085 key = camelCase( key ); 4086 4087 // If a key with the spaces exists, use it. 4088 // Otherwise, create an array by matching non-whitespace 4089 key = key in cache ? 4090 [ key ] : 4091 ( key.match( rnothtmlwhite ) || [] ); 4092 } 4093 4094 i = key.length; 4095 4096 while ( i-- ) { 4097 delete cache[ key[ i ] ]; 4098 } 4099 } 4100 4101 // Remove the expando if there's no more data 4102 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 4103 4104 // Support: Chrome <=35 - 45 4105 // Webkit & Blink performance suffers when deleting properties 4106 // from DOM nodes, so set to undefined instead 4107 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 4108 if ( owner.nodeType ) { 4109 owner[ this.expando ] = undefined; 4110 } else { 4111 delete owner[ this.expando ]; 4112 } 4113 } 4114 }, 4115 hasData: function( owner ) { 4116 var cache = owner[ this.expando ]; 4117 return cache !== undefined && !jQuery.isEmptyObject( cache ); 4118 } 4119}; 4120var dataPriv = new Data(); 4121 4122var dataUser = new Data(); 4123 4124 4125 4126// Implementation Summary 4127// 4128// 1. Enforce API surface and semantic compatibility with 1.9.x branch 4129// 2. Improve the module's maintainability by reducing the storage 4130// paths to a single mechanism. 4131// 3. Use the same single mechanism to support "private" and "user" data. 4132// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 4133// 5. Avoid exposing implementation details on user objects (eg. expando properties) 4134// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 4135 4136var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 4137 rmultiDash = /[A-Z]/g; 4138 4139function getData( data ) { 4140 if ( data === "true" ) { 4141 return true; 4142 } 4143 4144 if ( data === "false" ) { 4145 return false; 4146 } 4147 4148 if ( data === "null" ) { 4149 return null; 4150 } 4151 4152 // Only convert to a number if it doesn't change the string 4153 if ( data === +data + "" ) { 4154 return +data; 4155 } 4156 4157 if ( rbrace.test( data ) ) { 4158 return JSON.parse( data ); 4159 } 4160 4161 return data; 4162} 4163 4164function dataAttr( elem, key, data ) { 4165 var name; 4166 4167 // If nothing was found internally, try to fetch any 4168 // data from the HTML5 data-* attribute 4169 if ( data === undefined && elem.nodeType === 1 ) { 4170 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 4171 data = elem.getAttribute( name ); 4172 4173 if ( typeof data === "string" ) { 4174 try { 4175 data = getData( data ); 4176 } catch ( e ) {} 4177 4178 // Make sure we set the data so it isn't changed later 4179 dataUser.set( elem, key, data ); 4180 } else { 4181 data = undefined; 4182 } 4183 } 4184 return data; 4185} 4186 4187jQuery.extend( { 4188 hasData: function( elem ) { 4189 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 4190 }, 4191 4192 data: function( elem, name, data ) { 4193 return dataUser.access( elem, name, data ); 4194 }, 4195 4196 removeData: function( elem, name ) { 4197 dataUser.remove( elem, name ); 4198 }, 4199 4200 // TODO: Now that all calls to _data and _removeData have been replaced 4201 // with direct calls to dataPriv methods, these can be deprecated. 4202 _data: function( elem, name, data ) { 4203 return dataPriv.access( elem, name, data ); 4204 }, 4205 4206 _removeData: function( elem, name ) { 4207 dataPriv.remove( elem, name ); 4208 } 4209} ); 4210 4211jQuery.fn.extend( { 4212 data: function( key, value ) { 4213 var i, name, data, 4214 elem = this[ 0 ], 4215 attrs = elem && elem.attributes; 4216 4217 // Gets all values 4218 if ( key === undefined ) { 4219 if ( this.length ) { 4220 data = dataUser.get( elem ); 4221 4222 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 4223 i = attrs.length; 4224 while ( i-- ) { 4225 4226 // Support: IE 11 only 4227 // The attrs elements can be null (trac-14894) 4228 if ( attrs[ i ] ) { 4229 name = attrs[ i ].name; 4230 if ( name.indexOf( "data-" ) === 0 ) { 4231 name = camelCase( name.slice( 5 ) ); 4232 dataAttr( elem, name, data[ name ] ); 4233 } 4234 } 4235 } 4236 dataPriv.set( elem, "hasDataAttrs", true ); 4237 } 4238 } 4239 4240 return data; 4241 } 4242 4243 // Sets multiple values 4244 if ( typeof key === "object" ) { 4245 return this.each( function() { 4246 dataUser.set( this, key ); 4247 } ); 4248 } 4249 4250 return access( this, function( value ) { 4251 var data; 4252 4253 // The calling jQuery object (element matches) is not empty 4254 // (and therefore has an element appears at this[ 0 ]) and the 4255 // `value` parameter was not undefined. An empty jQuery object 4256 // will result in `undefined` for elem = this[ 0 ] which will 4257 // throw an exception if an attempt to read a data cache is made. 4258 if ( elem && value === undefined ) { 4259 4260 // Attempt to get data from the cache 4261 // The key will always be camelCased in Data 4262 data = dataUser.get( elem, key ); 4263 if ( data !== undefined ) { 4264 return data; 4265 } 4266 4267 // Attempt to "discover" the data in 4268 // HTML5 custom data-* attrs 4269 data = dataAttr( elem, key ); 4270 if ( data !== undefined ) { 4271 return data; 4272 } 4273 4274 // We tried really hard, but the data doesn't exist. 4275 return; 4276 } 4277 4278 // Set the data... 4279 this.each( function() { 4280 4281 // We always store the camelCased key 4282 dataUser.set( this, key, value ); 4283 } ); 4284 }, null, value, arguments.length > 1, null, true ); 4285 }, 4286 4287 removeData: function( key ) { 4288 return this.each( function() { 4289 dataUser.remove( this, key ); 4290 } ); 4291 } 4292} ); 4293 4294 4295jQuery.extend( { 4296 queue: function( elem, type, data ) { 4297 var queue; 4298 4299 if ( elem ) { 4300 type = ( type || "fx" ) + "queue"; 4301 queue = dataPriv.get( elem, type ); 4302 4303 // Speed up dequeue by getting out quickly if this is just a lookup 4304 if ( data ) { 4305 if ( !queue || Array.isArray( data ) ) { 4306 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 4307 } else { 4308 queue.push( data ); 4309 } 4310 } 4311 return queue || []; 4312 } 4313 }, 4314 4315 dequeue: function( elem, type ) { 4316 type = type || "fx"; 4317 4318 var queue = jQuery.queue( elem, type ), 4319 startLength = queue.length, 4320 fn = queue.shift(), 4321 hooks = jQuery._queueHooks( elem, type ), 4322 next = function() { 4323 jQuery.dequeue( elem, type ); 4324 }; 4325 4326 // If the fx queue is dequeued, always remove the progress sentinel 4327 if ( fn === "inprogress" ) { 4328 fn = queue.shift(); 4329 startLength--; 4330 } 4331 4332 if ( fn ) { 4333 4334 // Add a progress sentinel to prevent the fx queue from being 4335 // automatically dequeued 4336 if ( type === "fx" ) { 4337 queue.unshift( "inprogress" ); 4338 } 4339 4340 // Clear up the last queue stop function 4341 delete hooks.stop; 4342 fn.call( elem, next, hooks ); 4343 } 4344 4345 if ( !startLength && hooks ) { 4346 hooks.empty.fire(); 4347 } 4348 }, 4349 4350 // Not public - generate a queueHooks object, or return the current one 4351 _queueHooks: function( elem, type ) { 4352 var key = type + "queueHooks"; 4353 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 4354 empty: jQuery.Callbacks( "once memory" ).add( function() { 4355 dataPriv.remove( elem, [ type + "queue", key ] ); 4356 } ) 4357 } ); 4358 } 4359} ); 4360 4361jQuery.fn.extend( { 4362 queue: function( type, data ) { 4363 var setter = 2; 4364 4365 if ( typeof type !== "string" ) { 4366 data = type; 4367 type = "fx"; 4368 setter--; 4369 } 4370 4371 if ( arguments.length < setter ) { 4372 return jQuery.queue( this[ 0 ], type ); 4373 } 4374 4375 return data === undefined ? 4376 this : 4377 this.each( function() { 4378 var queue = jQuery.queue( this, type, data ); 4379 4380 // Ensure a hooks for this queue 4381 jQuery._queueHooks( this, type ); 4382 4383 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 4384 jQuery.dequeue( this, type ); 4385 } 4386 } ); 4387 }, 4388 dequeue: function( type ) { 4389 return this.each( function() { 4390 jQuery.dequeue( this, type ); 4391 } ); 4392 }, 4393 clearQueue: function( type ) { 4394 return this.queue( type || "fx", [] ); 4395 }, 4396 4397 // Get a promise resolved when queues of a certain type 4398 // are emptied (fx is the type by default) 4399 promise: function( type, obj ) { 4400 var tmp, 4401 count = 1, 4402 defer = jQuery.Deferred(), 4403 elements = this, 4404 i = this.length, 4405 resolve = function() { 4406 if ( !( --count ) ) { 4407 defer.resolveWith( elements, [ elements ] ); 4408 } 4409 }; 4410 4411 if ( typeof type !== "string" ) { 4412 obj = type; 4413 type = undefined; 4414 } 4415 type = type || "fx"; 4416 4417 while ( i-- ) { 4418 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 4419 if ( tmp && tmp.empty ) { 4420 count++; 4421 tmp.empty.add( resolve ); 4422 } 4423 } 4424 resolve(); 4425 return defer.promise( obj ); 4426 } 4427} ); 4428var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 4429 4430var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 4431 4432 4433var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 4434 4435var documentElement = document.documentElement; 4436 4437 4438 4439 var isAttached = function( elem ) { 4440 return jQuery.contains( elem.ownerDocument, elem ); 4441 }, 4442 composed = { composed: true }; 4443 4444 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 4445 // Check attachment across shadow DOM boundaries when possible (gh-3504) 4446 // Support: iOS 10.0-10.2 only 4447 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 4448 // leading to errors. We need to check for `getRootNode`. 4449 if ( documentElement.getRootNode ) { 4450 isAttached = function( elem ) { 4451 return jQuery.contains( elem.ownerDocument, elem ) || 4452 elem.getRootNode( composed ) === elem.ownerDocument; 4453 }; 4454 } 4455var isHiddenWithinTree = function( elem, el ) { 4456 4457 // isHiddenWithinTree might be called from jQuery#filter function; 4458 // in that case, element will be second argument 4459 elem = el || elem; 4460 4461 // Inline style trumps all 4462 return elem.style.display === "none" || 4463 elem.style.display === "" && 4464 4465 // Otherwise, check computed style 4466 // Support: Firefox <=43 - 45 4467 // Disconnected elements can have computed display: none, so first confirm that elem is 4468 // in the document. 4469 isAttached( elem ) && 4470 4471 jQuery.css( elem, "display" ) === "none"; 4472 }; 4473 4474 4475 4476function adjustCSS( elem, prop, valueParts, tween ) { 4477 var adjusted, scale, 4478 maxIterations = 20, 4479 currentValue = tween ? 4480 function() { 4481 return tween.cur(); 4482 } : 4483 function() { 4484 return jQuery.css( elem, prop, "" ); 4485 }, 4486 initial = currentValue(), 4487 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 4488 4489 // Starting value computation is required for potential unit mismatches 4490 initialInUnit = elem.nodeType && 4491 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 4492 rcssNum.exec( jQuery.css( elem, prop ) ); 4493 4494 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 4495 4496 // Support: Firefox <=54 4497 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 4498 initial = initial / 2; 4499 4500 // Trust units reported by jQuery.css 4501 unit = unit || initialInUnit[ 3 ]; 4502 4503 // Iteratively approximate from a nonzero starting point 4504 initialInUnit = +initial || 1; 4505 4506 while ( maxIterations-- ) { 4507 4508 // Evaluate and update our best guess (doubling guesses that zero out). 4509 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 4510 jQuery.style( elem, prop, initialInUnit + unit ); 4511 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 4512 maxIterations = 0; 4513 } 4514 initialInUnit = initialInUnit / scale; 4515 4516 } 4517 4518 initialInUnit = initialInUnit * 2; 4519 jQuery.style( elem, prop, initialInUnit + unit ); 4520 4521 // Make sure we update the tween properties later on 4522 valueParts = valueParts || []; 4523 } 4524 4525 if ( valueParts ) { 4526 initialInUnit = +initialInUnit || +initial || 0; 4527 4528 // Apply relative offset (+=/-=) if specified 4529 adjusted = valueParts[ 1 ] ? 4530 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 4531 +valueParts[ 2 ]; 4532 if ( tween ) { 4533 tween.unit = unit; 4534 tween.start = initialInUnit; 4535 tween.end = adjusted; 4536 } 4537 } 4538 return adjusted; 4539} 4540 4541 4542var defaultDisplayMap = {}; 4543 4544function getDefaultDisplay( elem ) { 4545 var temp, 4546 doc = elem.ownerDocument, 4547 nodeName = elem.nodeName, 4548 display = defaultDisplayMap[ nodeName ]; 4549 4550 if ( display ) { 4551 return display; 4552 } 4553 4554 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 4555 display = jQuery.css( temp, "display" ); 4556 4557 temp.parentNode.removeChild( temp ); 4558 4559 if ( display === "none" ) { 4560 display = "block"; 4561 } 4562 defaultDisplayMap[ nodeName ] = display; 4563 4564 return display; 4565} 4566 4567function showHide( elements, show ) { 4568 var display, elem, 4569 values = [], 4570 index = 0, 4571 length = elements.length; 4572 4573 // Determine new display value for elements that need to change 4574 for ( ; index < length; index++ ) { 4575 elem = elements[ index ]; 4576 if ( !elem.style ) { 4577 continue; 4578 } 4579 4580 display = elem.style.display; 4581 if ( show ) { 4582 4583 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 4584 // check is required in this first loop unless we have a nonempty display value (either 4585 // inline or about-to-be-restored) 4586 if ( display === "none" ) { 4587 values[ index ] = dataPriv.get( elem, "display" ) || null; 4588 if ( !values[ index ] ) { 4589 elem.style.display = ""; 4590 } 4591 } 4592 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 4593 values[ index ] = getDefaultDisplay( elem ); 4594 } 4595 } else { 4596 if ( display !== "none" ) { 4597 values[ index ] = "none"; 4598 4599 // Remember what we're overwriting 4600 dataPriv.set( elem, "display", display ); 4601 } 4602 } 4603 } 4604 4605 // Set the display of the elements in a second loop to avoid constant reflow 4606 for ( index = 0; index < length; index++ ) { 4607 if ( values[ index ] != null ) { 4608 elements[ index ].style.display = values[ index ]; 4609 } 4610 } 4611 4612 return elements; 4613} 4614 4615jQuery.fn.extend( { 4616 show: function() { 4617 return showHide( this, true ); 4618 }, 4619 hide: function() { 4620 return showHide( this ); 4621 }, 4622 toggle: function( state ) { 4623 if ( typeof state === "boolean" ) { 4624 return state ? this.show() : this.hide(); 4625 } 4626 4627 return this.each( function() { 4628 if ( isHiddenWithinTree( this ) ) { 4629 jQuery( this ).show(); 4630 } else { 4631 jQuery( this ).hide(); 4632 } 4633 } ); 4634 } 4635} ); 4636var rcheckableType = ( /^(?:checkbox|radio)$/i ); 4637 4638var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 4639 4640var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 4641 4642 4643 4644( function() { 4645 var fragment = document.createDocumentFragment(), 4646 div = fragment.appendChild( document.createElement( "div" ) ), 4647 input = document.createElement( "input" ); 4648 4649 // Support: Android 4.0 - 4.3 only 4650 // Check state lost if the name is set (trac-11217) 4651 // Support: Windows Web Apps (WWA) 4652 // `name` and `type` must use .setAttribute for WWA (trac-14901) 4653 input.setAttribute( "type", "radio" ); 4654 input.setAttribute( "checked", "checked" ); 4655 input.setAttribute( "name", "t" ); 4656 4657 div.appendChild( input ); 4658 4659 // Support: Android <=4.1 only 4660 // Older WebKit doesn't clone checked state correctly in fragments 4661 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 4662 4663 // Support: IE <=11 only 4664 // Make sure textarea (and checkbox) defaultValue is properly cloned 4665 div.innerHTML = "<textarea>x</textarea>"; 4666 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 4667 4668 // Support: IE <=9 only 4669 // IE <=9 replaces <option> tags with their contents when inserted outside of 4670 // the select element. 4671 div.innerHTML = "<option></option>"; 4672 support.option = !!div.lastChild; 4673} )(); 4674 4675 4676// We have to close these tags to support XHTML (trac-13200) 4677var wrapMap = { 4678 4679 // XHTML parsers do not magically insert elements in the 4680 // same way that tag soup parsers do. So we cannot shorten 4681 // this by omitting <tbody> or other required elements. 4682 thead: [ 1, "<table>", "</table>" ], 4683 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 4684 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 4685 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 4686 4687 _default: [ 0, "", "" ] 4688}; 4689 4690wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 4691wrapMap.th = wrapMap.td; 4692 4693// Support: IE <=9 only 4694if ( !support.option ) { 4695 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 4696} 4697 4698 4699function getAll( context, tag ) { 4700 4701 // Support: IE <=9 - 11 only 4702 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 4703 var ret; 4704 4705 if ( typeof context.getElementsByTagName !== "undefined" ) { 4706 ret = context.getElementsByTagName( tag || "*" ); 4707 4708 } else if ( typeof context.querySelectorAll !== "undefined" ) { 4709 ret = context.querySelectorAll( tag || "*" ); 4710 4711 } else { 4712 ret = []; 4713 } 4714 4715 if ( tag === undefined || tag && nodeName( context, tag ) ) { 4716 return jQuery.merge( [ context ], ret ); 4717 } 4718 4719 return ret; 4720} 4721 4722 4723// Mark scripts as having already been evaluated 4724function setGlobalEval( elems, refElements ) { 4725 var i = 0, 4726 l = elems.length; 4727 4728 for ( ; i < l; i++ ) { 4729 dataPriv.set( 4730 elems[ i ], 4731 "globalEval", 4732 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 4733 ); 4734 } 4735} 4736 4737 4738var rhtml = /<|&#?\w+;/; 4739 4740function buildFragment( elems, context, scripts, selection, ignored ) { 4741 var elem, tmp, tag, wrap, attached, j, 4742 fragment = context.createDocumentFragment(), 4743 nodes = [], 4744 i = 0, 4745 l = elems.length; 4746 4747 for ( ; i < l; i++ ) { 4748 elem = elems[ i ]; 4749 4750 if ( elem || elem === 0 ) { 4751 4752 // Add nodes directly 4753 if ( toType( elem ) === "object" ) { 4754 4755 // Support: Android <=4.0 only, PhantomJS 1 only 4756 // push.apply(_, arraylike) throws on ancient WebKit 4757 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 4758 4759 // Convert non-html into a text node 4760 } else if ( !rhtml.test( elem ) ) { 4761 nodes.push( context.createTextNode( elem ) ); 4762 4763 // Convert html into DOM nodes 4764 } else { 4765 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 4766 4767 // Deserialize a standard representation 4768 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 4769 wrap = wrapMap[ tag ] || wrapMap._default; 4770 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 4771 4772 // Descend through wrappers to the right content 4773 j = wrap[ 0 ]; 4774 while ( j-- ) { 4775 tmp = tmp.lastChild; 4776 } 4777 4778 // Support: Android <=4.0 only, PhantomJS 1 only 4779 // push.apply(_, arraylike) throws on ancient WebKit 4780 jQuery.merge( nodes, tmp.childNodes ); 4781 4782 // Remember the top-level container 4783 tmp = fragment.firstChild; 4784 4785 // Ensure the created nodes are orphaned (trac-12392) 4786 tmp.textContent = ""; 4787 } 4788 } 4789 } 4790 4791 // Remove wrapper from fragment 4792 fragment.textContent = ""; 4793 4794 i = 0; 4795 while ( ( elem = nodes[ i++ ] ) ) { 4796 4797 // Skip elements already in the context collection (trac-4087) 4798 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 4799 if ( ignored ) { 4800 ignored.push( elem ); 4801 } 4802 continue; 4803 } 4804 4805 attached = isAttached( elem ); 4806 4807 // Append to fragment 4808 tmp = getAll( fragment.appendChild( elem ), "script" ); 4809 4810 // Preserve script evaluation history 4811 if ( attached ) { 4812 setGlobalEval( tmp ); 4813 } 4814 4815 // Capture executables 4816 if ( scripts ) { 4817 j = 0; 4818 while ( ( elem = tmp[ j++ ] ) ) { 4819 if ( rscriptType.test( elem.type || "" ) ) { 4820 scripts.push( elem ); 4821 } 4822 } 4823 } 4824 } 4825 4826 return fragment; 4827} 4828 4829 4830var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 4831 4832function returnTrue() { 4833 return true; 4834} 4835 4836function returnFalse() { 4837 return false; 4838} 4839 4840function on( elem, types, selector, data, fn, one ) { 4841 var origFn, type; 4842 4843 // Types can be a map of types/handlers 4844 if ( typeof types === "object" ) { 4845 4846 // ( types-Object, selector, data ) 4847 if ( typeof selector !== "string" ) { 4848 4849 // ( types-Object, data ) 4850 data = data || selector; 4851 selector = undefined; 4852 } 4853 for ( type in types ) { 4854 on( elem, type, selector, data, types[ type ], one ); 4855 } 4856 return elem; 4857 } 4858 4859 if ( data == null && fn == null ) { 4860 4861 // ( types, fn ) 4862 fn = selector; 4863 data = selector = undefined; 4864 } else if ( fn == null ) { 4865 if ( typeof selector === "string" ) { 4866 4867 // ( types, selector, fn ) 4868 fn = data; 4869 data = undefined; 4870 } else { 4871 4872 // ( types, data, fn ) 4873 fn = data; 4874 data = selector; 4875 selector = undefined; 4876 } 4877 } 4878 if ( fn === false ) { 4879 fn = returnFalse; 4880 } else if ( !fn ) { 4881 return elem; 4882 } 4883 4884 if ( one === 1 ) { 4885 origFn = fn; 4886 fn = function( event ) { 4887 4888 // Can use an empty set, since event contains the info 4889 jQuery().off( event ); 4890 return origFn.apply( this, arguments ); 4891 }; 4892 4893 // Use same guid so caller can remove using origFn 4894 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 4895 } 4896 return elem.each( function() { 4897 jQuery.event.add( this, types, fn, data, selector ); 4898 } ); 4899} 4900 4901/* 4902 * Helper functions for managing events -- not part of the public interface. 4903 * Props to Dean Edwards' addEvent library for many of the ideas. 4904 */ 4905jQuery.event = { 4906 4907 global: {}, 4908 4909 add: function( elem, types, handler, data, selector ) { 4910 4911 var handleObjIn, eventHandle, tmp, 4912 events, t, handleObj, 4913 special, handlers, type, namespaces, origType, 4914 elemData = dataPriv.get( elem ); 4915 4916 // Only attach events to objects that accept data 4917 if ( !acceptData( elem ) ) { 4918 return; 4919 } 4920 4921 // Caller can pass in an object of custom data in lieu of the handler 4922 if ( handler.handler ) { 4923 handleObjIn = handler; 4924 handler = handleObjIn.handler; 4925 selector = handleObjIn.selector; 4926 } 4927 4928 // Ensure that invalid selectors throw exceptions at attach time 4929 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 4930 if ( selector ) { 4931 jQuery.find.matchesSelector( documentElement, selector ); 4932 } 4933 4934 // Make sure that the handler has a unique ID, used to find/remove it later 4935 if ( !handler.guid ) { 4936 handler.guid = jQuery.guid++; 4937 } 4938 4939 // Init the element's event structure and main handler, if this is the first 4940 if ( !( events = elemData.events ) ) { 4941 events = elemData.events = Object.create( null ); 4942 } 4943 if ( !( eventHandle = elemData.handle ) ) { 4944 eventHandle = elemData.handle = function( e ) { 4945 4946 // Discard the second event of a jQuery.event.trigger() and 4947 // when an event is called after a page has unloaded 4948 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 4949 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 4950 }; 4951 } 4952 4953 // Handle multiple events separated by a space 4954 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 4955 t = types.length; 4956 while ( t-- ) { 4957 tmp = rtypenamespace.exec( types[ t ] ) || []; 4958 type = origType = tmp[ 1 ]; 4959 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 4960 4961 // There *must* be a type, no attaching namespace-only handlers 4962 if ( !type ) { 4963 continue; 4964 } 4965 4966 // If event changes its type, use the special event handlers for the changed type 4967 special = jQuery.event.special[ type ] || {}; 4968 4969 // If selector defined, determine special event api type, otherwise given type 4970 type = ( selector ? special.delegateType : special.bindType ) || type; 4971 4972 // Update special based on newly reset type 4973 special = jQuery.event.special[ type ] || {}; 4974 4975 // handleObj is passed to all event handlers 4976 handleObj = jQuery.extend( { 4977 type: type, 4978 origType: origType, 4979 data: data, 4980 handler: handler, 4981 guid: handler.guid, 4982 selector: selector, 4983 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 4984 namespace: namespaces.join( "." ) 4985 }, handleObjIn ); 4986 4987 // Init the event handler queue if we're the first 4988 if ( !( handlers = events[ type ] ) ) { 4989 handlers = events[ type ] = []; 4990 handlers.delegateCount = 0; 4991 4992 // Only use addEventListener if the special events handler returns false 4993 if ( !special.setup || 4994 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 4995 4996 if ( elem.addEventListener ) { 4997 elem.addEventListener( type, eventHandle ); 4998 } 4999 } 5000 } 5001 5002 if ( special.add ) { 5003 special.add.call( elem, handleObj ); 5004 5005 if ( !handleObj.handler.guid ) { 5006 handleObj.handler.guid = handler.guid; 5007 } 5008 } 5009 5010 // Add to the element's handler list, delegates in front 5011 if ( selector ) { 5012 handlers.splice( handlers.delegateCount++, 0, handleObj ); 5013 } else { 5014 handlers.push( handleObj ); 5015 } 5016 5017 // Keep track of which events have ever been used, for event optimization 5018 jQuery.event.global[ type ] = true; 5019 } 5020 5021 }, 5022 5023 // Detach an event or set of events from an element 5024 remove: function( elem, types, handler, selector, mappedTypes ) { 5025 5026 var j, origCount, tmp, 5027 events, t, handleObj, 5028 special, handlers, type, namespaces, origType, 5029 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 5030 5031 if ( !elemData || !( events = elemData.events ) ) { 5032 return; 5033 } 5034 5035 // Once for each type.namespace in types; type may be omitted 5036 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5037 t = types.length; 5038 while ( t-- ) { 5039 tmp = rtypenamespace.exec( types[ t ] ) || []; 5040 type = origType = tmp[ 1 ]; 5041 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5042 5043 // Unbind all events (on this namespace, if provided) for the element 5044 if ( !type ) { 5045 for ( type in events ) { 5046 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 5047 } 5048 continue; 5049 } 5050 5051 special = jQuery.event.special[ type ] || {}; 5052 type = ( selector ? special.delegateType : special.bindType ) || type; 5053 handlers = events[ type ] || []; 5054 tmp = tmp[ 2 ] && 5055 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 5056 5057 // Remove matching events 5058 origCount = j = handlers.length; 5059 while ( j-- ) { 5060 handleObj = handlers[ j ]; 5061 5062 if ( ( mappedTypes || origType === handleObj.origType ) && 5063 ( !handler || handler.guid === handleObj.guid ) && 5064 ( !tmp || tmp.test( handleObj.namespace ) ) && 5065 ( !selector || selector === handleObj.selector || 5066 selector === "**" && handleObj.selector ) ) { 5067 handlers.splice( j, 1 ); 5068 5069 if ( handleObj.selector ) { 5070 handlers.delegateCount--; 5071 } 5072 if ( special.remove ) { 5073 special.remove.call( elem, handleObj ); 5074 } 5075 } 5076 } 5077 5078 // Remove generic event handler if we removed something and no more handlers exist 5079 // (avoids potential for endless recursion during removal of special event handlers) 5080 if ( origCount && !handlers.length ) { 5081 if ( !special.teardown || 5082 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 5083 5084 jQuery.removeEvent( elem, type, elemData.handle ); 5085 } 5086 5087 delete events[ type ]; 5088 } 5089 } 5090 5091 // Remove data and the expando if it's no longer used 5092 if ( jQuery.isEmptyObject( events ) ) { 5093 dataPriv.remove( elem, "handle events" ); 5094 } 5095 }, 5096 5097 dispatch: function( nativeEvent ) { 5098 5099 var i, j, ret, matched, handleObj, handlerQueue, 5100 args = new Array( arguments.length ), 5101 5102 // Make a writable jQuery.Event from the native event object 5103 event = jQuery.event.fix( nativeEvent ), 5104 5105 handlers = ( 5106 dataPriv.get( this, "events" ) || Object.create( null ) 5107 )[ event.type ] || [], 5108 special = jQuery.event.special[ event.type ] || {}; 5109 5110 // Use the fix-ed jQuery.Event rather than the (read-only) native event 5111 args[ 0 ] = event; 5112 5113 for ( i = 1; i < arguments.length; i++ ) { 5114 args[ i ] = arguments[ i ]; 5115 } 5116 5117 event.delegateTarget = this; 5118 5119 // Call the preDispatch hook for the mapped type, and let it bail if desired 5120 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 5121 return; 5122 } 5123 5124 // Determine handlers 5125 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 5126 5127 // Run delegates first; they may want to stop propagation beneath us 5128 i = 0; 5129 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 5130 event.currentTarget = matched.elem; 5131 5132 j = 0; 5133 while ( ( handleObj = matched.handlers[ j++ ] ) && 5134 !event.isImmediatePropagationStopped() ) { 5135 5136 // If the event is namespaced, then each handler is only invoked if it is 5137 // specially universal or its namespaces are a superset of the event's. 5138 if ( !event.rnamespace || handleObj.namespace === false || 5139 event.rnamespace.test( handleObj.namespace ) ) { 5140 5141 event.handleObj = handleObj; 5142 event.data = handleObj.data; 5143 5144 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 5145 handleObj.handler ).apply( matched.elem, args ); 5146 5147 if ( ret !== undefined ) { 5148 if ( ( event.result = ret ) === false ) { 5149 event.preventDefault(); 5150 event.stopPropagation(); 5151 } 5152 } 5153 } 5154 } 5155 } 5156 5157 // Call the postDispatch hook for the mapped type 5158 if ( special.postDispatch ) { 5159 special.postDispatch.call( this, event ); 5160 } 5161 5162 return event.result; 5163 }, 5164 5165 handlers: function( event, handlers ) { 5166 var i, handleObj, sel, matchedHandlers, matchedSelectors, 5167 handlerQueue = [], 5168 delegateCount = handlers.delegateCount, 5169 cur = event.target; 5170 5171 // Find delegate handlers 5172 if ( delegateCount && 5173 5174 // Support: IE <=9 5175 // Black-hole SVG <use> instance trees (trac-13180) 5176 cur.nodeType && 5177 5178 // Support: Firefox <=42 5179 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 5180 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 5181 // Support: IE 11 only 5182 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 5183 !( event.type === "click" && event.button >= 1 ) ) { 5184 5185 for ( ; cur !== this; cur = cur.parentNode || this ) { 5186 5187 // Don't check non-elements (trac-13208) 5188 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 5189 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 5190 matchedHandlers = []; 5191 matchedSelectors = {}; 5192 for ( i = 0; i < delegateCount; i++ ) { 5193 handleObj = handlers[ i ]; 5194 5195 // Don't conflict with Object.prototype properties (trac-13203) 5196 sel = handleObj.selector + " "; 5197 5198 if ( matchedSelectors[ sel ] === undefined ) { 5199 matchedSelectors[ sel ] = handleObj.needsContext ? 5200 jQuery( sel, this ).index( cur ) > -1 : 5201 jQuery.find( sel, this, null, [ cur ] ).length; 5202 } 5203 if ( matchedSelectors[ sel ] ) { 5204 matchedHandlers.push( handleObj ); 5205 } 5206 } 5207 if ( matchedHandlers.length ) { 5208 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 5209 } 5210 } 5211 } 5212 } 5213 5214 // Add the remaining (directly-bound) handlers 5215 cur = this; 5216 if ( delegateCount < handlers.length ) { 5217 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 5218 } 5219 5220 return handlerQueue; 5221 }, 5222 5223 addProp: function( name, hook ) { 5224 Object.defineProperty( jQuery.Event.prototype, name, { 5225 enumerable: true, 5226 configurable: true, 5227 5228 get: isFunction( hook ) ? 5229 function() { 5230 if ( this.originalEvent ) { 5231 return hook( this.originalEvent ); 5232 } 5233 } : 5234 function() { 5235 if ( this.originalEvent ) { 5236 return this.originalEvent[ name ]; 5237 } 5238 }, 5239 5240 set: function( value ) { 5241 Object.defineProperty( this, name, { 5242 enumerable: true, 5243 configurable: true, 5244 writable: true, 5245 value: value 5246 } ); 5247 } 5248 } ); 5249 }, 5250 5251 fix: function( originalEvent ) { 5252 return originalEvent[ jQuery.expando ] ? 5253 originalEvent : 5254 new jQuery.Event( originalEvent ); 5255 }, 5256 5257 special: { 5258 load: { 5259 5260 // Prevent triggered image.load events from bubbling to window.load 5261 noBubble: true 5262 }, 5263 click: { 5264 5265 // Utilize native event to ensure correct state for checkable inputs 5266 setup: function( data ) { 5267 5268 // For mutual compressibility with _default, replace `this` access with a local var. 5269 // `|| data` is dead code meant only to preserve the variable through minification. 5270 var el = this || data; 5271 5272 // Claim the first handler 5273 if ( rcheckableType.test( el.type ) && 5274 el.click && nodeName( el, "input" ) ) { 5275 5276 // dataPriv.set( el, "click", ... ) 5277 leverageNative( el, "click", true ); 5278 } 5279 5280 // Return false to allow normal processing in the caller 5281 return false; 5282 }, 5283 trigger: function( data ) { 5284 5285 // For mutual compressibility with _default, replace `this` access with a local var. 5286 // `|| data` is dead code meant only to preserve the variable through minification. 5287 var el = this || data; 5288 5289 // Force setup before triggering a click 5290 if ( rcheckableType.test( el.type ) && 5291 el.click && nodeName( el, "input" ) ) { 5292 5293 leverageNative( el, "click" ); 5294 } 5295 5296 // Return non-false to allow normal event-path propagation 5297 return true; 5298 }, 5299 5300 // For cross-browser consistency, suppress native .click() on links 5301 // Also prevent it if we're currently inside a leveraged native-event stack 5302 _default: function( event ) { 5303 var target = event.target; 5304 return rcheckableType.test( target.type ) && 5305 target.click && nodeName( target, "input" ) && 5306 dataPriv.get( target, "click" ) || 5307 nodeName( target, "a" ); 5308 } 5309 }, 5310 5311 beforeunload: { 5312 postDispatch: function( event ) { 5313 5314 // Support: Firefox 20+ 5315 // Firefox doesn't alert if the returnValue field is not set. 5316 if ( event.result !== undefined && event.originalEvent ) { 5317 event.originalEvent.returnValue = event.result; 5318 } 5319 } 5320 } 5321 } 5322}; 5323 5324// Ensure the presence of an event listener that handles manually-triggered 5325// synthetic events by interrupting progress until reinvoked in response to 5326// *native* events that it fires directly, ensuring that state changes have 5327// already occurred before other listeners are invoked. 5328function leverageNative( el, type, isSetup ) { 5329 5330 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 5331 if ( !isSetup ) { 5332 if ( dataPriv.get( el, type ) === undefined ) { 5333 jQuery.event.add( el, type, returnTrue ); 5334 } 5335 return; 5336 } 5337 5338 // Register the controller as a special universal handler for all event namespaces 5339 dataPriv.set( el, type, false ); 5340 jQuery.event.add( el, type, { 5341 namespace: false, 5342 handler: function( event ) { 5343 var result, 5344 saved = dataPriv.get( this, type ); 5345 5346 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 5347 5348 // Interrupt processing of the outer synthetic .trigger()ed event 5349 if ( !saved ) { 5350 5351 // Store arguments for use when handling the inner native event 5352 // There will always be at least one argument (an event object), so this array 5353 // will not be confused with a leftover capture object. 5354 saved = slice.call( arguments ); 5355 dataPriv.set( this, type, saved ); 5356 5357 // Trigger the native event and capture its result 5358 this[ type ](); 5359 result = dataPriv.get( this, type ); 5360 dataPriv.set( this, type, false ); 5361 5362 if ( saved !== result ) { 5363 5364 // Cancel the outer synthetic event 5365 event.stopImmediatePropagation(); 5366 event.preventDefault(); 5367 5368 return result; 5369 } 5370 5371 // If this is an inner synthetic event for an event with a bubbling surrogate 5372 // (focus or blur), assume that the surrogate already propagated from triggering 5373 // the native event and prevent that from happening again here. 5374 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 5375 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 5376 // less bad than duplication. 5377 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 5378 event.stopPropagation(); 5379 } 5380 5381 // If this is a native event triggered above, everything is now in order 5382 // Fire an inner synthetic event with the original arguments 5383 } else if ( saved ) { 5384 5385 // ...and capture the result 5386 dataPriv.set( this, type, jQuery.event.trigger( 5387 saved[ 0 ], 5388 saved.slice( 1 ), 5389 this 5390 ) ); 5391 5392 // Abort handling of the native event by all jQuery handlers while allowing 5393 // native handlers on the same element to run. On target, this is achieved 5394 // by stopping immediate propagation just on the jQuery event. However, 5395 // the native event is re-wrapped by a jQuery one on each level of the 5396 // propagation so the only way to stop it for jQuery is to stop it for 5397 // everyone via native `stopPropagation()`. This is not a problem for 5398 // focus/blur which don't bubble, but it does also stop click on checkboxes 5399 // and radios. We accept this limitation. 5400 event.stopPropagation(); 5401 event.isImmediatePropagationStopped = returnTrue; 5402 } 5403 } 5404 } ); 5405} 5406 5407jQuery.removeEvent = function( elem, type, handle ) { 5408 5409 // This "if" is needed for plain objects 5410 if ( elem.removeEventListener ) { 5411 elem.removeEventListener( type, handle ); 5412 } 5413}; 5414 5415jQuery.Event = function( src, props ) { 5416 5417 // Allow instantiation without the 'new' keyword 5418 if ( !( this instanceof jQuery.Event ) ) { 5419 return new jQuery.Event( src, props ); 5420 } 5421 5422 // Event object 5423 if ( src && src.type ) { 5424 this.originalEvent = src; 5425 this.type = src.type; 5426 5427 // Events bubbling up the document may have been marked as prevented 5428 // by a handler lower down the tree; reflect the correct value. 5429 this.isDefaultPrevented = src.defaultPrevented || 5430 src.defaultPrevented === undefined && 5431 5432 // Support: Android <=2.3 only 5433 src.returnValue === false ? 5434 returnTrue : 5435 returnFalse; 5436 5437 // Create target properties 5438 // Support: Safari <=6 - 7 only 5439 // Target should not be a text node (trac-504, trac-13143) 5440 this.target = ( src.target && src.target.nodeType === 3 ) ? 5441 src.target.parentNode : 5442 src.target; 5443 5444 this.currentTarget = src.currentTarget; 5445 this.relatedTarget = src.relatedTarget; 5446 5447 // Event type 5448 } else { 5449 this.type = src; 5450 } 5451 5452 // Put explicitly provided properties onto the event object 5453 if ( props ) { 5454 jQuery.extend( this, props ); 5455 } 5456 5457 // Create a timestamp if incoming event doesn't have one 5458 this.timeStamp = src && src.timeStamp || Date.now(); 5459 5460 // Mark it as fixed 5461 this[ jQuery.expando ] = true; 5462}; 5463 5464// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 5465// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 5466jQuery.Event.prototype = { 5467 constructor: jQuery.Event, 5468 isDefaultPrevented: returnFalse, 5469 isPropagationStopped: returnFalse, 5470 isImmediatePropagationStopped: returnFalse, 5471 isSimulated: false, 5472 5473 preventDefault: function() { 5474 var e = this.originalEvent; 5475 5476 this.isDefaultPrevented = returnTrue; 5477 5478 if ( e && !this.isSimulated ) { 5479 e.preventDefault(); 5480 } 5481 }, 5482 stopPropagation: function() { 5483 var e = this.originalEvent; 5484 5485 this.isPropagationStopped = returnTrue; 5486 5487 if ( e && !this.isSimulated ) { 5488 e.stopPropagation(); 5489 } 5490 }, 5491 stopImmediatePropagation: function() { 5492 var e = this.originalEvent; 5493 5494 this.isImmediatePropagationStopped = returnTrue; 5495 5496 if ( e && !this.isSimulated ) { 5497 e.stopImmediatePropagation(); 5498 } 5499 5500 this.stopPropagation(); 5501 } 5502}; 5503 5504// Includes all common event props including KeyEvent and MouseEvent specific props 5505jQuery.each( { 5506 altKey: true, 5507 bubbles: true, 5508 cancelable: true, 5509 changedTouches: true, 5510 ctrlKey: true, 5511 detail: true, 5512 eventPhase: true, 5513 metaKey: true, 5514 pageX: true, 5515 pageY: true, 5516 shiftKey: true, 5517 view: true, 5518 "char": true, 5519 code: true, 5520 charCode: true, 5521 key: true, 5522 keyCode: true, 5523 button: true, 5524 buttons: true, 5525 clientX: true, 5526 clientY: true, 5527 offsetX: true, 5528 offsetY: true, 5529 pointerId: true, 5530 pointerType: true, 5531 screenX: true, 5532 screenY: true, 5533 targetTouches: true, 5534 toElement: true, 5535 touches: true, 5536 which: true 5537}, jQuery.event.addProp ); 5538 5539jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 5540 5541 function focusMappedHandler( nativeEvent ) { 5542 if ( document.documentMode ) { 5543 5544 // Support: IE 11+ 5545 // Attach a single focusin/focusout handler on the document while someone wants 5546 // focus/blur. This is because the former are synchronous in IE while the latter 5547 // are async. In other browsers, all those handlers are invoked synchronously. 5548 5549 // `handle` from private data would already wrap the event, but we need 5550 // to change the `type` here. 5551 var handle = dataPriv.get( this, "handle" ), 5552 event = jQuery.event.fix( nativeEvent ); 5553 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 5554 event.isSimulated = true; 5555 5556 // First, handle focusin/focusout 5557 handle( nativeEvent ); 5558 5559 // ...then, handle focus/blur 5560 // 5561 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 5562 // invoking the handler at the lower level. 5563 if ( event.target === event.currentTarget ) { 5564 5565 // The setup part calls `leverageNative`, which, in turn, calls 5566 // `jQuery.event.add`, so event handle will already have been set 5567 // by this point. 5568 handle( event ); 5569 } 5570 } else { 5571 5572 // For non-IE browsers, attach a single capturing handler on the document 5573 // while someone wants focusin/focusout. 5574 jQuery.event.simulate( delegateType, nativeEvent.target, 5575 jQuery.event.fix( nativeEvent ) ); 5576 } 5577 } 5578 5579 jQuery.event.special[ type ] = { 5580 5581 // Utilize native event if possible so blur/focus sequence is correct 5582 setup: function() { 5583 5584 var attaches; 5585 5586 // Claim the first handler 5587 // dataPriv.set( this, "focus", ... ) 5588 // dataPriv.set( this, "blur", ... ) 5589 leverageNative( this, type, true ); 5590 5591 if ( document.documentMode ) { 5592 5593 // Support: IE 9 - 11+ 5594 // We use the same native handler for focusin & focus (and focusout & blur) 5595 // so we need to coordinate setup & teardown parts between those events. 5596 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 5597 attaches = dataPriv.get( this, delegateType ); 5598 if ( !attaches ) { 5599 this.addEventListener( delegateType, focusMappedHandler ); 5600 } 5601 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 5602 } else { 5603 5604 // Return false to allow normal processing in the caller 5605 return false; 5606 } 5607 }, 5608 trigger: function() { 5609 5610 // Force setup before trigger 5611 leverageNative( this, type ); 5612 5613 // Return non-false to allow normal event-path propagation 5614 return true; 5615 }, 5616 5617 teardown: function() { 5618 var attaches; 5619 5620 if ( document.documentMode ) { 5621 attaches = dataPriv.get( this, delegateType ) - 1; 5622 if ( !attaches ) { 5623 this.removeEventListener( delegateType, focusMappedHandler ); 5624 dataPriv.remove( this, delegateType ); 5625 } else { 5626 dataPriv.set( this, delegateType, attaches ); 5627 } 5628 } else { 5629 5630 // Return false to indicate standard teardown should be applied 5631 return false; 5632 } 5633 }, 5634 5635 // Suppress native focus or blur if we're currently inside 5636 // a leveraged native-event stack 5637 _default: function( event ) { 5638 return dataPriv.get( event.target, type ); 5639 }, 5640 5641 delegateType: delegateType 5642 }; 5643 5644 // Support: Firefox <=44 5645 // Firefox doesn't have focus(in | out) events 5646 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 5647 // 5648 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 5649 // focus(in | out) events fire after focus & blur events, 5650 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 5651 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 5652 // 5653 // Support: IE 9 - 11+ 5654 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 5655 // attach a single handler for both events in IE. 5656 jQuery.event.special[ delegateType ] = { 5657 setup: function() { 5658 5659 // Handle: regular nodes (via `this.ownerDocument`), window 5660 // (via `this.document`) & document (via `this`). 5661 var doc = this.ownerDocument || this.document || this, 5662 dataHolder = document.documentMode ? this : doc, 5663 attaches = dataPriv.get( dataHolder, delegateType ); 5664 5665 // Support: IE 9 - 11+ 5666 // We use the same native handler for focusin & focus (and focusout & blur) 5667 // so we need to coordinate setup & teardown parts between those events. 5668 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 5669 if ( !attaches ) { 5670 if ( document.documentMode ) { 5671 this.addEventListener( delegateType, focusMappedHandler ); 5672 } else { 5673 doc.addEventListener( type, focusMappedHandler, true ); 5674 } 5675 } 5676 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 5677 }, 5678 teardown: function() { 5679 var doc = this.ownerDocument || this.document || this, 5680 dataHolder = document.documentMode ? this : doc, 5681 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 5682 5683 if ( !attaches ) { 5684 if ( document.documentMode ) { 5685 this.removeEventListener( delegateType, focusMappedHandler ); 5686 } else { 5687 doc.removeEventListener( type, focusMappedHandler, true ); 5688 } 5689 dataPriv.remove( dataHolder, delegateType ); 5690 } else { 5691 dataPriv.set( dataHolder, delegateType, attaches ); 5692 } 5693 } 5694 }; 5695} ); 5696 5697// Create mouseenter/leave events using mouseover/out and event-time checks 5698// so that event delegation works in jQuery. 5699// Do the same for pointerenter/pointerleave and pointerover/pointerout 5700// 5701// Support: Safari 7 only 5702// Safari sends mouseenter too often; see: 5703// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 5704// for the description of the bug (it existed in older Chrome versions as well). 5705jQuery.each( { 5706 mouseenter: "mouseover", 5707 mouseleave: "mouseout", 5708 pointerenter: "pointerover", 5709 pointerleave: "pointerout" 5710}, function( orig, fix ) { 5711 jQuery.event.special[ orig ] = { 5712 delegateType: fix, 5713 bindType: fix, 5714 5715 handle: function( event ) { 5716 var ret, 5717 target = this, 5718 related = event.relatedTarget, 5719 handleObj = event.handleObj; 5720 5721 // For mouseenter/leave call the handler if related is outside the target. 5722 // NB: No relatedTarget if the mouse left/entered the browser window 5723 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 5724 event.type = handleObj.origType; 5725 ret = handleObj.handler.apply( this, arguments ); 5726 event.type = fix; 5727 } 5728 return ret; 5729 } 5730 }; 5731} ); 5732 5733jQuery.fn.extend( { 5734 5735 on: function( types, selector, data, fn ) { 5736 return on( this, types, selector, data, fn ); 5737 }, 5738 one: function( types, selector, data, fn ) { 5739 return on( this, types, selector, data, fn, 1 ); 5740 }, 5741 off: function( types, selector, fn ) { 5742 var handleObj, type; 5743 if ( types && types.preventDefault && types.handleObj ) { 5744 5745 // ( event ) dispatched jQuery.Event 5746 handleObj = types.handleObj; 5747 jQuery( types.delegateTarget ).off( 5748 handleObj.namespace ? 5749 handleObj.origType + "." + handleObj.namespace : 5750 handleObj.origType, 5751 handleObj.selector, 5752 handleObj.handler 5753 ); 5754 return this; 5755 } 5756 if ( typeof types === "object" ) { 5757 5758 // ( types-object [, selector] ) 5759 for ( type in types ) { 5760 this.off( type, selector, types[ type ] ); 5761 } 5762 return this; 5763 } 5764 if ( selector === false || typeof selector === "function" ) { 5765 5766 // ( types [, fn] ) 5767 fn = selector; 5768 selector = undefined; 5769 } 5770 if ( fn === false ) { 5771 fn = returnFalse; 5772 } 5773 return this.each( function() { 5774 jQuery.event.remove( this, types, fn, selector ); 5775 } ); 5776 } 5777} ); 5778 5779 5780var 5781 5782 // Support: IE <=10 - 11, Edge 12 - 13 only 5783 // In IE/Edge using regex groups here causes severe slowdowns. 5784 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 5785 rnoInnerhtml = /<script|<style|<link/i, 5786 5787 // checked="checked" or checked 5788 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 5789 5790 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 5791 5792// Prefer a tbody over its parent table for containing new rows 5793function manipulationTarget( elem, content ) { 5794 if ( nodeName( elem, "table" ) && 5795 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 5796 5797 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 5798 } 5799 5800 return elem; 5801} 5802 5803// Replace/restore the type attribute of script elements for safe DOM manipulation 5804function disableScript( elem ) { 5805 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 5806 return elem; 5807} 5808function restoreScript( elem ) { 5809 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 5810 elem.type = elem.type.slice( 5 ); 5811 } else { 5812 elem.removeAttribute( "type" ); 5813 } 5814 5815 return elem; 5816} 5817 5818function cloneCopyEvent( src, dest ) { 5819 var i, l, type, pdataOld, udataOld, udataCur, events; 5820 5821 if ( dest.nodeType !== 1 ) { 5822 return; 5823 } 5824 5825 // 1. Copy private data: events, handlers, etc. 5826 if ( dataPriv.hasData( src ) ) { 5827 pdataOld = dataPriv.get( src ); 5828 events = pdataOld.events; 5829 5830 if ( events ) { 5831 dataPriv.remove( dest, "handle events" ); 5832 5833 for ( type in events ) { 5834 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 5835 jQuery.event.add( dest, type, events[ type ][ i ] ); 5836 } 5837 } 5838 } 5839 } 5840 5841 // 2. Copy user data 5842 if ( dataUser.hasData( src ) ) { 5843 udataOld = dataUser.access( src ); 5844 udataCur = jQuery.extend( {}, udataOld ); 5845 5846 dataUser.set( dest, udataCur ); 5847 } 5848} 5849 5850// Fix IE bugs, see support tests 5851function fixInput( src, dest ) { 5852 var nodeName = dest.nodeName.toLowerCase(); 5853 5854 // Fails to persist the checked state of a cloned checkbox or radio button. 5855 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 5856 dest.checked = src.checked; 5857 5858 // Fails to return the selected option to the default selected state when cloning options 5859 } else if ( nodeName === "input" || nodeName === "textarea" ) { 5860 dest.defaultValue = src.defaultValue; 5861 } 5862} 5863 5864function domManip( collection, args, callback, ignored ) { 5865 5866 // Flatten any nested arrays 5867 args = flat( args ); 5868 5869 var fragment, first, scripts, hasScripts, node, doc, 5870 i = 0, 5871 l = collection.length, 5872 iNoClone = l - 1, 5873 value = args[ 0 ], 5874 valueIsFunction = isFunction( value ); 5875 5876 // We can't cloneNode fragments that contain checked, in WebKit 5877 if ( valueIsFunction || 5878 ( l > 1 && typeof value === "string" && 5879 !support.checkClone && rchecked.test( value ) ) ) { 5880 return collection.each( function( index ) { 5881 var self = collection.eq( index ); 5882 if ( valueIsFunction ) { 5883 args[ 0 ] = value.call( this, index, self.html() ); 5884 } 5885 domManip( self, args, callback, ignored ); 5886 } ); 5887 } 5888 5889 if ( l ) { 5890 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 5891 first = fragment.firstChild; 5892 5893 if ( fragment.childNodes.length === 1 ) { 5894 fragment = first; 5895 } 5896 5897 // Require either new content or an interest in ignored elements to invoke the callback 5898 if ( first || ignored ) { 5899 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 5900 hasScripts = scripts.length; 5901 5902 // Use the original fragment for the last item 5903 // instead of the first because it can end up 5904 // being emptied incorrectly in certain situations (trac-8070). 5905 for ( ; i < l; i++ ) { 5906 node = fragment; 5907 5908 if ( i !== iNoClone ) { 5909 node = jQuery.clone( node, true, true ); 5910 5911 // Keep references to cloned scripts for later restoration 5912 if ( hasScripts ) { 5913 5914 // Support: Android <=4.0 only, PhantomJS 1 only 5915 // push.apply(_, arraylike) throws on ancient WebKit 5916 jQuery.merge( scripts, getAll( node, "script" ) ); 5917 } 5918 } 5919 5920 callback.call( collection[ i ], node, i ); 5921 } 5922 5923 if ( hasScripts ) { 5924 doc = scripts[ scripts.length - 1 ].ownerDocument; 5925 5926 // Re-enable scripts 5927 jQuery.map( scripts, restoreScript ); 5928 5929 // Evaluate executable scripts on first document insertion 5930 for ( i = 0; i < hasScripts; i++ ) { 5931 node = scripts[ i ]; 5932 if ( rscriptType.test( node.type || "" ) && 5933 !dataPriv.access( node, "globalEval" ) && 5934 jQuery.contains( doc, node ) ) { 5935 5936 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 5937 5938 // Optional AJAX dependency, but won't run scripts if not present 5939 if ( jQuery._evalUrl && !node.noModule ) { 5940 jQuery._evalUrl( node.src, { 5941 nonce: node.nonce || node.getAttribute( "nonce" ) 5942 }, doc ); 5943 } 5944 } else { 5945 5946 // Unwrap a CDATA section containing script contents. This shouldn't be 5947 // needed as in XML documents they're already not visible when 5948 // inspecting element contents and in HTML documents they have no 5949 // meaning but we're preserving that logic for backwards compatibility. 5950 // This will be removed completely in 4.0. See gh-4904. 5951 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 5952 } 5953 } 5954 } 5955 } 5956 } 5957 } 5958 5959 return collection; 5960} 5961 5962function remove( elem, selector, keepData ) { 5963 var node, 5964 nodes = selector ? jQuery.filter( selector, elem ) : elem, 5965 i = 0; 5966 5967 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 5968 if ( !keepData && node.nodeType === 1 ) { 5969 jQuery.cleanData( getAll( node ) ); 5970 } 5971 5972 if ( node.parentNode ) { 5973 if ( keepData && isAttached( node ) ) { 5974 setGlobalEval( getAll( node, "script" ) ); 5975 } 5976 node.parentNode.removeChild( node ); 5977 } 5978 } 5979 5980 return elem; 5981} 5982 5983jQuery.extend( { 5984 htmlPrefilter: function( html ) { 5985 return html; 5986 }, 5987 5988 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 5989 var i, l, srcElements, destElements, 5990 clone = elem.cloneNode( true ), 5991 inPage = isAttached( elem ); 5992 5993 // Fix IE cloning issues 5994 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 5995 !jQuery.isXMLDoc( elem ) ) { 5996 5997 // We eschew jQuery#find here for performance reasons: 5998 // https://jsperf.com/getall-vs-sizzle/2 5999 destElements = getAll( clone ); 6000 srcElements = getAll( elem ); 6001 6002 for ( i = 0, l = srcElements.length; i < l; i++ ) { 6003 fixInput( srcElements[ i ], destElements[ i ] ); 6004 } 6005 } 6006 6007 // Copy the events from the original to the clone 6008 if ( dataAndEvents ) { 6009 if ( deepDataAndEvents ) { 6010 srcElements = srcElements || getAll( elem ); 6011 destElements = destElements || getAll( clone ); 6012 6013 for ( i = 0, l = srcElements.length; i < l; i++ ) { 6014 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 6015 } 6016 } else { 6017 cloneCopyEvent( elem, clone ); 6018 } 6019 } 6020 6021 // Preserve script evaluation history 6022 destElements = getAll( clone, "script" ); 6023 if ( destElements.length > 0 ) { 6024 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 6025 } 6026 6027 // Return the cloned set 6028 return clone; 6029 }, 6030 6031 cleanData: function( elems ) { 6032 var data, elem, type, 6033 special = jQuery.event.special, 6034 i = 0; 6035 6036 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 6037 if ( acceptData( elem ) ) { 6038 if ( ( data = elem[ dataPriv.expando ] ) ) { 6039 if ( data.events ) { 6040 for ( type in data.events ) { 6041 if ( special[ type ] ) { 6042 jQuery.event.remove( elem, type ); 6043 6044 // This is a shortcut to avoid jQuery.event.remove's overhead 6045 } else { 6046 jQuery.removeEvent( elem, type, data.handle ); 6047 } 6048 } 6049 } 6050
vendor: 1,119 bytes, lines 6051-6095
6051 // Support: Chrome <=35 - 45+ 6052 // Assign undefined instead of using delete, see Data#remove 6053 elem[ dataPriv.expando ] = undefined; 6054 } 6055 if ( elem[ dataUser.expando ] ) { 6056 6057 // Support: Chrome <=35 - 45+ 6058 // Assign undefined instead of using delete, see Data#remove 6059 elem[ dataUser.expando ] = undefined; 6060 } 6061 } 6062 } 6063 } 6064} ); 6065 6066jQuery.fn.extend( { 6067 detach: function( selector ) { 6068 return remove( this, selector, true ); 6069 }, 6070 6071 remove: function( selector ) { 6072 return remove( this, selector ); 6073 }, 6074 6075 text: function( value ) { 6076 return access( this, function( value ) { 6077 return value === undefined ? 6078 jQuery.text( this ) : 6079 this.empty().each( function() { 6080 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6081 this.textContent = value; 6082 } 6083 } ); 6084 }, null, value, arguments.length ); 6085 }, 6086 6087 append: function() { 6088 return domManip( this, arguments, function( elem ) { 6089 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6090 var target = manipulationTarget( this, elem ); 6091 target.appendChild( elem ); 6092 } 6093 } ); 6094 }, 6095
vendor: 58,446 bytes, lines 6096-8310
6096 prepend: function() { 6097 return domManip( this, arguments, function( elem ) { 6098 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6099 var target = manipulationTarget( this, elem ); 6100 target.insertBefore( elem, target.firstChild ); 6101 } 6102 } ); 6103 }, 6104 6105 before: function() { 6106 return domManip( this, arguments, function( elem ) { 6107 if ( this.parentNode ) { 6108 this.parentNode.insertBefore( elem, this ); 6109 } 6110 } ); 6111 }, 6112 6113 after: function() { 6114 return domManip( this, arguments, function( elem ) { 6115 if ( this.parentNode ) { 6116 this.parentNode.insertBefore( elem, this.nextSibling ); 6117 } 6118 } ); 6119 }, 6120 6121 empty: function() { 6122 var elem, 6123 i = 0; 6124 6125 for ( ; ( elem = this[ i ] ) != null; i++ ) { 6126 if ( elem.nodeType === 1 ) { 6127 6128 // Prevent memory leaks 6129 jQuery.cleanData( getAll( elem, false ) ); 6130 6131 // Remove any remaining nodes 6132 elem.textContent = ""; 6133 } 6134 } 6135 6136 return this; 6137 }, 6138 6139 clone: function( dataAndEvents, deepDataAndEvents ) { 6140 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 6141 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 6142 6143 return this.map( function() { 6144 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 6145 } ); 6146 }, 6147 6148 html: function( value ) { 6149 return access( this, function( value ) { 6150 var elem = this[ 0 ] || {}, 6151 i = 0, 6152 l = this.length; 6153 6154 if ( value === undefined && elem.nodeType === 1 ) { 6155 return elem.innerHTML; 6156 } 6157 6158 // See if we can take a shortcut and just use innerHTML 6159 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 6160 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 6161 6162 value = jQuery.htmlPrefilter( value ); 6163 6164 try { 6165 for ( ; i < l; i++ ) { 6166 elem = this[ i ] || {}; 6167 6168 // Remove element nodes and prevent memory leaks 6169 if ( elem.nodeType === 1 ) { 6170 jQuery.cleanData( getAll( elem, false ) ); 6171 elem.innerHTML = value; 6172 } 6173 } 6174 6175 elem = 0; 6176 6177 // If using innerHTML throws an exception, use the fallback method 6178 } catch ( e ) {} 6179 } 6180 6181 if ( elem ) { 6182 this.empty().append( value ); 6183 } 6184 }, null, value, arguments.length ); 6185 }, 6186 6187 replaceWith: function() { 6188 var ignored = []; 6189 6190 // Make the changes, replacing each non-ignored context element with the new content 6191 return domManip( this, arguments, function( elem ) { 6192 var parent = this.parentNode; 6193 6194 if ( jQuery.inArray( this, ignored ) < 0 ) { 6195 jQuery.cleanData( getAll( this ) ); 6196 if ( parent ) { 6197 parent.replaceChild( elem, this ); 6198 } 6199 } 6200 6201 // Force callback invocation 6202 }, ignored ); 6203 } 6204} ); 6205 6206jQuery.each( { 6207 appendTo: "append", 6208 prependTo: "prepend", 6209 insertBefore: "before", 6210 insertAfter: "after", 6211 replaceAll: "replaceWith" 6212}, function( name, original ) { 6213 jQuery.fn[ name ] = function( selector ) { 6214 var elems, 6215 ret = [], 6216 insert = jQuery( selector ), 6217 last = insert.length - 1, 6218 i = 0; 6219 6220 for ( ; i <= last; i++ ) { 6221 elems = i === last ? this : this.clone( true ); 6222 jQuery( insert[ i ] )[ original ]( elems ); 6223 6224 // Support: Android <=4.0 only, PhantomJS 1 only 6225 // .get() because push.apply(_, arraylike) throws on ancient WebKit 6226 push.apply( ret, elems.get() ); 6227 } 6228 6229 return this.pushStack( ret ); 6230 }; 6231} ); 6232var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 6233 6234var rcustomProp = /^--/; 6235 6236 6237var getStyles = function( elem ) { 6238 6239 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 6240 // IE throws on elements created in popups 6241 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 6242 var view = elem.ownerDocument.defaultView; 6243 6244 if ( !view || !view.opener ) { 6245 view = window; 6246 } 6247 6248 return view.getComputedStyle( elem ); 6249 }; 6250 6251var swap = function( elem, options, callback ) { 6252 var ret, name, 6253 old = {}; 6254 6255 // Remember the old values, and insert the new ones 6256 for ( name in options ) { 6257 old[ name ] = elem.style[ name ]; 6258 elem.style[ name ] = options[ name ]; 6259 } 6260 6261 ret = callback.call( elem ); 6262 6263 // Revert the old values 6264 for ( name in options ) { 6265 elem.style[ name ] = old[ name ]; 6266 } 6267 6268 return ret; 6269}; 6270 6271 6272var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 6273 6274 6275 6276( function() { 6277 6278 // Executing both pixelPosition & boxSizingReliable tests require only one layout 6279 // so they're executed at the same time to save the second computation. 6280 function computeStyleTests() { 6281 6282 // This is a singleton, we need to execute it only once 6283 if ( !div ) { 6284 return; 6285 } 6286 6287 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 6288 "margin-top:1px;padding:0;border:0"; 6289 div.style.cssText = 6290 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 6291 "margin:auto;border:1px;padding:1px;" + 6292 "width:60%;top:1%"; 6293 documentElement.appendChild( container ).appendChild( div ); 6294 6295 var divStyle = window.getComputedStyle( div ); 6296 pixelPositionVal = divStyle.top !== "1%"; 6297 6298 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 6299 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 6300 6301 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 6302 // Some styles come back with percentage values, even though they shouldn't 6303 div.style.right = "60%"; 6304 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 6305 6306 // Support: IE 9 - 11 only 6307 // Detect misreporting of content dimensions for box-sizing:border-box elements 6308 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 6309 6310 // Support: IE 9 only 6311 // Detect overflow:scroll screwiness (gh-3699) 6312 // Support: Chrome <=64 6313 // Don't get tricked when zoom affects offsetWidth (gh-4029) 6314 div.style.position = "absolute"; 6315 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 6316 6317 documentElement.removeChild( container ); 6318 6319 // Nullify the div so it wouldn't be stored in the memory and 6320 // it will also be a sign that checks already performed 6321 div = null; 6322 } 6323 6324 function roundPixelMeasures( measure ) { 6325 return Math.round( parseFloat( measure ) ); 6326 } 6327 6328 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 6329 reliableTrDimensionsVal, reliableMarginLeftVal, 6330 container = document.createElement( "div" ), 6331 div = document.createElement( "div" ); 6332 6333 // Finish early in limited (non-browser) environments 6334 if ( !div.style ) { 6335 return; 6336 } 6337 6338 // Support: IE <=9 - 11 only 6339 // Style of cloned element affects source element cloned (trac-8908) 6340 div.style.backgroundClip = "content-box"; 6341 div.cloneNode( true ).style.backgroundClip = ""; 6342 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 6343 6344 jQuery.extend( support, { 6345 boxSizingReliable: function() { 6346 computeStyleTests(); 6347 return boxSizingReliableVal; 6348 }, 6349 pixelBoxStyles: function() { 6350 computeStyleTests(); 6351 return pixelBoxStylesVal; 6352 }, 6353 pixelPosition: function() { 6354 computeStyleTests(); 6355 return pixelPositionVal; 6356 }, 6357 reliableMarginLeft: function() { 6358 computeStyleTests(); 6359 return reliableMarginLeftVal; 6360 }, 6361 scrollboxSize: function() { 6362 computeStyleTests(); 6363 return scrollboxSizeVal; 6364 }, 6365 6366 // Support: IE 9 - 11+, Edge 15 - 18+ 6367 // IE/Edge misreport `getComputedStyle` of table rows with width/height 6368 // set in CSS while `offset*` properties report correct values. 6369 // Behavior in IE 9 is more subtle than in newer versions & it passes 6370 // some versions of this test; make sure not to make it pass there! 6371 // 6372 // Support: Firefox 70+ 6373 // Only Firefox includes border widths 6374 // in computed dimensions. (gh-4529) 6375 reliableTrDimensions: function() { 6376 var table, tr, trChild, trStyle; 6377 if ( reliableTrDimensionsVal == null ) { 6378 table = document.createElement( "table" ); 6379 tr = document.createElement( "tr" ); 6380 trChild = document.createElement( "div" ); 6381 6382 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 6383 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 6384 6385 // Support: Chrome 86+ 6386 // Height set through cssText does not get applied. 6387 // Computed height then comes back as 0. 6388 tr.style.height = "1px"; 6389 trChild.style.height = "9px"; 6390 6391 // Support: Android 8 Chrome 86+ 6392 // In our bodyBackground.html iframe, 6393 // display for all div elements is set to "inline", 6394 // which causes a problem only in Android 8 Chrome 86. 6395 // Ensuring the div is `display: block` 6396 // gets around this issue. 6397 trChild.style.display = "block"; 6398 6399 documentElement 6400 .appendChild( table ) 6401 .appendChild( tr ) 6402 .appendChild( trChild ); 6403 6404 trStyle = window.getComputedStyle( tr ); 6405 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 6406 parseInt( trStyle.borderTopWidth, 10 ) + 6407 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 6408 6409 documentElement.removeChild( table ); 6410 } 6411 return reliableTrDimensionsVal; 6412 } 6413 } ); 6414} )(); 6415 6416 6417function curCSS( elem, name, computed ) { 6418 var width, minWidth, maxWidth, ret, 6419 isCustomProp = rcustomProp.test( name ), 6420 6421 // Support: Firefox 51+ 6422 // Retrieving style before computed somehow 6423 // fixes an issue with getting wrong values 6424 // on detached elements 6425 style = elem.style; 6426 6427 computed = computed || getStyles( elem ); 6428 6429 // getPropertyValue is needed for: 6430 // .css('filter') (IE 9 only, trac-12537) 6431 // .css('--customProperty) (gh-3144) 6432 if ( computed ) { 6433 6434 // Support: IE <=9 - 11+ 6435 // IE only supports `"float"` in `getPropertyValue`; in computed styles 6436 // it's only available as `"cssFloat"`. We no longer modify properties 6437 // sent to `.css()` apart from camelCasing, so we need to check both. 6438 // Normally, this would create difference in behavior: if 6439 // `getPropertyValue` returns an empty string, the value returned 6440 // by `.css()` would be `undefined`. This is usually the case for 6441 // disconnected elements. However, in IE even disconnected elements 6442 // with no styles return `"none"` for `getPropertyValue( "float" )` 6443 ret = computed.getPropertyValue( name ) || computed[ name ]; 6444 6445 if ( isCustomProp && ret ) { 6446 6447 // Support: Firefox 105+, Chrome <=105+ 6448 // Spec requires trimming whitespace for custom properties (gh-4926). 6449 // Firefox only trims leading whitespace. Chrome just collapses 6450 // both leading & trailing whitespace to a single space. 6451 // 6452 // Fall back to `undefined` if empty string returned. 6453 // This collapses a missing definition with property defined 6454 // and set to an empty string but there's no standard API 6455 // allowing us to differentiate them without a performance penalty 6456 // and returning `undefined` aligns with older jQuery. 6457 // 6458 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 6459 // as whitespace while CSS does not, but this is not a problem 6460 // because CSS preprocessing replaces them with U+000A LINE FEED 6461 // (which *is* CSS whitespace) 6462 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 6463 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 6464 } 6465 6466 if ( ret === "" && !isAttached( elem ) ) { 6467 ret = jQuery.style( elem, name ); 6468 } 6469 6470 // A tribute to the "awesome hack by Dean Edwards" 6471 // Android Browser returns percentage for some values, 6472 // but width seems to be reliably pixels. 6473 // This is against the CSSOM draft spec: 6474 // https://drafts.csswg.org/cssom/#resolved-values 6475 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 6476 6477 // Remember the original values 6478 width = style.width; 6479 minWidth = style.minWidth; 6480 maxWidth = style.maxWidth; 6481 6482 // Put in the new values to get a computed value out 6483 style.minWidth = style.maxWidth = style.width = ret; 6484 ret = computed.width; 6485 6486 // Revert the changed values 6487 style.width = width; 6488 style.minWidth = minWidth; 6489 style.maxWidth = maxWidth; 6490 } 6491 } 6492 6493 return ret !== undefined ? 6494 6495 // Support: IE <=9 - 11 only 6496 // IE returns zIndex value as an integer. 6497 ret + "" : 6498 ret; 6499} 6500 6501 6502function addGetHookIf( conditionFn, hookFn ) { 6503 6504 // Define the hook, we'll check on the first run if it's really needed. 6505 return { 6506 get: function() { 6507 if ( conditionFn() ) { 6508 6509 // Hook not needed (or it's not possible to use it due 6510 // to missing dependency), remove it. 6511 delete this.get; 6512 return; 6513 } 6514 6515 // Hook needed; redefine it so that the support test is not executed again. 6516 return ( this.get = hookFn ).apply( this, arguments ); 6517 } 6518 }; 6519} 6520 6521 6522var cssPrefixes = [ "Webkit", "Moz", "ms" ], 6523 emptyStyle = document.createElement( "div" ).style, 6524 vendorProps = {}; 6525 6526// Return a vendor-prefixed property or undefined 6527function vendorPropName( name ) { 6528 6529 // Check for vendor prefixed names 6530 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 6531 i = cssPrefixes.length; 6532 6533 while ( i-- ) { 6534 name = cssPrefixes[ i ] + capName; 6535 if ( name in emptyStyle ) { 6536 return name; 6537 } 6538 } 6539} 6540 6541// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 6542function finalPropName( name ) { 6543 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 6544 6545 if ( final ) { 6546 return final; 6547 } 6548 if ( name in emptyStyle ) { 6549 return name; 6550 } 6551 return vendorProps[ name ] = vendorPropName( name ) || name; 6552} 6553 6554 6555var 6556 6557 // Swappable if display is none or starts with table 6558 // except "table", "table-cell", or "table-caption" 6559 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 6560 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 6561 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 6562 cssNormalTransform = { 6563 letterSpacing: "0", 6564 fontWeight: "400" 6565 }; 6566 6567function setPositiveNumber( _elem, value, subtract ) { 6568 6569 // Any relative (+/-) values have already been 6570 // normalized at this point 6571 var matches = rcssNum.exec( value ); 6572 return matches ? 6573 6574 // Guard against undefined "subtract", e.g., when used as in cssHooks 6575 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 6576 value; 6577} 6578 6579function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 6580 var i = dimension === "width" ? 1 : 0, 6581 extra = 0, 6582 delta = 0, 6583 marginDelta = 0; 6584 6585 // Adjustment may not be necessary 6586 if ( box === ( isBorderBox ? "border" : "content" ) ) { 6587 return 0; 6588 } 6589 6590 for ( ; i < 4; i += 2 ) { 6591 6592 // Both box models exclude margin 6593 // Count margin delta separately to only add it after scroll gutter adjustment. 6594 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 6595 if ( box === "margin" ) { 6596 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 6597 } 6598 6599 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 6600 if ( !isBorderBox ) { 6601 6602 // Add padding 6603 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6604 6605 // For "border" or "margin", add border 6606 if ( box !== "padding" ) { 6607 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6608 6609 // But still keep track of it otherwise 6610 } else { 6611 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6612 } 6613 6614 // If we get here with a border-box (content + padding + border), we're seeking "content" or 6615 // "padding" or "margin" 6616 } else { 6617 6618 // For "content", subtract padding 6619 if ( box === "content" ) { 6620 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 6621 } 6622 6623 // For "content" or "padding", subtract border 6624 if ( box !== "margin" ) { 6625 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 6626 } 6627 } 6628 } 6629 6630 // Account for positive content-box scroll gutter when requested by providing computedVal 6631 if ( !isBorderBox && computedVal >= 0 ) { 6632 6633 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 6634 // Assuming integer scroll gutter, subtract the rest and round down 6635 delta += Math.max( 0, Math.ceil( 6636 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 6637 computedVal - 6638 delta - 6639 extra - 6640 0.5 6641 6642 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 6643 // Use an explicit zero to avoid NaN (gh-3964) 6644 ) ) || 0; 6645 } 6646 6647 return delta + marginDelta; 6648} 6649 6650function getWidthOrHeight( elem, dimension, extra ) { 6651 6652 // Start with computed style 6653 var styles = getStyles( elem ), 6654 6655 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 6656 // Fake content-box until we know it's needed to know the true value. 6657 boxSizingNeeded = !support.boxSizingReliable() || extra, 6658 isBorderBox = boxSizingNeeded && 6659 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 6660 valueIsBorderBox = isBorderBox, 6661 6662 val = curCSS( elem, dimension, styles ), 6663 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 6664 6665 // Support: Firefox <=54 6666 // Return a confounding non-pixel value or feign ignorance, as appropriate. 6667 if ( rnumnonpx.test( val ) ) { 6668 if ( !extra ) { 6669 return val; 6670 } 6671 val = "auto"; 6672 } 6673 6674 6675 // Support: IE 9 - 11 only 6676 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 6677 // In those cases, the computed value can be trusted to be border-box. 6678 if ( ( !support.boxSizingReliable() && isBorderBox || 6679 6680 // Support: IE 10 - 11+, Edge 15 - 18+ 6681 // IE/Edge misreport `getComputedStyle` of table rows with width/height 6682 // set in CSS while `offset*` properties report correct values. 6683 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 6684 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 6685 6686 // Fall back to offsetWidth/offsetHeight when value is "auto" 6687 // This happens for inline elements with no explicit setting (gh-3571) 6688 val === "auto" || 6689 6690 // Support: Android <=4.1 - 4.3 only 6691 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 6692 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 6693 6694 // Make sure the element is visible & connected 6695 elem.getClientRects().length ) { 6696 6697 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 6698 6699 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 6700 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 6701 // retrieved value as a content box dimension. 6702 valueIsBorderBox = offsetProp in elem; 6703 if ( valueIsBorderBox ) { 6704 val = elem[ offsetProp ]; 6705 } 6706 } 6707 6708 // Normalize "" and auto 6709 val = parseFloat( val ) || 0; 6710 6711 // Adjust for the element's box model 6712 return ( val + 6713 boxModelAdjustment( 6714 elem, 6715 dimension, 6716 extra || ( isBorderBox ? "border" : "content" ), 6717 valueIsBorderBox, 6718 styles, 6719 6720 // Provide the current computed size to request scroll gutter calculation (gh-3589) 6721 val 6722 ) 6723 ) + "px"; 6724} 6725 6726jQuery.extend( { 6727 6728 // Add in style property hooks for overriding the default 6729 // behavior of getting and setting a style property 6730 cssHooks: { 6731 opacity: { 6732 get: function( elem, computed ) { 6733 if ( computed ) { 6734 6735 // We should always get a number back from opacity 6736 var ret = curCSS( elem, "opacity" ); 6737 return ret === "" ? "1" : ret; 6738 } 6739 } 6740 } 6741 }, 6742 6743 // Don't automatically add "px" to these possibly-unitless properties 6744 cssNumber: { 6745 animationIterationCount: true, 6746 aspectRatio: true, 6747 borderImageSlice: true, 6748 columnCount: true, 6749 flexGrow: true, 6750 flexShrink: true, 6751 fontWeight: true, 6752 gridArea: true, 6753 gridColumn: true, 6754 gridColumnEnd: true, 6755 gridColumnStart: true, 6756 gridRow: true, 6757 gridRowEnd: true, 6758 gridRowStart: true, 6759 lineHeight: true, 6760 opacity: true, 6761 order: true, 6762 orphans: true, 6763 scale: true, 6764 widows: true, 6765 zIndex: true, 6766 zoom: true, 6767 6768 // SVG-related 6769 fillOpacity: true, 6770 floodOpacity: true, 6771 stopOpacity: true, 6772 strokeMiterlimit: true, 6773 strokeOpacity: true 6774 }, 6775 6776 // Add in properties whose names you wish to fix before 6777 // setting or getting the value 6778 cssProps: {}, 6779 6780 // Get and set the style property on a DOM Node 6781 style: function( elem, name, value, extra ) { 6782 6783 // Don't set styles on text and comment nodes 6784 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 6785 return; 6786 } 6787 6788 // Make sure that we're working with the right name 6789 var ret, type, hooks, 6790 origName = camelCase( name ), 6791 isCustomProp = rcustomProp.test( name ), 6792 style = elem.style; 6793 6794 // Make sure that we're working with the right name. We don't 6795 // want to query the value if it is a CSS custom property 6796 // since they are user-defined. 6797 if ( !isCustomProp ) { 6798 name = finalPropName( origName ); 6799 } 6800 6801 // Gets hook for the prefixed version, then unprefixed version 6802 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6803 6804 // Check if we're setting a value 6805 if ( value !== undefined ) { 6806 type = typeof value; 6807 6808 // Convert "+=" or "-=" to relative numbers (trac-7345) 6809 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 6810 value = adjustCSS( elem, name, ret ); 6811 6812 // Fixes bug trac-9237 6813 type = "number"; 6814 } 6815 6816 // Make sure that null and NaN values aren't set (trac-7116) 6817 if ( value == null || value !== value ) { 6818 return; 6819 } 6820 6821 // If a number was passed in, add the unit (except for certain CSS properties) 6822 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 6823 // "px" to a few hardcoded values. 6824 if ( type === "number" && !isCustomProp ) { 6825 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 6826 } 6827 6828 // background-* props affect original clone's values 6829 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 6830 style[ name ] = "inherit"; 6831 } 6832 6833 // If a hook was provided, use that value, otherwise just set the specified value 6834 if ( !hooks || !( "set" in hooks ) || 6835 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 6836 6837 if ( isCustomProp ) { 6838 style.setProperty( name, value ); 6839 } else { 6840 style[ name ] = value; 6841 } 6842 } 6843 6844 } else { 6845 6846 // If a hook was provided get the non-computed value from there 6847 if ( hooks && "get" in hooks && 6848 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 6849 6850 return ret; 6851 } 6852 6853 // Otherwise just get the value from the style object 6854 return style[ name ]; 6855 } 6856 }, 6857 6858 css: function( elem, name, extra, styles ) { 6859 var val, num, hooks, 6860 origName = camelCase( name ), 6861 isCustomProp = rcustomProp.test( name ); 6862 6863 // Make sure that we're working with the right name. We don't 6864 // want to modify the value if it is a CSS custom property 6865 // since they are user-defined. 6866 if ( !isCustomProp ) { 6867 name = finalPropName( origName ); 6868 } 6869 6870 // Try prefixed name followed by the unprefixed name 6871 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 6872 6873 // If a hook was provided get the computed value from there 6874 if ( hooks && "get" in hooks ) { 6875 val = hooks.get( elem, true, extra ); 6876 } 6877 6878 // Otherwise, if a way to get the computed value exists, use that 6879 if ( val === undefined ) { 6880 val = curCSS( elem, name, styles ); 6881 } 6882 6883 // Convert "normal" to computed value 6884 if ( val === "normal" && name in cssNormalTransform ) { 6885 val = cssNormalTransform[ name ]; 6886 } 6887 6888 // Make numeric if forced or a qualifier was provided and val looks numeric 6889 if ( extra === "" || extra ) { 6890 num = parseFloat( val ); 6891 return extra === true || isFinite( num ) ? num || 0 : val; 6892 } 6893 6894 return val; 6895 } 6896} ); 6897 6898jQuery.each( [ "height", "width" ], function( _i, dimension ) { 6899 jQuery.cssHooks[ dimension ] = { 6900 get: function( elem, computed, extra ) { 6901 if ( computed ) { 6902 6903 // Certain elements can have dimension info if we invisibly show them 6904 // but it must have a current display style that would benefit 6905 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 6906 6907 // Support: Safari 8+ 6908 // Table columns in Safari have non-zero offsetWidth & zero 6909 // getBoundingClientRect().width unless display is changed. 6910 // Support: IE <=11 only 6911 // Running getBoundingClientRect on a disconnected node 6912 // in IE throws an error. 6913 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 6914 swap( elem, cssShow, function() { 6915 return getWidthOrHeight( elem, dimension, extra ); 6916 } ) : 6917 getWidthOrHeight( elem, dimension, extra ); 6918 } 6919 }, 6920 6921 set: function( elem, value, extra ) { 6922 var matches, 6923 styles = getStyles( elem ), 6924 6925 // Only read styles.position if the test has a chance to fail 6926 // to avoid forcing a reflow. 6927 scrollboxSizeBuggy = !support.scrollboxSize() && 6928 styles.position === "absolute", 6929 6930 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 6931 boxSizingNeeded = scrollboxSizeBuggy || extra, 6932 isBorderBox = boxSizingNeeded && 6933 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 6934 subtract = extra ? 6935 boxModelAdjustment( 6936 elem, 6937 dimension, 6938 extra, 6939 isBorderBox, 6940 styles 6941 ) : 6942 0; 6943 6944 // Account for unreliable border-box dimensions by comparing offset* to computed and 6945 // faking a content-box to get border and padding (gh-3699) 6946 if ( isBorderBox && scrollboxSizeBuggy ) { 6947 subtract -= Math.ceil( 6948 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 6949 parseFloat( styles[ dimension ] ) - 6950 boxModelAdjustment( elem, dimension, "border", false, styles ) - 6951 0.5 6952 ); 6953 } 6954 6955 // Convert to pixels if value adjustment is needed 6956 if ( subtract && ( matches = rcssNum.exec( value ) ) && 6957 ( matches[ 3 ] || "px" ) !== "px" ) { 6958 6959 elem.style[ dimension ] = value; 6960 value = jQuery.css( elem, dimension ); 6961 } 6962 6963 return setPositiveNumber( elem, value, subtract ); 6964 } 6965 }; 6966} ); 6967 6968jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 6969 function( elem, computed ) { 6970 if ( computed ) { 6971 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 6972 elem.getBoundingClientRect().left - 6973 swap( elem, { marginLeft: 0 }, function() { 6974 return elem.getBoundingClientRect().left; 6975 } ) 6976 ) + "px"; 6977 } 6978 } 6979); 6980 6981// These hooks are used by animate to expand properties 6982jQuery.each( { 6983 margin: "", 6984 padding: "", 6985 border: "Width" 6986}, function( prefix, suffix ) { 6987 jQuery.cssHooks[ prefix + suffix ] = { 6988 expand: function( value ) { 6989 var i = 0, 6990 expanded = {}, 6991 6992 // Assumes a single number if not a string 6993 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 6994 6995 for ( ; i < 4; i++ ) { 6996 expanded[ prefix + cssExpand[ i ] + suffix ] = 6997 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 6998 } 6999 7000 return expanded; 7001 } 7002 }; 7003 7004 if ( prefix !== "margin" ) { 7005 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 7006 } 7007} ); 7008 7009jQuery.fn.extend( { 7010 css: function( name, value ) { 7011 return access( this, function( elem, name, value ) { 7012 var styles, len, 7013 map = {}, 7014 i = 0; 7015 7016 if ( Array.isArray( name ) ) { 7017 styles = getStyles( elem ); 7018 len = name.length; 7019 7020 for ( ; i < len; i++ ) { 7021 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 7022 } 7023 7024 return map; 7025 } 7026 7027 return value !== undefined ? 7028 jQuery.style( elem, name, value ) : 7029 jQuery.css( elem, name ); 7030 }, name, value, arguments.length > 1 ); 7031 } 7032} ); 7033 7034 7035function Tween( elem, options, prop, end, easing ) { 7036 return new Tween.prototype.init( elem, options, prop, end, easing ); 7037} 7038jQuery.Tween = Tween; 7039 7040Tween.prototype = { 7041 constructor: Tween, 7042 init: function( elem, options, prop, end, easing, unit ) { 7043 this.elem = elem; 7044 this.prop = prop; 7045 this.easing = easing || jQuery.easing._default; 7046 this.options = options; 7047 this.start = this.now = this.cur(); 7048 this.end = end; 7049 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 7050 }, 7051 cur: function() { 7052 var hooks = Tween.propHooks[ this.prop ]; 7053 7054 return hooks && hooks.get ? 7055 hooks.get( this ) : 7056 Tween.propHooks._default.get( this ); 7057 }, 7058 run: function( percent ) { 7059 var eased, 7060 hooks = Tween.propHooks[ this.prop ]; 7061 7062 if ( this.options.duration ) { 7063 this.pos = eased = jQuery.easing[ this.easing ]( 7064 percent, this.options.duration * percent, 0, 1, this.options.duration 7065 ); 7066 } else { 7067 this.pos = eased = percent; 7068 } 7069 this.now = ( this.end - this.start ) * eased + this.start; 7070 7071 if ( this.options.step ) { 7072 this.options.step.call( this.elem, this.now, this ); 7073 } 7074 7075 if ( hooks && hooks.set ) { 7076 hooks.set( this ); 7077 } else { 7078 Tween.propHooks._default.set( this ); 7079 } 7080 return this; 7081 } 7082}; 7083 7084Tween.prototype.init.prototype = Tween.prototype; 7085 7086Tween.propHooks = { 7087 _default: { 7088 get: function( tween ) { 7089 var result; 7090 7091 // Use a property on the element directly when it is not a DOM element, 7092 // or when there is no matching style property that exists. 7093 if ( tween.elem.nodeType !== 1 || 7094 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 7095 return tween.elem[ tween.prop ]; 7096 } 7097 7098 // Passing an empty string as a 3rd parameter to .css will automatically 7099 // attempt a parseFloat and fallback to a string if the parse fails. 7100 // Simple values such as "10px" are parsed to Float; 7101 // complex values such as "rotate(1rad)" are returned as-is. 7102 result = jQuery.css( tween.elem, tween.prop, "" ); 7103 7104 // Empty strings, null, undefined and "auto" are converted to 0. 7105 return !result || result === "auto" ? 0 : result; 7106 }, 7107 set: function( tween ) { 7108 7109 // Use step hook for back compat. 7110 // Use cssHook if its there. 7111 // Use .style if available and use plain properties where available. 7112 if ( jQuery.fx.step[ tween.prop ] ) { 7113 jQuery.fx.step[ tween.prop ]( tween ); 7114 } else if ( tween.elem.nodeType === 1 && ( 7115 jQuery.cssHooks[ tween.prop ] || 7116 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 7117 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 7118 } else { 7119 tween.elem[ tween.prop ] = tween.now; 7120 } 7121 } 7122 } 7123}; 7124 7125// Support: IE <=9 only 7126// Panic based approach to setting things on disconnected nodes 7127Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 7128 set: function( tween ) { 7129 if ( tween.elem.nodeType && tween.elem.parentNode ) { 7130 tween.elem[ tween.prop ] = tween.now; 7131 } 7132 } 7133}; 7134 7135jQuery.easing = { 7136 linear: function( p ) { 7137 return p; 7138 }, 7139 swing: function( p ) { 7140 return 0.5 - Math.cos( p * Math.PI ) / 2; 7141 }, 7142 _default: "swing" 7143}; 7144 7145jQuery.fx = Tween.prototype.init; 7146 7147// Back compat <1.8 extension point 7148jQuery.fx.step = {}; 7149 7150 7151 7152 7153var 7154 fxNow, inProgress, 7155 rfxtypes = /^(?:toggle|show|hide)$/, 7156 rrun = /queueHooks$/; 7157 7158function schedule() { 7159 if ( inProgress ) { 7160 if ( document.hidden === false && window.requestAnimationFrame ) { 7161 window.requestAnimationFrame( schedule ); 7162 } else { 7163 window.setTimeout( schedule, jQuery.fx.interval ); 7164 } 7165 7166 jQuery.fx.tick(); 7167 } 7168} 7169 7170// Animations created synchronously will run synchronously 7171function createFxNow() { 7172 window.setTimeout( function() { 7173 fxNow = undefined; 7174 } ); 7175 return ( fxNow = Date.now() ); 7176} 7177 7178// Generate parameters to create a standard animation 7179function genFx( type, includeWidth ) { 7180 var which, 7181 i = 0, 7182 attrs = { height: type }; 7183 7184 // If we include width, step value is 1 to do all cssExpand values, 7185 // otherwise step value is 2 to skip over Left and Right 7186 includeWidth = includeWidth ? 1 : 0; 7187 for ( ; i < 4; i += 2 - includeWidth ) { 7188 which = cssExpand[ i ]; 7189 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 7190 } 7191 7192 if ( includeWidth ) { 7193 attrs.opacity = attrs.width = type; 7194 } 7195 7196 return attrs; 7197} 7198 7199function createTween( value, prop, animation ) { 7200 var tween, 7201 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 7202 index = 0, 7203 length = collection.length; 7204 for ( ; index < length; index++ ) { 7205 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 7206 7207 // We're done with this property 7208 return tween; 7209 } 7210 } 7211} 7212 7213function defaultPrefilter( elem, props, opts ) { 7214 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 7215 isBox = "width" in props || "height" in props, 7216 anim = this, 7217 orig = {}, 7218 style = elem.style, 7219 hidden = elem.nodeType && isHiddenWithinTree( elem ), 7220 dataShow = dataPriv.get( elem, "fxshow" ); 7221 7222 // Queue-skipping animations hijack the fx hooks 7223 if ( !opts.queue ) { 7224 hooks = jQuery._queueHooks( elem, "fx" ); 7225 if ( hooks.unqueued == null ) { 7226 hooks.unqueued = 0; 7227 oldfire = hooks.empty.fire; 7228 hooks.empty.fire = function() { 7229 if ( !hooks.unqueued ) { 7230 oldfire(); 7231 } 7232 }; 7233 } 7234 hooks.unqueued++; 7235 7236 anim.always( function() { 7237 7238 // Ensure the complete handler is called before this completes 7239 anim.always( function() { 7240 hooks.unqueued--; 7241 if ( !jQuery.queue( elem, "fx" ).length ) { 7242 hooks.empty.fire(); 7243 } 7244 } ); 7245 } ); 7246 } 7247 7248 // Detect show/hide animations 7249 for ( prop in props ) { 7250 value = props[ prop ]; 7251 if ( rfxtypes.test( value ) ) { 7252 delete props[ prop ]; 7253 toggle = toggle || value === "toggle"; 7254 if ( value === ( hidden ? "hide" : "show" ) ) { 7255 7256 // Pretend to be hidden if this is a "show" and 7257 // there is still data from a stopped show/hide 7258 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 7259 hidden = true; 7260 7261 // Ignore all other no-op show/hide data 7262 } else { 7263 continue; 7264 } 7265 } 7266 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 7267 } 7268 } 7269 7270 // Bail out if this is a no-op like .hide().hide() 7271 propTween = !jQuery.isEmptyObject( props ); 7272 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 7273 return; 7274 } 7275 7276 // Restrict "overflow" and "display" styles during box animations 7277 if ( isBox && elem.nodeType === 1 ) { 7278 7279 // Support: IE <=9 - 11, Edge 12 - 15 7280 // Record all 3 overflow attributes because IE does not infer the shorthand 7281 // from identically-valued overflowX and overflowY and Edge just mirrors 7282 // the overflowX value there. 7283 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 7284 7285 // Identify a display type, preferring old show/hide data over the CSS cascade 7286 restoreDisplay = dataShow && dataShow.display; 7287 if ( restoreDisplay == null ) { 7288 restoreDisplay = dataPriv.get( elem, "display" ); 7289 } 7290 display = jQuery.css( elem, "display" ); 7291 if ( display === "none" ) { 7292 if ( restoreDisplay ) { 7293 display = restoreDisplay; 7294 } else { 7295 7296 // Get nonempty value(s) by temporarily forcing visibility 7297 showHide( [ elem ], true ); 7298 restoreDisplay = elem.style.display || restoreDisplay; 7299 display = jQuery.css( elem, "display" ); 7300 showHide( [ elem ] ); 7301 } 7302 } 7303 7304 // Animate inline elements as inline-block 7305 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 7306 if ( jQuery.css( elem, "float" ) === "none" ) { 7307 7308 // Restore the original display value at the end of pure show/hide animations 7309 if ( !propTween ) { 7310 anim.done( function() { 7311 style.display = restoreDisplay; 7312 } ); 7313 if ( restoreDisplay == null ) { 7314 display = style.display; 7315 restoreDisplay = display === "none" ? "" : display; 7316 } 7317 } 7318 style.display = "inline-block"; 7319 } 7320 } 7321 } 7322 7323 if ( opts.overflow ) { 7324 style.overflow = "hidden"; 7325 anim.always( function() { 7326 style.overflow = opts.overflow[ 0 ]; 7327 style.overflowX = opts.overflow[ 1 ]; 7328 style.overflowY = opts.overflow[ 2 ]; 7329 } ); 7330 } 7331 7332 // Implement show/hide animations 7333 propTween = false; 7334 for ( prop in orig ) { 7335 7336 // General show/hide setup for this element animation 7337 if ( !propTween ) { 7338 if ( dataShow ) { 7339 if ( "hidden" in dataShow ) { 7340 hidden = dataShow.hidden; 7341 } 7342 } else { 7343 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 7344 } 7345 7346 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 7347 if ( toggle ) { 7348 dataShow.hidden = !hidden; 7349 } 7350 7351 // Show elements before animating them 7352 if ( hidden ) { 7353 showHide( [ elem ], true ); 7354 } 7355 7356 /* eslint-disable no-loop-func */ 7357 7358 anim.done( function() { 7359 7360 /* eslint-enable no-loop-func */ 7361 7362 // The final step of a "hide" animation is actually hiding the element 7363 if ( !hidden ) { 7364 showHide( [ elem ] ); 7365 } 7366 dataPriv.remove( elem, "fxshow" ); 7367 for ( prop in orig ) { 7368 jQuery.style( elem, prop, orig[ prop ] ); 7369 } 7370 } ); 7371 } 7372 7373 // Per-property setup 7374 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 7375 if ( !( prop in dataShow ) ) { 7376 dataShow[ prop ] = propTween.start; 7377 if ( hidden ) { 7378 propTween.end = propTween.start; 7379 propTween.start = 0; 7380 } 7381 } 7382 } 7383} 7384 7385function propFilter( props, specialEasing ) { 7386 var index, name, easing, value, hooks; 7387 7388 // camelCase, specialEasing and expand cssHook pass 7389 for ( index in props ) { 7390 name = camelCase( index ); 7391 easing = specialEasing[ name ]; 7392 value = props[ index ]; 7393 if ( Array.isArray( value ) ) { 7394 easing = value[ 1 ]; 7395 value = props[ index ] = value[ 0 ]; 7396 } 7397 7398 if ( index !== name ) { 7399 props[ name ] = value; 7400 delete props[ index ]; 7401 } 7402 7403 hooks = jQuery.cssHooks[ name ]; 7404 if ( hooks && "expand" in hooks ) { 7405 value = hooks.expand( value ); 7406 delete props[ name ]; 7407 7408 // Not quite $.extend, this won't overwrite existing keys. 7409 // Reusing 'index' because we have the correct "name" 7410 for ( index in value ) { 7411 if ( !( index in props ) ) { 7412 props[ index ] = value[ index ]; 7413 specialEasing[ index ] = easing; 7414 } 7415 } 7416 } else { 7417 specialEasing[ name ] = easing; 7418 } 7419 } 7420} 7421 7422function Animation( elem, properties, options ) { 7423 var result, 7424 stopped, 7425 index = 0, 7426 length = Animation.prefilters.length, 7427 deferred = jQuery.Deferred().always( function() { 7428 7429 // Don't match elem in the :animated selector 7430 delete tick.elem; 7431 } ), 7432 tick = function() { 7433 if ( stopped ) { 7434 return false; 7435 } 7436 var currentTime = fxNow || createFxNow(), 7437 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 7438 7439 // Support: Android 2.3 only 7440 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 7441 temp = remaining / animation.duration || 0, 7442 percent = 1 - temp, 7443 index = 0, 7444 length = animation.tweens.length; 7445 7446 for ( ; index < length; index++ ) { 7447 animation.tweens[ index ].run( percent ); 7448 } 7449 7450 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 7451 7452 // If there's more to do, yield 7453 if ( percent < 1 && length ) { 7454 return remaining; 7455 } 7456 7457 // If this was an empty animation, synthesize a final progress notification 7458 if ( !length ) { 7459 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 7460 } 7461 7462 // Resolve the animation and report its conclusion 7463 deferred.resolveWith( elem, [ animation ] ); 7464 return false; 7465 }, 7466 animation = deferred.promise( { 7467 elem: elem, 7468 props: jQuery.extend( {}, properties ), 7469 opts: jQuery.extend( true, { 7470 specialEasing: {}, 7471 easing: jQuery.easing._default 7472 }, options ), 7473 originalProperties: properties, 7474 originalOptions: options, 7475 startTime: fxNow || createFxNow(), 7476 duration: options.duration, 7477 tweens: [], 7478 createTween: function( prop, end ) { 7479 var tween = jQuery.Tween( elem, animation.opts, prop, end, 7480 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 7481 animation.tweens.push( tween ); 7482 return tween; 7483 }, 7484 stop: function( gotoEnd ) { 7485 var index = 0, 7486 7487 // If we are going to the end, we want to run all the tweens 7488 // otherwise we skip this part 7489 length = gotoEnd ? animation.tweens.length : 0; 7490 if ( stopped ) { 7491 return this; 7492 } 7493 stopped = true; 7494 for ( ; index < length; index++ ) { 7495 animation.tweens[ index ].run( 1 ); 7496 } 7497 7498 // Resolve when we played the last frame; otherwise, reject 7499 if ( gotoEnd ) { 7500 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 7501 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 7502 } else { 7503 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 7504 } 7505 return this; 7506 } 7507 } ), 7508 props = animation.props; 7509 7510 propFilter( props, animation.opts.specialEasing ); 7511 7512 for ( ; index < length; index++ ) { 7513 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 7514 if ( result ) { 7515 if ( isFunction( result.stop ) ) { 7516 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 7517 result.stop.bind( result ); 7518 } 7519 return result; 7520 } 7521 } 7522 7523 jQuery.map( props, createTween, animation ); 7524 7525 if ( isFunction( animation.opts.start ) ) { 7526 animation.opts.start.call( elem, animation ); 7527 } 7528 7529 // Attach callbacks from options 7530 animation 7531 .progress( animation.opts.progress ) 7532 .done( animation.opts.done, animation.opts.complete ) 7533 .fail( animation.opts.fail ) 7534 .always( animation.opts.always ); 7535 7536 jQuery.fx.timer( 7537 jQuery.extend( tick, { 7538 elem: elem, 7539 anim: animation, 7540 queue: animation.opts.queue 7541 } ) 7542 ); 7543 7544 return animation; 7545} 7546 7547jQuery.Animation = jQuery.extend( Animation, { 7548 7549 tweeners: { 7550 "*": [ function( prop, value ) { 7551 var tween = this.createTween( prop, value ); 7552 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 7553 return tween; 7554 } ] 7555 }, 7556 7557 tweener: function( props, callback ) { 7558 if ( isFunction( props ) ) { 7559 callback = props; 7560 props = [ "*" ]; 7561 } else { 7562 props = props.match( rnothtmlwhite ); 7563 } 7564 7565 var prop, 7566 index = 0, 7567 length = props.length; 7568 7569 for ( ; index < length; index++ ) { 7570 prop = props[ index ]; 7571 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 7572 Animation.tweeners[ prop ].unshift( callback ); 7573 } 7574 }, 7575 7576 prefilters: [ defaultPrefilter ], 7577 7578 prefilter: function( callback, prepend ) { 7579 if ( prepend ) { 7580 Animation.prefilters.unshift( callback ); 7581 } else { 7582 Animation.prefilters.push( callback ); 7583 } 7584 } 7585} ); 7586 7587jQuery.speed = function( speed, easing, fn ) { 7588 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 7589 complete: fn || !fn && easing || 7590 isFunction( speed ) && speed, 7591 duration: speed, 7592 easing: fn && easing || easing && !isFunction( easing ) && easing 7593 }; 7594 7595 // Go to the end state if fx are off 7596 if ( jQuery.fx.off ) { 7597 opt.duration = 0; 7598 7599 } else { 7600 if ( typeof opt.duration !== "number" ) { 7601 if ( opt.duration in jQuery.fx.speeds ) { 7602 opt.duration = jQuery.fx.speeds[ opt.duration ]; 7603 7604 } else { 7605 opt.duration = jQuery.fx.speeds._default; 7606 } 7607 } 7608 } 7609 7610 // Normalize opt.queue - true/undefined/null -> "fx" 7611 if ( opt.queue == null || opt.queue === true ) { 7612 opt.queue = "fx"; 7613 } 7614 7615 // Queueing 7616 opt.old = opt.complete; 7617 7618 opt.complete = function() { 7619 if ( isFunction( opt.old ) ) { 7620 opt.old.call( this ); 7621 } 7622 7623 if ( opt.queue ) { 7624 jQuery.dequeue( this, opt.queue ); 7625 } 7626 }; 7627 7628 return opt; 7629}; 7630 7631jQuery.fn.extend( { 7632 fadeTo: function( speed, to, easing, callback ) { 7633 7634 // Show any hidden elements after setting opacity to 0 7635 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 7636 7637 // Animate to the value specified 7638 .end().animate( { opacity: to }, speed, easing, callback ); 7639 }, 7640 animate: function( prop, speed, easing, callback ) { 7641 var empty = jQuery.isEmptyObject( prop ), 7642 optall = jQuery.speed( speed, easing, callback ), 7643 doAnimation = function() { 7644 7645 // Operate on a copy of prop so per-property easing won't be lost 7646 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 7647 7648 // Empty animations, or finishing resolves immediately 7649 if ( empty || dataPriv.get( this, "finish" ) ) { 7650 anim.stop( true ); 7651 } 7652 }; 7653 7654 doAnimation.finish = doAnimation; 7655 7656 return empty || optall.queue === false ? 7657 this.each( doAnimation ) : 7658 this.queue( optall.queue, doAnimation ); 7659 }, 7660 stop: function( type, clearQueue, gotoEnd ) { 7661 var stopQueue = function( hooks ) { 7662 var stop = hooks.stop; 7663 delete hooks.stop; 7664 stop( gotoEnd ); 7665 }; 7666 7667 if ( typeof type !== "string" ) { 7668 gotoEnd = clearQueue; 7669 clearQueue = type; 7670 type = undefined; 7671 } 7672 if ( clearQueue ) { 7673 this.queue( type || "fx", [] ); 7674 } 7675 7676 return this.each( function() { 7677 var dequeue = true, 7678 index = type != null && type + "queueHooks", 7679 timers = jQuery.timers, 7680 data = dataPriv.get( this ); 7681 7682 if ( index ) { 7683 if ( data[ index ] && data[ index ].stop ) { 7684 stopQueue( data[ index ] ); 7685 } 7686 } else { 7687 for ( index in data ) { 7688 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 7689 stopQueue( data[ index ] ); 7690 } 7691 } 7692 } 7693 7694 for ( index = timers.length; index--; ) { 7695 if ( timers[ index ].elem === this && 7696 ( type == null || timers[ index ].queue === type ) ) { 7697 7698 timers[ index ].anim.stop( gotoEnd ); 7699 dequeue = false; 7700 timers.splice( index, 1 ); 7701 } 7702 } 7703 7704 // Start the next in the queue if the last step wasn't forced. 7705 // Timers currently will call their complete callbacks, which 7706 // will dequeue but only if they were gotoEnd. 7707 if ( dequeue || !gotoEnd ) { 7708 jQuery.dequeue( this, type ); 7709 } 7710 } ); 7711 }, 7712 finish: function( type ) { 7713 if ( type !== false ) { 7714 type = type || "fx"; 7715 } 7716 return this.each( function() { 7717 var index, 7718 data = dataPriv.get( this ), 7719 queue = data[ type + "queue" ], 7720 hooks = data[ type + "queueHooks" ], 7721 timers = jQuery.timers, 7722 length = queue ? queue.length : 0; 7723 7724 // Enable finishing flag on private data 7725 data.finish = true; 7726 7727 // Empty the queue first 7728 jQuery.queue( this, type, [] ); 7729 7730 if ( hooks && hooks.stop ) { 7731 hooks.stop.call( this, true ); 7732 } 7733 7734 // Look for any active animations, and finish them 7735 for ( index = timers.length; index--; ) { 7736 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 7737 timers[ index ].anim.stop( true ); 7738 timers.splice( index, 1 ); 7739 } 7740 } 7741 7742 // Look for any animations in the old queue and finish them 7743 for ( index = 0; index < length; index++ ) { 7744 if ( queue[ index ] && queue[ index ].finish ) { 7745 queue[ index ].finish.call( this ); 7746 } 7747 } 7748 7749 // Turn off finishing flag 7750 delete data.finish; 7751 } ); 7752 } 7753} ); 7754 7755jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 7756 var cssFn = jQuery.fn[ name ]; 7757 jQuery.fn[ name ] = function( speed, easing, callback ) { 7758 return speed == null || typeof speed === "boolean" ? 7759 cssFn.apply( this, arguments ) : 7760 this.animate( genFx( name, true ), speed, easing, callback ); 7761 }; 7762} ); 7763 7764// Generate shortcuts for custom animations 7765jQuery.each( { 7766 slideDown: genFx( "show" ), 7767 slideUp: genFx( "hide" ), 7768 slideToggle: genFx( "toggle" ), 7769 fadeIn: { opacity: "show" }, 7770 fadeOut: { opacity: "hide" }, 7771 fadeToggle: { opacity: "toggle" } 7772}, function( name, props ) { 7773 jQuery.fn[ name ] = function( speed, easing, callback ) { 7774 return this.animate( props, speed, easing, callback ); 7775 }; 7776} ); 7777 7778jQuery.timers = []; 7779jQuery.fx.tick = function() { 7780 var timer, 7781 i = 0, 7782 timers = jQuery.timers; 7783 7784 fxNow = Date.now(); 7785 7786 for ( ; i < timers.length; i++ ) { 7787 timer = timers[ i ]; 7788 7789 // Run the timer and safely remove it when done (allowing for external removal) 7790 if ( !timer() && timers[ i ] === timer ) { 7791 timers.splice( i--, 1 ); 7792 } 7793 } 7794 7795 if ( !timers.length ) { 7796 jQuery.fx.stop(); 7797 } 7798 fxNow = undefined; 7799}; 7800 7801jQuery.fx.timer = function( timer ) { 7802 jQuery.timers.push( timer ); 7803 jQuery.fx.start(); 7804}; 7805 7806jQuery.fx.interval = 13; 7807jQuery.fx.start = function() { 7808 if ( inProgress ) { 7809 return; 7810 } 7811 7812 inProgress = true; 7813 schedule(); 7814}; 7815 7816jQuery.fx.stop = function() { 7817 inProgress = null; 7818}; 7819 7820jQuery.fx.speeds = { 7821 slow: 600, 7822 fast: 200, 7823 7824 // Default speed 7825 _default: 400 7826}; 7827 7828 7829// Based off of the plugin by Clint Helfers, with permission. 7830jQuery.fn.delay = function( time, type ) { 7831 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 7832 type = type || "fx"; 7833 7834 return this.queue( type, function( next, hooks ) { 7835 var timeout = window.setTimeout( next, time ); 7836 hooks.stop = function() { 7837 window.clearTimeout( timeout ); 7838 }; 7839 } ); 7840}; 7841 7842 7843( function() { 7844 var input = document.createElement( "input" ), 7845 select = document.createElement( "select" ), 7846 opt = select.appendChild( document.createElement( "option" ) ); 7847 7848 input.type = "checkbox"; 7849 7850 // Support: Android <=4.3 only 7851 // Default value for a checkbox should be "on" 7852 support.checkOn = input.value !== ""; 7853 7854 // Support: IE <=11 only 7855 // Must access selectedIndex to make default options select 7856 support.optSelected = opt.selected; 7857 7858 // Support: IE <=11 only 7859 // An input loses its value after becoming a radio 7860 input = document.createElement( "input" ); 7861 input.value = "t"; 7862 input.type = "radio"; 7863 support.radioValue = input.value === "t"; 7864} )(); 7865 7866 7867var boolHook, 7868 attrHandle = jQuery.expr.attrHandle; 7869 7870jQuery.fn.extend( { 7871 attr: function( name, value ) { 7872 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 7873 }, 7874 7875 removeAttr: function( name ) { 7876 return this.each( function() { 7877 jQuery.removeAttr( this, name ); 7878 } ); 7879 } 7880} ); 7881 7882jQuery.extend( { 7883 attr: function( elem, name, value ) { 7884 var ret, hooks, 7885 nType = elem.nodeType; 7886 7887 // Don't get/set attributes on text, comment and attribute nodes 7888 if ( nType === 3 || nType === 8 || nType === 2 ) { 7889 return; 7890 } 7891 7892 // Fallback to prop when attributes are not supported 7893 if ( typeof elem.getAttribute === "undefined" ) { 7894 return jQuery.prop( elem, name, value ); 7895 } 7896 7897 // Attribute hooks are determined by the lowercase version 7898 // Grab necessary hook if one is defined 7899 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 7900 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 7901 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 7902 } 7903 7904 if ( value !== undefined ) { 7905 if ( value === null ) { 7906 jQuery.removeAttr( elem, name ); 7907 return; 7908 } 7909 7910 if ( hooks && "set" in hooks && 7911 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 7912 return ret; 7913 } 7914 7915 elem.setAttribute( name, value + "" ); 7916 return value; 7917 } 7918 7919 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 7920 return ret; 7921 } 7922 7923 ret = jQuery.find.attr( elem, name ); 7924 7925 // Non-existent attributes return null, we normalize to undefined 7926 return ret == null ? undefined : ret; 7927 }, 7928 7929 attrHooks: { 7930 type: { 7931 set: function( elem, value ) { 7932 if ( !support.radioValue && value === "radio" && 7933 nodeName( elem, "input" ) ) { 7934 var val = elem.value; 7935 elem.setAttribute( "type", value ); 7936 if ( val ) { 7937 elem.value = val; 7938 } 7939 return value; 7940 } 7941 } 7942 } 7943 }, 7944 7945 removeAttr: function( elem, value ) { 7946 var name, 7947 i = 0, 7948 7949 // Attribute names can contain non-HTML whitespace characters 7950 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 7951 attrNames = value && value.match( rnothtmlwhite ); 7952 7953 if ( attrNames && elem.nodeType === 1 ) { 7954 while ( ( name = attrNames[ i++ ] ) ) { 7955 elem.removeAttribute( name ); 7956 } 7957 } 7958 } 7959} ); 7960 7961// Hooks for boolean attributes 7962boolHook = { 7963 set: function( elem, value, name ) { 7964 if ( value === false ) { 7965 7966 // Remove boolean attributes when set to false 7967 jQuery.removeAttr( elem, name ); 7968 } else { 7969 elem.setAttribute( name, name ); 7970 } 7971 return name; 7972 } 7973}; 7974 7975jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 7976 var getter = attrHandle[ name ] || jQuery.find.attr; 7977 7978 attrHandle[ name ] = function( elem, name, isXML ) { 7979 var ret, handle, 7980 lowercaseName = name.toLowerCase(); 7981 7982 if ( !isXML ) { 7983 7984 // Avoid an infinite loop by temporarily removing this function from the getter 7985 handle = attrHandle[ lowercaseName ]; 7986 attrHandle[ lowercaseName ] = ret; 7987 ret = getter( elem, name, isXML ) != null ? 7988 lowercaseName : 7989 null; 7990 attrHandle[ lowercaseName ] = handle; 7991 } 7992 return ret; 7993 }; 7994} ); 7995 7996 7997 7998 7999var rfocusable = /^(?:input|select|textarea|button)$/i, 8000 rclickable = /^(?:a|area)$/i; 8001 8002jQuery.fn.extend( { 8003 prop: function( name, value ) { 8004 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 8005 }, 8006 8007 removeProp: function( name ) { 8008 return this.each( function() { 8009 delete this[ jQuery.propFix[ name ] || name ]; 8010 } ); 8011 } 8012} ); 8013 8014jQuery.extend( { 8015 prop: function( elem, name, value ) { 8016 var ret, hooks, 8017 nType = elem.nodeType; 8018 8019 // Don't get/set properties on text, comment and attribute nodes 8020 if ( nType === 3 || nType === 8 || nType === 2 ) { 8021 return; 8022 } 8023 8024 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 8025 8026 // Fix name and attach hooks 8027 name = jQuery.propFix[ name ] || name; 8028 hooks = jQuery.propHooks[ name ]; 8029 } 8030 8031 if ( value !== undefined ) { 8032 if ( hooks && "set" in hooks && 8033 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 8034 return ret; 8035 } 8036 8037 return ( elem[ name ] = value ); 8038 } 8039 8040 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 8041 return ret; 8042 } 8043 8044 return elem[ name ]; 8045 }, 8046 8047 propHooks: { 8048 tabIndex: { 8049 get: function( elem ) { 8050 8051 // Support: IE <=9 - 11 only 8052 // elem.tabIndex doesn't always return the 8053 // correct value when it hasn't been explicitly set 8054 // Use proper attribute retrieval (trac-12072) 8055 var tabindex = jQuery.find.attr( elem, "tabindex" ); 8056 8057 if ( tabindex ) { 8058 return parseInt( tabindex, 10 ); 8059 } 8060 8061 if ( 8062 rfocusable.test( elem.nodeName ) || 8063 rclickable.test( elem.nodeName ) && 8064 elem.href 8065 ) { 8066 return 0; 8067 } 8068 8069 return -1; 8070 } 8071 } 8072 }, 8073 8074 propFix: { 8075 "for": "htmlFor", 8076 "class": "className" 8077 } 8078} ); 8079 8080// Support: IE <=11 only 8081// Accessing the selectedIndex property 8082// forces the browser to respect setting selected 8083// on the option 8084// The getter ensures a default option is selected 8085// when in an optgroup 8086// eslint rule "no-unused-expressions" is disabled for this code 8087// since it considers such accessions noop 8088if ( !support.optSelected ) { 8089 jQuery.propHooks.selected = { 8090 get: function( elem ) { 8091 8092 /* eslint no-unused-expressions: "off" */ 8093 8094 var parent = elem.parentNode; 8095 if ( parent && parent.parentNode ) { 8096 parent.parentNode.selectedIndex; 8097 } 8098 return null; 8099 }, 8100 set: function( elem ) { 8101 8102 /* eslint no-unused-expressions: "off" */ 8103 8104 var parent = elem.parentNode; 8105 if ( parent ) { 8106 parent.selectedIndex; 8107 8108 if ( parent.parentNode ) { 8109 parent.parentNode.selectedIndex; 8110 } 8111 } 8112 } 8113 }; 8114} 8115 8116jQuery.each( [ 8117 "tabIndex", 8118 "readOnly", 8119 "maxLength", 8120 "cellSpacing", 8121 "cellPadding", 8122 "rowSpan", 8123 "colSpan", 8124 "useMap", 8125 "frameBorder", 8126 "contentEditable" 8127], function() { 8128 jQuery.propFix[ this.toLowerCase() ] = this; 8129} ); 8130 8131 8132 8133 8134 // Strip and collapse whitespace according to HTML spec 8135 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 8136 function stripAndCollapse( value ) { 8137 var tokens = value.match( rnothtmlwhite ) || []; 8138 return tokens.join( " " ); 8139 } 8140 8141 8142function getClass( elem ) { 8143 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 8144} 8145 8146function classesToArray( value ) { 8147 if ( Array.isArray( value ) ) { 8148 return value; 8149 } 8150 if ( typeof value === "string" ) { 8151 return value.match( rnothtmlwhite ) || []; 8152 } 8153 return []; 8154} 8155 8156jQuery.fn.extend( { 8157 addClass: function( value ) { 8158 var classNames, cur, curValue, className, i, finalValue; 8159 8160 if ( isFunction( value ) ) { 8161 return this.each( function( j ) { 8162 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 8163 } ); 8164 } 8165 8166 classNames = classesToArray( value ); 8167 8168 if ( classNames.length ) { 8169 return this.each( function() { 8170 curValue = getClass( this ); 8171 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 8172 8173 if ( cur ) { 8174 for ( i = 0; i < classNames.length; i++ ) { 8175 className = classNames[ i ]; 8176 if ( cur.indexOf( " " + className + " " ) < 0 ) { 8177 cur += className + " "; 8178 } 8179 } 8180 8181 // Only assign if different to avoid unneeded rendering. 8182 finalValue = stripAndCollapse( cur ); 8183 if ( curValue !== finalValue ) { 8184 this.setAttribute( "class", finalValue ); 8185 } 8186 } 8187 } ); 8188 } 8189 8190 return this; 8191 }, 8192 8193 removeClass: function( value ) { 8194 var classNames, cur, curValue, className, i, finalValue; 8195 8196 if ( isFunction( value ) ) { 8197 return this.each( function( j ) { 8198 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 8199 } ); 8200 } 8201 8202 if ( !arguments.length ) { 8203 return this.attr( "class", "" ); 8204 } 8205 8206 classNames = classesToArray( value ); 8207 8208 if ( classNames.length ) { 8209 return this.each( function() { 8210 curValue = getClass( this ); 8211 8212 // This expression is here for better compressibility (see addClass) 8213 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 8214 8215 if ( cur ) { 8216 for ( i = 0; i < classNames.length; i++ ) { 8217 className = classNames[ i ]; 8218 8219 // Remove *all* instances 8220 while ( cur.indexOf( " " + className + " " ) > -1 ) { 8221 cur = cur.replace( " " + className + " ", " " ); 8222 } 8223 } 8224 8225 // Only assign if different to avoid unneeded rendering. 8226 finalValue = stripAndCollapse( cur ); 8227 if ( curValue !== finalValue ) { 8228 this.setAttribute( "class", finalValue ); 8229 } 8230 } 8231 } ); 8232 } 8233 8234 return this; 8235 }, 8236 8237 toggleClass: function( value, stateVal ) { 8238 var classNames, className, i, self, 8239 type = typeof value, 8240 isValidValue = type === "string" || Array.isArray( value ); 8241 8242 if ( isFunction( value ) ) { 8243 return this.each( function( i ) { 8244 jQuery( this ).toggleClass( 8245 value.call( this, i, getClass( this ), stateVal ), 8246 stateVal 8247 ); 8248 } ); 8249 } 8250 8251 if ( typeof stateVal === "boolean" && isValidValue ) { 8252 return stateVal ? this.addClass( value ) : this.removeClass( value ); 8253 } 8254 8255 classNames = classesToArray( value ); 8256 8257 return this.each( function() { 8258 if ( isValidValue ) { 8259 8260 // Toggle individual class names 8261 self = jQuery( this ); 8262 8263 for ( i = 0; i < classNames.length; i++ ) { 8264 className = classNames[ i ]; 8265 8266 // Check each className given, space separated list 8267 if ( self.hasClass( className ) ) { 8268 self.removeClass( className ); 8269 } else { 8270 self.addClass( className ); 8271 } 8272 } 8273 8274 // Toggle whole class name 8275 } else if ( value === undefined || type === "boolean" ) { 8276 className = getClass( this ); 8277 if ( className ) { 8278 8279 // Store className if set 8280 dataPriv.set( this, "__className__", className ); 8281 } 8282 8283 // If the element has a class name or if we're passed `false`, 8284 // then remove the whole classname (if there was one, the above saved it). 8285 // Otherwise bring back whatever was previously saved (if anything), 8286 // falling back to the empty string if nothing was stored. 8287 if ( this.setAttribute ) { 8288 this.setAttribute( "class", 8289 className || value === false ? 8290 "" : 8291 dataPriv.get( this, "__className__" ) || "" 8292 ); 8293 } 8294 } 8295 } ); 8296 }, 8297 8298 hasClass: function( selector ) { 8299 var className, elem, 8300 i = 0; 8301 8302 className = " " + selector + " "; 8303 while ( ( elem = this[ i++ ] ) ) { 8304 if ( elem.nodeType === 1 && 8305 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 8306 return true; 8307 } 8308 } 8309 8310 return false;
vendor: 1,385 bytes, lines 8311-8380
8311 } 8312} ); 8313 8314 8315 8316 8317var rreturn = /\r/g; 8318 8319jQuery.fn.extend( { 8320 val: function( value ) { 8321 var hooks, ret, valueIsFunction, 8322 elem = this[ 0 ]; 8323 8324 if ( !arguments.length ) { 8325 if ( elem ) { 8326 hooks = jQuery.valHooks[ elem.type ] || 8327 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 8328 8329 if ( hooks && 8330 "get" in hooks && 8331 ( ret = hooks.get( elem, "value" ) ) !== undefined 8332 ) { 8333 return ret; 8334 } 8335 8336 ret = elem.value; 8337 8338 // Handle most common string cases 8339 if ( typeof ret === "string" ) { 8340 return ret.replace( rreturn, "" ); 8341 } 8342 8343 // Handle cases where value is null/undef or number 8344 return ret == null ? "" : ret; 8345 } 8346 8347 return; 8348 } 8349 8350 valueIsFunction = isFunction( value ); 8351 8352 return this.each( function( i ) { 8353 var val; 8354 8355 if ( this.nodeType !== 1 ) { 8356 return; 8357 } 8358 8359 if ( valueIsFunction ) { 8360 val = value.call( this, i, jQuery( this ).val() ); 8361 } else { 8362 val = value; 8363 } 8364 8365 // Treat null/undefined as ""; convert numbers to string 8366 if ( val == null ) { 8367 val = ""; 8368 8369 } else if ( typeof val === "number" ) { 8370 val += ""; 8371 8372 } else if ( Array.isArray( val ) ) { 8373 val = jQuery.map( val, function( value ) { 8374 return value == null ? "" : value + ""; 8375 } ); 8376 } 8377 8378 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 8379 8380 // If set returns undefined, fall back to normal setting
vendor: 43,419 bytes, lines 8381-10070
8381 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 8382 this.value = val; 8383 } 8384 } ); 8385 } 8386} ); 8387 8388jQuery.extend( { 8389 valHooks: { 8390 option: { 8391 get: function( elem ) { 8392 8393 var val = jQuery.find.attr( elem, "value" ); 8394 return val != null ? 8395 val : 8396 8397 // Support: IE <=10 - 11 only 8398 // option.text throws exceptions (trac-14686, trac-14858) 8399 // Strip and collapse whitespace 8400 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 8401 stripAndCollapse( jQuery.text( elem ) ); 8402 } 8403 }, 8404 select: { 8405 get: function( elem ) { 8406 var value, option, i, 8407 options = elem.options, 8408 index = elem.selectedIndex, 8409 one = elem.type === "select-one", 8410 values = one ? null : [], 8411 max = one ? index + 1 : options.length; 8412 8413 if ( index < 0 ) { 8414 i = max; 8415 8416 } else { 8417 i = one ? index : 0; 8418 } 8419 8420 // Loop through all the selected options 8421 for ( ; i < max; i++ ) { 8422 option = options[ i ]; 8423 8424 // Support: IE <=9 only 8425 // IE8-9 doesn't update selected after form reset (trac-2551) 8426 if ( ( option.selected || i === index ) && 8427 8428 // Don't return options that are disabled or in a disabled optgroup 8429 !option.disabled && 8430 ( !option.parentNode.disabled || 8431 !nodeName( option.parentNode, "optgroup" ) ) ) { 8432 8433 // Get the specific value for the option 8434 value = jQuery( option ).val(); 8435 8436 // We don't need an array for one selects 8437 if ( one ) { 8438 return value; 8439 } 8440 8441 // Multi-Selects return an array 8442 values.push( value ); 8443 } 8444 } 8445 8446 return values; 8447 }, 8448 8449 set: function( elem, value ) { 8450 var optionSet, option, 8451 options = elem.options, 8452 values = jQuery.makeArray( value ), 8453 i = options.length; 8454 8455 while ( i-- ) { 8456 option = options[ i ]; 8457 8458 /* eslint-disable no-cond-assign */ 8459 8460 if ( option.selected = 8461 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 8462 ) { 8463 optionSet = true; 8464 } 8465 8466 /* eslint-enable no-cond-assign */ 8467 } 8468 8469 // Force browsers to behave consistently when non-matching value is set 8470 if ( !optionSet ) { 8471 elem.selectedIndex = -1; 8472 } 8473 return values; 8474 } 8475 } 8476 } 8477} ); 8478 8479// Radios and checkboxes getter/setter 8480jQuery.each( [ "radio", "checkbox" ], function() { 8481 jQuery.valHooks[ this ] = { 8482 set: function( elem, value ) { 8483 if ( Array.isArray( value ) ) { 8484 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 8485 } 8486 } 8487 }; 8488 if ( !support.checkOn ) { 8489 jQuery.valHooks[ this ].get = function( elem ) { 8490 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 8491 }; 8492 } 8493} ); 8494 8495 8496 8497 8498// Return jQuery for attributes-only inclusion 8499var location = window.location; 8500 8501var nonce = { guid: Date.now() }; 8502 8503var rquery = ( /\?/ ); 8504 8505 8506 8507// Cross-browser xml parsing 8508jQuery.parseXML = function( data ) { 8509 var xml, parserErrorElem; 8510 if ( !data || typeof data !== "string" ) { 8511 return null; 8512 } 8513 8514 // Support: IE 9 - 11 only 8515 // IE throws on parseFromString with invalid input. 8516 try { 8517 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 8518 } catch ( e ) {} 8519 8520 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 8521 if ( !xml || parserErrorElem ) { 8522 jQuery.error( "Invalid XML: " + ( 8523 parserErrorElem ? 8524 jQuery.map( parserErrorElem.childNodes, function( el ) { 8525 return el.textContent; 8526 } ).join( "\n" ) : 8527 data 8528 ) ); 8529 } 8530 return xml; 8531}; 8532 8533 8534var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 8535 stopPropagationCallback = function( e ) { 8536 e.stopPropagation(); 8537 }; 8538 8539jQuery.extend( jQuery.event, { 8540 8541 trigger: function( event, data, elem, onlyHandlers ) { 8542 8543 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 8544 eventPath = [ elem || document ], 8545 type = hasOwn.call( event, "type" ) ? event.type : event, 8546 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 8547 8548 cur = lastElement = tmp = elem = elem || document; 8549 8550 // Don't do events on text and comment nodes 8551 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 8552 return; 8553 } 8554 8555 // focus/blur morphs to focusin/out; ensure we're not firing them right now 8556 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 8557 return; 8558 } 8559 8560 if ( type.indexOf( "." ) > -1 ) { 8561 8562 // Namespaced trigger; create a regexp to match event type in handle() 8563 namespaces = type.split( "." ); 8564 type = namespaces.shift(); 8565 namespaces.sort(); 8566 } 8567 ontype = type.indexOf( ":" ) < 0 && "on" + type; 8568 8569 // Caller can pass in a jQuery.Event object, Object, or just an event type string 8570 event = event[ jQuery.expando ] ? 8571 event : 8572 new jQuery.Event( type, typeof event === "object" && event ); 8573 8574 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 8575 event.isTrigger = onlyHandlers ? 2 : 3; 8576 event.namespace = namespaces.join( "." ); 8577 event.rnamespace = event.namespace ? 8578 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 8579 null; 8580 8581 // Clean up the event in case it is being reused 8582 event.result = undefined; 8583 if ( !event.target ) { 8584 event.target = elem; 8585 } 8586 8587 // Clone any incoming data and prepend the event, creating the handler arg list 8588 data = data == null ? 8589 [ event ] : 8590 jQuery.makeArray( data, [ event ] ); 8591 8592 // Allow special events to draw outside the lines 8593 special = jQuery.event.special[ type ] || {}; 8594 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 8595 return; 8596 } 8597 8598 // Determine event propagation path in advance, per W3C events spec (trac-9951) 8599 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 8600 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 8601 8602 bubbleType = special.delegateType || type; 8603 if ( !rfocusMorph.test( bubbleType + type ) ) { 8604 cur = cur.parentNode; 8605 } 8606 for ( ; cur; cur = cur.parentNode ) { 8607 eventPath.push( cur ); 8608 tmp = cur; 8609 } 8610 8611 // Only add window if we got to document (e.g., not plain obj or detached DOM) 8612 if ( tmp === ( elem.ownerDocument || document ) ) { 8613 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 8614 } 8615 } 8616 8617 // Fire handlers on the event path 8618 i = 0; 8619 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 8620 lastElement = cur; 8621 event.type = i > 1 ? 8622 bubbleType : 8623 special.bindType || type; 8624 8625 // jQuery handler 8626 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 8627 dataPriv.get( cur, "handle" ); 8628 if ( handle ) { 8629 handle.apply( cur, data ); 8630 } 8631 8632 // Native handler 8633 handle = ontype && cur[ ontype ]; 8634 if ( handle && handle.apply && acceptData( cur ) ) { 8635 event.result = handle.apply( cur, data ); 8636 if ( event.result === false ) { 8637 event.preventDefault(); 8638 } 8639 } 8640 } 8641 event.type = type; 8642 8643 // If nobody prevented the default action, do it now 8644 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 8645 8646 if ( ( !special._default || 8647 special._default.apply( eventPath.pop(), data ) === false ) && 8648 acceptData( elem ) ) { 8649 8650 // Call a native DOM method on the target with the same name as the event. 8651 // Don't do default actions on window, that's where global variables be (trac-6170) 8652 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 8653 8654 // Don't re-trigger an onFOO event when we call its FOO() method 8655 tmp = elem[ ontype ]; 8656 8657 if ( tmp ) { 8658 elem[ ontype ] = null; 8659 } 8660 8661 // Prevent re-triggering of the same event, since we already bubbled it above 8662 jQuery.event.triggered = type; 8663 8664 if ( event.isPropagationStopped() ) { 8665 lastElement.addEventListener( type, stopPropagationCallback ); 8666 } 8667 8668 elem[ type ](); 8669 8670 if ( event.isPropagationStopped() ) { 8671 lastElement.removeEventListener( type, stopPropagationCallback ); 8672 } 8673 8674 jQuery.event.triggered = undefined; 8675 8676 if ( tmp ) { 8677 elem[ ontype ] = tmp; 8678 } 8679 } 8680 } 8681 } 8682 8683 return event.result; 8684 }, 8685 8686 // Piggyback on a donor event to simulate a different one 8687 // Used only for `focus(in | out)` events 8688 simulate: function( type, elem, event ) { 8689 var e = jQuery.extend( 8690 new jQuery.Event(), 8691 event, 8692 { 8693 type: type, 8694 isSimulated: true 8695 } 8696 ); 8697 8698 jQuery.event.trigger( e, null, elem ); 8699 } 8700 8701} ); 8702 8703jQuery.fn.extend( { 8704 8705 trigger: function( type, data ) { 8706 return this.each( function() { 8707 jQuery.event.trigger( type, data, this ); 8708 } ); 8709 }, 8710 triggerHandler: function( type, data ) { 8711 var elem = this[ 0 ]; 8712 if ( elem ) { 8713 return jQuery.event.trigger( type, data, elem, true ); 8714 } 8715 } 8716} ); 8717 8718 8719var 8720 rbracket = /\[\]$/, 8721 rCRLF = /\r?\n/g, 8722 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 8723 rsubmittable = /^(?:input|select|textarea|keygen)/i; 8724 8725function buildParams( prefix, obj, traditional, add ) { 8726 var name; 8727 8728 if ( Array.isArray( obj ) ) { 8729 8730 // Serialize array item. 8731 jQuery.each( obj, function( i, v ) { 8732 if ( traditional || rbracket.test( prefix ) ) { 8733 8734 // Treat each array item as a scalar. 8735 add( prefix, v ); 8736 8737 } else { 8738 8739 // Item is non-scalar (array or object), encode its numeric index. 8740 buildParams( 8741 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 8742 v, 8743 traditional, 8744 add 8745 ); 8746 } 8747 } ); 8748 8749 } else if ( !traditional && toType( obj ) === "object" ) { 8750 8751 // Serialize object item. 8752 for ( name in obj ) { 8753 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 8754 } 8755 8756 } else { 8757 8758 // Serialize scalar item. 8759 add( prefix, obj ); 8760 } 8761} 8762 8763// Serialize an array of form elements or a set of 8764// key/values into a query string 8765jQuery.param = function( a, traditional ) { 8766 var prefix, 8767 s = [], 8768 add = function( key, valueOrFunction ) { 8769 8770 // If value is a function, invoke it and use its return value 8771 var value = isFunction( valueOrFunction ) ? 8772 valueOrFunction() : 8773 valueOrFunction; 8774 8775 s[ s.length ] = encodeURIComponent( key ) + "=" + 8776 encodeURIComponent( value == null ? "" : value ); 8777 }; 8778 8779 if ( a == null ) { 8780 return ""; 8781 } 8782 8783 // If an array was passed in, assume that it is an array of form elements. 8784 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 8785 8786 // Serialize the form elements 8787 jQuery.each( a, function() { 8788 add( this.name, this.value ); 8789 } ); 8790 8791 } else { 8792 8793 // If traditional, encode the "old" way (the way 1.3.2 or older 8794 // did it), otherwise encode params recursively. 8795 for ( prefix in a ) { 8796 buildParams( prefix, a[ prefix ], traditional, add ); 8797 } 8798 } 8799 8800 // Return the resulting serialization 8801 return s.join( "&" ); 8802}; 8803 8804jQuery.fn.extend( { 8805 serialize: function() { 8806 return jQuery.param( this.serializeArray() ); 8807 }, 8808 serializeArray: function() { 8809 return this.map( function() { 8810 8811 // Can add propHook for "elements" to filter or add form elements 8812 var elements = jQuery.prop( this, "elements" ); 8813 return elements ? jQuery.makeArray( elements ) : this; 8814 } ).filter( function() { 8815 var type = this.type; 8816 8817 // Use .is( ":disabled" ) so that fieldset[disabled] works 8818 return this.name && !jQuery( this ).is( ":disabled" ) && 8819 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 8820 ( this.checked || !rcheckableType.test( type ) ); 8821 } ).map( function( _i, elem ) { 8822 var val = jQuery( this ).val(); 8823 8824 if ( val == null ) { 8825 return null; 8826 } 8827 8828 if ( Array.isArray( val ) ) { 8829 return jQuery.map( val, function( val ) { 8830 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8831 } ); 8832 } 8833 8834 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 8835 } ).get(); 8836 } 8837} ); 8838 8839 8840var 8841 r20 = /%20/g, 8842 rhash = /#.*$/, 8843 rantiCache = /([?&])_=[^&]*/, 8844 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 8845 8846 // trac-7653, trac-8125, trac-8152: local protocol detection 8847 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 8848 rnoContent = /^(?:GET|HEAD)$/, 8849 rprotocol = /^\/\//, 8850 8851 /* Prefilters 8852 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 8853 * 2) These are called: 8854 * - BEFORE asking for a transport 8855 * - AFTER param serialization (s.data is a string if s.processData is true) 8856 * 3) key is the dataType 8857 * 4) the catchall symbol "*" can be used 8858 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 8859 */ 8860 prefilters = {}, 8861 8862 /* Transports bindings 8863 * 1) key is the dataType 8864 * 2) the catchall symbol "*" can be used 8865 * 3) selection will start with transport dataType and THEN go to "*" if needed 8866 */ 8867 transports = {}, 8868 8869 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 8870 allTypes = "*/".concat( "*" ), 8871 8872 // Anchor tag for parsing the document origin 8873 originAnchor = document.createElement( "a" ); 8874 8875originAnchor.href = location.href; 8876 8877// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 8878function addToPrefiltersOrTransports( structure ) { 8879 8880 // dataTypeExpression is optional and defaults to "*" 8881 return function( dataTypeExpression, func ) { 8882 8883 if ( typeof dataTypeExpression !== "string" ) { 8884 func = dataTypeExpression; 8885 dataTypeExpression = "*"; 8886 } 8887 8888 var dataType, 8889 i = 0, 8890 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 8891 8892 if ( isFunction( func ) ) { 8893 8894 // For each dataType in the dataTypeExpression 8895 while ( ( dataType = dataTypes[ i++ ] ) ) { 8896 8897 // Prepend if requested 8898 if ( dataType[ 0 ] === "+" ) { 8899 dataType = dataType.slice( 1 ) || "*"; 8900 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 8901 8902 // Otherwise append 8903 } else { 8904 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 8905 } 8906 } 8907 } 8908 }; 8909} 8910 8911// Base inspection function for prefilters and transports 8912function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 8913 8914 var inspected = {}, 8915 seekingTransport = ( structure === transports ); 8916 8917 function inspect( dataType ) { 8918 var selected; 8919 inspected[ dataType ] = true; 8920 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 8921 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 8922 if ( typeof dataTypeOrTransport === "string" && 8923 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 8924 8925 options.dataTypes.unshift( dataTypeOrTransport ); 8926 inspect( dataTypeOrTransport ); 8927 return false; 8928 } else if ( seekingTransport ) { 8929 return !( selected = dataTypeOrTransport ); 8930 } 8931 } ); 8932 return selected; 8933 } 8934 8935 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 8936} 8937 8938// A special extend for ajax options 8939// that takes "flat" options (not to be deep extended) 8940// Fixes trac-9887 8941function ajaxExtend( target, src ) { 8942 var key, deep, 8943 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 8944 8945 for ( key in src ) { 8946 if ( src[ key ] !== undefined ) { 8947 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 8948 } 8949 } 8950 if ( deep ) { 8951 jQuery.extend( true, target, deep ); 8952 } 8953 8954 return target; 8955} 8956 8957/* Handles responses to an ajax request: 8958 * - finds the right dataType (mediates between content-type and expected dataType) 8959 * - returns the corresponding response 8960 */ 8961function ajaxHandleResponses( s, jqXHR, responses ) { 8962 8963 var ct, type, finalDataType, firstDataType, 8964 contents = s.contents, 8965 dataTypes = s.dataTypes; 8966 8967 // Remove auto dataType and get content-type in the process 8968 while ( dataTypes[ 0 ] === "*" ) { 8969 dataTypes.shift(); 8970 if ( ct === undefined ) { 8971 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 8972 } 8973 } 8974 8975 // Check if we're dealing with a known content-type 8976 if ( ct ) { 8977 for ( type in contents ) { 8978 if ( contents[ type ] && contents[ type ].test( ct ) ) { 8979 dataTypes.unshift( type ); 8980 break; 8981 } 8982 } 8983 } 8984 8985 // Check to see if we have a response for the expected dataType 8986 if ( dataTypes[ 0 ] in responses ) { 8987 finalDataType = dataTypes[ 0 ]; 8988 } else { 8989 8990 // Try convertible dataTypes 8991 for ( type in responses ) { 8992 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 8993 finalDataType = type; 8994 break; 8995 } 8996 if ( !firstDataType ) { 8997 firstDataType = type; 8998 } 8999 } 9000 9001 // Or just use first one 9002 finalDataType = finalDataType || firstDataType; 9003 } 9004 9005 // If we found a dataType 9006 // We add the dataType to the list if needed 9007 // and return the corresponding response 9008 if ( finalDataType ) { 9009 if ( finalDataType !== dataTypes[ 0 ] ) { 9010 dataTypes.unshift( finalDataType ); 9011 } 9012 return responses[ finalDataType ]; 9013 } 9014} 9015 9016/* Chain conversions given the request and the original response 9017 * Also sets the responseXXX fields on the jqXHR instance 9018 */ 9019function ajaxConvert( s, response, jqXHR, isSuccess ) { 9020 var conv2, current, conv, tmp, prev, 9021 converters = {}, 9022 9023 // Work with a copy of dataTypes in case we need to modify it for conversion 9024 dataTypes = s.dataTypes.slice(); 9025 9026 // Create converters map with lowercased keys 9027 if ( dataTypes[ 1 ] ) { 9028 for ( conv in s.converters ) { 9029 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 9030 } 9031 } 9032 9033 current = dataTypes.shift(); 9034 9035 // Convert to each sequential dataType 9036 while ( current ) { 9037 9038 if ( s.responseFields[ current ] ) { 9039 jqXHR[ s.responseFields[ current ] ] = response; 9040 } 9041 9042 // Apply the dataFilter if provided 9043 if ( !prev && isSuccess && s.dataFilter ) { 9044 response = s.dataFilter( response, s.dataType ); 9045 } 9046 9047 prev = current; 9048 current = dataTypes.shift(); 9049 9050 if ( current ) { 9051 9052 // There's only work to do if current dataType is non-auto 9053 if ( current === "*" ) { 9054 9055 current = prev; 9056 9057 // Convert response if prev dataType is non-auto and differs from current 9058 } else if ( prev !== "*" && prev !== current ) { 9059 9060 // Seek a direct converter 9061 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 9062 9063 // If none found, seek a pair 9064 if ( !conv ) { 9065 for ( conv2 in converters ) { 9066 9067 // If conv2 outputs current 9068 tmp = conv2.split( " " ); 9069 if ( tmp[ 1 ] === current ) { 9070 9071 // If prev can be converted to accepted input 9072 conv = converters[ prev + " " + tmp[ 0 ] ] || 9073 converters[ "* " + tmp[ 0 ] ]; 9074 if ( conv ) { 9075 9076 // Condense equivalence converters 9077 if ( conv === true ) { 9078 conv = converters[ conv2 ]; 9079 9080 // Otherwise, insert the intermediate dataType 9081 } else if ( converters[ conv2 ] !== true ) { 9082 current = tmp[ 0 ]; 9083 dataTypes.unshift( tmp[ 1 ] ); 9084 } 9085 break; 9086 } 9087 } 9088 } 9089 } 9090 9091 // Apply converter (if not an equivalence) 9092 if ( conv !== true ) { 9093 9094 // Unless errors are allowed to bubble, catch and return them 9095 if ( conv && s.throws ) { 9096 response = conv( response ); 9097 } else { 9098 try { 9099 response = conv( response ); 9100 } catch ( e ) { 9101 return { 9102 state: "parsererror", 9103 error: conv ? e : "No conversion from " + prev + " to " + current 9104 }; 9105 } 9106 } 9107 } 9108 } 9109 } 9110 } 9111 9112 return { state: "success", data: response }; 9113} 9114 9115jQuery.extend( { 9116 9117 // Counter for holding the number of active queries 9118 active: 0, 9119 9120 // Last-Modified header cache for next request 9121 lastModified: {}, 9122 etag: {}, 9123 9124 ajaxSettings: { 9125 url: location.href, 9126 type: "GET", 9127 isLocal: rlocalProtocol.test( location.protocol ), 9128 global: true, 9129 processData: true, 9130 async: true, 9131 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 9132 9133 /* 9134 timeout: 0, 9135 data: null, 9136 dataType: null, 9137 username: null, 9138 password: null, 9139 cache: null, 9140 throws: false, 9141 traditional: false, 9142 headers: {}, 9143 */ 9144 9145 accepts: { 9146 "*": allTypes, 9147 text: "text/plain", 9148 html: "text/html", 9149 xml: "application/xml, text/xml", 9150 json: "application/json, text/javascript" 9151 }, 9152 9153 contents: { 9154 xml: /\bxml\b/, 9155 html: /\bhtml/, 9156 json: /\bjson\b/ 9157 }, 9158 9159 responseFields: { 9160 xml: "responseXML", 9161 text: "responseText", 9162 json: "responseJSON" 9163 }, 9164 9165 // Data converters 9166 // Keys separate source (or catchall "*") and destination types with a single space 9167 converters: { 9168 9169 // Convert anything to text 9170 "* text": String, 9171 9172 // Text to html (true = no transformation) 9173 "text html": true, 9174 9175 // Evaluate text as a json expression 9176 "text json": JSON.parse, 9177 9178 // Parse text as xml 9179 "text xml": jQuery.parseXML 9180 }, 9181 9182 // For options that shouldn't be deep extended: 9183 // you can add your own custom options here if 9184 // and when you create one that shouldn't be 9185 // deep extended (see ajaxExtend) 9186 flatOptions: { 9187 url: true, 9188 context: true 9189 } 9190 }, 9191 9192 // Creates a full fledged settings object into target 9193 // with both ajaxSettings and settings fields. 9194 // If target is omitted, writes into ajaxSettings. 9195 ajaxSetup: function( target, settings ) { 9196 return settings ? 9197 9198 // Building a settings object 9199 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 9200 9201 // Extending ajaxSettings 9202 ajaxExtend( jQuery.ajaxSettings, target ); 9203 }, 9204 9205 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 9206 ajaxTransport: addToPrefiltersOrTransports( transports ), 9207 9208 // Main method 9209 ajax: function( url, options ) { 9210 9211 // If url is an object, simulate pre-1.5 signature 9212 if ( typeof url === "object" ) { 9213 options = url; 9214 url = undefined; 9215 } 9216 9217 // Force options to be an object 9218 options = options || {}; 9219 9220 var transport, 9221 9222 // URL without anti-cache param 9223 cacheURL, 9224 9225 // Response headers 9226 responseHeadersString, 9227 responseHeaders, 9228 9229 // timeout handle 9230 timeoutTimer, 9231 9232 // Url cleanup var 9233 urlAnchor, 9234 9235 // Request state (becomes false upon send and true upon completion) 9236 completed, 9237 9238 // To know if global events are to be dispatched 9239 fireGlobals, 9240 9241 // Loop variable 9242 i, 9243 9244 // uncached part of the url 9245 uncached, 9246 9247 // Create the final options object 9248 s = jQuery.ajaxSetup( {}, options ), 9249 9250 // Callbacks context 9251 callbackContext = s.context || s, 9252 9253 // Context for global events is callbackContext if it is a DOM node or jQuery collection 9254 globalEventContext = s.context && 9255 ( callbackContext.nodeType || callbackContext.jquery ) ? 9256 jQuery( callbackContext ) : 9257 jQuery.event, 9258 9259 // Deferreds 9260 deferred = jQuery.Deferred(), 9261 completeDeferred = jQuery.Callbacks( "once memory" ), 9262 9263 // Status-dependent callbacks 9264 statusCode = s.statusCode || {}, 9265 9266 // Headers (they are sent all at once) 9267 requestHeaders = {}, 9268 requestHeadersNames = {}, 9269 9270 // Default abort message 9271 strAbort = "canceled", 9272 9273 // Fake xhr 9274 jqXHR = { 9275 readyState: 0, 9276 9277 // Builds headers hashtable if needed 9278 getResponseHeader: function( key ) { 9279 var match; 9280 if ( completed ) { 9281 if ( !responseHeaders ) { 9282 responseHeaders = {}; 9283 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 9284 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 9285 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 9286 .concat( match[ 2 ] ); 9287 } 9288 } 9289 match = responseHeaders[ key.toLowerCase() + " " ]; 9290 } 9291 return match == null ? null : match.join( ", " ); 9292 }, 9293 9294 // Raw string 9295 getAllResponseHeaders: function() { 9296 return completed ? responseHeadersString : null; 9297 }, 9298 9299 // Caches the header 9300 setRequestHeader: function( name, value ) { 9301 if ( completed == null ) { 9302 name = requestHeadersNames[ name.toLowerCase() ] = 9303 requestHeadersNames[ name.toLowerCase() ] || name; 9304 requestHeaders[ name ] = value; 9305 } 9306 return this; 9307 }, 9308 9309 // Overrides response content-type header 9310 overrideMimeType: function( type ) { 9311 if ( completed == null ) { 9312 s.mimeType = type; 9313 } 9314 return this; 9315 }, 9316 9317 // Status-dependent callbacks 9318 statusCode: function( map ) { 9319 var code; 9320 if ( map ) { 9321 if ( completed ) { 9322 9323 // Execute the appropriate callbacks 9324 jqXHR.always( map[ jqXHR.status ] ); 9325 } else { 9326 9327 // Lazy-add the new callbacks in a way that preserves old ones 9328 for ( code in map ) { 9329 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 9330 } 9331 } 9332 } 9333 return this; 9334 }, 9335 9336 // Cancel the request 9337 abort: function( statusText ) { 9338 var finalText = statusText || strAbort; 9339 if ( transport ) { 9340 transport.abort( finalText ); 9341 } 9342 done( 0, finalText ); 9343 return this; 9344 } 9345 }; 9346 9347 // Attach deferreds 9348 deferred.promise( jqXHR ); 9349 9350 // Add protocol if not provided (prefilters might expect it) 9351 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 9352 // We also use the url parameter if available 9353 s.url = ( ( url || s.url || location.href ) + "" ) 9354 .replace( rprotocol, location.protocol + "//" ); 9355 9356 // Alias method option to type as per ticket trac-12004 9357 s.type = options.method || options.type || s.method || s.type; 9358 9359 // Extract dataTypes list 9360 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 9361 9362 // A cross-domain request is in order when the origin doesn't match the current origin. 9363 if ( s.crossDomain == null ) { 9364 urlAnchor = document.createElement( "a" ); 9365 9366 // Support: IE <=8 - 11, Edge 12 - 15 9367 // IE throws exception on accessing the href property if url is malformed, 9368 // e.g. http://example.com:80x/ 9369 try { 9370 urlAnchor.href = s.url; 9371 9372 // Support: IE <=8 - 11 only 9373 // Anchor's host property isn't correctly set when s.url is relative 9374 urlAnchor.href = urlAnchor.href; 9375 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 9376 urlAnchor.protocol + "//" + urlAnchor.host; 9377 } catch ( e ) { 9378 9379 // If there is an error parsing the URL, assume it is crossDomain, 9380 // it can be rejected by the transport if it is invalid 9381 s.crossDomain = true; 9382 } 9383 } 9384 9385 // Convert data if not already a string 9386 if ( s.data && s.processData && typeof s.data !== "string" ) { 9387 s.data = jQuery.param( s.data, s.traditional ); 9388 } 9389 9390 // Apply prefilters 9391 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 9392 9393 // If request was aborted inside a prefilter, stop there 9394 if ( completed ) { 9395 return jqXHR; 9396 } 9397 9398 // We can fire global events as of now if asked to 9399 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 9400 fireGlobals = jQuery.event && s.global; 9401 9402 // Watch for a new set of requests 9403 if ( fireGlobals && jQuery.active++ === 0 ) { 9404 jQuery.event.trigger( "ajaxStart" ); 9405 } 9406 9407 // Uppercase the type 9408 s.type = s.type.toUpperCase(); 9409 9410 // Determine if request has content 9411 s.hasContent = !rnoContent.test( s.type ); 9412 9413 // Save the URL in case we're toying with the If-Modified-Since 9414 // and/or If-None-Match header later on 9415 // Remove hash to simplify url manipulation 9416 cacheURL = s.url.replace( rhash, "" ); 9417 9418 // More options handling for requests with no content 9419 if ( !s.hasContent ) { 9420 9421 // Remember the hash so we can put it back 9422 uncached = s.url.slice( cacheURL.length ); 9423 9424 // If data is available and should be processed, append data to url 9425 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 9426 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 9427 9428 // trac-9682: remove data so that it's not used in an eventual retry 9429 delete s.data; 9430 } 9431 9432 // Add or update anti-cache param if needed 9433 if ( s.cache === false ) { 9434 cacheURL = cacheURL.replace( rantiCache, "$1" ); 9435 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 9436 uncached; 9437 } 9438 9439 // Put hash and anti-cache on the URL that will be requested (gh-1732) 9440 s.url = cacheURL + uncached; 9441 9442 // Change '%20' to '+' if this is encoded form body content (gh-2658) 9443 } else if ( s.data && s.processData && 9444 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 9445 s.data = s.data.replace( r20, "+" ); 9446 } 9447 9448 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9449 if ( s.ifModified ) { 9450 if ( jQuery.lastModified[ cacheURL ] ) { 9451 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 9452 } 9453 if ( jQuery.etag[ cacheURL ] ) { 9454 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 9455 } 9456 } 9457 9458 // Set the correct header, if data is being sent 9459 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 9460 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 9461 } 9462 9463 // Set the Accepts header for the server, depending on the dataType 9464 jqXHR.setRequestHeader( 9465 "Accept", 9466 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 9467 s.accepts[ s.dataTypes[ 0 ] ] + 9468 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 9469 s.accepts[ "*" ] 9470 ); 9471 9472 // Check for headers option 9473 for ( i in s.headers ) { 9474 jqXHR.setRequestHeader( i, s.headers[ i ] ); 9475 } 9476 9477 // Allow custom headers/mimetypes and early abort 9478 if ( s.beforeSend && 9479 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 9480 9481 // Abort if not done already and return 9482 return jqXHR.abort(); 9483 } 9484 9485 // Aborting is no longer a cancellation 9486 strAbort = "abort"; 9487 9488 // Install callbacks on deferreds 9489 completeDeferred.add( s.complete ); 9490 jqXHR.done( s.success ); 9491 jqXHR.fail( s.error ); 9492 9493 // Get transport 9494 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 9495 9496 // If no transport, we auto-abort 9497 if ( !transport ) { 9498 done( -1, "No Transport" ); 9499 } else { 9500 jqXHR.readyState = 1; 9501 9502 // Send global event 9503 if ( fireGlobals ) { 9504 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 9505 } 9506 9507 // If request was aborted inside ajaxSend, stop there 9508 if ( completed ) { 9509 return jqXHR; 9510 } 9511 9512 // Timeout 9513 if ( s.async && s.timeout > 0 ) { 9514 timeoutTimer = window.setTimeout( function() { 9515 jqXHR.abort( "timeout" ); 9516 }, s.timeout ); 9517 } 9518 9519 try { 9520 completed = false; 9521 transport.send( requestHeaders, done ); 9522 } catch ( e ) { 9523 9524 // Rethrow post-completion exceptions 9525 if ( completed ) { 9526 throw e; 9527 } 9528 9529 // Propagate others as results 9530 done( -1, e ); 9531 } 9532 } 9533 9534 // Callback for when everything is done 9535 function done( status, nativeStatusText, responses, headers ) { 9536 var isSuccess, success, error, response, modified, 9537 statusText = nativeStatusText; 9538 9539 // Ignore repeat invocations 9540 if ( completed ) { 9541 return; 9542 } 9543 9544 completed = true; 9545 9546 // Clear timeout if it exists 9547 if ( timeoutTimer ) { 9548 window.clearTimeout( timeoutTimer ); 9549 } 9550 9551 // Dereference transport for early garbage collection 9552 // (no matter how long the jqXHR object will be used) 9553 transport = undefined; 9554 9555 // Cache response headers 9556 responseHeadersString = headers || ""; 9557 9558 // Set readyState 9559 jqXHR.readyState = status > 0 ? 4 : 0; 9560 9561 // Determine if successful 9562 isSuccess = status >= 200 && status < 300 || status === 304; 9563 9564 // Get response data 9565 if ( responses ) { 9566 response = ajaxHandleResponses( s, jqXHR, responses ); 9567 } 9568 9569 // Use a noop converter for missing script but not if jsonp 9570 if ( !isSuccess && 9571 jQuery.inArray( "script", s.dataTypes ) > -1 && 9572 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 9573 s.converters[ "text script" ] = function() {}; 9574 } 9575 9576 // Convert no matter what (that way responseXXX fields are always set) 9577 response = ajaxConvert( s, response, jqXHR, isSuccess ); 9578 9579 // If successful, handle type chaining 9580 if ( isSuccess ) { 9581 9582 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 9583 if ( s.ifModified ) { 9584 modified = jqXHR.getResponseHeader( "Last-Modified" ); 9585 if ( modified ) { 9586 jQuery.lastModified[ cacheURL ] = modified; 9587 } 9588 modified = jqXHR.getResponseHeader( "etag" ); 9589 if ( modified ) { 9590 jQuery.etag[ cacheURL ] = modified; 9591 } 9592 } 9593 9594 // if no content 9595 if ( status === 204 || s.type === "HEAD" ) { 9596 statusText = "nocontent"; 9597 9598 // if not modified 9599 } else if ( status === 304 ) { 9600 statusText = "notmodified"; 9601 9602 // If we have data, let's convert it 9603 } else { 9604 statusText = response.state; 9605 success = response.data; 9606 error = response.error; 9607 isSuccess = !error; 9608 } 9609 } else { 9610 9611 // Extract error from statusText and normalize for non-aborts 9612 error = statusText; 9613 if ( status || !statusText ) { 9614 statusText = "error"; 9615 if ( status < 0 ) { 9616 status = 0; 9617 } 9618 } 9619 } 9620 9621 // Set data for the fake xhr object 9622 jqXHR.status = status; 9623 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 9624 9625 // Success/Error 9626 if ( isSuccess ) { 9627 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 9628 } else { 9629 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 9630 } 9631 9632 // Status-dependent callbacks 9633 jqXHR.statusCode( statusCode ); 9634 statusCode = undefined; 9635 9636 if ( fireGlobals ) { 9637 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 9638 [ jqXHR, s, isSuccess ? success : error ] ); 9639 } 9640 9641 // Complete 9642 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 9643 9644 if ( fireGlobals ) { 9645 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 9646 9647 // Handle the global AJAX counter 9648 if ( !( --jQuery.active ) ) { 9649 jQuery.event.trigger( "ajaxStop" ); 9650 } 9651 } 9652 } 9653 9654 return jqXHR; 9655 }, 9656 9657 getJSON: function( url, data, callback ) { 9658 return jQuery.get( url, data, callback, "json" ); 9659 }, 9660 9661 getScript: function( url, callback ) { 9662 return jQuery.get( url, undefined, callback, "script" ); 9663 } 9664} ); 9665 9666jQuery.each( [ "get", "post" ], function( _i, method ) { 9667 jQuery[ method ] = function( url, data, callback, type ) { 9668 9669 // Shift arguments if data argument was omitted 9670 if ( isFunction( data ) ) { 9671 type = type || callback; 9672 callback = data; 9673 data = undefined; 9674 } 9675 9676 // The url can be an options object (which then must have .url) 9677 return jQuery.ajax( jQuery.extend( { 9678 url: url, 9679 type: method, 9680 dataType: type, 9681 data: data, 9682 success: callback 9683 }, jQuery.isPlainObject( url ) && url ) ); 9684 }; 9685} ); 9686 9687jQuery.ajaxPrefilter( function( s ) { 9688 var i; 9689 for ( i in s.headers ) { 9690 if ( i.toLowerCase() === "content-type" ) { 9691 s.contentType = s.headers[ i ] || ""; 9692 } 9693 } 9694} ); 9695 9696 9697jQuery._evalUrl = function( url, options, doc ) { 9698 return jQuery.ajax( { 9699 url: url, 9700 9701 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 9702 type: "GET", 9703 dataType: "script", 9704 cache: true, 9705 async: false, 9706 global: false, 9707 9708 // Only evaluate the response if it is successful (gh-4126) 9709 // dataFilter is not invoked for failure responses, so using it instead 9710 // of the default converter is kludgy but it works. 9711 converters: { 9712 "text script": function() {} 9713 }, 9714 dataFilter: function( response ) { 9715 jQuery.globalEval( response, options, doc ); 9716 } 9717 } ); 9718}; 9719 9720 9721jQuery.fn.extend( { 9722 wrapAll: function( html ) { 9723 var wrap; 9724 9725 if ( this[ 0 ] ) { 9726 if ( isFunction( html ) ) { 9727 html = html.call( this[ 0 ] ); 9728 } 9729 9730 // The elements to wrap the target around 9731 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 9732 9733 if ( this[ 0 ].parentNode ) { 9734 wrap.insertBefore( this[ 0 ] ); 9735 } 9736 9737 wrap.map( function() { 9738 var elem = this; 9739 9740 while ( elem.firstElementChild ) { 9741 elem = elem.firstElementChild; 9742 } 9743 9744 return elem; 9745 } ).append( this ); 9746 } 9747 9748 return this; 9749 }, 9750 9751 wrapInner: function( html ) { 9752 if ( isFunction( html ) ) { 9753 return this.each( function( i ) { 9754 jQuery( this ).wrapInner( html.call( this, i ) ); 9755 } ); 9756 } 9757 9758 return this.each( function() { 9759 var self = jQuery( this ), 9760 contents = self.contents(); 9761 9762 if ( contents.length ) { 9763 contents.wrapAll( html ); 9764 9765 } else { 9766 self.append( html ); 9767 } 9768 } ); 9769 }, 9770 9771 wrap: function( html ) { 9772 var htmlIsFunction = isFunction( html ); 9773 9774 return this.each( function( i ) { 9775 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 9776 } ); 9777 }, 9778 9779 unwrap: function( selector ) { 9780 this.parent( selector ).not( "body" ).each( function() { 9781 jQuery( this ).replaceWith( this.childNodes ); 9782 } ); 9783 return this; 9784 } 9785} ); 9786 9787 9788jQuery.expr.pseudos.hidden = function( elem ) { 9789 return !jQuery.expr.pseudos.visible( elem ); 9790}; 9791jQuery.expr.pseudos.visible = function( elem ) { 9792 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 9793}; 9794 9795 9796 9797 9798jQuery.ajaxSettings.xhr = function() { 9799 try { 9800 return new window.XMLHttpRequest(); 9801 } catch ( e ) {} 9802}; 9803 9804var xhrSuccessStatus = { 9805 9806 // File protocol always yields status code 0, assume 200 9807 0: 200, 9808 9809 // Support: IE <=9 only 9810 // trac-1450: sometimes IE returns 1223 when it should be 204 9811 1223: 204 9812 }, 9813 xhrSupported = jQuery.ajaxSettings.xhr(); 9814 9815support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 9816support.ajax = xhrSupported = !!xhrSupported; 9817 9818jQuery.ajaxTransport( function( options ) { 9819 var callback, errorCallback; 9820 9821 // Cross domain only allowed if supported through XMLHttpRequest 9822 if ( support.cors || xhrSupported && !options.crossDomain ) { 9823 return { 9824 send: function( headers, complete ) { 9825 var i, 9826 xhr = options.xhr(); 9827 9828 xhr.open( 9829 options.type, 9830 options.url, 9831 options.async, 9832 options.username, 9833 options.password 9834 ); 9835 9836 // Apply custom fields if provided 9837 if ( options.xhrFields ) { 9838 for ( i in options.xhrFields ) { 9839 xhr[ i ] = options.xhrFields[ i ]; 9840 } 9841 } 9842 9843 // Override mime type if needed 9844 if ( options.mimeType && xhr.overrideMimeType ) { 9845 xhr.overrideMimeType( options.mimeType ); 9846 } 9847 9848 // X-Requested-With header 9849 // For cross-domain requests, seeing as conditions for a preflight are 9850 // akin to a jigsaw puzzle, we simply never set it to be sure. 9851 // (it can always be set on a per-request basis or even using ajaxSetup) 9852 // For same-domain requests, won't change header if already provided. 9853 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 9854 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 9855 } 9856 9857 // Set headers 9858 for ( i in headers ) { 9859 xhr.setRequestHeader( i, headers[ i ] ); 9860 } 9861 9862 // Callback 9863 callback = function( type ) { 9864 return function() { 9865 if ( callback ) { 9866 callback = errorCallback = xhr.onload = 9867 xhr.onerror = xhr.onabort = xhr.ontimeout = 9868 xhr.onreadystatechange = null; 9869 9870 if ( type === "abort" ) { 9871 xhr.abort(); 9872 } else if ( type === "error" ) { 9873 9874 // Support: IE <=9 only 9875 // On a manual native abort, IE9 throws 9876 // errors on any property access that is not readyState 9877 if ( typeof xhr.status !== "number" ) { 9878 complete( 0, "error" ); 9879 } else { 9880 complete( 9881 9882 // File: protocol always yields status 0; see trac-8605, trac-14207 9883 xhr.status, 9884 xhr.statusText 9885 ); 9886 } 9887 } else { 9888 complete( 9889 xhrSuccessStatus[ xhr.status ] || xhr.status, 9890 xhr.statusText, 9891 9892 // Support: IE <=9 only 9893 // IE9 has no XHR2 but throws on binary (trac-11426) 9894 // For XHR2 non-text, let the caller handle it (gh-2498) 9895 ( xhr.responseType || "text" ) !== "text" || 9896 typeof xhr.responseText !== "string" ? 9897 { binary: xhr.response } : 9898 { text: xhr.responseText }, 9899 xhr.getAllResponseHeaders() 9900 ); 9901 } 9902 } 9903 }; 9904 }; 9905 9906 // Listen to events 9907 xhr.onload = callback(); 9908 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 9909 9910 // Support: IE 9 only 9911 // Use onreadystatechange to replace onabort 9912 // to handle uncaught aborts 9913 if ( xhr.onabort !== undefined ) { 9914 xhr.onabort = errorCallback; 9915 } else { 9916 xhr.onreadystatechange = function() { 9917 9918 // Check readyState before timeout as it changes 9919 if ( xhr.readyState === 4 ) { 9920 9921 // Allow onerror to be called first, 9922 // but that will not handle a native abort 9923 // Also, save errorCallback to a variable 9924 // as xhr.onerror cannot be accessed 9925 window.setTimeout( function() { 9926 if ( callback ) { 9927 errorCallback(); 9928 } 9929 } ); 9930 } 9931 }; 9932 } 9933 9934 // Create the abort callback 9935 callback = callback( "abort" ); 9936 9937 try { 9938 9939 // Do send the request (this may raise an exception) 9940 xhr.send( options.hasContent && options.data || null ); 9941 } catch ( e ) { 9942 9943 // trac-14683: Only rethrow if this hasn't been notified as an error yet 9944 if ( callback ) { 9945 throw e; 9946 } 9947 } 9948 }, 9949 9950 abort: function() { 9951 if ( callback ) { 9952 callback(); 9953 } 9954 } 9955 }; 9956 } 9957} ); 9958 9959 9960 9961 9962// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 9963jQuery.ajaxPrefilter( function( s ) { 9964 if ( s.crossDomain ) { 9965 s.contents.script = false; 9966 } 9967} ); 9968 9969// Install script dataType 9970jQuery.ajaxSetup( { 9971 accepts: { 9972 script: "text/javascript, application/javascript, " + 9973 "application/ecmascript, application/x-ecmascript" 9974 }, 9975 contents: { 9976 script: /\b(?:java|ecma)script\b/ 9977 }, 9978 converters: { 9979 "text script": function( text ) { 9980 jQuery.globalEval( text ); 9981 return text; 9982 } 9983 } 9984} ); 9985 9986// Handle cache's special case and crossDomain 9987jQuery.ajaxPrefilter( "script", function( s ) { 9988 if ( s.cache === undefined ) { 9989 s.cache = false; 9990 } 9991 if ( s.crossDomain ) { 9992 s.type = "GET"; 9993 } 9994} ); 9995 9996// Bind script tag hack transport 9997jQuery.ajaxTransport( "script", function( s ) { 9998 9999 // This transport only deals with cross domain or forced-by-attrs requests 10000 if ( s.crossDomain || s.scriptAttrs ) { 10001 var script, callback; 10002 return { 10003 send: function( _, complete ) { 10004 script = jQuery( "<script>" ) 10005 .attr( s.scriptAttrs || {} ) 10006 .prop( { charset: s.scriptCharset, src: s.url } ) 10007 .on( "load error", callback = function( evt ) { 10008 script.remove(); 10009 callback = null; 10010 if ( evt ) { 10011 complete( evt.type === "error" ? 404 : 200, evt.type ); 10012 } 10013 } ); 10014 10015 // Use native DOM manipulation to avoid our domManip AJAX trickery 10016 document.head.appendChild( script[ 0 ] ); 10017 }, 10018 abort: function() { 10019 if ( callback ) { 10020 callback(); 10021 } 10022 } 10023 }; 10024 } 10025} ); 10026 10027 10028 10029 10030var oldCallbacks = [], 10031 rjsonp = /(=)\?(?=&|$)|\?\?/; 10032 10033// Default jsonp settings 10034jQuery.ajaxSetup( { 10035 jsonp: "callback", 10036 jsonpCallback: function() { 10037 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 10038 this[ callback ] = true; 10039 return callback; 10040 } 10041} ); 10042 10043// Detect, normalize options and install callbacks for jsonp requests 10044jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 10045 10046 var callbackName, overwritten, responseContainer, 10047 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 10048 "url" : 10049 typeof s.data === "string" && 10050 ( s.contentType || "" ) 10051 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 10052 rjsonp.test( s.data ) && "data" 10053 ); 10054 10055 // Handle iff the expected data type is "jsonp" or we have a parameter to set 10056 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 10057 10058 // Get callback name, remembering preexisting value associated with it 10059 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 10060 s.jsonpCallback() : 10061 s.jsonpCallback; 10062 10063 // Insert callback into url or form data 10064 if ( jsonProp ) { 10065 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 10066 } else if ( s.jsonp !== false ) { 10067 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 10068 } 10069 10070 // Use data converter to retrieve json after script execution
vendor: 2,987 bytes, lines 10071-10180
10071 s.converters[ "script json" ] = function() { 10072 if ( !responseContainer ) { 10073 jQuery.error( callbackName + " was not called" ); 10074 } 10075 return responseContainer[ 0 ]; 10076 }; 10077 10078 // Force json dataType 10079 s.dataTypes[ 0 ] = "json"; 10080 10081 // Install callback 10082 overwritten = window[ callbackName ]; 10083 window[ callbackName ] = function() { 10084 responseContainer = arguments; 10085 }; 10086 10087 // Clean-up function (fires after converters) 10088 jqXHR.always( function() { 10089 10090 // If previous value didn't exist - remove it 10091 if ( overwritten === undefined ) { 10092 jQuery( window ).removeProp( callbackName ); 10093 10094 // Otherwise restore preexisting value 10095 } else { 10096 window[ callbackName ] = overwritten; 10097 } 10098 10099 // Save back as free 10100 if ( s[ callbackName ] ) { 10101 10102 // Make sure that re-using the options doesn't screw things around 10103 s.jsonpCallback = originalSettings.jsonpCallback; 10104 10105 // Save the callback name for future use 10106 oldCallbacks.push( callbackName ); 10107 } 10108 10109 // Call if it was a function and we have a response 10110 if ( responseContainer && isFunction( overwritten ) ) { 10111 overwritten( responseContainer[ 0 ] ); 10112 } 10113 10114 responseContainer = overwritten = undefined; 10115 } ); 10116 10117 // Delegate to script 10118 return "script"; 10119 } 10120} ); 10121 10122 10123 10124 10125// Support: Safari 8 only 10126// In Safari 8 documents created via document.implementation.createHTMLDocument 10127// collapse sibling forms: the second one becomes a child of the first one. 10128// Because of that, this security measure has to be disabled in Safari 8. 10129// https://bugs.webkit.org/show_bug.cgi?id=137337 10130support.createHTMLDocument = ( function() { 10131 var body = document.implementation.createHTMLDocument( "" ).body; 10132 body.innerHTML = "<form></form><form></form>"; 10133 return body.childNodes.length === 2; 10134} )(); 10135 10136 10137// Argument "data" should be string of html 10138// context (optional): If specified, the fragment will be created in this context, 10139// defaults to document 10140// keepScripts (optional): If true, will include scripts passed in the html string 10141jQuery.parseHTML = function( data, context, keepScripts ) { 10142 if ( typeof data !== "string" ) { 10143 return []; 10144 } 10145 if ( typeof context === "boolean" ) { 10146 keepScripts = context; 10147 context = false; 10148 } 10149 10150 var base, parsed, scripts; 10151 10152 if ( !context ) { 10153 10154 // Stop scripts or inline event handlers from being executed immediately 10155 // by using document.implementation 10156 if ( support.createHTMLDocument ) { 10157 context = document.implementation.createHTMLDocument( "" ); 10158 10159 // Set the base href for the created document 10160 // so any parsed elements with URLs 10161 // are based on the document's URL (gh-2965) 10162 base = context.createElement( "base" ); 10163 base.href = document.location.href; 10164 context.head.appendChild( base ); 10165 } else { 10166 context = document; 10167 } 10168 } 10169 10170 parsed = rsingleTag.exec( data ); 10171 scripts = !keepScripts && []; 10172 10173 // Single tag 10174 if ( parsed ) { 10175 return [ context.createElement( parsed[ 1 ] ) ]; 10176 } 10177 10178 parsed = buildFragment( [ data ], context, scripts ); 10179 10180 if ( scripts && scripts.length ) {
vendor: 14,891 bytes, lines 10181-10717
10181 jQuery( scripts ).remove(); 10182 } 10183 10184 return jQuery.merge( [], parsed.childNodes ); 10185}; 10186 10187 10188/** 10189 * Load a url into a page 10190 */ 10191jQuery.fn.load = function( url, params, callback ) { 10192 var selector, type, response, 10193 self = this, 10194 off = url.indexOf( " " ); 10195 10196 if ( off > -1 ) { 10197 selector = stripAndCollapse( url.slice( off ) ); 10198 url = url.slice( 0, off ); 10199 } 10200 10201 // If it's a function 10202 if ( isFunction( params ) ) { 10203 10204 // We assume that it's the callback 10205 callback = params; 10206 params = undefined; 10207 10208 // Otherwise, build a param string 10209 } else if ( params && typeof params === "object" ) { 10210 type = "POST"; 10211 } 10212 10213 // If we have elements to modify, make the request 10214 if ( self.length > 0 ) { 10215 jQuery.ajax( { 10216 url: url, 10217 10218 // If "type" variable is undefined, then "GET" method will be used. 10219 // Make value of this field explicit since 10220 // user can override it through ajaxSetup method 10221 type: type || "GET", 10222 dataType: "html", 10223 data: params 10224 } ).done( function( responseText ) { 10225 10226 // Save response for use in complete callback 10227 response = arguments; 10228 10229 self.html( selector ? 10230 10231 // If a selector was specified, locate the right elements in a dummy div 10232 // Exclude scripts to avoid IE 'Permission Denied' errors 10233 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 10234 10235 // Otherwise use the full result 10236 responseText ); 10237 10238 // If the request succeeds, this function gets "data", "status", "jqXHR" 10239 // but they are ignored because response was set above. 10240 // If it fails, this function gets "jqXHR", "status", "error" 10241 } ).always( callback && function( jqXHR, status ) { 10242 self.each( function() { 10243 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 10244 } ); 10245 } ); 10246 } 10247 10248 return this; 10249}; 10250 10251 10252 10253 10254jQuery.expr.pseudos.animated = function( elem ) { 10255 return jQuery.grep( jQuery.timers, function( fn ) { 10256 return elem === fn.elem; 10257 } ).length; 10258}; 10259 10260 10261 10262 10263jQuery.offset = { 10264 setOffset: function( elem, options, i ) { 10265 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 10266 position = jQuery.css( elem, "position" ), 10267 curElem = jQuery( elem ), 10268 props = {}; 10269 10270 // Set position first, in-case top/left are set even on static elem 10271 if ( position === "static" ) { 10272 elem.style.position = "relative"; 10273 } 10274 10275 curOffset = curElem.offset(); 10276 curCSSTop = jQuery.css( elem, "top" ); 10277 curCSSLeft = jQuery.css( elem, "left" ); 10278 calculatePosition = ( position === "absolute" || position === "fixed" ) && 10279 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 10280 10281 // Need to be able to calculate position if either 10282 // top or left is auto and position is either absolute or fixed 10283 if ( calculatePosition ) { 10284 curPosition = curElem.position(); 10285 curTop = curPosition.top; 10286 curLeft = curPosition.left; 10287 10288 } else { 10289 curTop = parseFloat( curCSSTop ) || 0; 10290 curLeft = parseFloat( curCSSLeft ) || 0; 10291 } 10292 10293 if ( isFunction( options ) ) { 10294 10295 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 10296 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 10297 } 10298 10299 if ( options.top != null ) { 10300 props.top = ( options.top - curOffset.top ) + curTop; 10301 } 10302 if ( options.left != null ) { 10303 props.left = ( options.left - curOffset.left ) + curLeft; 10304 } 10305 10306 if ( "using" in options ) { 10307 options.using.call( elem, props ); 10308 10309 } else { 10310 curElem.css( props ); 10311 } 10312 } 10313}; 10314 10315jQuery.fn.extend( { 10316 10317 // offset() relates an element's border box to the document origin 10318 offset: function( options ) { 10319 10320 // Preserve chaining for setter 10321 if ( arguments.length ) { 10322 return options === undefined ? 10323 this : 10324 this.each( function( i ) { 10325 jQuery.offset.setOffset( this, options, i ); 10326 } ); 10327 } 10328 10329 var rect, win, 10330 elem = this[ 0 ]; 10331 10332 if ( !elem ) { 10333 return; 10334 } 10335 10336 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 10337 // Support: IE <=11 only 10338 // Running getBoundingClientRect on a 10339 // disconnected node in IE throws an error 10340 if ( !elem.getClientRects().length ) { 10341 return { top: 0, left: 0 }; 10342 } 10343 10344 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 10345 rect = elem.getBoundingClientRect(); 10346 win = elem.ownerDocument.defaultView; 10347 return { 10348 top: rect.top + win.pageYOffset, 10349 left: rect.left + win.pageXOffset 10350 }; 10351 }, 10352 10353 // position() relates an element's margin box to its offset parent's padding box 10354 // This corresponds to the behavior of CSS absolute positioning 10355 position: function() { 10356 if ( !this[ 0 ] ) { 10357 return; 10358 } 10359 10360 var offsetParent, offset, doc, 10361 elem = this[ 0 ], 10362 parentOffset = { top: 0, left: 0 }; 10363 10364 // position:fixed elements are offset from the viewport, which itself always has zero offset 10365 if ( jQuery.css( elem, "position" ) === "fixed" ) { 10366 10367 // Assume position:fixed implies availability of getBoundingClientRect 10368 offset = elem.getBoundingClientRect(); 10369 10370 } else { 10371 offset = this.offset(); 10372 10373 // Account for the *real* offset parent, which can be the document or its root element 10374 // when a statically positioned element is identified 10375 doc = elem.ownerDocument; 10376 offsetParent = elem.offsetParent || doc.documentElement; 10377 while ( offsetParent && 10378 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 10379 jQuery.css( offsetParent, "position" ) === "static" ) { 10380 10381 offsetParent = offsetParent.parentNode; 10382 } 10383 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 10384 10385 // Incorporate borders into its offset, since they are outside its content origin 10386 parentOffset = jQuery( offsetParent ).offset(); 10387 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 10388 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 10389 } 10390 } 10391 10392 // Subtract parent offsets and element margins 10393 return { 10394 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 10395 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 10396 }; 10397 }, 10398 10399 // This method will return documentElement in the following cases: 10400 // 1) For the element inside the iframe without offsetParent, this method will return 10401 // documentElement of the parent window 10402 // 2) For the hidden or detached element 10403 // 3) For body or html element, i.e. in case of the html node - it will return itself 10404 // 10405 // but those exceptions were never presented as a real life use-cases 10406 // and might be considered as more preferable results. 10407 // 10408 // This logic, however, is not guaranteed and can change at any point in the future 10409 offsetParent: function() { 10410 return this.map( function() { 10411 var offsetParent = this.offsetParent; 10412 10413 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 10414 offsetParent = offsetParent.offsetParent; 10415 } 10416 10417 return offsetParent || documentElement; 10418 } ); 10419 } 10420} ); 10421 10422// Create scrollLeft and scrollTop methods 10423jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 10424 var top = "pageYOffset" === prop; 10425 10426 jQuery.fn[ method ] = function( val ) { 10427 return access( this, function( elem, method, val ) { 10428 10429 // Coalesce documents and windows 10430 var win; 10431 if ( isWindow( elem ) ) { 10432 win = elem; 10433 } else if ( elem.nodeType === 9 ) { 10434 win = elem.defaultView; 10435 } 10436 10437 if ( val === undefined ) { 10438 return win ? win[ prop ] : elem[ method ]; 10439 } 10440 10441 if ( win ) { 10442 win.scrollTo( 10443 !top ? val : win.pageXOffset, 10444 top ? val : win.pageYOffset 10445 ); 10446 10447 } else { 10448 elem[ method ] = val; 10449 } 10450 }, method, val, arguments.length ); 10451 }; 10452} ); 10453 10454// Support: Safari <=7 - 9.1, Chrome <=37 - 49 10455// Add the top/left cssHooks using jQuery.fn.position 10456// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 10457// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 10458// getComputedStyle returns percent when specified for top/left/bottom/right; 10459// rather than make the css module depend on the offset module, just check for it here 10460jQuery.each( [ "top", "left" ], function( _i, prop ) { 10461 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 10462 function( elem, computed ) { 10463 if ( computed ) { 10464 computed = curCSS( elem, prop ); 10465 10466 // If curCSS returns percentage, fallback to offset 10467 return rnumnonpx.test( computed ) ? 10468 jQuery( elem ).position()[ prop ] + "px" : 10469 computed; 10470 } 10471 } 10472 ); 10473} ); 10474 10475 10476// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 10477jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 10478 jQuery.each( { 10479 padding: "inner" + name, 10480 content: type, 10481 "": "outer" + name 10482 }, function( defaultExtra, funcName ) { 10483 10484 // Margin is only for outerHeight, outerWidth 10485 jQuery.fn[ funcName ] = function( margin, value ) { 10486 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 10487 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 10488 10489 return access( this, function( elem, type, value ) { 10490 var doc; 10491 10492 if ( isWindow( elem ) ) { 10493 10494 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 10495 return funcName.indexOf( "outer" ) === 0 ? 10496 elem[ "inner" + name ] : 10497 elem.document.documentElement[ "client" + name ]; 10498 } 10499 10500 // Get document width or height 10501 if ( elem.nodeType === 9 ) { 10502 doc = elem.documentElement; 10503 10504 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 10505 // whichever is greatest 10506 return Math.max( 10507 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 10508 elem.body[ "offset" + name ], doc[ "offset" + name ], 10509 doc[ "client" + name ] 10510 ); 10511 } 10512 10513 return value === undefined ? 10514 10515 // Get width or height on the element, requesting but not forcing parseFloat 10516 jQuery.css( elem, type, extra ) : 10517 10518 // Set width or height on the element 10519 jQuery.style( elem, type, value, extra ); 10520 }, type, chainable ? margin : undefined, chainable ); 10521 }; 10522 } ); 10523} ); 10524 10525 10526jQuery.each( [ 10527 "ajaxStart", 10528 "ajaxStop", 10529 "ajaxComplete", 10530 "ajaxError", 10531 "ajaxSuccess", 10532 "ajaxSend" 10533], function( _i, type ) { 10534 jQuery.fn[ type ] = function( fn ) { 10535 return this.on( type, fn ); 10536 }; 10537} ); 10538 10539 10540 10541 10542jQuery.fn.extend( { 10543 10544 bind: function( types, data, fn ) { 10545 return this.on( types, null, data, fn ); 10546 }, 10547 unbind: function( types, fn ) { 10548 return this.off( types, null, fn ); 10549 }, 10550 10551 delegate: function( selector, types, data, fn ) { 10552 return this.on( types, selector, data, fn ); 10553 }, 10554 undelegate: function( selector, types, fn ) { 10555 10556 // ( namespace ) or ( selector, types [, fn] ) 10557 return arguments.length === 1 ? 10558 this.off( selector, "**" ) : 10559 this.off( types, selector || "**", fn ); 10560 }, 10561 10562 hover: function( fnOver, fnOut ) { 10563 return this 10564 .on( "mouseenter", fnOver ) 10565 .on( "mouseleave", fnOut || fnOver ); 10566 } 10567} ); 10568 10569jQuery.each( 10570 ( "blur focus focusin focusout resize scroll click dblclick " + 10571 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 10572 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 10573 function( _i, name ) { 10574 10575 // Handle event binding 10576 jQuery.fn[ name ] = function( data, fn ) { 10577 return arguments.length > 0 ? 10578 this.on( name, null, data, fn ) : 10579 this.trigger( name ); 10580 }; 10581 } 10582); 10583 10584 10585 10586 10587// Support: Android <=4.0 only 10588// Make sure we trim BOM and NBSP 10589// Require that the "whitespace run" starts from a non-whitespace 10590// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 10591var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 10592 10593// Bind a function to a context, optionally partially applying any 10594// arguments. 10595// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 10596// However, it is not slated for removal any time soon 10597jQuery.proxy = function( fn, context ) { 10598 var tmp, args, proxy; 10599 10600 if ( typeof context === "string" ) { 10601 tmp = fn[ context ]; 10602 context = fn; 10603 fn = tmp; 10604 } 10605 10606 // Quick check to determine if target is callable, in the spec 10607 // this throws a TypeError, but we will just return undefined. 10608 if ( !isFunction( fn ) ) { 10609 return undefined; 10610 } 10611 10612 // Simulated bind 10613 args = slice.call( arguments, 2 ); 10614 proxy = function() { 10615 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 10616 }; 10617 10618 // Set the guid of unique handler to the same of original handler, so it can be removed 10619 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 10620 10621 return proxy; 10622}; 10623 10624jQuery.holdReady = function( hold ) { 10625 if ( hold ) { 10626 jQuery.readyWait++; 10627 } else { 10628 jQuery.ready( true ); 10629 } 10630}; 10631jQuery.isArray = Array.isArray; 10632jQuery.parseJSON = JSON.parse; 10633jQuery.nodeName = nodeName; 10634jQuery.isFunction = isFunction; 10635jQuery.isWindow = isWindow; 10636jQuery.camelCase = camelCase; 10637jQuery.type = toType; 10638 10639jQuery.now = Date.now; 10640 10641jQuery.isNumeric = function( obj ) { 10642 10643 // As of jQuery 3.0, isNumeric is limited to 10644 // strings and numbers (primitives or objects) 10645 // that can be coerced to finite numbers (gh-2662) 10646 var type = jQuery.type( obj ); 10647 return ( type === "number" || type === "string" ) && 10648 10649 // parseFloat NaNs numeric-cast false positives ("") 10650 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 10651 // subtraction forces infinities to NaN 10652 !isNaN( obj - parseFloat( obj ) ); 10653}; 10654 10655jQuery.trim = function( text ) { 10656 return text == null ? 10657 "" : 10658 ( text + "" ).replace( rtrim, "$1" ); 10659}; 10660 10661 10662 10663// Register as a named AMD module, since jQuery can be concatenated with other 10664// files that may use define, but not via a proper concatenation script that 10665// understands anonymous AMD modules. A named AMD is safest and most robust 10666// way to register. Lowercase jquery is used because AMD module names are 10667// derived from file names, and jQuery is normally delivered in a lowercase 10668// file name. Do this after creating the global so that if an AMD module wants 10669// to call noConflict to hide this version of jQuery, it will work. 10670 10671// Note that for maximum portability, libraries that are not jQuery should 10672// declare themselves as anonymous modules, and avoid setting a global if an 10673// AMD loader is present. jQuery is a special case. For more information, see 10674// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 10675 10676if ( typeof define === "function" && define.amd ) { 10677 define( "jquery", [], function() { 10678 return jQuery; 10679 } ); 10680} 10681 10682 10683 10684 10685var 10686 10687 // Map over jQuery in case of overwrite 10688 _jQuery = window.jQuery, 10689 10690 // Map over the $ in case of overwrite 10691 _$ = window.$; 10692 10693jQuery.noConflict = function( deep ) { 10694 if ( window.$ === jQuery ) { 10695 window.$ = _$; 10696 } 10697 10698 if ( deep && window.jQuery === jQuery ) { 10699 window.jQuery = _jQuery; 10700 } 10701 10702 return jQuery; 10703}; 10704 10705// Expose jQuery and $ identifiers, even in AMD 10706// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 10707// and CommonJS for browser emulators (trac-13566) 10708if ( typeof noGlobal === "undefined" ) { 10709 window.jQuery = window.$ = jQuery; 10710} 10711 10712 10713 10714 10715return jQuery; 10716} ); 10717/*
10717*! 10718 10719 @license 10720 handlebars v4.7.8 10721 10722Copyright (C) 2011-2019 by Yehuda Katz 10723 10724Permission is hereby granted, free of charge, to any person obtaining a copy 10725of this software and associated documentation files (the "Software"), to deal 10726in the Software without restriction, including without limitation the rights 10727to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10728copies of the Software, and to permit persons to whom the Software is 10729furnished to do so, subject to the following conditions: 10730 10731The above copyright notice and this permission notice shall be included in 10732all copies or substantial portions of the Software. 10733 10734THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10735IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 10736FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 10737AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 10738LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 10739OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 10740THE SOFTWARE. 10741 10742*/ 10743(function webpackUniversalModuleDefinition(root, factory) { 10744 if(typeof exports === 'object' && typeof module === 'object') 10745 module.exports = factory(); 10746 else if(typeof define === 'function' && define.amd) 10747 define([], factory); 10748 else if(typeof exports === 'object') 10749 exports["Handlebars"] = factory(); 10750 else 10751 root["Handlebars"] = factory(); 10752})(this, function() { 10753return /******/ (function(modules) { // webpackBootstrap 10754/******/ // The module cache 10755/******/ var installedModules = {}; 10756 10757/******/ // The require function 10758/******/ function __webpack_require__(moduleId) { 10759 10760/******/ // Check if module is in cache 10761/******/ if(installedModules[moduleId]) 10762/******/ return installedModules[moduleId].exports; 10763 10764/******/ // Create a new module (and put it into the cache) 10765/******/ var module = installedModules[moduleId] = { 10766/******/ exports: {}, 10767/******/ id: moduleId, 10768/******/ loaded: false 10769/******/ }; 10770 10771/******/ // Execute the module function 10772/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 10773 10774/******/ // Flag the module as loaded 10775/******/ module.loaded = true; 10776 10777/******/ // Return the exports of the module 10778/******/ return module.exports; 10779/******/ } 10780 10781 10782/******/ // expose the modules object (__webpack_modules__) 10783/******/ __webpack_require__.m = modules; 10784 10785/******/ // expose the module cache 10786/******/ __webpack_require__.c = installedModules; 10787 10788/******/ // __webpack_public_path__ 10789/******/ __webpack_require__.p = ""; 10790 10791/******/ // Load entry module and return exports 10792/******/ return __webpack_require__(0); 10793/******/ }) 10794/************************************************************************/ 10795/******/ ([ 10796/* 0 */ 10797/***/ (function(module, exports, __webpack_require__) { 10798 10799 'use strict'; 10800 10801 var _interopRequireDefault = __webpack_require__(1)['default']; 10802 10803 exports.__esModule = true; 10804 10805 var _handlebarsRuntime = __webpack_require__(2); 10806 10807 var _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime); 10808 10809 // Compiler imports 10810 10811 var _handlebarsCompilerAst = __webpack_require__(84); 10812 10813 var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst); 10814 10815 var _handlebarsCompilerBase = __webpack_require__(85); 10816 10817 var _handlebarsCompilerCompiler = __webpack_require__(90); 10818 10819 var _handlebarsCompilerJavascriptCompiler = __webpack_require__(91); 10820 10821 var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler); 10822 10823 var _handlebarsCompilerVisitor = __webpack_require__(88); 10824 10825 var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor); 10826 10827 var _handlebarsNoConflict = __webpack_require__(83); 10828 10829 var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); 10830 10831 var _create = _handlebarsRuntime2['default'].create; 10832 function create() { 10833 var hb = _create(); 10834 10835 hb.compile = function (input, options) { 10836 return _handlebarsCompilerCompiler.compile(input, options, hb); 10837 }; 10838 hb.precompile = function (input, options) { 10839 return _handlebarsCompilerCompiler.precompile(input, options, hb); 10840 }; 10841 10842 hb.AST = _handlebarsCompilerAst2['default']; 10843 hb.Compiler = _handlebarsCompilerCompiler.Compiler; 10844 hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default']; 10845 hb.Parser = _handlebarsCompilerBase.parser; 10846 hb.parse = _handlebarsCompilerBase.parse; 10847 hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing; 10848 10849 return hb; 10850 } 10851 10852 var inst = create(); 10853 inst.create = create; 10854 10855 _handlebarsNoConflict2['default'](inst); 10856 10857 inst.Visitor = _handlebarsCompilerVisitor2['default']; 10858 10859 inst['default'] = inst; 10860 10861 exports['default'] = inst; 10862 module.exports = exports['default']; 10863 10864/***/ }), 10865/* 1 */
vendor: 3,052 bytes, lines 10866-10997
10866/***/ (function(module, exports) { 10867 10868 "use strict"; 10869 10870 exports["default"] = function (obj) { 10871 return obj && obj.__esModule ? obj : { 10872 "default": obj 10873 }; 10874 }; 10875 10876 exports.__esModule = true; 10877 10878/***/ }), 10879/* 2 */ 10880/***/ (function(module, exports, __webpack_require__) { 10881 10882 'use strict'; 10883 10884 var _interopRequireWildcard = __webpack_require__(3)['default']; 10885 10886 var _interopRequireDefault = __webpack_require__(1)['default']; 10887 10888 exports.__esModule = true; 10889 10890 var _handlebarsBase = __webpack_require__(4); 10891 10892 var base = _interopRequireWildcard(_handlebarsBase); 10893 10894 // Each of these augment the Handlebars object. No need to setup here. 10895 // (This is done to easily share code between commonjs and browse envs) 10896 10897 var _handlebarsSafeString = __webpack_require__(77); 10898 10899 var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString); 10900 10901 var _handlebarsException = __webpack_require__(6); 10902 10903 var _handlebarsException2 = _interopRequireDefault(_handlebarsException); 10904 10905 var _handlebarsUtils = __webpack_require__(5); 10906 10907 var Utils = _interopRequireWildcard(_handlebarsUtils); 10908 10909 var _handlebarsRuntime = __webpack_require__(78); 10910 10911 var runtime = _interopRequireWildcard(_handlebarsRuntime); 10912 10913 var _handlebarsNoConflict = __webpack_require__(83); 10914 10915 var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); 10916 10917 // For compatibility and usage outside of module systems, make the Handlebars object a namespace 10918 function create() { 10919 var hb = new base.HandlebarsEnvironment(); 10920 10921 Utils.extend(hb, base); 10922 hb.SafeString = _handlebarsSafeString2['default']; 10923 hb.Exception = _handlebarsException2['default']; 10924 hb.Utils = Utils; 10925 hb.escapeExpression = Utils.escapeExpression; 10926 10927 hb.VM = runtime; 10928 hb.template = function (spec) { 10929 return runtime.template(spec, hb); 10930 }; 10931 10932 return hb; 10933 } 10934 10935 var inst = create(); 10936 inst.create = create; 10937 10938 _handlebarsNoConflict2['default'](inst); 10939 10940 inst['default'] = inst; 10941 10942 exports['default'] = inst; 10943 module.exports = exports['default']; 10944 10945/***/ }), 10946/* 3 */ 10947/***/ (function(module, exports) { 10948 10949 "use strict"; 10950 10951 exports["default"] = function (obj) { 10952 if (obj && obj.__esModule) { 10953 return obj; 10954 } else { 10955 var newObj = {}; 10956 10957 if (obj != null) { 10958 for (var key in obj) { 10959 if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; 10960 } 10961 } 10962 10963 newObj["default"] = obj; 10964 return newObj; 10965 } 10966 }; 10967 10968 exports.__esModule = true; 10969 10970/***/ }), 10971/* 4 */ 10972/***/ (function(module, exports, __webpack_require__) { 10973 10974 'use strict'; 10975 10976 var _interopRequireDefault = __webpack_require__(1)['default']; 10977 10978 exports.__esModule = true; 10979 exports.HandlebarsEnvironment = HandlebarsEnvironment; 10980 10981 var _utils = __webpack_require__(5); 10982 10983 var _exception = __webpack_require__(6); 10984 10985 var _exception2 = _interopRequireDefault(_exception); 10986 10987 var _helpers = __webpack_require__(10); 10988 10989 var _decorators = __webpack_require__(70); 10990 10991 var _logger = __webpack_require__(72); 10992 10993 var _logger2 = _interopRequireDefault(_logger); 10994 10995 var _internalProtoAccess = __webpack_require__(73); 10996 10997 var VERSION = '4.7.8
vendor: 10,251 bytes, lines 10997-11374
10997'; 10998 exports.VERSION = VERSION; 10999 var COMPILER_REVISION = 8; 11000 exports.COMPILER_REVISION = COMPILER_REVISION; 11001 var LAST_COMPATIBLE_COMPILER_REVISION = 7; 11002 11003 exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION; 11004 var REVISION_CHANGES = { 11005 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it 11006 2: '== 1.0.0-rc.3', 11007 3: '== 1.0.0-rc.4', 11008 4: '== 1.x.x', 11009 5: '== 2.0.0-alpha.x', 11010 6: '>= 2.0.0-beta.1', 11011 7: '>= 4.0.0 <4.3.0', 11012 8: '>= 4.3.0' 11013 }; 11014 11015 exports.REVISION_CHANGES = REVISION_CHANGES; 11016 var objectType = '[object Object]'; 11017 11018 function HandlebarsEnvironment(helpers, partials, decorators) { 11019 this.helpers = helpers || {}; 11020 this.partials = partials || {}; 11021 this.decorators = decorators || {}; 11022 11023 _helpers.registerDefaultHelpers(this); 11024 _decorators.registerDefaultDecorators(this); 11025 } 11026 11027 HandlebarsEnvironment.prototype = { 11028 constructor: HandlebarsEnvironment, 11029 11030 logger: _logger2['default'], 11031 log: _logger2['default'].log, 11032 11033 registerHelper: function registerHelper(name, fn) { 11034 if (_utils.toString.call(name) === objectType) { 11035 if (fn) { 11036 throw new _exception2['default']('Arg not supported with multiple helpers'); 11037 } 11038 _utils.extend(this.helpers, name); 11039 } else { 11040 this.helpers[name] = fn; 11041 } 11042 }, 11043 unregisterHelper: function unregisterHelper(name) { 11044 delete this.helpers[name]; 11045 }, 11046 11047 registerPartial: function registerPartial(name, partial) { 11048 if (_utils.toString.call(name) === objectType) { 11049 _utils.extend(this.partials, name); 11050 } else { 11051 if (typeof partial === 'undefined') { 11052 throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); 11053 } 11054 this.partials[name] = partial; 11055 } 11056 }, 11057 unregisterPartial: function unregisterPartial(name) { 11058 delete this.partials[name]; 11059 }, 11060 11061 registerDecorator: function registerDecorator(name, fn) { 11062 if (_utils.toString.call(name) === objectType) { 11063 if (fn) { 11064 throw new _exception2['default']('Arg not supported with multiple decorators'); 11065 } 11066 _utils.extend(this.decorators, name); 11067 } else { 11068 this.decorators[name] = fn; 11069 } 11070 }, 11071 unregisterDecorator: function unregisterDecorator(name) { 11072 delete this.decorators[name]; 11073 }, 11074 /** 11075 * Reset the memory of illegal property accesses that have already been logged. 11076 * @deprecated should only be used in handlebars test-cases 11077 */ 11078 resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() { 11079 _internalProtoAccess.resetLoggedProperties(); 11080 } 11081 }; 11082 11083 var log = _logger2['default'].log; 11084 11085 exports.log = log; 11086 exports.createFrame = _utils.createFrame; 11087 exports.logger = _logger2['default']; 11088 11089/***/ }), 11090/* 5 */ 11091/***/ (function(module, exports) { 11092 11093 'use strict'; 11094 11095 exports.__esModule = true; 11096 exports.extend = extend; 11097 exports.indexOf = indexOf; 11098 exports.escapeExpression = escapeExpression; 11099 exports.isEmpty = isEmpty; 11100 exports.createFrame = createFrame; 11101 exports.blockParams = blockParams; 11102 exports.appendContextPath = appendContextPath; 11103 var escape = { 11104 '&': '&', 11105 '<': '<', 11106 '>': '>', 11107 '"': '"', 11108 "'": ''', 11109 '`': '`', 11110 '=': '=' 11111 }; 11112 11113 var badChars = /[&<>"'`=]/g, 11114 possible = /[&<>"'`=]/; 11115 11116 function escapeChar(chr) { 11117 return escape[chr]; 11118 } 11119 11120 function extend(obj /* , ...source */) { 11121 for (var i = 1; i < arguments.length; i++) { 11122 for (var key in arguments[i]) { 11123 if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { 11124 obj[key] = arguments[i][key]; 11125 } 11126 } 11127 } 11128 11129 return obj; 11130 } 11131 11132 var toString = Object.prototype.toString; 11133 11134 exports.toString = toString; 11135 // Sourced from lodash 11136 // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt 11137 /* eslint-disable func-style */ 11138 var isFunction = function isFunction(value) { 11139 return typeof value === 'function'; 11140 }; 11141 // fallback for older versions of Chrome and Safari 11142 /* istanbul ignore next */ 11143 if (isFunction(/x/)) { 11144 exports.isFunction = isFunction = function (value) { 11145 return typeof value === 'function' && toString.call(value) === '[object Function]'; 11146 }; 11147 } 11148 exports.isFunction = isFunction; 11149 11150 /* eslint-enable func-style */ 11151 11152 /* istanbul ignore next */ 11153 var isArray = Array.isArray || function (value) { 11154 return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; 11155 }; 11156 11157 exports.isArray = isArray; 11158 // Older IE versions do not directly support indexOf so we must implement our own, sadly. 11159 11160 function indexOf(array, value) { 11161 for (var i = 0, len = array.length; i < len; i++) { 11162 if (array[i] === value) { 11163 return i; 11164 } 11165 } 11166 return -1; 11167 } 11168 11169 function escapeExpression(string) { 11170 if (typeof string !== 'string') { 11171 // don't escape SafeStrings, since they're already safe 11172 if (string && string.toHTML) { 11173 return string.toHTML(); 11174 } else if (string == null) { 11175 return ''; 11176 } else if (!string) { 11177 return string + ''; 11178 } 11179 11180 // Force a string conversion as this will be done by the append regardless and 11181 // the regex test will do this transparently behind the scenes, causing issues if 11182 // an object's to string has escaped characters in it. 11183 string = '' + string; 11184 } 11185 11186 if (!possible.test(string)) { 11187 return string; 11188 } 11189 return string.replace(badChars, escapeChar); 11190 } 11191 11192 function isEmpty(value) { 11193 if (!value && value !== 0) { 11194 return true; 11195 } else if (isArray(value) && value.length === 0) { 11196 return true; 11197 } else { 11198 return false; 11199 } 11200 } 11201 11202 function createFrame(object) { 11203 var frame = extend({}, object); 11204 frame._parent = object; 11205 return frame; 11206 } 11207 11208 function blockParams(params, ids) { 11209 params.path = ids; 11210 return params; 11211 } 11212 11213 function appendContextPath(contextPath, id) { 11214 return (contextPath ? contextPath + '.' : '') + id; 11215 } 11216 11217/***/ }), 11218/* 6 */ 11219/***/ (function(module, exports, __webpack_require__) { 11220 11221 'use strict'; 11222 11223 var _Object$defineProperty = __webpack_require__(7)['default']; 11224 11225 exports.__esModule = true; 11226 var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack']; 11227 11228 function Exception(message, node) { 11229 var loc = node && node.loc, 11230 line = undefined, 11231 endLineNumber = undefined, 11232 column = undefined, 11233 endColumn = undefined; 11234 11235 if (loc) { 11236 line = loc.start.line; 11237 endLineNumber = loc.end.line; 11238 column = loc.start.column; 11239 endColumn = loc.end.column; 11240 11241 message += ' - ' + line + ':' + column; 11242 } 11243 11244 var tmp = Error.prototype.constructor.call(this, message); 11245 11246 // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. 11247 for (var idx = 0; idx < errorProps.length; idx++) { 11248 this[errorProps[idx]] = tmp[errorProps[idx]]; 11249 } 11250 11251 /* istanbul ignore else */ 11252 if (Error.captureStackTrace) { 11253 Error.captureStackTrace(this, Exception); 11254 } 11255 11256 try { 11257 if (loc) { 11258 this.lineNumber = line; 11259 this.endLineNumber = endLineNumber; 11260 11261 // Work around issue under safari where we can't directly set the column value 11262 /* istanbul ignore next */ 11263 if (_Object$defineProperty) { 11264 Object.defineProperty(this, 'column', { 11265 value: column, 11266 enumerable: true 11267 }); 11268 Object.defineProperty(this, 'endColumn', { 11269 value: endColumn, 11270 enumerable: true 11271 }); 11272 } else { 11273 this.column = column; 11274 this.endColumn = endColumn; 11275 } 11276 } 11277 } catch (nop) { 11278 /* Ignore if the browser is very particular */ 11279 } 11280 } 11281 11282 Exception.prototype = new Error(); 11283 11284 exports['default'] = Exception; 11285 module.exports = exports['default']; 11286 11287/***/ }), 11288/* 7 */ 11289/***/ (function(module, exports, __webpack_require__) { 11290 11291 module.exports = { "default": __webpack_require__(8), __esModule: true }; 11292 11293/***/ }), 11294/* 8 */ 11295/***/ (function(module, exports, __webpack_require__) { 11296 11297 var $ = __webpack_require__(9); 11298 module.exports = function defineProperty(it, key, desc){ 11299 return $.setDesc(it, key, desc); 11300 }; 11301 11302/***/ }), 11303/* 9 */ 11304/***/ (function(module, exports) { 11305 11306 var $Object = Object; 11307 module.exports = { 11308 create: $Object.create, 11309 getProto: $Object.getPrototypeOf, 11310 isEnum: {}.propertyIsEnumerable, 11311 getDesc: $Object.getOwnPropertyDescriptor, 11312 setDesc: $Object.defineProperty, 11313 setDescs: $Object.defineProperties, 11314 getKeys: $Object.keys, 11315 getNames: $Object.getOwnPropertyNames, 11316 getSymbols: $Object.getOwnPropertySymbols, 11317 each: [].forEach 11318 }; 11319 11320/***/ }), 11321/* 10 */ 11322/***/ (function(module, exports, __webpack_require__) { 11323 11324 'use strict'; 11325 11326 var _interopRequireDefault = __webpack_require__(1)['default']; 11327 11328 exports.__esModule = true; 11329 exports.registerDefaultHelpers = registerDefaultHelpers; 11330 exports.moveHelperToHooks = moveHelperToHooks; 11331 11332 var _helpersBlockHelperMissing = __webpack_require__(11); 11333 11334 var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); 11335 11336 var _helpersEach = __webpack_require__(12); 11337 11338 var _helpersEach2 = _interopRequireDefault(_helpersEach); 11339 11340 var _helpersHelperMissing = __webpack_require__(65); 11341 11342 var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); 11343 11344 var _helpersIf = __webpack_require__(66); 11345 11346 var _helpersIf2 = _interopRequireDefault(_helpersIf); 11347 11348 var _helpersLog = __webpack_require__(67); 11349 11350 var _helpersLog2 = _interopRequireDefault(_helpersLog); 11351 11352 var _helpersLookup = __webpack_require__(68); 11353 11354 var _helpersLookup2 = _interopRequireDefault(_helpersLookup); 11355 11356 var _helpersWith = __webpack_require__(69); 11357 11358 var _helpersWith2 = _interopRequireDefault(_helpersWith); 11359 11360 function registerDefaultHelpers(instance) { 11361 _helpersBlockHelperMissing2['default'](instance); 11362 _helpersEach2['default'](instance); 11363 _helpersHelperMissing2['default'](instance); 11364 _helpersIf2['default'](instance); 11365 _helpersLog2['default'](instance); 11366 _helpersLookup2['default'](instance); 11367 _helpersWith2['default'](instance); 11368 } 11369 11370 function moveHelperToHooks(instance, helperName, keepHelper) { 11371 if (instance.helpers[helperName]) { 11372 instance.hooks[helperName] = instance.helpers[helperName]; 11373 if (!keepHelper) { 11374
11374delete instance.helpers[helperName]
vendor: 39,427 bytes, lines 11374-12760
11374; 11375 } 11376 } 11377 } 11378 11379/***/ }), 11380/* 11 */ 11381/***/ (function(module, exports, __webpack_require__) { 11382 11383 'use strict'; 11384 11385 exports.__esModule = true; 11386 11387 var _utils = __webpack_require__(5); 11388 11389 exports['default'] = function (instance) { 11390 instance.registerHelper('blockHelperMissing', function (context, options) { 11391 var inverse = options.inverse, 11392 fn = options.fn; 11393 11394 if (context === true) { 11395 return fn(this); 11396 } else if (context === false || context == null) { 11397 return inverse(this); 11398 } else if (_utils.isArray(context)) { 11399 if (context.length > 0) { 11400 if (options.ids) { 11401 options.ids = [options.name]; 11402 } 11403 11404 return instance.helpers.each(context, options); 11405 } else { 11406 return inverse(this); 11407 } 11408 } else { 11409 if (options.data && options.ids) { 11410 var data = _utils.createFrame(options.data); 11411 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); 11412 options = { data: data }; 11413 } 11414 11415 return fn(context, options); 11416 } 11417 }); 11418 }; 11419 11420 module.exports = exports['default']; 11421 11422/***/ }), 11423/* 12 */ 11424/***/ (function(module, exports, __webpack_require__) { 11425 11426 'use strict'; 11427 11428 var _Symbol = __webpack_require__(13)['default']; 11429 11430 var _Symbol$iterator = __webpack_require__(43)['default']; 11431 11432 var _getIterator = __webpack_require__(55)['default']; 11433 11434 var _Object$keys = __webpack_require__(60)['default']; 11435 11436 var _interopRequireDefault = __webpack_require__(1)['default']; 11437 11438 exports.__esModule = true; 11439 11440 var _utils = __webpack_require__(5); 11441 11442 var _exception = __webpack_require__(6); 11443 11444 var _exception2 = _interopRequireDefault(_exception); 11445 11446 exports['default'] = function (instance) { 11447 instance.registerHelper('each', function (context, options) { 11448 if (!options) { 11449 throw new _exception2['default']('Must pass iterator to #each'); 11450 } 11451 11452 var fn = options.fn, 11453 inverse = options.inverse, 11454 i = 0, 11455 ret = '', 11456 data = undefined, 11457 contextPath = undefined; 11458 11459 if (options.data && options.ids) { 11460 contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; 11461 } 11462 11463 if (_utils.isFunction(context)) { 11464 context = context.call(this); 11465 } 11466 11467 if (options.data) { 11468 data = _utils.createFrame(options.data); 11469 } 11470 11471 function execIteration(field, index, last) { 11472 if (data) { 11473 data.key = field; 11474 data.index = index; 11475 data.first = index === 0; 11476 data.last = !!last; 11477 11478 if (contextPath) { 11479 data.contextPath = contextPath + field; 11480 } 11481 } 11482 11483 ret = ret + fn(context[field], { 11484 data: data, 11485 blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) 11486 }); 11487 } 11488 11489 if (context && typeof context === 'object') { 11490 if (_utils.isArray(context)) { 11491 for (var j = context.length; i < j; i++) { 11492 if (i in context) { 11493 execIteration(i, i, i === context.length - 1); 11494 } 11495 } 11496 } else if (typeof _Symbol === 'function' && context[_Symbol$iterator]) { 11497 var newContext = []; 11498 var iterator = _getIterator(context); 11499 for (var it = iterator.next(); !it.done; it = iterator.next()) { 11500 newContext.push(it.value); 11501 } 11502 context = newContext; 11503 for (var j = context.length; i < j; i++) { 11504 execIteration(i, i, i === context.length - 1); 11505 } 11506 } else { 11507 (function () { 11508 var priorKey = undefined; 11509 11510 _Object$keys(context).forEach(function (key) { 11511 // We're running the iterations one step out of sync so we can detect 11512 // the last iteration without have to scan the object twice and create 11513 // an itermediate keys array. 11514 if (priorKey !== undefined) { 11515 execIteration(priorKey, i - 1); 11516 } 11517 priorKey = key; 11518 i++; 11519 }); 11520 if (priorKey !== undefined) { 11521 execIteration(priorKey, i - 1, true); 11522 } 11523 })(); 11524 } 11525 } 11526 11527 if (i === 0) { 11528 ret = inverse(this); 11529 } 11530 11531 return ret; 11532 }); 11533 }; 11534 11535 module.exports = exports['default']; 11536 11537/***/ }), 11538/* 13 */ 11539/***/ (function(module, exports, __webpack_require__) { 11540 11541 module.exports = { "default": __webpack_require__(14), __esModule: true }; 11542 11543/***/ }), 11544/* 14 */ 11545/***/ (function(module, exports, __webpack_require__) { 11546 11547 __webpack_require__(15); 11548 __webpack_require__(42); 11549 module.exports = __webpack_require__(21).Symbol; 11550 11551/***/ }), 11552/* 15 */ 11553/***/ (function(module, exports, __webpack_require__) { 11554 11555 'use strict'; 11556 // ECMAScript 6 symbols shim 11557 var $ = __webpack_require__(9) 11558 , global = __webpack_require__(16) 11559 , has = __webpack_require__(17) 11560 , DESCRIPTORS = __webpack_require__(18) 11561 , $export = __webpack_require__(20) 11562 , redefine = __webpack_require__(24) 11563 , $fails = __webpack_require__(19) 11564 , shared = __webpack_require__(27) 11565 , setToStringTag = __webpack_require__(28) 11566 , uid = __webpack_require__(30) 11567 , wks = __webpack_require__(29) 11568 , keyOf = __webpack_require__(31) 11569 , $names = __webpack_require__(36) 11570 , enumKeys = __webpack_require__(37) 11571 , isArray = __webpack_require__(38) 11572 , anObject = __webpack_require__(39) 11573 , toIObject = __webpack_require__(32) 11574 , createDesc = __webpack_require__(26) 11575 , getDesc = $.getDesc 11576 , setDesc = $.setDesc 11577 , _create = $.create 11578 , getNames = $names.get 11579 , $Symbol = global.Symbol 11580 , $JSON = global.JSON 11581 , _stringify = $JSON && $JSON.stringify 11582 , setter = false 11583 , HIDDEN = wks('_hidden') 11584 , isEnum = $.isEnum 11585 , SymbolRegistry = shared('symbol-registry') 11586 , AllSymbols = shared('symbols') 11587 , useNative = typeof $Symbol == 'function' 11588 , ObjectProto = Object.prototype; 11589 11590 // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 11591 var setSymbolDesc = DESCRIPTORS && $fails(function(){ 11592 return _create(setDesc({}, 'a', { 11593 get: function(){ return setDesc(this, 'a', {value: 7}).a; } 11594 })).a != 7; 11595 }) ? function(it, key, D){ 11596 var protoDesc = getDesc(ObjectProto, key); 11597 if(protoDesc)delete ObjectProto[key]; 11598 setDesc(it, key, D); 11599 if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc); 11600 } : setDesc; 11601 11602 var wrap = function(tag){ 11603 var sym = AllSymbols[tag] = _create($Symbol.prototype); 11604 sym._k = tag; 11605 DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, { 11606 configurable: true, 11607 set: function(value){ 11608 if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false; 11609 setSymbolDesc(this, tag, createDesc(1, value)); 11610 } 11611 }); 11612 return sym; 11613 }; 11614 11615 var isSymbol = function(it){ 11616 return typeof it == 'symbol'; 11617 }; 11618 11619 var $defineProperty = function defineProperty(it, key, D){ 11620 if(D && has(AllSymbols, key)){ 11621 if(!D.enumerable){ 11622 if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {})); 11623 it[HIDDEN][key] = true; 11624 } else { 11625 if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false; 11626 D = _create(D, {enumerable: createDesc(0, false)}); 11627 } return setSymbolDesc(it, key, D); 11628 } return setDesc(it, key, D); 11629 }; 11630 var $defineProperties = function defineProperties(it, P){ 11631 anObject(it); 11632 var keys = enumKeys(P = toIObject(P)) 11633 , i = 0 11634 , l = keys.length 11635 , key; 11636 while(l > i)$defineProperty(it, key = keys[i++], P[key]); 11637 return it; 11638 }; 11639 var $create = function create(it, P){ 11640 return P === undefined ? _create(it) : $defineProperties(_create(it), P); 11641 }; 11642 var $propertyIsEnumerable = function propertyIsEnumerable(key){ 11643 var E = isEnum.call(this, key); 11644 return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] 11645 ? E : true; 11646 }; 11647 var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){ 11648 var D = getDesc(it = toIObject(it), key); 11649 if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true; 11650 return D; 11651 }; 11652 var $getOwnPropertyNames = function getOwnPropertyNames(it){ 11653 var names = getNames(toIObject(it)) 11654 , result = [] 11655 , i = 0 11656 , key; 11657 while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key); 11658 return result; 11659 }; 11660 var $getOwnPropertySymbols = function getOwnPropertySymbols(it){ 11661 var names = getNames(toIObject(it)) 11662 , result = [] 11663 , i = 0 11664 , key; 11665 while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]); 11666 return result; 11667 }; 11668 var $stringify = function stringify(it){ 11669 if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined 11670 var args = [it] 11671 , i = 1 11672 , $$ = arguments 11673 , replacer, $replacer; 11674 while($$.length > i)args.push($$[i++]); 11675 replacer = args[1]; 11676 if(typeof replacer == 'function')$replacer = replacer; 11677 if($replacer || !isArray(replacer))replacer = function(key, value){ 11678 if($replacer)value = $replacer.call(this, key, value); 11679 if(!isSymbol(value))return value; 11680 }; 11681 args[1] = replacer; 11682 return _stringify.apply($JSON, args); 11683 }; 11684 var buggyJSON = $fails(function(){ 11685 var S = $Symbol(); 11686 // MS Edge converts symbol values to JSON as {} 11687 // WebKit converts symbol values to JSON as null 11688 // V8 throws on boxed symbols 11689 return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}'; 11690 }); 11691 11692 // 19.4.1.1 Symbol([description]) 11693 if(!useNative){ 11694 $Symbol = function Symbol(){ 11695 if(isSymbol(this))throw TypeError('Symbol is not a constructor'); 11696 return wrap(uid(arguments.length > 0 ? arguments[0] : undefined)); 11697 }; 11698 redefine($Symbol.prototype, 'toString', function toString(){ 11699 return this._k; 11700 }); 11701 11702 isSymbol = function(it){ 11703 return it instanceof $Symbol; 11704 }; 11705 11706 $.create = $create; 11707 $.isEnum = $propertyIsEnumerable; 11708 $.getDesc = $getOwnPropertyDescriptor; 11709 $.setDesc = $defineProperty; 11710 $.setDescs = $defineProperties; 11711 $.getNames = $names.get = $getOwnPropertyNames; 11712 $.getSymbols = $getOwnPropertySymbols; 11713 11714 if(DESCRIPTORS && !__webpack_require__(41)){ 11715 redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); 11716 } 11717 } 11718 11719 var symbolStatics = { 11720 // 19.4.2.1 Symbol.for(key) 11721 'for': function(key){ 11722 return has(SymbolRegistry, key += '') 11723 ? SymbolRegistry[key] 11724 : SymbolRegistry[key] = $Symbol(key); 11725 }, 11726 // 19.4.2.5 Symbol.keyFor(sym) 11727 keyFor: function keyFor(key){ 11728 return keyOf(SymbolRegistry, key); 11729 }, 11730 useSetter: function(){ setter = true; }, 11731 useSimple: function(){ setter = false; } 11732 }; 11733 // 19.4.2.2 Symbol.hasInstance 11734 // 19.4.2.3 Symbol.isConcatSpreadable 11735 // 19.4.2.4 Symbol.iterator 11736 // 19.4.2.6 Symbol.match 11737 // 19.4.2.8 Symbol.replace 11738 // 19.4.2.9 Symbol.search 11739 // 19.4.2.10 Symbol.species 11740 // 19.4.2.11 Symbol.split 11741 // 19.4.2.12 Symbol.toPrimitive 11742 // 19.4.2.13 Symbol.toStringTag 11743 // 19.4.2.14 Symbol.unscopables 11744 $.each.call(( 11745 'hasInstance,isConcatSpreadable,iterator,match,replace,search,' + 11746 'species,split,toPrimitive,toStringTag,unscopables' 11747 ).split(','), function(it){ 11748 var sym = wks(it); 11749 symbolStatics[it] = useNative ? sym : wrap(sym); 11750 }); 11751 11752 setter = true; 11753 11754 $export($export.G + $export.W, {Symbol: $Symbol}); 11755 11756 $export($export.S, 'Symbol', symbolStatics); 11757 11758 $export($export.S + $export.F * !useNative, 'Object', { 11759 // 19.1.2.2 Object.create(O [, Properties]) 11760 create: $create, 11761 // 19.1.2.4 Object.defineProperty(O, P, Attributes) 11762 defineProperty: $defineProperty, 11763 // 19.1.2.3 Object.defineProperties(O, Properties) 11764 defineProperties: $defineProperties, 11765 // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) 11766 getOwnPropertyDescriptor: $getOwnPropertyDescriptor, 11767 // 19.1.2.7 Object.getOwnPropertyNames(O) 11768 getOwnPropertyNames: $getOwnPropertyNames, 11769 // 19.1.2.8 Object.getOwnPropertySymbols(O) 11770 getOwnPropertySymbols: $getOwnPropertySymbols 11771 }); 11772 11773 // 24.3.2 JSON.stringify(value [, replacer [, space]]) 11774 $JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify}); 11775 11776 // 19.4.3.5 Symbol.prototype[@@toStringTag] 11777 setToStringTag($Symbol, 'Symbol'); 11778 // 20.2.1.9 Math[@@toStringTag] 11779 setToStringTag(Math, 'Math', true); 11780 // 24.3.3 JSON[@@toStringTag] 11781 setToStringTag(global.JSON, 'JSON', true); 11782 11783/***/ }), 11784/* 16 */ 11785/***/ (function(module, exports) { 11786 11787 // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 11788 var global = module.exports = typeof window != 'undefined' && window.Math == Math 11789 ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); 11790 if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef 11791 11792/***/ }), 11793/* 17 */ 11794/***/ (function(module, exports) { 11795 11796 var hasOwnProperty = {}.hasOwnProperty; 11797 module.exports = function(it, key){ 11798 return hasOwnProperty.call(it, key); 11799 }; 11800 11801/***/ }), 11802/* 18 */ 11803/***/ (function(module, exports, __webpack_require__) { 11804 11805 // Thank's IE8 for his funny defineProperty 11806 module.exports = !__webpack_require__(19)(function(){ 11807 return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; 11808 }); 11809 11810/***/ }), 11811/* 19 */ 11812/***/ (function(module, exports) { 11813 11814 module.exports = function(exec){ 11815 try { 11816 return !!exec(); 11817 } catch(e){ 11818 return true; 11819 } 11820 }; 11821 11822/***/ }), 11823/* 20 */ 11824/***/ (function(module, exports, __webpack_require__) { 11825 11826 var global = __webpack_require__(16) 11827 , core = __webpack_require__(21) 11828 , ctx = __webpack_require__(22) 11829 , PROTOTYPE = 'prototype'; 11830 11831 var $export = function(type, name, source){ 11832 var IS_FORCED = type & $export.F 11833 , IS_GLOBAL = type & $export.G 11834 , IS_STATIC = type & $export.S 11835 , IS_PROTO = type & $export.P 11836 , IS_BIND = type & $export.B 11837 , IS_WRAP = type & $export.W 11838 , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) 11839 , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] 11840 , key, own, out; 11841 if(IS_GLOBAL)source = name; 11842 for(key in source){ 11843 // contains in native 11844 own = !IS_FORCED && target && key in target; 11845 if(own && key in exports)continue; 11846 // export native or passed 11847 out = own ? target[key] : source[key]; 11848 // prevent global pollution for namespaces 11849 exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] 11850 // bind timers to global for call from export context 11851 : IS_BIND && own ? ctx(out, global) 11852 // wrap global constructors for prevent change them in library 11853 : IS_WRAP && target[key] == out ? (function(C){ 11854 var F = function(param){ 11855 return this instanceof C ? new C(param) : C(param); 11856 }; 11857 F[PROTOTYPE] = C[PROTOTYPE]; 11858 return F; 11859 // make static versions for prototype methods 11860 })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; 11861 if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; 11862 } 11863 }; 11864 // type bitmap 11865 $export.F = 1; // forced 11866 $export.G = 2; // global 11867 $export.S = 4; // static 11868 $export.P = 8; // proto 11869 $export.B = 16; // bind 11870 $export.W = 32; // wrap 11871 module.exports = $export; 11872 11873/***/ }), 11874/* 21 */ 11875/***/ (function(module, exports) { 11876 11877 var core = module.exports = {version: '1.2.6'}; 11878 if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef 11879 11880/***/ }), 11881/* 22 */ 11882/***/ (function(module, exports, __webpack_require__) { 11883 11884 // optional / simple context binding 11885 var aFunction = __webpack_require__(23); 11886 module.exports = function(fn, that, length){ 11887 aFunction(fn); 11888 if(that === undefined)return fn; 11889 switch(length){ 11890 case 1: return function(a){ 11891 return fn.call(that, a); 11892 }; 11893 case 2: return function(a, b){ 11894 return fn.call(that, a, b); 11895 }; 11896 case 3: return function(a, b, c){ 11897 return fn.call(that, a, b, c); 11898 }; 11899 } 11900 return function(/* ...args */){ 11901 return fn.apply(that, arguments); 11902 }; 11903 }; 11904 11905/***/ }), 11906/* 23 */ 11907/***/ (function(module, exports) { 11908 11909 module.exports = function(it){ 11910 if(typeof it != 'function')throw TypeError(it + ' is not a function!'); 11911 return it; 11912 }; 11913 11914/***/ }), 11915/* 24 */ 11916/***/ (function(module, exports, __webpack_require__) { 11917 11918 module.exports = __webpack_require__(25); 11919 11920/***/ }), 11921/* 25 */ 11922/***/ (function(module, exports, __webpack_require__) { 11923 11924 var $ = __webpack_require__(9) 11925 , createDesc = __webpack_require__(26); 11926 module.exports = __webpack_require__(18) ? function(object, key, value){ 11927 return $.setDesc(object, key, createDesc(1, value)); 11928 } : function(object, key, value){ 11929 object[key] = value; 11930 return object; 11931 }; 11932 11933/***/ }), 11934/* 26 */ 11935/***/ (function(module, exports) { 11936 11937 module.exports = function(bitmap, value){ 11938 return { 11939 enumerable : !(bitmap & 1), 11940 configurable: !(bitmap & 2), 11941 writable : !(bitmap & 4), 11942 value : value 11943 }; 11944 }; 11945 11946/***/ }), 11947/* 27 */ 11948/***/ (function(module, exports, __webpack_require__) { 11949 11950 var global = __webpack_require__(16) 11951 , SHARED = '__core-js_shared__' 11952 , store = global[SHARED] || (global[SHARED] = {}); 11953 module.exports = function(key){ 11954 return store[key] || (store[key] = {}); 11955 }; 11956 11957/***/ }), 11958/* 28 */ 11959/***/ (function(module, exports, __webpack_require__) { 11960 11961 var def = __webpack_require__(9).setDesc 11962 , has = __webpack_require__(17) 11963 , TAG = __webpack_require__(29)('toStringTag'); 11964 11965 module.exports = function(it, tag, stat){ 11966 if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); 11967 }; 11968 11969/***/ }), 11970/* 29 */ 11971/***/ (function(module, exports, __webpack_require__) { 11972 11973 var store = __webpack_require__(27)('wks') 11974 , uid = __webpack_require__(30) 11975 , Symbol = __webpack_require__(16).Symbol; 11976 module.exports = function(name){ 11977 return store[name] || (store[name] = 11978 Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name)); 11979 }; 11980 11981/***/ }), 11982/* 30 */ 11983/***/ (function(module, exports) { 11984 11985 var id = 0 11986 , px = Math.random(); 11987 module.exports = function(key){ 11988 return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); 11989 }; 11990 11991/***/ }), 11992/* 31 */ 11993/***/ (function(module, exports, __webpack_require__) { 11994 11995 var $ = __webpack_require__(9) 11996 , toIObject = __webpack_require__(32); 11997 module.exports = function(object, el){ 11998 var O = toIObject(object) 11999 , keys = $.getKeys(O) 12000 , length = keys.length 12001 , index = 0 12002 , key; 12003 while(length > index)if(O[key = keys[index++]] === el)return key; 12004 }; 12005 12006/***/ }), 12007/* 32 */ 12008/***/ (function(module, exports, __webpack_require__) { 12009 12010 // to indexed object, toObject with fallback for non-array-like ES3 strings 12011 var IObject = __webpack_require__(33) 12012 , defined = __webpack_require__(35); 12013 module.exports = function(it){ 12014 return IObject(defined(it)); 12015 }; 12016 12017/***/ }), 12018/* 33 */ 12019/***/ (function(module, exports, __webpack_require__) { 12020 12021 // fallback for non-array-like ES3 and non-enumerable old V8 strings 12022 var cof = __webpack_require__(34); 12023 module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ 12024 return cof(it) == 'String' ? it.split('') : Object(it); 12025 }; 12026 12027/***/ }), 12028/* 34 */ 12029/***/ (function(module, exports) { 12030 12031 var toString = {}.toString; 12032 12033 module.exports = function(it){ 12034 return toString.call(it).slice(8, -1); 12035 }; 12036 12037/***/ }), 12038/* 35 */ 12039/***/ (function(module, exports) { 12040 12041 // 7.2.1 RequireObjectCoercible(argument) 12042 module.exports = function(it){ 12043 if(it == undefined)throw TypeError("Can't call method on " + it); 12044 return it; 12045 }; 12046 12047/***/ }), 12048/* 36 */ 12049/***/ (function(module, exports, __webpack_require__) { 12050 12051 // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window 12052 var toIObject = __webpack_require__(32) 12053 , getNames = __webpack_require__(9).getNames 12054 , toString = {}.toString; 12055 12056 var windowNames = typeof window == 'object' && Object.getOwnPropertyNames 12057 ? Object.getOwnPropertyNames(window) : []; 12058 12059 var getWindowNames = function(it){ 12060 try { 12061 return getNames(it); 12062 } catch(e){ 12063 return windowNames.slice(); 12064 } 12065 }; 12066 12067 module.exports.get = function getOwnPropertyNames(it){ 12068 if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it); 12069 return getNames(toIObject(it)); 12070 }; 12071 12072/***/ }), 12073/* 37 */ 12074/***/ (function(module, exports, __webpack_require__) { 12075 12076 // all enumerable object keys, includes symbols 12077 var $ = __webpack_require__(9); 12078 module.exports = function(it){ 12079 var keys = $.getKeys(it) 12080 , getSymbols = $.getSymbols; 12081 if(getSymbols){ 12082 var symbols = getSymbols(it) 12083 , isEnum = $.isEnum 12084 , i = 0 12085 , key; 12086 while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key); 12087 } 12088 return keys; 12089 }; 12090 12091/***/ }), 12092/* 38 */ 12093/***/ (function(module, exports, __webpack_require__) { 12094 12095 // 7.2.2 IsArray(argument) 12096 var cof = __webpack_require__(34); 12097 module.exports = Array.isArray || function(arg){ 12098 return cof(arg) == 'Array'; 12099 }; 12100 12101/***/ }), 12102/* 39 */ 12103/***/ (function(module, exports, __webpack_require__) { 12104 12105 var isObject = __webpack_require__(40); 12106 module.exports = function(it){ 12107 if(!isObject(it))throw TypeError(it + ' is not an object!'); 12108 return it; 12109 }; 12110 12111/***/ }), 12112/* 40 */ 12113/***/ (function(module, exports) { 12114 12115 module.exports = function(it){ 12116 return typeof it === 'object' ? it !== null : typeof it === 'function'; 12117 }; 12118 12119/***/ }), 12120/* 41 */ 12121/***/ (function(module, exports) { 12122 12123 module.exports = true; 12124 12125/***/ }), 12126/* 42 */ 12127/***/ (function(module, exports) { 12128 12129 12130 12131/***/ }), 12132/* 43 */ 12133/***/ (function(module, exports, __webpack_require__) { 12134 12135 module.exports = { "default": __webpack_require__(44), __esModule: true }; 12136 12137/***/ }), 12138/* 44 */ 12139/***/ (function(module, exports, __webpack_require__) { 12140 12141 __webpack_require__(45); 12142 __webpack_require__(51); 12143 module.exports = __webpack_require__(29)('iterator'); 12144 12145/***/ }), 12146/* 45 */ 12147/***/ (function(module, exports, __webpack_require__) { 12148 12149 'use strict'; 12150 var $at = __webpack_require__(46)(true); 12151 12152 // 21.1.3.27 String.prototype[@@iterator]() 12153 __webpack_require__(48)(String, 'String', function(iterated){ 12154 this._t = String(iterated); // target 12155 this._i = 0; // next index 12156 // 21.1.5.2.1 %StringIteratorPrototype%.next() 12157 }, function(){ 12158 var O = this._t 12159 , index = this._i 12160 , point; 12161 if(index >= O.length)return {value: undefined, done: true}; 12162 point = $at(O, index); 12163 this._i += point.length; 12164 return {value: point, done: false}; 12165 }); 12166 12167/***/ }), 12168/* 46 */ 12169/***/ (function(module, exports, __webpack_require__) { 12170 12171 var toInteger = __webpack_require__(47) 12172 , defined = __webpack_require__(35); 12173 // true -> String#at 12174 // false -> String#codePointAt 12175 module.exports = function(TO_STRING){ 12176 return function(that, pos){ 12177 var s = String(defined(that)) 12178 , i = toInteger(pos) 12179 , l = s.length 12180 , a, b; 12181 if(i < 0 || i >= l)return TO_STRING ? '' : undefined; 12182 a = s.charCodeAt(i); 12183 return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff 12184 ? TO_STRING ? s.charAt(i) : a 12185 : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; 12186 }; 12187 }; 12188 12189/***/ }), 12190/* 47 */ 12191/***/ (function(module, exports) { 12192 12193 // 7.1.4 ToInteger 12194 var ceil = Math.ceil 12195 , floor = Math.floor; 12196 module.exports = function(it){ 12197 return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); 12198 }; 12199 12200/***/ }), 12201/* 48 */ 12202/***/ (function(module, exports, __webpack_require__) { 12203 12204 'use strict'; 12205 var LIBRARY = __webpack_require__(41) 12206 , $export = __webpack_require__(20) 12207 , redefine = __webpack_require__(24) 12208 , hide = __webpack_require__(25) 12209 , has = __webpack_require__(17) 12210 , Iterators = __webpack_require__(49) 12211 , $iterCreate = __webpack_require__(50) 12212 , setToStringTag = __webpack_require__(28) 12213 , getProto = __webpack_require__(9).getProto 12214 , ITERATOR = __webpack_require__(29)('iterator') 12215 , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` 12216 , FF_ITERATOR = '@@iterator' 12217 , KEYS = 'keys' 12218 , VALUES = 'values'; 12219 12220 var returnThis = function(){ return this; }; 12221 12222 module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ 12223 $iterCreate(Constructor, NAME, next); 12224 var getMethod = function(kind){ 12225 if(!BUGGY && kind in proto)return proto[kind]; 12226 switch(kind){ 12227 case KEYS: return function keys(){ return new Constructor(this, kind); }; 12228 case VALUES: return function values(){ return new Constructor(this, kind); }; 12229 } return function entries(){ return new Constructor(this, kind); }; 12230 }; 12231 var TAG = NAME + ' Iterator' 12232 , DEF_VALUES = DEFAULT == VALUES 12233 , VALUES_BUG = false 12234 , proto = Base.prototype 12235 , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] 12236 , $default = $native || getMethod(DEFAULT) 12237 , methods, key; 12238 // Fix native 12239 if($native){ 12240 var IteratorPrototype = getProto($default.call(new Base)); 12241 // Set @@toStringTag to native iterators 12242 setToStringTag(IteratorPrototype, TAG, true); 12243 // FF fix 12244 if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); 12245 // fix Array#{values, @@iterator}.name in V8 / FF 12246 if(DEF_VALUES && $native.name !== VALUES){ 12247 VALUES_BUG = true; 12248 $default = function values(){ return $native.call(this); }; 12249 } 12250 } 12251 // Define iterator 12252 if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ 12253 hide(proto, ITERATOR, $default); 12254 } 12255 // Plug for library 12256 Iterators[NAME] = $default; 12257 Iterators[TAG] = returnThis; 12258 if(DEFAULT){ 12259 methods = { 12260 values: DEF_VALUES ? $default : getMethod(VALUES), 12261 keys: IS_SET ? $default : getMethod(KEYS), 12262 entries: !DEF_VALUES ? $default : getMethod('entries') 12263 }; 12264 if(FORCED)for(key in methods){ 12265 if(!(key in proto))redefine(proto, key, methods[key]); 12266 } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); 12267 } 12268 return methods; 12269 }; 12270 12271/***/ }), 12272/* 49 */ 12273/***/ (function(module, exports) { 12274 12275 module.exports = {}; 12276 12277/***/ }), 12278/* 50 */ 12279/***/ (function(module, exports, __webpack_require__) { 12280 12281 'use strict'; 12282 var $ = __webpack_require__(9) 12283 , descriptor = __webpack_require__(26) 12284 , setToStringTag = __webpack_require__(28) 12285 , IteratorPrototype = {}; 12286 12287 // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() 12288 __webpack_require__(25)(IteratorPrototype, __webpack_require__(29)('iterator'), function(){ return this; }); 12289 12290 module.exports = function(Constructor, NAME, next){ 12291 Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)}); 12292 setToStringTag(Constructor, NAME + ' Iterator'); 12293 }; 12294 12295/***/ }), 12296/* 51 */ 12297/***/ (function(module, exports, __webpack_require__) { 12298 12299 __webpack_require__(52); 12300 var Iterators = __webpack_require__(49); 12301 Iterators.NodeList = Iterators.HTMLCollection = Iterators.Array; 12302 12303/***/ }), 12304/* 52 */ 12305/***/ (function(module, exports, __webpack_require__) { 12306 12307 'use strict'; 12308 var addToUnscopables = __webpack_require__(53) 12309 , step = __webpack_require__(54) 12310 , Iterators = __webpack_require__(49) 12311 , toIObject = __webpack_require__(32); 12312 12313 // 22.1.3.4 Array.prototype.entries() 12314 // 22.1.3.13 Array.prototype.keys() 12315 // 22.1.3.29 Array.prototype.values() 12316 // 22.1.3.30 Array.prototype[@@iterator]() 12317 module.exports = __webpack_require__(48)(Array, 'Array', function(iterated, kind){ 12318 this._t = toIObject(iterated); // target 12319 this._i = 0; // next index 12320 this._k = kind; // kind 12321 // 22.1.5.2.1 %ArrayIteratorPrototype%.next() 12322 }, function(){ 12323 var O = this._t 12324 , kind = this._k 12325 , index = this._i++; 12326 if(!O || index >= O.length){ 12327 this._t = undefined; 12328 return step(1); 12329 } 12330 if(kind == 'keys' )return step(0, index); 12331 if(kind == 'values')return step(0, O[index]); 12332 return step(0, [index, O[index]]); 12333 }, 'values'); 12334 12335 // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) 12336 Iterators.Arguments = Iterators.Array; 12337 12338 addToUnscopables('keys'); 12339 addToUnscopables('values'); 12340 addToUnscopables('entries'); 12341 12342/***/ }), 12343/* 53 */ 12344/***/ (function(module, exports) { 12345 12346 module.exports = function(){ /* empty */ }; 12347 12348/***/ }), 12349/* 54 */ 12350/***/ (function(module, exports) { 12351 12352 module.exports = function(done, value){ 12353 return {value: value, done: !!done}; 12354 }; 12355 12356/***/ }), 12357/* 55 */ 12358/***/ (function(module, exports, __webpack_require__) { 12359 12360 module.exports = { "default": __webpack_require__(56), __esModule: true }; 12361 12362/***/ }), 12363/* 56 */ 12364/***/ (function(module, exports, __webpack_require__) { 12365 12366 __webpack_require__(51); 12367 __webpack_require__(45); 12368 module.exports = __webpack_require__(57); 12369 12370/***/ }), 12371/* 57 */ 12372/***/ (function(module, exports, __webpack_require__) { 12373 12374 var anObject = __webpack_require__(39) 12375 , get = __webpack_require__(58); 12376 module.exports = __webpack_require__(21).getIterator = function(it){ 12377 var iterFn = get(it); 12378 if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!'); 12379 return anObject(iterFn.call(it)); 12380 }; 12381 12382/***/ }), 12383/* 58 */ 12384/***/ (function(module, exports, __webpack_require__) { 12385 12386 var classof = __webpack_require__(59) 12387 , ITERATOR = __webpack_require__(29)('iterator') 12388 , Iterators = __webpack_require__(49); 12389 module.exports = __webpack_require__(21).getIteratorMethod = function(it){ 12390 if(it != undefined)return it[ITERATOR] 12391 || it['@@iterator'] 12392 || Iterators[classof(it)]; 12393 }; 12394 12395/***/ }), 12396/* 59 */ 12397/***/ (function(module, exports, __webpack_require__) { 12398 12399 // getting tag from 19.1.3.6 Object.prototype.toString() 12400 var cof = __webpack_require__(34) 12401 , TAG = __webpack_require__(29)('toStringTag') 12402 // ES3 wrong here 12403 , ARG = cof(function(){ return arguments; }()) == 'Arguments'; 12404 12405 module.exports = function(it){ 12406 var O, T, B; 12407 return it === undefined ? 'Undefined' : it === null ? 'Null' 12408 // @@toStringTag case 12409 : typeof (T = (O = Object(it))[TAG]) == 'string' ? T 12410 // builtinTag case 12411 : ARG ? cof(O) 12412 // ES3 arguments fallback 12413 : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; 12414 }; 12415 12416/***/ }), 12417/* 60 */ 12418/***/ (function(module, exports, __webpack_require__) { 12419 12420 module.exports = { "default": __webpack_require__(61), __esModule: true }; 12421 12422/***/ }), 12423/* 61 */ 12424/***/ (function(module, exports, __webpack_require__) { 12425 12426 __webpack_require__(62); 12427 module.exports = __webpack_require__(21).Object.keys; 12428 12429/***/ }), 12430/* 62 */ 12431/***/ (function(module, exports, __webpack_require__) { 12432 12433 // 19.1.2.14 Object.keys(O) 12434 var toObject = __webpack_require__(63); 12435 12436 __webpack_require__(64)('keys', function($keys){ 12437 return function keys(it){ 12438 return $keys(toObject(it)); 12439 }; 12440 }); 12441 12442/***/ }), 12443/* 63 */ 12444/***/ (function(module, exports, __webpack_require__) { 12445 12446 // 7.1.13 ToObject(argument) 12447 var defined = __webpack_require__(35); 12448 module.exports = function(it){ 12449 return Object(defined(it)); 12450 }; 12451 12452/***/ }), 12453/* 64 */ 12454/***/ (function(module, exports, __webpack_require__) { 12455 12456 // most Object methods by ES6 should accept primitives 12457 var $export = __webpack_require__(20) 12458 , core = __webpack_require__(21) 12459 , fails = __webpack_require__(19); 12460 module.exports = function(KEY, exec){ 12461 var fn = (core.Object || {})[KEY] || Object[KEY] 12462 , exp = {}; 12463 exp[KEY] = exec(fn); 12464 $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); 12465 }; 12466 12467/***/ }), 12468/* 65 */ 12469/***/ (function(module, exports, __webpack_require__) { 12470 12471 'use strict'; 12472 12473 var _interopRequireDefault = __webpack_require__(1)['default']; 12474 12475 exports.__esModule = true; 12476 12477 var _exception = __webpack_require__(6); 12478 12479 var _exception2 = _interopRequireDefault(_exception); 12480 12481 exports['default'] = function (instance) { 12482 instance.registerHelper('helperMissing', function () /* [args, ]options */{ 12483 if (arguments.length === 1) { 12484 // A missing field in a {{foo}} construct. 12485 return undefined; 12486 } else { 12487 // Someone is actually trying to call something, blow up. 12488 throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); 12489 } 12490 }); 12491 }; 12492 12493 module.exports = exports['default']; 12494 12495/***/ }), 12496/* 66 */ 12497/***/ (function(module, exports, __webpack_require__) { 12498 12499 'use strict'; 12500 12501 var _interopRequireDefault = __webpack_require__(1)['default']; 12502 12503 exports.__esModule = true; 12504 12505 var _utils = __webpack_require__(5); 12506 12507 var _exception = __webpack_require__(6); 12508 12509 var _exception2 = _interopRequireDefault(_exception); 12510 12511 exports['default'] = function (instance) { 12512 instance.registerHelper('if', function (conditional, options) { 12513 if (arguments.length != 2) { 12514 throw new _exception2['default']('#if requires exactly one argument'); 12515 } 12516 if (_utils.isFunction(conditional)) { 12517 conditional = conditional.call(this); 12518 } 12519 12520 // Default behavior is to render the positive path if the value is truthy and not empty. 12521 // The `includeZero` option may be set to treat the condtional as purely not empty based on the 12522 // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. 12523 if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { 12524 return options.inverse(this); 12525 } else { 12526 return options.fn(this); 12527 } 12528 }); 12529 12530 instance.registerHelper('unless', function (conditional, options) { 12531 if (arguments.length != 2) { 12532 throw new _exception2['default']('#unless requires exactly one argument'); 12533 } 12534 return instance.helpers['if'].call(this, conditional, { 12535 fn: options.inverse, 12536 inverse: options.fn, 12537 hash: options.hash 12538 }); 12539 }); 12540 }; 12541 12542 module.exports = exports['default']; 12543 12544/***/ }), 12545/* 67 */ 12546/***/ (function(module, exports) { 12547 12548 'use strict'; 12549 12550 exports.__esModule = true; 12551 12552 exports['default'] = function (instance) { 12553 instance.registerHelper('log', function () /* message, options */{ 12554 var args = [undefined], 12555 options = arguments[arguments.length - 1]; 12556 for (var i = 0; i < arguments.length - 1; i++) { 12557 args.push(arguments[i]); 12558 } 12559 12560 var level = 1; 12561 if (options.hash.level != null) { 12562 level = options.hash.level; 12563 } else if (options.data && options.data.level != null) { 12564 level = options.data.level; 12565 } 12566 args[0] = level; 12567 12568 instance.log.apply(instance, args); 12569 }); 12570 }; 12571 12572 module.exports = exports['default']; 12573 12574/***/ }), 12575/* 68 */ 12576/***/ (function(module, exports) { 12577 12578 'use strict'; 12579 12580 exports.__esModule = true; 12581 12582 exports['default'] = function (instance) { 12583 instance.registerHelper('lookup', function (obj, field, options) { 12584 if (!obj) { 12585 // Note for 5.0: Change to "obj == null" in 5.0 12586 return obj; 12587 } 12588 return options.lookupProperty(obj, field); 12589 }); 12590 }; 12591 12592 module.exports = exports['default']; 12593 12594/***/ }), 12595/* 69 */ 12596/***/ (function(module, exports, __webpack_require__) { 12597 12598 'use strict'; 12599 12600 var _interopRequireDefault = __webpack_require__(1)['default']; 12601 12602 exports.__esModule = true; 12603 12604 var _utils = __webpack_require__(5); 12605 12606 var _exception = __webpack_require__(6); 12607 12608 var _exception2 = _interopRequireDefault(_exception); 12609 12610 exports['default'] = function (instance) { 12611 instance.registerHelper('with', function (context, options) { 12612 if (arguments.length != 2) { 12613 throw new _exception2['default']('#with requires exactly one argument'); 12614 } 12615 if (_utils.isFunction(context)) { 12616 context = context.call(this); 12617 } 12618 12619 var fn = options.fn; 12620 12621 if (!_utils.isEmpty(context)) { 12622 var data = options.data; 12623 if (options.data && options.ids) { 12624 data = _utils.createFrame(options.data); 12625 data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); 12626 } 12627 12628 return fn(context, { 12629 data: data, 12630 blockParams: _utils.blockParams([context], [data && data.contextPath]) 12631 }); 12632 } else { 12633 return options.inverse(this); 12634 } 12635 }); 12636 }; 12637 12638 module.exports = exports['default']; 12639 12640/***/ }), 12641/* 70 */ 12642/***/ (function(module, exports, __webpack_require__) { 12643 12644 'use strict'; 12645 12646 var _interopRequireDefault = __webpack_require__(1)['default']; 12647 12648 exports.__esModule = true; 12649 exports.registerDefaultDecorators = registerDefaultDecorators; 12650 12651 var _decoratorsInline = __webpack_require__(71); 12652 12653 var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); 12654 12655 function registerDefaultDecorators(instance) { 12656 _decoratorsInline2['default'](instance); 12657 } 12658 12659/***/ }), 12660/* 71 */ 12661/***/ (function(module, exports, __webpack_require__) { 12662 12663 'use strict'; 12664 12665 exports.__esModule = true; 12666 12667 var _utils = __webpack_require__(5); 12668 12669 exports['default'] = function (instance) { 12670 instance.registerDecorator('inline', function (fn, props, container, options) { 12671 var ret = fn; 12672 if (!props.partials) { 12673 props.partials = {}; 12674 ret = function (context, options) { 12675 // Create a new partials stack frame prior to exec. 12676 var original = container.partials; 12677 container.partials = _utils.extend({}, original, props.partials); 12678 var ret = fn(context, options); 12679 container.partials = original; 12680 return ret; 12681 }; 12682 } 12683 12684 props.partials[options.args[0]] = options.fn; 12685 12686 return ret; 12687 }); 12688 }; 12689 12690 module.exports = exports['default']; 12691 12692/***/ }), 12693/* 72 */ 12694/***/ (function(module, exports, __webpack_require__) { 12695 12696 'use strict'; 12697 12698 exports.__esModule = true; 12699 12700 var _utils = __webpack_require__(5); 12701 12702 var logger = { 12703 methodMap: ['debug', 'info', 'warn', 'error'], 12704 level: 'info', 12705 12706 // Maps a given level value to the `methodMap` indexes above. 12707 lookupLevel: function lookupLevel(level) { 12708 if (typeof level === 'string') { 12709 var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); 12710 if (levelMap >= 0) { 12711 level = levelMap; 12712 } else { 12713 level = parseInt(level, 10); 12714 } 12715 } 12716 12717 return level; 12718 }, 12719 12720 // Can be overridden in the host environment 12721 log: function log(level) { 12722 level = logger.lookupLevel(level); 12723 12724 if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { 12725 var method = logger.methodMap[level]; 12726 // eslint-disable-next-line no-console 12727 if (!console[method]) { 12728 method = 'log'; 12729 } 12730 12731 for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 12732 message[_key - 1] = arguments[_key]; 12733 } 12734 12735 console[method].apply(console, message); // eslint-disable-line no-console 12736 } 12737 } 12738 }; 12739 12740 exports['default'] = logger; 12741 module.exports = exports['default']; 12742 12743/***/ }), 12744/* 73 */ 12745/***/ (function(module, exports, __webpack_require__) { 12746 12747 'use strict'; 12748 12749 var _Object$create = __webpack_require__(74)['default']; 12750 12751 var _Object$keys = __webpack_require__(60)['default']; 12752 12753 var _interopRequireDefault = __webpack_require__(1)['default']; 12754 12755 exports.__esModule = true; 12756 exports.createProtoAccessControl = createProtoAccessControl; 12757 exports.resultIsAllowed = resultIsAllowed; 12758 exports.resetLoggedProperties = resetLoggedProperties; 12759 12760 var _
12760createNewLookupObject = __webpack_require__(76); 12761 12762 var _logger = __webpack_require__(72); 12763 12764 var _logger2 = _interopRequireDefault(_logger); 12765 12766 var loggedProperties = _Object$create(null); 12767 12768 function createProtoAccessControl(runtimeOptions) { 12769 var defaultMethodWhiteList = _Object$create(null); 12770 defaultMethodWhiteList['constructor'] = false;
vendor: 11,824 bytes, lines 12771-13119
12771 defaultMethodWhiteList['__defineGetter__'] = false; 12772 defaultMethodWhiteList['__defineSetter__'] = false; 12773 defaultMethodWhiteList['__lookupGetter__'] = false; 12774 12775 var defaultPropertyWhiteList = _Object$create(null); 12776 // eslint-disable-next-line no-proto 12777 defaultPropertyWhiteList['__proto__'] = false; 12778 12779 return { 12780 properties: { 12781 whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties), 12782 defaultValue: runtimeOptions.allowProtoPropertiesByDefault 12783 }, 12784 methods: { 12785 whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods), 12786 defaultValue: runtimeOptions.allowProtoMethodsByDefault 12787 } 12788 }; 12789 } 12790 12791 function resultIsAllowed(result, protoAccessControl, propertyName) { 12792 if (typeof result === 'function') { 12793 return checkWhiteList(protoAccessControl.methods, propertyName); 12794 } else { 12795 return checkWhiteList(protoAccessControl.properties, propertyName); 12796 } 12797 } 12798 12799 function checkWhiteList(protoAccessControlForType, propertyName) { 12800 if (protoAccessControlForType.whitelist[propertyName] !== undefined) { 12801 return protoAccessControlForType.whitelist[propertyName] === true; 12802 } 12803 if (protoAccessControlForType.defaultValue !== undefined) { 12804 return protoAccessControlForType.defaultValue; 12805 } 12806 logUnexpecedPropertyAccessOnce(propertyName); 12807 return false; 12808 } 12809 12810 function logUnexpecedPropertyAccessOnce(propertyName) { 12811 if (loggedProperties[propertyName] !== true) { 12812 loggedProperties[propertyName] = true; 12813 _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'); 12814 } 12815 } 12816 12817 function resetLoggedProperties() { 12818 _Object$keys(loggedProperties).forEach(function (propertyName) { 12819 delete loggedProperties[propertyName]; 12820 }); 12821 } 12822 12823/***/ }), 12824/* 74 */ 12825/***/ (function(module, exports, __webpack_require__) { 12826 12827 module.exports = { "default": __webpack_require__(75), __esModule: true }; 12828 12829/***/ }), 12830/* 75 */ 12831/***/ (function(module, exports, __webpack_require__) { 12832 12833 var $ = __webpack_require__(9); 12834 module.exports = function create(P, D){ 12835 return $.create(P, D); 12836 }; 12837 12838/***/ }), 12839/* 76 */ 12840/***/ (function(module, exports, __webpack_require__) { 12841 12842 'use strict'; 12843 12844 var _Object$create = __webpack_require__(74)['default']; 12845 12846 exports.__esModule = true; 12847 exports.createNewLookupObject = createNewLookupObject; 12848 12849 var _utils = __webpack_require__(5); 12850 12851 /** 12852 * Create a new object with "null"-prototype to avoid truthy results on prototype properties. 12853 * The resulting object can be used with "object[property]" to check if a property exists 12854 * @param {...object} sources a varargs parameter of source objects that will be merged 12855 * @returns {object} 12856 */ 12857 12858 function createNewLookupObject() { 12859 for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { 12860 sources[_key] = arguments[_key]; 12861 } 12862 12863 return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources)); 12864 } 12865 12866/***/ }), 12867/* 77 */ 12868/***/ (function(module, exports) { 12869 12870 // Build out our basic SafeString type 12871 'use strict'; 12872 12873 exports.__esModule = true; 12874 function SafeString(string) { 12875 this.string = string; 12876 } 12877 12878 SafeString.prototype.toString = SafeString.prototype.toHTML = function () { 12879 return '' + this.string; 12880 }; 12881 12882 exports['default'] = SafeString; 12883 module.exports = exports['default']; 12884 12885/***/ }), 12886/* 78 */ 12887/***/ (function(module, exports, __webpack_require__) { 12888 12889 'use strict'; 12890 12891 var _Object$seal = __webpack_require__(79)['default']; 12892 12893 var _Object$keys = __webpack_require__(60)['default']; 12894 12895 var _interopRequireWildcard = __webpack_require__(3)['default']; 12896 12897 var _interopRequireDefault = __webpack_require__(1)['default']; 12898 12899 exports.__esModule = true; 12900 exports.checkRevision = checkRevision; 12901 exports.template = template; 12902 exports.wrapProgram = wrapProgram; 12903 exports.resolvePartial = resolvePartial; 12904 exports.invokePartial = invokePartial; 12905 exports.noop = noop; 12906 12907 var _utils = __webpack_require__(5); 12908 12909 var Utils = _interopRequireWildcard(_utils); 12910 12911 var _exception = __webpack_require__(6); 12912 12913 var _exception2 = _interopRequireDefault(_exception); 12914 12915 var _base = __webpack_require__(4); 12916 12917 var _helpers = __webpack_require__(10); 12918 12919 var _internalWrapHelper = __webpack_require__(82); 12920 12921 var _internalProtoAccess = __webpack_require__(73); 12922 12923 function checkRevision(compilerInfo) { 12924 var compilerRevision = compilerInfo && compilerInfo[0] || 1, 12925 currentRevision = _base.COMPILER_REVISION; 12926 12927 if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) { 12928 return; 12929 } 12930 12931 if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) { 12932 var runtimeVersions = _base.REVISION_CHANGES[currentRevision], 12933 compilerVersions = _base.REVISION_CHANGES[compilerRevision]; 12934 throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); 12935 } else { 12936 // Use the embedded version info since the runtime doesn't know about this revision yet 12937 throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); 12938 } 12939 } 12940 12941 function template(templateSpec, env) { 12942 /* istanbul ignore next */ 12943 if (!env) { 12944 throw new _exception2['default']('No environment passed to template'); 12945 } 12946 if (!templateSpec || !templateSpec.main) { 12947 throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); 12948 } 12949 12950 templateSpec.main.decorator = templateSpec.main_d; 12951 12952 // Note: Using env.VM references rather than local var references throughout this section to allow 12953 // for external users to override these as pseudo-supported APIs. 12954 env.VM.checkRevision(templateSpec.compiler); 12955 12956 // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0) 12957 var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7; 12958 12959 function invokePartialWrapper(partial, context, options) { 12960 if (options.hash) { 12961 context = Utils.extend({}, context, options.hash); 12962 if (options.ids) { 12963 options.ids[0] = true; 12964 } 12965 } 12966 partial = env.VM.resolvePartial.call(this, partial, context, options); 12967 12968 var extendedOptions = Utils.extend({}, options, { 12969 hooks: this.hooks, 12970 protoAccessControl: this.protoAccessControl 12971 }); 12972 12973 var result = env.VM.invokePartial.call(this, partial, context, extendedOptions); 12974 12975 if (result == null && env.compile) { 12976 options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); 12977 result = options.partials[options.name](context, extendedOptions); 12978 } 12979 if (result != null) { 12980 if (options.indent) { 12981 var lines = result.split('\n'); 12982 for (var i = 0, l = lines.length; i < l; i++) { 12983 if (!lines[i] && i + 1 === l) { 12984 break; 12985 } 12986 12987 lines[i] = options.indent + lines[i]; 12988 } 12989 result = lines.join('\n'); 12990 } 12991 return result; 12992 } else { 12993 throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); 12994 } 12995 } 12996 12997 // Just add water 12998 var container = { 12999 strict: function strict(obj, name, loc) { 13000 if (!obj || !(name in obj)) { 13001 throw new _exception2['default']('"' + name + '" not defined in ' + obj, { 13002 loc: loc 13003 }); 13004 } 13005 return container.lookupProperty(obj, name); 13006 }, 13007 lookupProperty: function lookupProperty(parent, propertyName) { 13008 var result = parent[propertyName]; 13009 if (result == null) { 13010 return result; 13011 } 13012 if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { 13013 return result; 13014 } 13015 13016 if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) { 13017 return result; 13018 } 13019 return undefined; 13020 }, 13021 lookup: function lookup(depths, name) { 13022 var len = depths.length; 13023 for (var i = 0; i < len; i++) { 13024 var result = depths[i] && container.lookupProperty(depths[i], name); 13025 if (result != null) { 13026 return depths[i][name]; 13027 } 13028 } 13029 }, 13030 lambda: function lambda(current, context) { 13031 return typeof current === 'function' ? current.call(context) : current; 13032 }, 13033 13034 escapeExpression: Utils.escapeExpression, 13035 invokePartial: invokePartialWrapper, 13036 13037 fn: function fn(i) { 13038 var ret = templateSpec[i]; 13039 ret.decorator = templateSpec[i + '_d']; 13040 return ret; 13041 }, 13042 13043 programs: [], 13044 program: function program(i, data, declaredBlockParams, blockParams, depths) { 13045 var programWrapper = this.programs[i], 13046 fn = this.fn(i); 13047 if (data || depths || blockParams || declaredBlockParams) { 13048 programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); 13049 } else if (!programWrapper) { 13050 programWrapper = this.programs[i] = wrapProgram(this, i, fn); 13051 } 13052 return programWrapper; 13053 }, 13054 13055 data: function data(value, depth) { 13056 while (value && depth--) { 13057 value = value._parent; 13058 } 13059 return value; 13060 }, 13061 mergeIfNeeded: function mergeIfNeeded(param, common) { 13062 var obj = param || common; 13063 13064 if (param && common && param !== common) { 13065 obj = Utils.extend({}, common, param); 13066 } 13067 13068 return obj; 13069 }, 13070 // An empty object to use as replacement for null-contexts 13071 nullContext: _Object$seal({}), 13072 13073 noop: env.VM.noop, 13074 compilerInfo: templateSpec.compiler 13075 }; 13076 13077 function ret(context) { 13078 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; 13079 13080 var data = options.data; 13081 13082 ret._setup(options); 13083 if (!options.partial && templateSpec.useData) { 13084 data = initData(context, data); 13085 } 13086 var depths = undefined, 13087 blockParams = templateSpec.useBlockParams ? [] : undefined; 13088 if (templateSpec.useDepths) { 13089 if (options.depths) { 13090 depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; 13091 } else { 13092 depths = [context]; 13093 } 13094 } 13095 13096 function main(context /*, options*/) { 13097 return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); 13098 } 13099 13100 main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); 13101 return main(context, options); 13102 } 13103 13104 ret.isTop = true; 13105 13106 ret._setup = function (options) { 13107 if (!options.partial) { 13108 var mergedHelpers = Utils.extend({}, env.helpers, options.helpers); 13109 wrapHelpersToPassLookupProperty(mergedHelpers, container); 13110 container.helpers = mergedHelpers; 13111 13112 if (templateSpec.usePartial) { 13113 // Use mergeIfNeeded here to prevent compiling global partials multiple times 13114 container.partials = container.mergeIfNeeded(options.partials, env.partials); 13115 } 13116 if (templateSpec.usePartial || templateSpec.useDecorators) { 13117 container.decorators = Utils.extend({}, env.decorators, options.decorators); 13118 } 13119
vendor: 4,565 bytes, lines 13120-13248
13120 container.hooks = {}; 13121 container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options); 13122 13123 var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7; 13124 _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers); 13125 _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers); 13126 } else { 13127 container.protoAccessControl = options.protoAccessControl; // internal option 13128 container.helpers = options.helpers; 13129 container.partials = options.partials; 13130 container.decorators = options.decorators; 13131 container.hooks = options.hooks; 13132 } 13133 }; 13134 13135 ret._child = function (i, data, blockParams, depths) { 13136 if (templateSpec.useBlockParams && !blockParams) { 13137 throw new _exception2['default']('must pass block params'); 13138 } 13139 if (templateSpec.useDepths && !depths) { 13140 throw new _exception2['default']('must pass parent depths'); 13141 } 13142 13143 return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); 13144 }; 13145 return ret; 13146 } 13147 13148 function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { 13149 function prog(context) { 13150 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; 13151 13152 var currentDepths = depths; 13153 if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { 13154 currentDepths = [context].concat(depths); 13155 } 13156 13157 return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); 13158 } 13159 13160 prog = executeDecorators(fn, prog, container, depths, data, blockParams); 13161 13162 prog.program = i; 13163 prog.depth = depths ? depths.length : 0; 13164 prog.blockParams = declaredBlockParams || 0; 13165 return prog; 13166 } 13167 13168 /** 13169 * This is currently part of the official API, therefore implementation details should not be changed. 13170 */ 13171 13172 function resolvePartial(partial, context, options) { 13173 if (!partial) { 13174 if (options.name === '@partial-block') { 13175 partial = options.data['partial-block']; 13176 } else { 13177 partial = options.partials[options.name]; 13178 } 13179 } else if (!partial.call && !options.name) { 13180 // This is a dynamic partial that returned a string 13181 options.name = partial; 13182 partial = options.partials[partial]; 13183 } 13184 return partial; 13185 } 13186 13187 function invokePartial(partial, context, options) { 13188 // Use the current closure context to save the partial-block if this partial 13189 var currentPartialBlock = options.data && options.data['partial-block']; 13190 options.partial = true; 13191 if (options.ids) { 13192 options.data.contextPath = options.ids[0] || options.data.contextPath; 13193 } 13194 13195 var partialBlock = undefined; 13196 if (options.fn && options.fn !== noop) { 13197 (function () { 13198 options.data = _base.createFrame(options.data); 13199 // Wrapper function to get access to currentPartialBlock from the closure 13200 var fn = options.fn; 13201 partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { 13202 var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; 13203 13204 // Restore the partial-block from the closure for the execution of the block 13205 // i.e. the part inside the block of the partial call. 13206 options.data = _base.createFrame(options.data); 13207 options.data['partial-block'] = currentPartialBlock; 13208 return fn(context, options); 13209 }; 13210 if (fn.partials) { 13211 options.partials = Utils.extend({}, options.partials, fn.partials); 13212 } 13213 })(); 13214 } 13215 13216 if (partial === undefined && partialBlock) { 13217 partial = partialBlock; 13218 } 13219 13220 if (partial === undefined) { 13221 throw new _exception2['default']('The partial ' + options.name + ' could not be found'); 13222 } else if (partial instanceof Function) { 13223 return partial(context, options); 13224 } 13225 } 13226 13227 function noop() { 13228 return ''; 13229 } 13230 13231 function initData(context, data) { 13232 if (!data || !('root' in data)) { 13233 data = data ? _base.createFrame(data) : {}; 13234 data.root = context; 13235 } 13236 return data; 13237 } 13238 13239 function executeDecorators(fn, prog, container, depths, data, blockParams) { 13240 if (fn.decorator) { 13241 var props = {}; 13242 prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); 13243 Utils.extend(prog, props); 13244 } 13245 return prog; 13246 } 13247 13248 function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
vendor: 9,825 bytes, lines 13249-13484
13249 _Object$keys(mergedHelpers).forEach(function (helperName) { 13250 var helper = mergedHelpers[helperName]; 13251 mergedHelpers[helperName] = passLookupPropertyOption(helper, container); 13252 }); 13253 } 13254 13255 function passLookupPropertyOption(helper, container) { 13256 var lookupProperty = container.lookupProperty; 13257 return _internalWrapHelper.wrapHelper(helper, function (options) { 13258 return Utils.extend({ lookupProperty: lookupProperty }, options); 13259 }); 13260 } 13261 13262/***/ }), 13263/* 79 */ 13264/***/ (function(module, exports, __webpack_require__) { 13265 13266 module.exports = { "default": __webpack_require__(80), __esModule: true }; 13267 13268/***/ }), 13269/* 80 */ 13270/***/ (function(module, exports, __webpack_require__) { 13271 13272 __webpack_require__(81); 13273 module.exports = __webpack_require__(21).Object.seal; 13274 13275/***/ }), 13276/* 81 */ 13277/***/ (function(module, exports, __webpack_require__) { 13278 13279 // 19.1.2.17 Object.seal(O) 13280 var isObject = __webpack_require__(40); 13281 13282 __webpack_require__(64)('seal', function($seal){ 13283 return function seal(it){ 13284 return $seal && isObject(it) ? $seal(it) : it; 13285 }; 13286 }); 13287 13288/***/ }), 13289/* 82 */ 13290/***/ (function(module, exports) { 13291 13292 'use strict'; 13293 13294 exports.__esModule = true; 13295 exports.wrapHelper = wrapHelper; 13296 13297 function wrapHelper(helper, transformOptionsFn) { 13298 if (typeof helper !== 'function') { 13299 // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639 13300 // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function. 13301 return helper; 13302 } 13303 var wrapper = function wrapper() /* dynamic arguments */{ 13304 var options = arguments[arguments.length - 1]; 13305 arguments[arguments.length - 1] = transformOptionsFn(options); 13306 return helper.apply(this, arguments); 13307 }; 13308 return wrapper; 13309 } 13310 13311/***/ }), 13312/* 83 */ 13313/***/ (function(module, exports) { 13314 13315 /* global globalThis */ 13316 'use strict'; 13317 13318 exports.__esModule = true; 13319 13320 exports['default'] = function (Handlebars) { 13321 /* istanbul ignore next */ 13322 // https://mathiasbynens.be/notes/globalthis 13323 (function () { 13324 if (typeof globalThis === 'object') return; 13325 Object.prototype.__defineGetter__('__magic__', function () { 13326 return this; 13327 }); 13328 __magic__.globalThis = __magic__; // eslint-disable-line no-undef 13329 delete Object.prototype.__magic__; 13330 })(); 13331 13332 var $Handlebars = globalThis.Handlebars; 13333 13334 /* istanbul ignore next */ 13335 Handlebars.noConflict = function () { 13336 if (globalThis.Handlebars === Handlebars) { 13337 globalThis.Handlebars = $Handlebars; 13338 } 13339 return Handlebars; 13340 }; 13341 }; 13342 13343 module.exports = exports['default']; 13344 13345/***/ }), 13346/* 84 */ 13347/***/ (function(module, exports) { 13348 13349 'use strict'; 13350 13351 exports.__esModule = true; 13352 var AST = { 13353 // Public API used to evaluate derived attributes regarding AST nodes 13354 helpers: { 13355 // a mustache is definitely a helper if: 13356 // * it is an eligible helper, and 13357 // * it has at least one parameter or hash segment 13358 helperExpression: function helperExpression(node) { 13359 return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); 13360 }, 13361 13362 scopedId: function scopedId(path) { 13363 return (/^\.|this\b/.test(path.original) 13364 ); 13365 }, 13366 13367 // an ID is simple if it only has one part, and that part is not 13368 // `..` or `this`. 13369 simpleId: function simpleId(path) { 13370 return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; 13371 } 13372 } 13373 }; 13374 13375 // Must be exported as an object rather than the root of the module as the jison lexer 13376 // must modify the object to operate properly. 13377 exports['default'] = AST; 13378 module.exports = exports['default']; 13379 13380/***/ }), 13381/* 85 */ 13382/***/ (function(module, exports, __webpack_require__) { 13383 13384 'use strict'; 13385 13386 var _interopRequireDefault = __webpack_require__(1)['default']; 13387 13388 var _interopRequireWildcard = __webpack_require__(3)['default']; 13389 13390 exports.__esModule = true; 13391 exports.parseWithoutProcessing = parseWithoutProcessing; 13392 exports.parse = parse; 13393 13394 var _parser = __webpack_require__(86); 13395 13396 var _parser2 = _interopRequireDefault(_parser); 13397 13398 var _whitespaceControl = __webpack_require__(87); 13399 13400 var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl); 13401 13402 var _helpers = __webpack_require__(89); 13403 13404 var Helpers = _interopRequireWildcard(_helpers); 13405 13406 var _utils = __webpack_require__(5); 13407 13408 exports.parser = _parser2['default']; 13409 13410 var yy = {}; 13411 _utils.extend(yy, Helpers); 13412 13413 function parseWithoutProcessing(input, options) { 13414 // Just return if an already-compiled AST was passed in. 13415 if (input.type === 'Program') { 13416 return input; 13417 } 13418 13419 _parser2['default'].yy = yy; 13420 13421 // Altering the shared object here, but this is ok as parser is a sync operation 13422 yy.locInfo = function (locInfo) { 13423 return new yy.SourceLocation(options && options.srcName, locInfo); 13424 }; 13425 13426 var ast = _parser2['default'].parse(input); 13427 13428 return ast; 13429 } 13430 13431 function parse(input, options) { 13432 var ast = parseWithoutProcessing(input, options); 13433 var strip = new _whitespaceControl2['default'](options); 13434 13435 return strip.accept(ast); 13436 } 13437 13438/***/ }), 13439/* 86 */ 13440/***/ (function(module, exports) { 13441 13442 // File ignored in coverage tests via setting in .istanbul.yml 13443 /* Jison generated parser */ 13444 "use strict"; 13445 13446 exports.__esModule = true; 13447 var handlebars = (function () { 13448 var parser = { trace: function trace() {}, 13449 yy: {}, 13450 symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, 13451 terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, 13452 productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], 13453 performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { 13454 13455 var $0 = $$.length - 1; 13456 switch (yystate) { 13457 case 1: 13458 return $$[$0 - 1]; 13459 break; 13460 case 2: 13461 this.$ = yy.prepareProgram($$[$0]); 13462 break; 13463 case 3: 13464 this.$ = $$[$0]; 13465 break; 13466 case 4: 13467 this.$ = $$[$0]; 13468 break; 13469 case 5: 13470 this.$ = $$[$0]; 13471 break; 13472 case 6: 13473 this.$ = $$[$0]; 13474 break; 13475 case 7: 13476 this.$ = $$[$0]; 13477 break; 13478 case 8: 13479 this.$ = $$[$0]; 13480 break; 13481 case 9: 13482 this.$ = { 13483 type: 'CommentStatement', 13484 value: yy.stripComment($$[$0]),
vendor: 8,910 bytes, lines 13485-13705
13485 strip: yy.stripFlags($$[$0], $$[$0]), 13486 loc: yy.locInfo(this._$) 13487 }; 13488 13489 break; 13490 case 10: 13491 this.$ = { 13492 type: 'ContentStatement', 13493 original: $$[$0], 13494 value: $$[$0], 13495 loc: yy.locInfo(this._$) 13496 }; 13497 13498 break; 13499 case 11: 13500 this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); 13501 break; 13502 case 12: 13503 this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; 13504 break; 13505 case 13: 13506 this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); 13507 break; 13508 case 14: 13509 this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); 13510 break; 13511 case 15: 13512 this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; 13513 break; 13514 case 16: 13515 this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; 13516 break; 13517 case 17: 13518 this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; 13519 break; 13520 case 18: 13521 this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; 13522 break; 13523 case 19: 13524 var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), 13525 program = yy.prepareProgram([inverse], $$[$0 - 1].loc); 13526 program.chained = true; 13527 13528 this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; 13529 13530 break; 13531 case 20: 13532 this.$ = $$[$0]; 13533 break; 13534 case 21: 13535 this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; 13536 break; 13537 case 22: 13538 this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); 13539 break; 13540 case 23: 13541 this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); 13542 break; 13543 case 24: 13544 this.$ = { 13545 type: 'PartialStatement', 13546 name: $$[$0 - 3], 13547 params: $$[$0 - 2], 13548 hash: $$[$0 - 1], 13549 indent: '', 13550 strip: yy.stripFlags($$[$0 - 4], $$[$0]), 13551 loc: yy.locInfo(this._$) 13552 }; 13553 13554 break; 13555 case 25: 13556 this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); 13557 break; 13558 case 26: 13559 this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; 13560 break; 13561 case 27: 13562 this.$ = $$[$0]; 13563 break; 13564 case 28: 13565 this.$ = $$[$0]; 13566 break; 13567 case 29: 13568 this.$ = { 13569 type: 'SubExpression', 13570 path: $$[$0 - 3], 13571 params: $$[$0 - 2], 13572 hash: $$[$0 - 1], 13573 loc: yy.locInfo(this._$) 13574 }; 13575 13576 break; 13577 case 30: 13578 this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; 13579 break; 13580 case 31: 13581 this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; 13582 break; 13583 case 32: 13584 this.$ = yy.id($$[$0 - 1]); 13585 break; 13586 case 33: 13587 this.$ = $$[$0]; 13588 break; 13589 case 34: 13590 this.$ = $$[$0]; 13591 break; 13592 case 35: 13593 this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; 13594 break; 13595 case 36: 13596 this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; 13597 break; 13598 case 37: 13599 this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; 13600 break; 13601 case 38: 13602 this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; 13603 break; 13604 case 39: 13605 this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; 13606 break; 13607 case 40: 13608 this.$ = $$[$0]; 13609 break; 13610 case 41: 13611 this.$ = $$[$0]; 13612 break; 13613 case 42: 13614 this.$ = yy.preparePath(true, $$[$0], this._$); 13615 break; 13616 case 43: 13617 this.$ = yy.preparePath(false, $$[$0], this._$); 13618 break; 13619 case 44: 13620 $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; 13621 break; 13622 case 45: 13623 this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; 13624 break; 13625 case 46: 13626 this.$ = []; 13627 break; 13628 case 47: 13629 $$[$0 - 1].push($$[$0]); 13630 break; 13631 case 48: 13632 this.$ = []; 13633 break; 13634 case 49: 13635 $$[$0 - 1].push($$[$0]); 13636 break; 13637 case 50: 13638 this.$ = []; 13639 break; 13640 case 51: 13641 $$[$0 - 1].push($$[$0]); 13642 break; 13643 case 58: 13644 this.$ = []; 13645 break; 13646 case 59: 13647 $$[$0 - 1].push($$[$0]); 13648 break; 13649 case 64: 13650 this.$ = []; 13651 break; 13652 case 65: 13653 $$[$0 - 1].push($$[$0]); 13654 break; 13655 case 70: 13656 this.$ = []; 13657 break; 13658 case 71: 13659 $$[$0 - 1].push($$[$0]); 13660 break; 13661 case 78: 13662 this.$ = []; 13663 break; 13664 case 79: 13665 $$[$0 - 1].push($$[$0]); 13666 break; 13667 case 82: 13668 this.$ = []; 13669 break; 13670 case 83: 13671 $$[$0 - 1].push($$[$0]); 13672 break; 13673 case 86: 13674 this.$ = []; 13675 break; 13676 case 87: 13677 $$[$0 - 1].push($$[$0]); 13678 break; 13679 case 90: 13680 this.$ = []; 13681 break; 13682 case 91: 13683 $$[$0 - 1].push($$[$0]); 13684 break; 13685 case 94: 13686 this.$ = []; 13687 break; 13688 case 95: 13689 $$[$0 - 1].push($$[$0]); 13690 break; 13691 case 98: 13692 this.$ = [$$[$0]]; 13693 break; 13694 case 99: 13695 $$[$0 - 1].push($$[$0]); 13696 break; 13697 case 100: 13698 this.$ = [$$[$0]]; 13699 break; 13700 case 101: 13701 $$[$0 - 1].push($$[$0]); 13702 break; 13703 } 13704 }, 13705
vendor: 11,456 bytes, line 13705
13705 table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }
vendor: 22,841 bytes, lines 13705-14167
13705, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], 13706 defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] }, 13707 parseError: function parseError(str, hash) { 13708 throw new Error(str); 13709 }, 13710 parse: function parse(input) { 13711 var self = this, 13712 stack = [0], 13713 vstack = [null], 13714 lstack = [], 13715 table = this.table, 13716 yytext = "", 13717 yylineno = 0, 13718 yyleng = 0, 13719 recovering = 0, 13720 TERROR = 2, 13721 EOF = 1; 13722 this.lexer.setInput(input); 13723 this.lexer.yy = this.yy; 13724 this.yy.lexer = this.lexer; 13725 this.yy.parser = this; 13726 if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; 13727 var yyloc = this.lexer.yylloc; 13728 lstack.push(yyloc); 13729 var ranges = this.lexer.options && this.lexer.options.ranges; 13730 if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; 13731 function popStack(n) { 13732 stack.length = stack.length - 2 * n; 13733 vstack.length = vstack.length - n; 13734 lstack.length = lstack.length - n; 13735 } 13736 function lex() { 13737 var token; 13738 token = self.lexer.lex() || 1; 13739 if (typeof token !== "number") { 13740 token = self.symbols_[token] || token; 13741 } 13742 return token; 13743 } 13744 var symbol, 13745 preErrorSymbol, 13746 state, 13747 action, 13748 a, 13749 r, 13750 yyval = {}, 13751 p, 13752 len, 13753 newState, 13754 expected; 13755 while (true) { 13756 state = stack[stack.length - 1]; 13757 if (this.defaultActions[state]) { 13758 action = this.defaultActions[state]; 13759 } else { 13760 if (symbol === null || typeof symbol == "undefined") { 13761 symbol = lex(); 13762 } 13763 action = table[state] && table[state][symbol]; 13764 } 13765 if (typeof action === "undefined" || !action.length || !action[0]) { 13766 var errStr = ""; 13767 if (!recovering) { 13768 expected = []; 13769 for (p in table[state]) if (this.terminals_[p] && p > 2) { 13770 expected.push("'" + this.terminals_[p] + "'"); 13771 } 13772 if (this.lexer.showPosition) { 13773 errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; 13774 } else { 13775 errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); 13776 } 13777 this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); 13778 } 13779 } 13780 if (action[0] instanceof Array && action.length > 1) { 13781 throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); 13782 } 13783 switch (action[0]) { 13784 case 1: 13785 stack.push(symbol); 13786 vstack.push(this.lexer.yytext); 13787 lstack.push(this.lexer.yylloc); 13788 stack.push(action[1]); 13789 symbol = null; 13790 if (!preErrorSymbol) { 13791 yyleng = this.lexer.yyleng; 13792 yytext = this.lexer.yytext; 13793 yylineno = this.lexer.yylineno; 13794 yyloc = this.lexer.yylloc; 13795 if (recovering > 0) recovering--; 13796 } else { 13797 symbol = preErrorSymbol; 13798 preErrorSymbol = null; 13799 } 13800 break; 13801 case 2: 13802 len = this.productions_[action[1]][1]; 13803 yyval.$ = vstack[vstack.length - len]; 13804 yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; 13805 if (ranges) { 13806 yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; 13807 } 13808 r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); 13809 if (typeof r !== "undefined") { 13810 return r; 13811 } 13812 if (len) { 13813 stack = stack.slice(0, -1 * len * 2); 13814 vstack = vstack.slice(0, -1 * len); 13815 lstack = lstack.slice(0, -1 * len); 13816 } 13817 stack.push(this.productions_[action[1]][0]); 13818 vstack.push(yyval.$); 13819 lstack.push(yyval._$); 13820 newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; 13821 stack.push(newState); 13822 break; 13823 case 3: 13824 return true; 13825 } 13826 } 13827 return true; 13828 } 13829 }; 13830 /* Jison generated lexer */ 13831 var lexer = (function () { 13832 var lexer = { EOF: 1, 13833 parseError: function parseError(str, hash) { 13834 if (this.yy.parser) { 13835 this.yy.parser.parseError(str, hash); 13836 } else { 13837 throw new Error(str); 13838 } 13839 }, 13840 setInput: function setInput(input) { 13841 this._input = input; 13842 this._more = this._less = this.done = false; 13843 this.yylineno = this.yyleng = 0; 13844 this.yytext = this.matched = this.match = ''; 13845 this.conditionStack = ['INITIAL']; 13846 this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; 13847 if (this.options.ranges) this.yylloc.range = [0, 0]; 13848 this.offset = 0; 13849 return this; 13850 }, 13851 input: function input() { 13852 var ch = this._input[0]; 13853 this.yytext += ch; 13854 this.yyleng++; 13855 this.offset++; 13856 this.match += ch; 13857 this.matched += ch; 13858 var lines = ch.match(/(?:\r\n?|\n).*/g); 13859 if (lines) { 13860 this.yylineno++; 13861 this.yylloc.last_line++; 13862 } else { 13863 this.yylloc.last_column++; 13864 } 13865 if (this.options.ranges) this.yylloc.range[1]++; 13866 13867 this._input = this._input.slice(1); 13868 return ch; 13869 }, 13870 unput: function unput(ch) { 13871 var len = ch.length; 13872 var lines = ch.split(/(?:\r\n?|\n)/g); 13873 13874 this._input = ch + this._input; 13875 this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); 13876 //this.yyleng -= len; 13877 this.offset -= len; 13878 var oldLines = this.match.split(/(?:\r\n?|\n)/g); 13879 this.match = this.match.substr(0, this.match.length - 1); 13880 this.matched = this.matched.substr(0, this.matched.length - 1); 13881 13882 if (lines.length - 1) this.yylineno -= lines.length - 1; 13883 var r = this.yylloc.range; 13884 13885 this.yylloc = { first_line: this.yylloc.first_line, 13886 last_line: this.yylineno + 1, 13887 first_column: this.yylloc.first_column, 13888 last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len 13889 }; 13890 13891 if (this.options.ranges) { 13892 this.yylloc.range = [r[0], r[0] + this.yyleng - len]; 13893 } 13894 return this; 13895 }, 13896 more: function more() { 13897 this._more = true; 13898 return this; 13899 }, 13900 less: function less(n) { 13901 this.unput(this.match.slice(n)); 13902 }, 13903 pastInput: function pastInput() { 13904 var past = this.matched.substr(0, this.matched.length - this.match.length); 13905 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); 13906 }, 13907 upcomingInput: function upcomingInput() { 13908 var next = this.match; 13909 if (next.length < 20) { 13910 next += this._input.substr(0, 20 - next.length); 13911 } 13912 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); 13913 }, 13914 showPosition: function showPosition() { 13915 var pre = this.pastInput(); 13916 var c = new Array(pre.length + 1).join("-"); 13917 return pre + this.upcomingInput() + "\n" + c + "^"; 13918 }, 13919 next: function next() { 13920 if (this.done) { 13921 return this.EOF; 13922 } 13923 if (!this._input) this.done = true; 13924 13925 var token, match, tempMatch, index, col, lines; 13926 if (!this._more) { 13927 this.yytext = ''; 13928 this.match = ''; 13929 } 13930 var rules = this._currentRules(); 13931 for (var i = 0; i < rules.length; i++) { 13932 tempMatch = this._input.match(this.rules[rules[i]]); 13933 if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { 13934 match = tempMatch; 13935 index = i; 13936 if (!this.options.flex) break; 13937 } 13938 } 13939 if (match) { 13940 lines = match[0].match(/(?:\r\n?|\n).*/g); 13941 if (lines) this.yylineno += lines.length; 13942 this.yylloc = { first_line: this.yylloc.last_line, 13943 last_line: this.yylineno + 1, 13944 first_column: this.yylloc.last_column, 13945 last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; 13946 this.yytext += match[0]; 13947 this.match += match[0]; 13948 this.matches = match; 13949 this.yyleng = this.yytext.length; 13950 if (this.options.ranges) { 13951 this.yylloc.range = [this.offset, this.offset += this.yyleng]; 13952 } 13953 this._more = false; 13954 this._input = this._input.slice(match[0].length); 13955 this.matched += match[0]; 13956 token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); 13957 if (this.done && this._input) this.done = false; 13958 if (token) return token;else return; 13959 } 13960 if (this._input === "") { 13961 return this.EOF; 13962 } else { 13963 return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); 13964 } 13965 }, 13966 lex: function lex() { 13967 var r = this.next(); 13968 if (typeof r !== 'undefined') { 13969 return r; 13970 } else { 13971 return this.lex(); 13972 } 13973 }, 13974 begin: function begin(condition) { 13975 this.conditionStack.push(condition); 13976 }, 13977 popState: function popState() { 13978 return this.conditionStack.pop(); 13979 }, 13980 _currentRules: function _currentRules() { 13981 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; 13982 }, 13983 topState: function topState() { 13984 return this.conditionStack[this.conditionStack.length - 2]; 13985 }, 13986 pushState: function begin(condition) { 13987 this.begin(condition); 13988 } }; 13989 lexer.options = {}; 13990 lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { 13991 13992 function strip(start, end) { 13993 return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start); 13994 } 13995 13996 var YYSTATE = YY_START; 13997 switch ($avoiding_name_collisions) { 13998 case 0: 13999 if (yy_.yytext.slice(-2) === "\\\\") { 14000 strip(0, 1); 14001 this.begin("mu"); 14002 } else if (yy_.yytext.slice(-1) === "\\") { 14003 strip(0, 1); 14004 this.begin("emu"); 14005 } else { 14006 this.begin("mu"); 14007 } 14008 if (yy_.yytext) return 15; 14009 14010 break; 14011 case 1: 14012 return 15; 14013 break; 14014 case 2: 14015 this.popState(); 14016 return 15; 14017 14018 break; 14019 case 3: 14020 this.begin('raw');return 15; 14021 break; 14022 case 4: 14023 this.popState(); 14024 // Should be using `this.topState()` below, but it currently 14025 // returns the second top instead of the first top. Opened an 14026 // issue about it at https://github.com/zaach/jison/issues/291 14027 if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { 14028 return 15; 14029 } else { 14030 strip(5, 9); 14031 return 'END_RAW_BLOCK'; 14032 } 14033 14034 break; 14035 case 5: 14036 return 15; 14037 break; 14038 case 6: 14039 this.popState(); 14040 return 14; 14041 14042 break; 14043 case 7: 14044 return 65; 14045 break; 14046 case 8: 14047 return 68; 14048 break; 14049 case 9: 14050 return 19; 14051 break; 14052 case 10: 14053 this.popState(); 14054 this.begin('raw'); 14055 return 23; 14056 14057 break; 14058 case 11: 14059 return 55; 14060 break; 14061 case 12: 14062 return 60; 14063 break; 14064 case 13: 14065 return 29; 14066 break; 14067 case 14: 14068 return 47; 14069 break; 14070 case 15: 14071 this.popState();return 44; 14072 break; 14073 case 16: 14074 this.popState();return 44; 14075 break; 14076 case 17: 14077 return 34; 14078 break; 14079 case 18: 14080 return 39; 14081 break; 14082 case 19: 14083 return 51; 14084 break; 14085 case 20: 14086 return 48; 14087 break; 14088 case 21: 14089 this.unput(yy_.yytext); 14090 this.popState(); 14091 this.begin('com'); 14092 14093 break; 14094 case 22: 14095 this.popState(); 14096 return 14; 14097 14098 break; 14099 case 23: 14100 return 48; 14101 break; 14102 case 24: 14103 return 73; 14104 break; 14105 case 25: 14106 return 72; 14107 break; 14108 case 26: 14109 return 72; 14110 break; 14111 case 27: 14112 return 87; 14113 break; 14114 case 28: 14115 // ignore whitespace 14116 break; 14117 case 29: 14118 this.popState();return 54; 14119 break; 14120 case 30: 14121 this.popState();return 33; 14122 break; 14123 case 31: 14124 yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; 14125 break; 14126 case 32: 14127 yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; 14128 break; 14129 case 33: 14130 return 85; 14131 break; 14132 case 34: 14133 return 82; 14134 break; 14135 case 35: 14136 return 82; 14137 break; 14138 case 36: 14139 return 83; 14140 break; 14141 case 37: 14142 return 84; 14143 break; 14144 case 38: 14145 return 81; 14146 break; 14147 case 39: 14148 return 75; 14149 break; 14150 case 40: 14151 return 77; 14152 break; 14153 case 41: 14154 return 72; 14155 break; 14156 case 42: 14157 yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; 14158 break; 14159 case 43: 14160 return 'INVALID'; 14161 break; 14162 case 44: 14163 return 5; 14164 break; 14165 } 14166 }; 14167 lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^
14167/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]+?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; 14168 lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; 14169 return lexer;
vendor: 10,902 bytes, lines 14170-14547
14170 })(); 14171 parser.lexer = lexer; 14172 function Parser() { 14173 this.yy = {}; 14174 }Parser.prototype = parser;parser.Parser = Parser; 14175 return new Parser(); 14176 })();exports["default"] = handlebars; 14177 module.exports = exports["default"]; 14178 14179/***/ }), 14180/* 87 */ 14181/***/ (function(module, exports, __webpack_require__) { 14182 14183 'use strict'; 14184 14185 var _interopRequireDefault = __webpack_require__(1)['default']; 14186 14187 exports.__esModule = true; 14188 14189 var _visitor = __webpack_require__(88); 14190 14191 var _visitor2 = _interopRequireDefault(_visitor); 14192 14193 function WhitespaceControl() { 14194 var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; 14195 14196 this.options = options; 14197 } 14198 WhitespaceControl.prototype = new _visitor2['default'](); 14199 14200 WhitespaceControl.prototype.Program = function (program) { 14201 var doStandalone = !this.options.ignoreStandalone; 14202 14203 var isRoot = !this.isRootSeen; 14204 this.isRootSeen = true; 14205 14206 var body = program.body; 14207 for (var i = 0, l = body.length; i < l; i++) { 14208 var current = body[i], 14209 strip = this.accept(current); 14210 14211 if (!strip) { 14212 continue; 14213 } 14214 14215 var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), 14216 _isNextWhitespace = isNextWhitespace(body, i, isRoot), 14217 openStandalone = strip.openStandalone && _isPrevWhitespace, 14218 closeStandalone = strip.closeStandalone && _isNextWhitespace, 14219 inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; 14220 14221 if (strip.close) { 14222 omitRight(body, i, true); 14223 } 14224 if (strip.open) { 14225 omitLeft(body, i, true); 14226 } 14227 14228 if (doStandalone && inlineStandalone) { 14229 omitRight(body, i); 14230 14231 if (omitLeft(body, i)) { 14232 // If we are on a standalone node, save the indent info for partials 14233 if (current.type === 'PartialStatement') { 14234 // Pull out the whitespace from the final line 14235 current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; 14236 } 14237 } 14238 } 14239 if (doStandalone && openStandalone) { 14240 omitRight((current.program || current.inverse).body); 14241 14242 // Strip out the previous content node if it's whitespace only 14243 omitLeft(body, i); 14244 } 14245 if (doStandalone && closeStandalone) { 14246 // Always strip the next node 14247 omitRight(body, i); 14248 14249 omitLeft((current.inverse || current.program).body); 14250 } 14251 } 14252 14253 return program; 14254 }; 14255 14256 WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) { 14257 this.accept(block.program); 14258 this.accept(block.inverse); 14259 14260 // Find the inverse program that is involed with whitespace stripping. 14261 var program = block.program || block.inverse, 14262 inverse = block.program && block.inverse, 14263 firstInverse = inverse, 14264 lastInverse = inverse; 14265 14266 if (inverse && inverse.chained) { 14267 firstInverse = inverse.body[0].program; 14268 14269 // Walk the inverse chain to find the last inverse that is actually in the chain. 14270 while (lastInverse.chained) { 14271 lastInverse = lastInverse.body[lastInverse.body.length - 1].program; 14272 } 14273 } 14274 14275 var strip = { 14276 open: block.openStrip.open, 14277 close: block.closeStrip.close, 14278 14279 // Determine the standalone candiacy. Basically flag our content as being possibly standalone 14280 // so our parent can determine if we actually are standalone 14281 openStandalone: isNextWhitespace(program.body), 14282 closeStandalone: isPrevWhitespace((firstInverse || program).body) 14283 }; 14284 14285 if (block.openStrip.close) { 14286 omitRight(program.body, null, true); 14287 } 14288 14289 if (inverse) { 14290 var inverseStrip = block.inverseStrip; 14291 14292 if (inverseStrip.open) { 14293 omitLeft(program.body, null, true); 14294 } 14295 14296 if (inverseStrip.close) { 14297 omitRight(firstInverse.body, null, true); 14298 } 14299 if (block.closeStrip.open) { 14300 omitLeft(lastInverse.body, null, true); 14301 } 14302 14303 // Find standalone else statments 14304 if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { 14305 omitLeft(program.body); 14306 omitRight(firstInverse.body); 14307 } 14308 } else if (block.closeStrip.open) { 14309 omitLeft(program.body, null, true); 14310 } 14311 14312 return strip; 14313 }; 14314 14315 WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) { 14316 return mustache.strip; 14317 }; 14318 14319 WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { 14320 /* istanbul ignore next */ 14321 var strip = node.strip || {}; 14322 return { 14323 inlineStandalone: true, 14324 open: strip.open, 14325 close: strip.close 14326 }; 14327 }; 14328 14329 function isPrevWhitespace(body, i, isRoot) { 14330 if (i === undefined) { 14331 i = body.length; 14332 } 14333 14334 // Nodes that end with newlines are considered whitespace (but are special 14335 // cased for strip operations) 14336 var prev = body[i - 1], 14337 sibling = body[i - 2]; 14338 if (!prev) { 14339 return isRoot; 14340 } 14341 14342 if (prev.type === 'ContentStatement') { 14343 return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); 14344 } 14345 } 14346 function isNextWhitespace(body, i, isRoot) { 14347 if (i === undefined) { 14348 i = -1; 14349 } 14350 14351 var next = body[i + 1], 14352 sibling = body[i + 2]; 14353 if (!next) { 14354 return isRoot; 14355 } 14356 14357 if (next.type === 'ContentStatement') { 14358 return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); 14359 } 14360 } 14361 14362 // Marks the node to the right of the position as omitted. 14363 // I.e. {{foo}}' ' will mark the ' ' node as omitted. 14364 // 14365 // If i is undefined, then the first child will be marked as such. 14366 // 14367 // If mulitple is truthy then all whitespace will be stripped out until non-whitespace 14368 // content is met. 14369 function omitRight(body, i, multiple) { 14370 var current = body[i == null ? 0 : i + 1]; 14371 if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { 14372 return; 14373 } 14374 14375 var original = current.value; 14376 current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); 14377 current.rightStripped = current.value !== original; 14378 } 14379 14380 // Marks the node to the left of the position as omitted. 14381 // I.e. ' '{{foo}} will mark the ' ' node as omitted. 14382 // 14383 // If i is undefined then the last child will be marked as such. 14384 // 14385 // If mulitple is truthy then all whitespace will be stripped out until non-whitespace 14386 // content is met. 14387 function omitLeft(body, i, multiple) { 14388 var current = body[i == null ? body.length - 1 : i - 1]; 14389 if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { 14390 return; 14391 } 14392 14393 // We omit the last node if it's whitespace only and not preceded by a non-content node. 14394 var original = current.value; 14395 current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); 14396 current.leftStripped = current.value !== original; 14397 return current.leftStripped; 14398 } 14399 14400 exports['default'] = WhitespaceControl; 14401 module.exports = exports['default']; 14402 14403/***/ }), 14404/* 88 */ 14405/***/ (function(module, exports, __webpack_require__) { 14406 14407 'use strict'; 14408 14409 var _interopRequireDefault = __webpack_require__(1)['default']; 14410 14411 exports.__esModule = true; 14412 14413 var _exception = __webpack_require__(6); 14414 14415 var _exception2 = _interopRequireDefault(_exception); 14416 14417 function Visitor() { 14418 this.parents = []; 14419 } 14420 14421 Visitor.prototype = { 14422 constructor: Visitor, 14423 mutating: false, 14424 14425 // Visits a given value. If mutating, will replace the value if necessary. 14426 acceptKey: function acceptKey(node, name) { 14427 var value = this.accept(node[name]); 14428 if (this.mutating) { 14429 // Hacky sanity check: This may have a few false positives for type for the helper 14430 // methods but will generally do the right thing without a lot of overhead. 14431 if (value && !Visitor.prototype[value.type]) { 14432 throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); 14433 } 14434 node[name] = value; 14435 } 14436 }, 14437 14438 // Performs an accept operation with added sanity check to ensure 14439 // required keys are not removed. 14440 acceptRequired: function acceptRequired(node, name) { 14441 this.acceptKey(node, name); 14442 14443 if (!node[name]) { 14444 throw new _exception2['default'](node.type + ' requires ' + name); 14445 } 14446 }, 14447 14448 // Traverses a given array. If mutating, empty respnses will be removed 14449 // for child elements. 14450 acceptArray: function acceptArray(array) { 14451 for (var i = 0, l = array.length; i < l; i++) { 14452 this.acceptKey(array, i); 14453 14454 if (!array[i]) { 14455 array.splice(i, 1); 14456 i--; 14457 l--; 14458 } 14459 } 14460 }, 14461 14462 accept: function accept(object) { 14463 if (!object) { 14464 return; 14465 } 14466 14467 /* istanbul ignore next: Sanity code */ 14468 if (!this[object.type]) { 14469 throw new _exception2['default']('Unknown type: ' + object.type, object); 14470 } 14471 14472 if (this.current) { 14473 this.parents.unshift(this.current); 14474 } 14475 this.current = object; 14476 14477 var ret = this[object.type](object); 14478 14479 this.current = this.parents.shift(); 14480 14481 if (!this.mutating || ret) { 14482 return ret; 14483 } else if (ret !== false) { 14484 return object; 14485 } 14486 }, 14487 14488 Program: function Program(program) { 14489 this.acceptArray(program.body); 14490 }, 14491 14492 MustacheStatement: visitSubExpression, 14493 Decorator: visitSubExpression, 14494 14495 BlockStatement: visitBlock, 14496 DecoratorBlock: visitBlock, 14497 14498 PartialStatement: visitPartial, 14499 PartialBlockStatement: function PartialBlockStatement(partial) { 14500 visitPartial.call(this, partial); 14501 14502 this.acceptKey(partial, 'program'); 14503 }, 14504 14505 ContentStatement: function ContentStatement() /* content */{}, 14506 CommentStatement: function CommentStatement() /* comment */{}, 14507 14508 SubExpression: visitSubExpression, 14509 14510 PathExpression: function PathExpression() /* path */{}, 14511 14512 StringLiteral: function StringLiteral() /* string */{}, 14513 NumberLiteral: function NumberLiteral() /* number */{}, 14514 BooleanLiteral: function BooleanLiteral() /* bool */{}, 14515 UndefinedLiteral: function UndefinedLiteral() /* literal */{}, 14516 NullLiteral: function NullLiteral() /* literal */{}, 14517 14518 Hash: function Hash(hash) { 14519 this.acceptArray(hash.pairs); 14520 }, 14521 HashPair: function HashPair(pair) { 14522 this.acceptRequired(pair, 'value'); 14523 } 14524 }; 14525 14526 function visitSubExpression(mustache) { 14527 this.acceptRequired(mustache, 'path'); 14528 this.acceptArray(mustache.params); 14529 this.acceptKey(mustache, 'hash'); 14530 } 14531 function visitBlock(block) { 14532 visitSubExpression.call(this, block); 14533 14534 this.acceptKey(block, 'program'); 14535 this.acceptKey(block, 'inverse'); 14536 } 14537 function visitPartial(partial) { 14538 this.acceptRequired(partial, 'name'); 14539 this.acceptArray(partial.params); 14540 this.acceptKey(partial, 'hash'); 14541 } 14542 14543 exports['default'] = Visitor; 14544 module.exports = exports['default']; 14545 14546/***/ }), 14547/* 89
vendor: 5,593 bytes, lines 14547-14778
14547 */ 14548/***/ (function(module, exports, __webpack_require__) { 14549 14550 'use strict'; 14551 14552 var _interopRequireDefault = __webpack_require__(1)['default']; 14553 14554 exports.__esModule = true; 14555 exports.SourceLocation = SourceLocation; 14556 exports.id = id; 14557 exports.stripFlags = stripFlags; 14558 exports.stripComment = stripComment; 14559 exports.preparePath = preparePath; 14560 exports.prepareMustache = prepareMustache; 14561 exports.prepareRawBlock = prepareRawBlock; 14562 exports.prepareBlock = prepareBlock; 14563 exports.prepareProgram = prepareProgram; 14564 exports.preparePartialBlock = preparePartialBlock; 14565 14566 var _exception = __webpack_require__(6); 14567 14568 var _exception2 = _interopRequireDefault(_exception); 14569 14570 function validateClose(open, close) { 14571 close = close.path ? close.path.original : close; 14572 14573 if (open.path.original !== close) { 14574 var errorNode = { loc: open.path.loc }; 14575 14576 throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode); 14577 } 14578 } 14579 14580 function SourceLocation(source, locInfo) { 14581 this.source = source; 14582 this.start = { 14583 line: locInfo.first_line, 14584 column: locInfo.first_column 14585 }; 14586 this.end = { 14587 line: locInfo.last_line, 14588 column: locInfo.last_column 14589 }; 14590 } 14591 14592 function id(token) { 14593 if (/^\[.*\]$/.test(token)) { 14594 return token.substring(1, token.length - 1); 14595 } else { 14596 return token; 14597 } 14598 } 14599 14600 function stripFlags(open, close) { 14601 return { 14602 open: open.charAt(2) === '~', 14603 close: close.charAt(close.length - 3) === '~' 14604 }; 14605 } 14606 14607 function stripComment(comment) { 14608 return comment.replace(/^\{\{~?!-?-?/, '').replace(/-?-?~?\}\}$/, ''); 14609 } 14610 14611 function preparePath(data, parts, loc) { 14612 loc = this.locInfo(loc); 14613 14614 var original = data ? '@' : '', 14615 dig = [], 14616 depth = 0; 14617 14618 for (var i = 0, l = parts.length; i < l; i++) { 14619 var part = parts[i].part, 14620 14621 // If we have [] syntax then we do not treat path references as operators, 14622 // i.e. foo.[this] resolves to approximately context.foo['this'] 14623 isLiteral = parts[i].original !== part; 14624 original += (parts[i].separator || '') + part; 14625 14626 if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { 14627 if (dig.length > 0) { 14628 throw new _exception2['default']('Invalid path: ' + original, { loc: loc }); 14629 } else if (part === '..') { 14630 depth++; 14631 } 14632 } else { 14633 dig.push(part); 14634 } 14635 } 14636 14637 return { 14638 type: 'PathExpression', 14639 data: data, 14640 depth: depth, 14641 parts: dig, 14642 original: original, 14643 loc: loc 14644 }; 14645 } 14646 14647 function prepareMustache(path, params, hash, open, strip, locInfo) { 14648 // Must use charAt to support IE pre-10 14649 var escapeFlag = open.charAt(3) || open.charAt(2), 14650 escaped = escapeFlag !== '{' && escapeFlag !== '&'; 14651 14652 var decorator = /\*/.test(open); 14653 return { 14654 type: decorator ? 'Decorator' : 'MustacheStatement', 14655 path: path, 14656 params: params, 14657 hash: hash, 14658 escaped: escaped, 14659 strip: strip, 14660 loc: this.locInfo(locInfo) 14661 }; 14662 } 14663 14664 function prepareRawBlock(openRawBlock, contents, close, locInfo) { 14665 validateClose(openRawBlock, close); 14666 14667 locInfo = this.locInfo(locInfo); 14668 var program = { 14669 type: 'Program', 14670 body: contents, 14671 strip: {}, 14672 loc: locInfo 14673 }; 14674 14675 return { 14676 type: 'BlockStatement', 14677 path: openRawBlock.path, 14678 params: openRawBlock.params, 14679 hash: openRawBlock.hash, 14680 program: program, 14681 openStrip: {}, 14682 inverseStrip: {}, 14683 closeStrip: {}, 14684 loc: locInfo 14685 }; 14686 } 14687 14688 function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { 14689 if (close && close.path) { 14690 validateClose(openBlock, close); 14691 } 14692 14693 var decorator = /\*/.test(openBlock.open); 14694 14695 program.blockParams = openBlock.blockParams; 14696 14697 var inverse = undefined, 14698 inverseStrip = undefined; 14699 14700 if (inverseAndProgram) { 14701 if (decorator) { 14702 throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram); 14703 } 14704 14705 if (inverseAndProgram.chain) { 14706 inverseAndProgram.program.body[0].closeStrip = close.strip; 14707 } 14708 14709 inverseStrip = inverseAndProgram.strip; 14710 inverse = inverseAndProgram.program; 14711 } 14712 14713 if (inverted) { 14714 inverted = inverse; 14715 inverse = program; 14716 program = inverted; 14717 } 14718 14719 return { 14720 type: decorator ? 'DecoratorBlock' : 'BlockStatement', 14721 path: openBlock.path, 14722 params: openBlock.params, 14723 hash: openBlock.hash, 14724 program: program, 14725 inverse: inverse, 14726 openStrip: openBlock.strip, 14727 inverseStrip: inverseStrip, 14728 closeStrip: close && close.strip, 14729 loc: this.locInfo(locInfo) 14730 }; 14731 } 14732 14733 function prepareProgram(statements, loc) { 14734 if (!loc && statements.length) { 14735 var firstLoc = statements[0].loc, 14736 lastLoc = statements[statements.length - 1].loc; 14737 14738 /* istanbul ignore else */ 14739 if (firstLoc && lastLoc) { 14740 loc = { 14741 source: firstLoc.source, 14742 start: { 14743 line: firstLoc.start.line, 14744 column: firstLoc.start.column 14745 }, 14746 end: { 14747 line: lastLoc.end.line, 14748 column: lastLoc.end.column 14749 } 14750 }; 14751 } 14752 } 14753 14754 return { 14755 type: 'Program', 14756 body: statements, 14757 strip: {}, 14758 loc: loc 14759 }; 14760 } 14761 14762 function preparePartialBlock(open, program, close, locInfo) { 14763 validateClose(open, close); 14764 14765 return { 14766 type: 'PartialBlockStatement', 14767 name: open.path, 14768 params: open.params, 14769 hash: open.hash, 14770 program: program, 14771 openStrip: open.strip, 14772 closeStrip: close && close.strip, 14773 loc: this.locInfo(locInfo) 14774 }; 14775 } 14776 14777/***/ }), 14778/*
1477890 */ 14779/***/ (function(module, exports, __webpack_require__) { 14780 14781 /* eslint-disable new-cap */ 14782 14783 'use strict'; 14784 14785 var _Object$create = __webpack_require__(74)['default']; 14786 14787 var _interopRequireDefault = __webpack_require__(1)['default']; 14788 14789 exports.__esModule = true; 14790 exports.Compiler = Compiler; 14791 exports.precompile = precompile; 14792 exports.compile = compile; 14793 14794 var _exception = __webpack_require__(6); 14795 14796 var _exception2 = _interopRequireDefault(_exception); 14797 14798 var _utils = __webpack_require__(5); 14799 14800 var _ast = __webpack_require__(84
vendor: 15,890 bytes, lines 14800-15349
14800); 14801 14802 var _ast2 = _interopRequireDefault(_ast); 14803 14804 var slice = [].slice; 14805 14806 function Compiler() {} 14807 14808 // the foundHelper register will disambiguate helper lookup from finding a 14809 // function in a context. This is necessary for mustache compatibility, which 14810 // requires that context functions in blocks are evaluated by blockHelperMissing, 14811 // and then proceed as if the resulting value was provided to blockHelperMissing. 14812 14813 Compiler.prototype = { 14814 compiler: Compiler, 14815 14816 equals: function equals(other) { 14817 var len = this.opcodes.length; 14818 if (other.opcodes.length !== len) { 14819 return false; 14820 } 14821 14822 for (var i = 0; i < len; i++) { 14823 var opcode = this.opcodes[i], 14824 otherOpcode = other.opcodes[i]; 14825 if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { 14826 return false; 14827 } 14828 } 14829 14830 // We know that length is the same between the two arrays because they are directly tied 14831 // to the opcode behavior above. 14832 len = this.children.length; 14833 for (var i = 0; i < len; i++) { 14834 if (!this.children[i].equals(other.children[i])) { 14835 return false; 14836 } 14837 } 14838 14839 return true; 14840 }, 14841 14842 guid: 0, 14843 14844 compile: function compile(program, options) { 14845 this.sourceNode = []; 14846 this.opcodes = []; 14847 this.children = []; 14848 this.options = options; 14849 this.stringParams = options.stringParams; 14850 this.trackIds = options.trackIds; 14851 14852 options.blockParams = options.blockParams || []; 14853 14854 options.knownHelpers = _utils.extend(_Object$create(null), { 14855 helperMissing: true, 14856 blockHelperMissing: true, 14857 each: true, 14858 'if': true, 14859 unless: true, 14860 'with': true, 14861 log: true, 14862 lookup: true 14863 }, options.knownHelpers); 14864 14865 return this.accept(program); 14866 }, 14867 14868 compileProgram: function compileProgram(program) { 14869 var childCompiler = new this.compiler(), 14870 // eslint-disable-line new-cap 14871 result = childCompiler.compile(program, this.options), 14872 guid = this.guid++; 14873 14874 this.usePartial = this.usePartial || result.usePartial; 14875 14876 this.children[guid] = result; 14877 this.useDepths = this.useDepths || result.useDepths; 14878 14879 return guid; 14880 }, 14881 14882 accept: function accept(node) { 14883 /* istanbul ignore next: Sanity code */ 14884 if (!this[node.type]) { 14885 throw new _exception2['default']('Unknown type: ' + node.type, node); 14886 } 14887 14888 this.sourceNode.unshift(node); 14889 var ret = this[node.type](node); 14890 this.sourceNode.shift(); 14891 return ret; 14892 }, 14893 14894 Program: function Program(program) { 14895 this.options.blockParams.unshift(program.blockParams); 14896 14897 var body = program.body, 14898 bodyLength = body.length; 14899 for (var i = 0; i < bodyLength; i++) { 14900 this.accept(body[i]); 14901 } 14902 14903 this.options.blockParams.shift(); 14904 14905 this.isSimple = bodyLength === 1; 14906 this.blockParams = program.blockParams ? program.blockParams.length : 0; 14907 14908 return this; 14909 }, 14910 14911 BlockStatement: function BlockStatement(block) { 14912 transformLiteralToPath(block); 14913 14914 var program = block.program, 14915 inverse = block.inverse; 14916 14917 program = program && this.compileProgram(program); 14918 inverse = inverse && this.compileProgram(inverse); 14919 14920 var type = this.classifySexpr(block); 14921 14922 if (type === 'helper') { 14923 this.helperSexpr(block, program, inverse); 14924 } else if (type === 'simple') { 14925 this.simpleSexpr(block); 14926 14927 // now that the simple mustache is resolved, we need to 14928 // evaluate it by executing `blockHelperMissing` 14929 this.opcode('pushProgram', program); 14930 this.opcode('pushProgram', inverse); 14931 this.opcode('emptyHash'); 14932 this.opcode('blockValue', block.path.original); 14933 } else { 14934 this.ambiguousSexpr(block, program, inverse); 14935 14936 // now that the simple mustache is resolved, we need to 14937 // evaluate it by executing `blockHelperMissing` 14938 this.opcode('pushProgram', program); 14939 this.opcode('pushProgram', inverse); 14940 this.opcode('emptyHash'); 14941 this.opcode('ambiguousBlockValue'); 14942 } 14943 14944 this.opcode('append'); 14945 }, 14946 14947 DecoratorBlock: function DecoratorBlock(decorator) { 14948 var program = decorator.program && this.compileProgram(decorator.program); 14949 var params = this.setupFullMustacheParams(decorator, program, undefined), 14950 path = decorator.path; 14951 14952 this.useDecorators = true; 14953 this.opcode('registerDecorator', params.length, path.original); 14954 }, 14955 14956 PartialStatement: function PartialStatement(partial) { 14957 this.usePartial = true; 14958 14959 var program = partial.program; 14960 if (program) { 14961 program = this.compileProgram(partial.program); 14962 } 14963 14964 var params = partial.params; 14965 if (params.length > 1) { 14966 throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial); 14967 } else if (!params.length) { 14968 if (this.options.explicitPartialContext) { 14969 this.opcode('pushLiteral', 'undefined'); 14970 } else { 14971 params.push({ type: 'PathExpression', parts: [], depth: 0 }); 14972 } 14973 } 14974 14975 var partialName = partial.name.original, 14976 isDynamic = partial.name.type === 'SubExpression'; 14977 if (isDynamic) { 14978 this.accept(partial.name); 14979 } 14980 14981 this.setupFullMustacheParams(partial, program, undefined, true); 14982 14983 var indent = partial.indent || ''; 14984 if (this.options.preventIndent && indent) { 14985 this.opcode('appendContent', indent); 14986 indent = ''; 14987 } 14988 14989 this.opcode('invokePartial', isDynamic, partialName, indent); 14990 this.opcode('append'); 14991 }, 14992 PartialBlockStatement: function PartialBlockStatement(partialBlock) { 14993 this.PartialStatement(partialBlock); 14994 }, 14995 14996 MustacheStatement: function MustacheStatement(mustache) { 14997 this.SubExpression(mustache); 14998 14999 if (mustache.escaped && !this.options.noEscape) { 15000 this.opcode('appendEscaped'); 15001 } else { 15002 this.opcode('append'); 15003 } 15004 }, 15005 Decorator: function Decorator(decorator) { 15006 this.DecoratorBlock(decorator); 15007 }, 15008 15009 ContentStatement: function ContentStatement(content) { 15010 if (content.value) { 15011 this.opcode('appendContent', content.value); 15012 } 15013 }, 15014 15015 CommentStatement: function CommentStatement() {}, 15016 15017 SubExpression: function SubExpression(sexpr) { 15018 transformLiteralToPath(sexpr); 15019 var type = this.classifySexpr(sexpr); 15020 15021 if (type === 'simple') { 15022 this.simpleSexpr(sexpr); 15023 } else if (type === 'helper') { 15024 this.helperSexpr(sexpr); 15025 } else { 15026 this.ambiguousSexpr(sexpr); 15027 } 15028 }, 15029 ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) { 15030 var path = sexpr.path, 15031 name = path.parts[0], 15032 isBlock = program != null || inverse != null; 15033 15034 this.opcode('getContext', path.depth); 15035 15036 this.opcode('pushProgram', program); 15037 this.opcode('pushProgram', inverse); 15038 15039 path.strict = true; 15040 this.accept(path); 15041 15042 this.opcode('invokeAmbiguous', name, isBlock); 15043 }, 15044 15045 simpleSexpr: function simpleSexpr(sexpr) { 15046 var path = sexpr.path; 15047 path.strict = true; 15048 this.accept(path); 15049 this.opcode('resolvePossibleLambda'); 15050 }, 15051 15052 helperSexpr: function helperSexpr(sexpr, program, inverse) { 15053 var params = this.setupFullMustacheParams(sexpr, program, inverse), 15054 path = sexpr.path, 15055 name = path.parts[0]; 15056 15057 if (this.options.knownHelpers[name]) { 15058 this.opcode('invokeKnownHelper', params.length, name); 15059 } else if (this.options.knownHelpersOnly) { 15060 throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); 15061 } else { 15062 path.strict = true; 15063 path.falsy = true; 15064 15065 this.accept(path); 15066 this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path)); 15067 } 15068 }, 15069 15070 PathExpression: function PathExpression(path) { 15071 this.addDepth(path.depth); 15072 this.opcode('getContext', path.depth); 15073 15074 var name = path.parts[0], 15075 scoped = _ast2['default'].helpers.scopedId(path), 15076 blockParamId = !path.depth && !scoped && this.blockParamIndex(name); 15077 15078 if (blockParamId) { 15079 this.opcode('lookupBlockParam', blockParamId, path.parts); 15080 } else if (!name) { 15081 // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` 15082 this.opcode('pushContext'); 15083 } else if (path.data) { 15084 this.options.data = true; 15085 this.opcode('lookupData', path.depth, path.parts, path.strict); 15086 } else { 15087 this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); 15088 } 15089 }, 15090 15091 StringLiteral: function StringLiteral(string) { 15092 this.opcode('pushString', string.value); 15093 }, 15094 15095 NumberLiteral: function NumberLiteral(number) { 15096 this.opcode('pushLiteral', number.value); 15097 }, 15098 15099 BooleanLiteral: function BooleanLiteral(bool) { 15100 this.opcode('pushLiteral', bool.value); 15101 }, 15102 15103 UndefinedLiteral: function UndefinedLiteral() { 15104 this.opcode('pushLiteral', 'undefined'); 15105 }, 15106 15107 NullLiteral: function NullLiteral() { 15108 this.opcode('pushLiteral', 'null'); 15109 }, 15110 15111 Hash: function Hash(hash) { 15112 var pairs = hash.pairs, 15113 i = 0, 15114 l = pairs.length; 15115 15116 this.opcode('pushHash'); 15117 15118 for (; i < l; i++) { 15119 this.pushParam(pairs[i].value); 15120 } 15121 while (i--) { 15122 this.opcode('assignToHash', pairs[i].key); 15123 } 15124 this.opcode('popHash'); 15125 }, 15126 15127 // HELPERS 15128 opcode: function opcode(name) { 15129 this.opcodes.push({ 15130 opcode: name, 15131 args: slice.call(arguments, 1), 15132 loc: this.sourceNode[0].loc 15133 }); 15134 }, 15135 15136 addDepth: function addDepth(depth) { 15137 if (!depth) { 15138 return; 15139 } 15140 15141 this.useDepths = true; 15142 }, 15143 15144 classifySexpr: function classifySexpr(sexpr) { 15145 var isSimple = _ast2['default'].helpers.simpleId(sexpr.path); 15146 15147 var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); 15148 15149 // a mustache is an eligible helper if: 15150 // * its id is simple (a single part, not `this` or `..`) 15151 var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr); 15152 15153 // if a mustache is an eligible helper but not a definite 15154 // helper, it is ambiguous, and will be resolved in a later 15155 // pass or at runtime. 15156 var isEligible = !isBlockParam && (isHelper || isSimple); 15157 15158 // if ambiguous, we can possibly resolve the ambiguity now 15159 // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. 15160 if (isEligible && !isHelper) { 15161 var _name = sexpr.path.parts[0], 15162 options = this.options; 15163 if (options.knownHelpers[_name]) { 15164 isHelper = true; 15165 } else if (options.knownHelpersOnly) { 15166 isEligible = false; 15167 } 15168 } 15169 15170 if (isHelper) { 15171 return 'helper'; 15172 } else if (isEligible) { 15173 return 'ambiguous'; 15174 } else { 15175 return 'simple'; 15176 } 15177 }, 15178 15179 pushParams: function pushParams(params) { 15180 for (var i = 0, l = params.length; i < l; i++) { 15181 this.pushParam(params[i]); 15182 } 15183 }, 15184 15185 pushParam: function pushParam(val) { 15186 var value = val.value != null ? val.value : val.original || ''; 15187 15188 if (this.stringParams) { 15189 if (value.replace) { 15190 value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.'); 15191 } 15192 15193 if (val.depth) { 15194 this.addDepth(val.depth); 15195 } 15196 this.opcode('getContext', val.depth || 0); 15197 this.opcode('pushStringParam', value, val.type); 15198 15199 if (val.type === 'SubExpression') { 15200 // SubExpressions get evaluated and passed in 15201 // in string params mode. 15202 this.accept(val); 15203 } 15204 } else { 15205 if (this.trackIds) { 15206 var blockParamIndex = undefined; 15207 if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) { 15208 blockParamIndex = this.blockParamIndex(val.parts[0]); 15209 } 15210 if (blockParamIndex) { 15211 var blockParamChild = val.parts.slice(1).join('.'); 15212 this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); 15213 } else { 15214 value = val.original || value; 15215 if (value.replace) { 15216 value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, ''); 15217 } 15218 15219 this.opcode('pushId', val.type, value); 15220 } 15221 } 15222 this.accept(val); 15223 } 15224 }, 15225 15226 setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) { 15227 var params = sexpr.params; 15228 this.pushParams(params); 15229 15230 this.opcode('pushProgram', program); 15231 this.opcode('pushProgram', inverse); 15232 15233 if (sexpr.hash) { 15234 this.accept(sexpr.hash); 15235 } else { 15236 this.opcode('emptyHash', omitEmpty); 15237 } 15238 15239 return params; 15240 }, 15241 15242 blockParamIndex: function blockParamIndex(name) { 15243 for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) { 15244 var blockParams = this.options.blockParams[depth], 15245 param = blockParams && _utils.indexOf(blockParams, name); 15246 if (blockParams && param >= 0) { 15247 return [depth, param]; 15248 } 15249 } 15250 } 15251 }; 15252 15253 function precompile(input, options, env) { 15254 if (input == null || typeof input !== 'string' && input.type !== 'Program') { 15255 throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); 15256 } 15257 15258 options = options || {}; 15259 if (!('data' in options)) { 15260 options.data = true; 15261 } 15262 if (options.compat) { 15263 options.useDepths = true; 15264 } 15265 15266 var ast = env.parse(input, options), 15267 environment = new env.Compiler().compile(ast, options); 15268 return new env.JavaScriptCompiler().compile(environment, options); 15269 } 15270 15271 function compile(input, options, env) { 15272 if (options === undefined) options = {}; 15273 15274 if (input == null || typeof input !== 'string' && input.type !== 'Program') { 15275 throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); 15276 } 15277 15278 options = _utils.extend({}, options); 15279 if (!('data' in options)) { 15280 options.data = true; 15281 } 15282 if (options.compat) { 15283 options.useDepths = true; 15284 } 15285 15286 var compiled = undefined; 15287 15288 function compileInput() { 15289 var ast = env.parse(input, options), 15290 environment = new env.Compiler().compile(ast, options), 15291 templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); 15292 return env.template(templateSpec); 15293 } 15294 15295 // Template is only compiled on first use and cached after that point. 15296 function ret(context, execOptions) { 15297 if (!compiled) { 15298 compiled = compileInput(); 15299 } 15300 return compiled.call(this, context, execOptions); 15301 } 15302 ret._setup = function (setupOptions) { 15303 if (!compiled) { 15304 compiled = compileInput(); 15305 } 15306 return compiled._setup(setupOptions); 15307 }; 15308 ret._child = function (i, data, blockParams, depths) { 15309 if (!compiled) { 15310 compiled = compileInput(); 15311 } 15312 return compiled._child(i, data, blockParams, depths); 15313 }; 15314 return ret; 15315 } 15316 15317 function argEquals(a, b) { 15318 if (a === b) { 15319 return true; 15320 } 15321 15322 if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) { 15323 for (var i = 0; i < a.length; i++) { 15324 if (!argEquals(a[i], b[i])) { 15325 return false; 15326 } 15327 } 15328 return true; 15329 } 15330 } 15331 15332 function transformLiteralToPath(sexpr) { 15333 if (!sexpr.path.parts) { 15334 var literal = sexpr.path; 15335 // Casting to string here to make false and 0 literal values play nicely with the rest 15336 // of the system. 15337 sexpr.path = { 15338 type: 'PathExpression', 15339 data: false, 15340 depth: 0, 15341 parts: [literal.original + ''], 15342 original: literal.original + '', 15343 loc: literal.loc 15344 }; 15345 } 15346 } 15347 15348/***/ }), 15349/* 9
vendor: 5,335 bytes, lines 15349-15518
153491 */ 15350/***/ (function(module, exports, __webpack_require__) { 15351 15352 'use strict'; 15353 15354 var _Object$keys = __webpack_require__(60)['default']; 15355 15356 var _interopRequireDefault = __webpack_require__(1)['default']; 15357 15358 exports.__esModule = true; 15359 15360 var _base = __webpack_require__(4); 15361 15362 var _exception = __webpack_require__(6); 15363 15364 var _exception2 = _interopRequireDefault(_exception); 15365 15366 var _utils = __webpack_require__(5); 15367 15368 var _codeGen = __webpack_require__(92); 15369 15370 var _codeGen2 = _interopRequireDefault(_codeGen); 15371 15372 function Literal(value) { 15373 this.value = value; 15374 } 15375 15376 function JavaScriptCompiler() {} 15377 15378 JavaScriptCompiler.prototype = { 15379 // PUBLIC API: You can override these methods in a subclass to provide 15380 // alternative compiled forms for name lookup and buffering semantics 15381 nameLookup: function nameLookup(parent, name /*, type */) { 15382 return this.internalNameLookup(parent, name); 15383 }, 15384 depthedLookup: function depthedLookup(name) { 15385 return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')']; 15386 }, 15387 15388 compilerInfo: function compilerInfo() { 15389 var revision = _base.COMPILER_REVISION, 15390 versions = _base.REVISION_CHANGES[revision]; 15391 return [revision, versions]; 15392 }, 15393 15394 appendToBuffer: function appendToBuffer(source, location, explicit) { 15395 // Force a source as this simplifies the merge logic. 15396 if (!_utils.isArray(source)) { 15397 source = [source]; 15398 } 15399 source = this.source.wrap(source, location); 15400 15401 if (this.environment.isSimple) { 15402 return ['return ', source, ';']; 15403 } else if (explicit) { 15404 // This is a case where the buffer operation occurs as a child of another 15405 // construct, generally braces. We have to explicitly output these buffer 15406 // operations to ensure that the emitted code goes in the correct location. 15407 return ['buffer += ', source, ';']; 15408 } else { 15409 source.appendToBuffer = true; 15410 return source; 15411 } 15412 }, 15413 15414 initializeBuffer: function initializeBuffer() { 15415 return this.quotedString(''); 15416 }, 15417 // END PUBLIC API 15418 internalNameLookup: function internalNameLookup(parent, name) { 15419 this.lookupPropertyFunctionIsUsed = true; 15420 return ['lookupProperty(', parent, ',', JSON.stringify(name), ')']; 15421 }, 15422 15423 lookupPropertyFunctionIsUsed: false, 15424 15425 compile: function compile(environment, options, context, asObject) { 15426 this.environment = environment; 15427 this.options = options; 15428 this.stringParams = this.options.stringParams; 15429 this.trackIds = this.options.trackIds; 15430 this.precompile = !asObject; 15431 15432 this.name = this.environment.name; 15433 this.isChild = !!context; 15434 this.context = context || { 15435 decorators: [], 15436 programs: [], 15437 environments: [] 15438 }; 15439 15440 this.preamble(); 15441 15442 this.stackSlot = 0; 15443 this.stackVars = []; 15444 this.aliases = {}; 15445 this.registers = { list: [] }; 15446 this.hashes = []; 15447 this.compileStack = []; 15448 this.inlineStack = []; 15449 this.blockParams = []; 15450 15451 this.compileChildren(environment, options); 15452 15453 this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; 15454 this.useBlockParams = this.useBlockParams || environment.useBlockParams; 15455 15456 var opcodes = environment.opcodes, 15457 opcode = undefined, 15458 firstLoc = undefined, 15459 i = undefined, 15460 l = undefined; 15461 15462 for (i = 0, l = opcodes.length; i < l; i++) { 15463 opcode = opcodes[i]; 15464 15465 this.source.currentLocation = opcode.loc; 15466 firstLoc = firstLoc || opcode.loc; 15467 this[opcode.opcode].apply(this, opcode.args); 15468 } 15469 15470 // Flush any trailing content that might be pending. 15471 this.source.currentLocation = firstLoc; 15472 this.pushSource(''); 15473 15474 /* istanbul ignore next */ 15475 if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { 15476 throw new _exception2['default']('Compile completed with content left on stack'); 15477 } 15478 15479 if (!this.decorators.isEmpty()) { 15480 this.useDecorators = true; 15481 15482 this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\n']); 15483 this.decorators.push('return fn;'); 15484 15485 if (asObject) { 15486 this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); 15487 } else { 15488 this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); 15489 this.decorators.push('}\n'); 15490 this.decorators = this.decorators.merge(); 15491 } 15492 } else { 15493 this.decorators = undefined; 15494 } 15495 15496 var fn = this.createFunctionContext(asObject); 15497 if (!this.isChild) { 15498 var ret = { 15499 compiler: this.compilerInfo(), 15500 main: fn 15501 }; 15502 15503 if (this.decorators) { 15504 ret.main_d = this.decorators; // eslint-disable-line camelcase 15505 ret.useDecorators = true; 15506 } 15507 15508 var _context = this.context; 15509 var programs = _context.programs; 15510 var decorators = _context.decorators; 15511 15512 for (i = 0, l = programs.length; i < l; i++) { 15513 if (programs[i]) { 15514 ret[i] = programs[i]; 15515 if (decorators[i]) { 15516 ret[i + '_d'] = decorators[i]; 15517 ret.useDecorators = true; 15518 }
vendor: 10,178 bytes, lines 15518-15844
15518 15519 } 15520 } 15521 15522 if (this.environment.usePartial) { 15523 ret.usePartial = true; 15524 } 15525 if (this.options.data) { 15526 ret.useData = true; 15527 } 15528 if (this.useDepths) { 15529 ret.useDepths = true; 15530 } 15531 if (this.useBlockParams) { 15532 ret.useBlockParams = true; 15533 } 15534 if (this.options.compat) { 15535 ret.compat = true; 15536 } 15537 15538 if (!asObject) { 15539 ret.compiler = JSON.stringify(ret.compiler); 15540 15541 this.source.currentLocation = { start: { line: 1, column: 0 } }; 15542 ret = this.objectLiteral(ret); 15543 15544 if (options.srcName) { 15545 ret = ret.toStringWithSourceMap({ file: options.destName }); 15546 ret.map = ret.map && ret.map.toString(); 15547 } else { 15548 ret = ret.toString(); 15549 } 15550 } else { 15551 ret.compilerOptions = this.options; 15552 } 15553 15554 return ret; 15555 } else { 15556 return fn; 15557 } 15558 }, 15559 15560 preamble: function preamble() { 15561 // track the last context pushed into place to allow skipping the 15562 // getContext opcode when it would be a noop 15563 this.lastContext = 0; 15564 this.source = new _codeGen2['default'](this.options.srcName); 15565 this.decorators = new _codeGen2['default'](this.options.srcName); 15566 }, 15567 15568 createFunctionContext: function createFunctionContext(asObject) { 15569 // istanbul ignore next 15570 15571 var _this = this; 15572 15573 var varDeclarations = ''; 15574 15575 var locals = this.stackVars.concat(this.registers.list); 15576 if (locals.length > 0) { 15577 varDeclarations += ', ' + locals.join(', '); 15578 } 15579 15580 // Generate minimizer alias mappings 15581 // 15582 // When using true SourceNodes, this will update all references to the given alias 15583 // as the source nodes are reused in situ. For the non-source node compilation mode, 15584 // aliases will not be used, but this case is already being run on the client and 15585 // we aren't concern about minimizing the template size. 15586 var aliasCount = 0; 15587 _Object$keys(this.aliases).forEach(function (alias) { 15588 var node = _this.aliases[alias]; 15589 if (node.children && node.referenceCount > 1) { 15590 varDeclarations += ', alias' + ++aliasCount + '=' + alias; 15591 node.children[0] = 'alias' + aliasCount; 15592 } 15593 }); 15594 15595 if (this.lookupPropertyFunctionIsUsed) { 15596 varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration(); 15597 } 15598 15599 var params = ['container', 'depth0', 'helpers', 'partials', 'data']; 15600 15601 if (this.useBlockParams || this.useDepths) { 15602 params.push('blockParams'); 15603 } 15604 if (this.useDepths) { 15605 params.push('depths'); 15606 } 15607 15608 // Perform a second pass over the output to merge content when possible 15609 var source = this.mergeSource(varDeclarations); 15610 15611 if (asObject) { 15612 params.push(source); 15613 15614 return Function.apply(this, params); 15615 } else { 15616 return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); 15617 } 15618 }, 15619 mergeSource: function mergeSource(varDeclarations) { 15620 var isSimple = this.environment.isSimple, 15621 appendOnly = !this.forceBuffer, 15622 appendFirst = undefined, 15623 sourceSeen = undefined, 15624 bufferStart = undefined, 15625 bufferEnd = undefined; 15626 this.source.each(function (line) { 15627 if (line.appendToBuffer) { 15628 if (bufferStart) { 15629 line.prepend(' + '); 15630 } else { 15631 bufferStart = line; 15632 } 15633 bufferEnd = line; 15634 } else { 15635 if (bufferStart) { 15636 if (!sourceSeen) { 15637 appendFirst = true; 15638 } else { 15639 bufferStart.prepend('buffer += '); 15640 } 15641 bufferEnd.add(';'); 15642 bufferStart = bufferEnd = undefined; 15643 } 15644 15645 sourceSeen = true; 15646 if (!isSimple) { 15647 appendOnly = false; 15648 } 15649 } 15650 }); 15651 15652 if (appendOnly) { 15653 if (bufferStart) { 15654 bufferStart.prepend('return '); 15655 bufferEnd.add(';'); 15656 } else if (!sourceSeen) { 15657 this.source.push('return "";'); 15658 } 15659 } else { 15660 varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); 15661 15662 if (bufferStart) { 15663 bufferStart.prepend('return buffer + '); 15664 bufferEnd.add(';'); 15665 } else { 15666 this.source.push('return buffer;'); 15667 } 15668 } 15669 15670 if (varDeclarations) { 15671 this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); 15672 } 15673 15674 return this.source.merge(); 15675 }, 15676 15677 lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() { 15678 return '\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n '.trim(); 15679 }, 15680 15681 // [blockValue] 15682 // 15683 // On stack, before: hash, inverse, program, value 15684 // On stack, after: return value of blockHelperMissing 15685 // 15686 // The purpose of this opcode is to take a block of the form 15687 // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and 15688 // replace it on the stack with the result of properly 15689 // invoking blockHelperMissing. 15690 blockValue: function blockValue(name) { 15691 var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'), 15692 params = [this.contextName(0)]; 15693 this.setupHelperArgs(name, 0, params); 15694 15695 var blockName = this.popStack(); 15696 params.splice(1, 0, blockName); 15697 15698 this.push(this.source.functionCall(blockHelperMissing, 'call', params)); 15699 }, 15700 15701 // [ambiguousBlockValue] 15702 // 15703 // On stack, before: hash, inverse, program, value 15704 // Compiler value, before: lastHelper=value of last found helper, if any 15705 // On stack, after, if no lastHelper: same as [blockValue] 15706 // On stack, after, if lastHelper: value 15707 ambiguousBlockValue: function ambiguousBlockValue() { 15708 // We're being a bit cheeky and reusing the options value from the prior exec 15709 var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'), 15710 params = [this.contextName(0)]; 15711 this.setupHelperArgs('', 0, params, true); 15712 15713 this.flushInline(); 15714 15715 var current = this.topStack(); 15716 params.splice(1, 0, current); 15717 15718 this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']); 15719 }, 15720 15721 // [appendContent] 15722 // 15723 // On stack, before: ... 15724 // On stack, after: ... 15725 // 15726 // Appends the string value of `content` to the current buffer 15727 appendContent: function appendContent(content) { 15728 if (this.pendingContent) { 15729 content = this.pendingContent + content; 15730 } else { 15731 this.pendingLocation = this.source.currentLocation; 15732 } 15733 15734 this.pendingContent = content; 15735 }, 15736 15737 // [append] 15738 // 15739 // On stack, before: value, ... 15740 // On stack, after: ... 15741 // 15742 // Coerces `value` to a String and appends it to the current buffer. 15743 // 15744 // If `value` is truthy, or 0, it is coerced into a string and appended 15745 // Otherwise, the empty string is appended 15746 append: function append() { 15747 if (this.isInline()) { 15748 this.replaceStack(function (current) { 15749 return [' != null ? ', current, ' : ""']; 15750 }); 15751 15752 this.pushSource(this.appendToBuffer(this.popStack())); 15753 } else { 15754 var local = this.popStack(); 15755 this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); 15756 if (this.environment.isSimple) { 15757 this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); 15758 } 15759 } 15760 }, 15761 15762 // [appendEscaped] 15763 // 15764 // On stack, before: value, ... 15765 // On stack, after: ... 15766 // 15767 // Escape `value` and append it to the buffer 15768 appendEscaped: function appendEscaped() { 15769 this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); 15770 }, 15771 15772 // [getContext] 15773 // 15774 // On stack, before: ... 15775 // On stack, after: ... 15776 // Compiler value, after: lastContext=depth 15777 // 15778 // Set the value of the `lastContext` compiler value to the depth 15779 getContext: function getContext(depth) { 15780 this.lastContext = depth; 15781 }, 15782 15783 // [pushContext] 15784 // 15785 // On stack, before: ... 15786 // On stack, after: currentContext, ... 15787 // 15788 // Pushes the value of the current context onto the stack. 15789 pushContext: function pushContext() { 15790 this.pushStackLiteral(this.contextName(this.lastContext)); 15791 }, 15792 15793 // [lookupOnContext] 15794 // 15795 // On stack, before: ... 15796 // On stack, after: currentContext[name], ... 15797 // 15798 // Looks up the value of `name` on the current context and pushes 15799 // it onto the stack. 15800 lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) { 15801 var i = 0; 15802 15803 if (!scoped && this.options.compat && !this.lastContext) { 15804 // The depthed query is expected to handle the undefined logic for the root level that 15805 // is implemented below, so we evaluate that directly in compat mode 15806 this.push(this.depthedLookup(parts[i++])); 15807 } else { 15808 this.pushContext(); 15809 } 15810 15811 this.resolvePath('context', parts, i, falsy, strict); 15812 }, 15813 15814 // [lookupBlockParam] 15815 // 15816 // On stack, before: ... 15817 // On stack, after: blockParam[name], ... 15818 // 15819 // Looks up the value of `parts` on the given block param and pushes 15820 // it onto the stack. 15821 lookupBlockParam: function lookupBlockParam(blockParamId, parts) { 15822 this.useBlockParams = true; 15823 15824 this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); 15825 this.resolvePath('context', parts, 1); 15826 }, 15827 15828 // [lookupData] 15829 // 15830 // On stack, before: ... 15831 // On stack, after: data, ... 15832 // 15833 // Push the data lookup operator 15834 lookupData: function lookupData(depth, parts, strict) { 15835 if (!depth) { 15836 this.pushStackLiteral('data'); 15837 } else { 15838 this.pushStackLiteral('container.data(data, ' + depth + ')'); 15839 } 15840 15841 this.resolvePath('data', parts, 0, true, strict); 15842 }, 15843 15844 resolvePath: function resolvePath(type, parts,
vendor: 2,919 bytes, lines 15844-15941
15844i, falsy, strict) { 15845 // istanbul ignore next 15846 15847 var _this2 = this; 15848 15849 if (this.options.strict || this.options.assumeObjects) { 15850 this.push(strictLookup(this.options.strict && strict, this, parts, i, type)); 15851 return; 15852 } 15853 15854 var len = parts.length; 15855 for (; i < len; i++) { 15856 /* eslint-disable no-loop-func */ 15857 this.replaceStack(function (current) { 15858 var lookup = _this2.nameLookup(current, parts[i], type); 15859 // We want to ensure that zero and false are handled properly if the context (falsy flag) 15860 // needs to have the special handling for these values. 15861 if (!falsy) { 15862 return [' != null ? ', lookup, ' : ', current]; 15863 } else { 15864 // Otherwise we can use generic falsy handling 15865 return [' && ', lookup]; 15866 } 15867 }); 15868 /* eslint-enable no-loop-func */ 15869 } 15870 }, 15871 15872 // [resolvePossibleLambda] 15873 // 15874 // On stack, before: value, ... 15875 // On stack, after: resolved value, ... 15876 // 15877 // If the `value` is a lambda, replace it on the stack by 15878 // the return value of the lambda 15879 resolvePossibleLambda: function resolvePossibleLambda() { 15880 this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); 15881 }, 15882 15883 // [pushStringParam] 15884 // 15885 // On stack, before: ... 15886 // On stack, after: string, currentContext, ... 15887 // 15888 // This opcode is designed for use in string mode, which 15889 // provides the string value of a parameter along with its 15890 // depth rather than resolving it immediately. 15891 pushStringParam: function pushStringParam(string, type) { 15892 this.pushContext(); 15893 this.pushString(type); 15894 15895 // If it's a subexpression, the string result 15896 // will be pushed after this opcode. 15897 if (type !== 'SubExpression') { 15898 if (typeof string === 'string') { 15899 this.pushString(string); 15900 } else { 15901 this.pushStackLiteral(string); 15902 } 15903 } 15904 }, 15905 15906 emptyHash: function emptyHash(omitEmpty) { 15907 if (this.trackIds) { 15908 this.push('{}'); // hashIds 15909 } 15910 if (this.stringParams) { 15911 this.push('{}'); // hashContexts 15912 this.push('{}'); // hashTypes 15913 } 15914 this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); 15915 }, 15916 pushHash: function pushHash() { 15917 if (this.hash) { 15918 this.hashes.push(this.hash); 15919 } 15920 this.hash = { values: {}, types: [], contexts: [], ids: [] }; 15921 }, 15922 popHash: function popHash() { 15923 var hash = this.hash; 15924 this.hash = this.hashes.pop(); 15925 15926 if (this.trackIds) { 15927 this.push(this.objectLiteral(hash.ids)); 15928 } 15929 if (this.stringParams) { 15930 this.push(this.objectLiteral(hash.contexts)); 15931 this.push(this.objectLiteral(hash.types)); 15932 } 15933 15934 this.push(this.objectLiteral(hash.values)); 15935 }, 15936 15937 // [pushString] 15938 // 15939 // On stack, before: ... 15940 // On stack, after: quotedString(string), ... 15941 //
vendor: 7,424 bytes, lines 15942-16170
15942 // Push a quoted version of `string` onto the stack 15943 pushString: function pushString(string) { 15944 this.pushStackLiteral(this.quotedString(string)); 15945 }, 15946 15947 // [pushLiteral] 15948 // 15949 // On stack, before: ... 15950 // On stack, after: value, ... 15951 // 15952 // Pushes a value onto the stack. This operation prevents 15953 // the compiler from creating a temporary variable to hold 15954 // it. 15955 pushLiteral: function pushLiteral(value) { 15956 this.pushStackLiteral(value); 15957 }, 15958 15959 // [pushProgram] 15960 // 15961 // On stack, before: ... 15962 // On stack, after: program(guid), ... 15963 // 15964 // Push a program expression onto the stack. This takes 15965 // a compile-time guid and converts it into a runtime-accessible 15966 // expression. 15967 pushProgram: function pushProgram(guid) { 15968 if (guid != null) { 15969 this.pushStackLiteral(this.programExpression(guid)); 15970 } else { 15971 this.pushStackLiteral(null); 15972 } 15973 }, 15974 15975 // [registerDecorator] 15976 // 15977 // On stack, before: hash, program, params..., ... 15978 // On stack, after: ... 15979 // 15980 // Pops off the decorator's parameters, invokes the decorator, 15981 // and inserts the decorator into the decorators list. 15982 registerDecorator: function registerDecorator(paramSize, name) { 15983 var foundDecorator = this.nameLookup('decorators', name, 'decorator'), 15984 options = this.setupHelperArgs(name, paramSize); 15985 15986 this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']); 15987 }, 15988 15989 // [invokeHelper] 15990 // 15991 // On stack, before: hash, inverse, program, params..., ... 15992 // On stack, after: result of helper invocation 15993 // 15994 // Pops off the helper's parameters, invokes the helper, 15995 // and pushes the helper's return value onto the stack. 15996 // 15997 // If the helper is not found, `helperMissing` is called. 15998 invokeHelper: function invokeHelper(paramSize, name, isSimple) { 15999 var nonHelper = this.popStack(), 16000 helper = this.setupHelper(paramSize, name); 16001 16002 var possibleFunctionCalls = []; 16003 16004 if (isSimple) { 16005 // direct call to helper 16006 possibleFunctionCalls.push(helper.name); 16007 } 16008 // call a function from the input object 16009 possibleFunctionCalls.push(nonHelper); 16010 if (!this.options.strict) { 16011 possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing')); 16012 } 16013 16014 var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')']; 16015 var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams); 16016 this.push(functionCall); 16017 }, 16018 16019 itemsSeparatedBy: function itemsSeparatedBy(items, separator) { 16020 var result = []; 16021 result.push(items[0]); 16022 for (var i = 1; i < items.length; i++) { 16023 result.push(separator, items[i]); 16024 } 16025 return result; 16026 }, 16027 // [invokeKnownHelper] 16028 // 16029 // On stack, before: hash, inverse, program, params..., ... 16030 // On stack, after: result of helper invocation 16031 // 16032 // This operation is used when the helper is known to exist, 16033 // so a `helperMissing` fallback is not required. 16034 invokeKnownHelper: function invokeKnownHelper(paramSize, name) { 16035 var helper = this.setupHelper(paramSize, name); 16036 this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); 16037 }, 16038 16039 // [invokeAmbiguous] 16040 // 16041 // On stack, before: hash, inverse, program, params..., ... 16042 // On stack, after: result of disambiguation 16043 // 16044 // This operation is used when an expression like `{{foo}}` 16045 // is provided, but we don't know at compile-time whether it 16046 // is a helper or a path. 16047 // 16048 // This operation emits more code than the other options, 16049 // and can be avoided by passing the `knownHelpers` and 16050 // `knownHelpersOnly` flags at compile-time. 16051 invokeAmbiguous: function invokeAmbiguous(name, helperCall) { 16052 this.useRegister('helper'); 16053 16054 var nonHelper = this.popStack(); 16055 16056 this.emptyHash(); 16057 var helper = this.setupHelper(0, name, helperCall); 16058 16059 var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); 16060 16061 var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; 16062 if (!this.options.strict) { 16063 lookup[0] = '(helper = '; 16064 lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing')); 16065 } 16066 16067 this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']); 16068 }, 16069 16070 // [invokePartial] 16071 // 16072 // On stack, before: context, ... 16073 // On stack after: result of partial invocation 16074 // 16075 // This operation pops off a context, invokes a partial with that context, 16076 // and pushes the result of the invocation back. 16077 invokePartial: function invokePartial(isDynamic, name, indent) { 16078 var params = [], 16079 options = this.setupParams(name, 1, params); 16080 16081 if (isDynamic) { 16082 name = this.popStack(); 16083 delete options.name; 16084 } 16085 16086 if (indent) { 16087 options.indent = JSON.stringify(indent); 16088 } 16089 options.helpers = 'helpers'; 16090 options.partials = 'partials'; 16091 options.decorators = 'container.decorators'; 16092 16093 if (!isDynamic) { 16094 params.unshift(this.nameLookup('partials', name, 'partial')); 16095 } else { 16096 params.unshift(name); 16097 } 16098 16099 if (this.options.compat) { 16100 options.depths = 'depths'; 16101 } 16102 options = this.objectLiteral(options); 16103 params.push(options); 16104 16105 this.push(this.source.functionCall('container.invokePartial', '', params)); 16106 }, 16107 16108 // [assignToHash] 16109 // 16110 // On stack, before: value, ..., hash, ... 16111 // On stack, after: ..., hash, ... 16112 // 16113 // Pops a value off the stack and assigns it to the current hash 16114 assignToHash: function assignToHash(key) { 16115 var value = this.popStack(), 16116 context = undefined, 16117 type = undefined, 16118 id = undefined; 16119 16120 if (this.trackIds) { 16121 id = this.popStack(); 16122 } 16123 if (this.stringParams) { 16124 type = this.popStack(); 16125 context = this.popStack(); 16126 } 16127 16128 var hash = this.hash; 16129 if (context) { 16130 hash.contexts[key] = context; 16131 } 16132 if (type) { 16133 hash.types[key] = type; 16134 } 16135 if (id) { 16136 hash.ids[key] = id; 16137 } 16138 hash.values[key] = value; 16139 }, 16140 16141 pushId: function pushId(type, name, child) { 16142 if (type === 'BlockParam') { 16143 this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : '')); 16144 } else if (type === 'PathExpression') { 16145 this.pushString(name); 16146 } else if (type === 'SubExpression') { 16147 this.pushStackLiteral('true'); 16148 } else { 16149 this.pushStackLiteral('null'); 16150 } 16151 }, 16152 16153 // HELPERS 16154 16155 compiler: JavaScriptCompiler, 16156 16157 compileChildren: function compileChildren(environment, options) { 16158 var children = environment.children, 16159 child = undefined, 16160 compiler = undefined; 16161 16162 for (var i = 0, l = children.length; i < l; i++) { 16163 child = children[i]; 16164 compiler = new this.compiler(); // eslint-disable-line new-cap 16165 16166 var existing = this.matchExistingProgram(child); 16167 16168 if (existing == null) { 16169 this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children 16170 var index = this.context.programs.length
vendor: 9,546 bytes, lines 16170-16490
16170; 16171 child.index = index; 16172 child.name = 'program' + index; 16173 this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); 16174 this.context.decorators[index] = compiler.decorators; 16175 this.context.environments[index] = child; 16176 16177 this.useDepths = this.useDepths || compiler.useDepths; 16178 this.useBlockParams = this.useBlockParams || compiler.useBlockParams; 16179 child.useDepths = this.useDepths; 16180 child.useBlockParams = this.useBlockParams; 16181 } else { 16182 child.index = existing.index; 16183 child.name = 'program' + existing.index; 16184 16185 this.useDepths = this.useDepths || existing.useDepths; 16186 this.useBlockParams = this.useBlockParams || existing.useBlockParams; 16187 } 16188 } 16189 }, 16190 matchExistingProgram: function matchExistingProgram(child) { 16191 for (var i = 0, len = this.context.environments.length; i < len; i++) { 16192 var environment = this.context.environments[i]; 16193 if (environment && environment.equals(child)) { 16194 return environment; 16195 } 16196 } 16197 }, 16198 16199 programExpression: function programExpression(guid) { 16200 var child = this.environment.children[guid], 16201 programParams = [child.index, 'data', child.blockParams]; 16202 16203 if (this.useBlockParams || this.useDepths) { 16204 programParams.push('blockParams'); 16205 } 16206 if (this.useDepths) { 16207 programParams.push('depths'); 16208 } 16209 16210 return 'container.program(' + programParams.join(', ') + ')'; 16211 }, 16212 16213 useRegister: function useRegister(name) { 16214 if (!this.registers[name]) { 16215 this.registers[name] = true; 16216 this.registers.list.push(name); 16217 } 16218 }, 16219 16220 push: function push(expr) { 16221 if (!(expr instanceof Literal)) { 16222 expr = this.source.wrap(expr); 16223 } 16224 16225 this.inlineStack.push(expr); 16226 return expr; 16227 }, 16228 16229 pushStackLiteral: function pushStackLiteral(item) { 16230 this.push(new Literal(item)); 16231 }, 16232 16233 pushSource: function pushSource(source) { 16234 if (this.pendingContent) { 16235 this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); 16236 this.pendingContent = undefined; 16237 } 16238 16239 if (source) { 16240 this.source.push(source); 16241 } 16242 }, 16243 16244 replaceStack: function replaceStack(callback) { 16245 var prefix = ['('], 16246 stack = undefined, 16247 createdStack = undefined, 16248 usedLiteral = undefined; 16249 16250 /* istanbul ignore next */ 16251 if (!this.isInline()) { 16252 throw new _exception2['default']('replaceStack on non-inline'); 16253 } 16254 16255 // We want to merge the inline statement into the replacement statement via ',' 16256 var top = this.popStack(true); 16257 16258 if (top instanceof Literal) { 16259 // Literals do not need to be inlined 16260 stack = [top.value]; 16261 prefix = ['(', stack]; 16262 usedLiteral = true; 16263 } else { 16264 // Get or create the current stack name for use by the inline 16265 createdStack = true; 16266 var _name = this.incrStack(); 16267 16268 prefix = ['((', this.push(_name), ' = ', top, ')']; 16269 stack = this.topStack(); 16270 } 16271 16272 var item = callback.call(this, stack); 16273 16274 if (!usedLiteral) { 16275 this.popStack(); 16276 } 16277 if (createdStack) { 16278 this.stackSlot--; 16279 } 16280 this.push(prefix.concat(item, ')')); 16281 }, 16282 16283 incrStack: function incrStack() { 16284 this.stackSlot++; 16285 if (this.stackSlot > this.stackVars.length) { 16286 this.stackVars.push('stack' + this.stackSlot); 16287 } 16288 return this.topStackName(); 16289 }, 16290 topStackName: function topStackName() { 16291 return 'stack' + this.stackSlot; 16292 }, 16293 flushInline: function flushInline() { 16294 var inlineStack = this.inlineStack; 16295 this.inlineStack = []; 16296 for (var i = 0, len = inlineStack.length; i < len; i++) { 16297 var entry = inlineStack[i]; 16298 /* istanbul ignore if */ 16299 if (entry instanceof Literal) { 16300 this.compileStack.push(entry); 16301 } else { 16302 var stack = this.incrStack(); 16303 this.pushSource([stack, ' = ', entry, ';']); 16304 this.compileStack.push(stack); 16305 } 16306 } 16307 }, 16308 isInline: function isInline() { 16309 return this.inlineStack.length; 16310 }, 16311 16312 popStack: function popStack(wrapped) { 16313 var inline = this.isInline(), 16314 item = (inline ? this.inlineStack : this.compileStack).pop(); 16315 16316 if (!wrapped && item instanceof Literal) { 16317 return item.value; 16318 } else { 16319 if (!inline) { 16320 /* istanbul ignore next */ 16321 if (!this.stackSlot) { 16322 throw new _exception2['default']('Invalid stack pop'); 16323 } 16324 this.stackSlot--; 16325 } 16326 return item; 16327 } 16328 }, 16329 16330 topStack: function topStack() { 16331 var stack = this.isInline() ? this.inlineStack : this.compileStack, 16332 item = stack[stack.length - 1]; 16333 16334 /* istanbul ignore if */ 16335 if (item instanceof Literal) { 16336 return item.value; 16337 } else { 16338 return item; 16339 } 16340 }, 16341 16342 contextName: function contextName(context) { 16343 if (this.useDepths && context) { 16344 return 'depths[' + context + ']'; 16345 } else { 16346 return 'depth' + context; 16347 } 16348 }, 16349 16350 quotedString: function quotedString(str) { 16351 return this.source.quotedString(str); 16352 }, 16353 16354 objectLiteral: function objectLiteral(obj) { 16355 return this.source.objectLiteral(obj); 16356 }, 16357 16358 aliasable: function aliasable(name) { 16359 var ret = this.aliases[name]; 16360 if (ret) { 16361 ret.referenceCount++; 16362 return ret; 16363 } 16364 16365 ret = this.aliases[name] = this.source.wrap(name); 16366 ret.aliasable = true; 16367 ret.referenceCount = 1; 16368 16369 return ret; 16370 }, 16371 16372 setupHelper: function setupHelper(paramSize, name, blockHelper) { 16373 var params = [], 16374 paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); 16375 var foundHelper = this.nameLookup('helpers', name, 'helper'), 16376 callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})'); 16377 16378 return { 16379 params: params, 16380 paramsInit: paramsInit, 16381 name: foundHelper, 16382 callParams: [callContext].concat(params) 16383 }; 16384 }, 16385 16386 setupParams: function setupParams(helper, paramSize, params) { 16387 var options = {}, 16388 contexts = [], 16389 types = [], 16390 ids = [], 16391 objectArgs = !params, 16392 param = undefined; 16393 16394 if (objectArgs) { 16395 params = []; 16396 } 16397 16398 options.name = this.quotedString(helper); 16399 options.hash = this.popStack(); 16400 16401 if (this.trackIds) { 16402 options.hashIds = this.popStack(); 16403 } 16404 if (this.stringParams) { 16405 options.hashTypes = this.popStack(); 16406 options.hashContexts = this.popStack(); 16407 } 16408 16409 var inverse = this.popStack(), 16410 program = this.popStack(); 16411 16412 // Avoid setting fn and inverse if neither are set. This allows 16413 // helpers to do a check for `if (options.fn)` 16414 if (program || inverse) { 16415 options.fn = program || 'container.noop'; 16416 options.inverse = inverse || 'container.noop'; 16417 } 16418 16419 // The parameters go on to the stack in order (making sure that they are evaluated in order) 16420 // so we need to pop them off the stack in reverse order 16421 var i = paramSize; 16422 while (i--) { 16423 param = this.popStack(); 16424 params[i] = param; 16425 16426 if (this.trackIds) { 16427 ids[i] = this.popStack(); 16428 } 16429 if (this.stringParams) { 16430 types[i] = this.popStack(); 16431 contexts[i] = this.popStack(); 16432 } 16433 } 16434 16435 if (objectArgs) { 16436 options.args = this.source.generateArray(params); 16437 } 16438 16439 if (this.trackIds) { 16440 options.ids = this.source.generateArray(ids); 16441 } 16442 if (this.stringParams) { 16443 options.types = this.source.generateArray(types); 16444 options.contexts = this.source.generateArray(contexts); 16445 } 16446 16447 if (this.options.data) { 16448 options.data = 'data'; 16449 } 16450 if (this.useBlockParams) { 16451 options.blockParams = 'blockParams'; 16452 } 16453 return options; 16454 }, 16455 16456 setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) { 16457 var options = this.setupParams(helper, paramSize, params); 16458 options.loc = JSON.stringify(this.source.currentLocation); 16459 options = this.objectLiteral(options); 16460 if (useRegister) { 16461 this.useRegister('options'); 16462 params.push('options'); 16463 return ['options=', options]; 16464 } else if (params) { 16465 params.push(options); 16466 return ''; 16467 } else { 16468 return options; 16469 } 16470 } 16471 }; 16472 16473 (function () { 16474 var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' '); 16475 16476 var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; 16477 16478 for (var i = 0, l = reservedWords.length; i < l; i++) { 16479 compilerWords[reservedWords[i]] = true; 16480 } 16481 })(); 16482 16483 /** 16484 * @deprecated May be removed in the next major version 16485 */ 16486 JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { 16487 return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name); 16488 }; 16489 16490 function strictLookup(requireTerminal, compiler, parts,
vendor: 4,006 bytes, lines 16490-16638
16490i, type) { 16491 var stack = compiler.popStack(), 16492 len = parts.length; 16493 if (requireTerminal) { 16494 len--; 16495 } 16496 16497 for (; i < len; i++) { 16498 stack = compiler.nameLookup(stack, parts[i], type); 16499 } 16500 16501 if (requireTerminal) { 16502 return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )']; 16503 } else { 16504 return stack; 16505 } 16506 } 16507 16508 exports['default'] = JavaScriptCompiler; 16509 module.exports = exports['default']; 16510 16511/***/ }), 16512/* 92 */ 16513/***/ (function(module, exports, __webpack_require__) { 16514 16515 /* global define, require */ 16516 'use strict'; 16517 16518 var _Object$keys = __webpack_require__(60)['default']; 16519 16520 exports.__esModule = true; 16521 16522 var _utils = __webpack_require__(5); 16523 16524 var SourceNode = undefined; 16525 16526 try { 16527 /* istanbul ignore next */ 16528 if (false) { 16529 // We don't support this in AMD environments. For these environments, we assume that 16530 // they are running on the browser and thus have no need for the source-map library. 16531 var SourceMap = require('source-map'); 16532 SourceNode = SourceMap.SourceNode; 16533 } 16534 } catch (err) {} 16535 /* NOP */ 16536 16537 /* istanbul ignore if: tested but not covered in istanbul due to dist build */ 16538 if (!SourceNode) { 16539 SourceNode = function (line, column, srcFile, chunks) { 16540 this.src = ''; 16541 if (chunks) { 16542 this.add(chunks); 16543 } 16544 }; 16545 /* istanbul ignore next */ 16546 SourceNode.prototype = { 16547 add: function add(chunks) { 16548 if (_utils.isArray(chunks)) { 16549 chunks = chunks.join(''); 16550 } 16551 this.src += chunks; 16552 }, 16553 prepend: function prepend(chunks) { 16554 if (_utils.isArray(chunks)) { 16555 chunks = chunks.join(''); 16556 } 16557 this.src = chunks + this.src; 16558 }, 16559 toStringWithSourceMap: function toStringWithSourceMap() { 16560 return { code: this.toString() }; 16561 }, 16562 toString: function toString() { 16563 return this.src; 16564 } 16565 }; 16566 } 16567 16568 function castChunk(chunk, codeGen, loc) { 16569 if (_utils.isArray(chunk)) { 16570 var ret = []; 16571 16572 for (var i = 0, len = chunk.length; i < len; i++) { 16573 ret.push(codeGen.wrap(chunk[i], loc)); 16574 } 16575 return ret; 16576 } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { 16577 // Handle primitives that the SourceNode will throw up on 16578 return chunk + ''; 16579 } 16580 return chunk; 16581 } 16582 16583 function CodeGen(srcFile) { 16584 this.srcFile = srcFile; 16585 this.source = []; 16586 } 16587 16588 CodeGen.prototype = { 16589 isEmpty: function isEmpty() { 16590 return !this.source.length; 16591 }, 16592 prepend: function prepend(source, loc) { 16593 this.source.unshift(this.wrap(source, loc)); 16594 }, 16595 push: function push(source, loc) { 16596 this.source.push(this.wrap(source, loc)); 16597 }, 16598 16599 merge: function merge() { 16600 var source = this.empty(); 16601 this.each(function (line) { 16602 source.add([' ', line, '\n']); 16603 }); 16604 return source; 16605 }, 16606 16607 each: function each(iter) { 16608 for (var i = 0, len = this.source.length; i < len; i++) { 16609 iter(this.source[i]); 16610 } 16611 }, 16612 16613 empty: function empty() { 16614 var loc = this.currentLocation || { start: {} }; 16615 return new SourceNode(loc.start.line, loc.start.column, this.srcFile); 16616 }, 16617 wrap: function wrap(chunk) { 16618 var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; 16619 16620 if (chunk instanceof SourceNode) { 16621 return chunk; 16622 } 16623 16624 chunk = castChunk(chunk, this, loc); 16625 16626 return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); 16627 }, 16628 16629 functionCall: function functionCall(fn, type, params) { 16630 params = this.generateList(params); 16631 return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); 16632 }, 16633 16634 quotedString: function quotedString(str) { 16635 return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 16636 .replace(/\u2029/g, '\\u2029') + '"'; 16637 }, 16638
16639 objectLiteral: function objectLiteral(obj) { 16640 // istanbul ignore next 16641 16642 var _this = this; 16643 16644 var pairs = []; 16645 16646 _Object$keys(obj).forEach(function (key) { 16647 var value = castChunk(obj[key], _this); 16648 if (value !== 'undefined') { 16649 pairs.push([_this.quotedString(key), ':', value]); 16650 } 16651 }); 16652 16653 var ret = this.generateList(pairs); 16654 ret.prepend('{'); 16655 ret.add('}'); 16656 return ret; 16657 }, 16658 16659 generateList: function generateList(entries) { 16660 var ret = this.empty(); 16661 16662 for (var i = 0, len = entries.length; i < len; i++) { 16663 if (i) { 16664 ret.add(','); 16665 } 16666 16667 ret.add(castChunk(entries[i], this)); 16668 } 16669 16670 return ret; 16671 }, 16672 16673 generateArray: function generateArray(entries) { 16674 var ret = this.generateList(entries); 16675 ret.prepend('['); 16676 ret.add(']'); 16677 16678 return ret; 16679 } 16680 }; 16681 16682 exports['default'] = CodeGen; 16683 module.exports = exports['default']; 16684 16685/***/ }) 16686/******/ ]) 16687}); 16688; 16689window.JSON || (window.JSON = {}), 16690 (function () { 16691 function f(a) { 16692 return a < 10 ? "0" + a : a; 16693 } 16694 function quote(a) { 16695 return ( 16696 (escapable.lastIndex = 0), 16697 escapable.test(a) 16698 ? '"' + 16699 a.replace(escapable, function (a) { 16700 var b = meta[a]; 16701 return typeof b == "string" ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); 16702 }) + 16703 '"' 16704 : '"' + a + '"' 16705 ); 16706 } 16707 function str(a, b) { 16708 var c, 16709 d, 16710 e, 16711 f, 16712 g = gap, 16713 h, 16714 i = b[a]; 16715 i && typeof i == "object" && typeof i.toJSON == "function" && (i = i.toJSON(a)), typeof rep == "function" && (i = rep.call(b, a, i)); 16716 switch (typeof i) { 16717 case "string": 16718 return quote(i); 16719 case "number": 16720 return isFinite(i) ? String(i) : "null"; 16721 case "boolean": 16722 case "null": 16723 return String(i); 16724 case "object": 16725 if (!i) return "null"; 16726 (gap += indent), (h = []); 16727 if (Object.prototype.toString.apply(i) === "[object Array]") { 16728 f = i.length; 16729 for (c = 0; c < f; c += 1) h[c] = str(c, i) || "null"; 16730 return (e = h.length === 0 ? "[]" : gap ? "[\n" + gap + h.join(",\n" + gap) + "\n" + g + "]" : "[" + h.join(",") + "]"), (gap = g), e; 16731 } 16732 if (rep && typeof rep == "object") { 16733 f = rep.length; 16734 for (c = 0; c < f; c += 1) (d = rep[c]), typeof d == "string" && ((e = str(d, i)), e && h.push(quote(d) + (gap ? ": " : ":") + e)); 16735 } else for (d in i) Object.hasOwnProperty.call(i, d) && ((e = str(d, i)), e && h.push(quote(d) + (gap ? ": " : ":") + e)); 16736 return (e = h.length === 0 ? "{}" : gap ? "{\n" + gap + h.join(",\n" + gap) + "\n" + g + "}" : "{" + h.join(",") + "}"), (gap = g), e; 16737 } 16738 } 16739 "use strict", 16740 typeof Date.prototype.toJSON != "function" && 16741 ((Date.prototype.toJSON = function (a) { 16742 return isFinite(this.valueOf()) 16743 ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" 16744 : null; 16745 }), 16746 (String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (a) { 16747 return this.valueOf(); 16748 })); 16749 var JSON = window.JSON, 16750 cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, 16751 escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, 16752 gap, 16753 indent, 16754 meta = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, 16755 rep; 16756 typeof JSON.stringify != "function" && 16757 (JSON.stringify = function (a, b, c) { 16758 var d; 16759 (gap = ""), (indent = ""); 16760 if (typeof c == "number") for (d = 0; d < c; d += 1) indent += " ";
16761 else typeof c == "string" && (indent = c); 16762 rep = b; 16763 if (!b || typeof b == "function" || (typeof b == "object" && typeof b.length == "number")) return str("", { "": a }); 16764 throw new Error("JSON.stringify"); 16765 }), 16766 typeof JSON.parse != "function" && 16767 (JSON.parse = function (text, reviver) { 16768 function walk(a, b) { 16769 var c, 16770 d, 16771 e = a[b]; 16772 if (e && typeof e == "object") for (c in e) Object.hasOwnProperty.call(e, c) && ((d = walk(e, c)), d !== undefined ? (e[c] = d) : delete e[c]); 16773 return reviver.call(a, b, e); 16774 } 16775 var j; 16776 (text = String(text)), 16777 (cx.lastIndex = 0), 16778 cx.test(text) && 16779 (text = text.replace(cx, function (a) { 16780 return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4); 16781 })); 16782 if ( 16783 /^[\],:{}\s]*$/.test( 16784 text 16785 .replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") 16786 .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") 16787 .replace(/(?:^|:|,)(?:\s*\[)+/g, "") 16788 ) 16789 ) 16790 return (j = eval("(" + text + ")")), typeof reviver == "function" ? walk({ "": j }, "") : j; 16791 throw new SyntaxError("JSON.parse"); 16792 }); 16793 })(), 16794 (function (a, b) { 16795 "use strict"; 16796 var c = (a.History = a.History || {}), 16797 d = a.jQuery; 16798 if (typeof c.Adapter != "undefined") throw new Error("History.js Adapter has already been loaded..."); 16799 (c.Adapter = { 16800 bind: function (a, b, c) { 16801 d(a).bind(b, c); 16802 }, 16803 trigger: function (a, b, c) { 16804 d(a).trigger(b, c); 16805 }, 16806 extractEventData: function (a, c, d) { 16807 var e = (c && c.originalEvent && c.originalEvent[a]) || (d && d[a]) || b; 16808 return e; 16809 }, 16810 onDomLoad: function (a) { 16811 d(a); 16812 }, 16813 }), 16814 typeof c.init != "undefined" && c.init(); 16815 })(window), 16816 (function (a, b) { 16817 "use strict"; 16818 var c = a.document, 16819 d = a.setTimeout || d, 16820 e = a.clearTimeout || e, 16821 f = a.setInterval || f, 16822 g = (a.History = a.History || {}); 16823 if (typeof g.initHtml4 != "undefined") throw new Error("History.js HTML4 Support has already been loaded..."); 16824 (g.initHtml4 = function () { 16825 if (typeof g.initHtml4.initialized != "undefined") return !1; 16826 (g.initHtml4.initialized = !0), 16827 (g.enabled = !0), 16828 (g.savedHashes = []), 16829 (g.isLastHash = function (a) { 16830 var b = g.getHashByIndex(), 16831 c; 16832 return (c = a === b), c; 16833 }), 16834 (g.saveHash = function (a) { 16835 return g.isLastHash(a) ? !1 : (g.savedHashes.push(a), !0); 16836 }), 16837 (g.getHashByIndex = function (a) { 16838 var b = null; 16839 return typeof a == "undefined" ? (b = g.savedHashes[g.savedHashes.length - 1]) : a < 0 ? (b = g.savedHashes[g.savedHashes.length + a]) : (b = g.savedHashes[a]), b; 16840 }), 16841 (g.discardedHashes = {}), 16842 (g.discardedStates = {}), 16843 (g.discardState = function (a, b, c) { 16844 var d = g.getHashByState(a), 16845 e; 16846 return (e = { discardedState: a, backState: c, forwardState: b }), (g.discardedStates[d] = e), !0; 16847 }), 16848 (g.discardHash = function (a, b, c) { 16849 var d = { discardedHash: a, backState: c, forwardState: b }; 16850 return (g.discardedHashes[a] = d), !0; 16851 }), 16852 (g.discardedState = function (a) { 16853 var b = g.getHashByState(a), 16854 c; 16855 return (c = g.discardedStates[b] || !1), c; 16856 }), 16857 (g.discardedHash = function (a) { 16858 var b = g.discardedHashes[a] || !1; 16859 return b; 16860 }), 16861 (g.recycleState = function (a) { 16862 var b = g.getHashByState(a); 16863 return g.discardedState(a) && delete g.discardedStates[b], !0; 16864 }), 16865 g.emulated.hashChange && 16866 ((g.hashChangeInit = function () { 16867 g.checkerFunction = null; 16868 var b = "", 16869 d, 16870 e, 16871 h, 16872 i; 16873 return ( 16874 g.isInternetExplorer() 16875 ? ((d = "historyjs-iframe"), 16876 (e = c.createElement("iframe")), 16877 e.setAttribute("id", d), 16878 (e.style.display = "none"), 16879 c.body.appendChild(e), 16880 e.contentWindow.document.open(), 16881 e.contentWindow.document.close(), 16882 (h = ""), 16883 (i = !1), 16884 (g.checkerFunction = function () { 16885 if (i) return !1; 16886 i = !0; 16887 var c = g.getHash() || "", 16888 d = g.unescapeHash(e.contentWindow.document.location.hash) || ""; 16889 return ( 16890 c !== b 16891 ? ((b = c), 16892 d !== c && ((h = d = c), e.contentWindow.document.open(), e.contentWindow.document.close(), (e.contentWindow.document.location.hash = g.escapeHash(c))), 16893 g.Adapter.trigger(a, "hashchange")) 16894 : d !== h && ((h = d), g.setHash(d, !1)), 16895 (i = !1), 16896 !0 16897 ); 16898 })) 16899 : (g.checkerFunction = function () { 16900 var c = g.getHash(); 16901 return c !== b && ((b = c), g.Adapter.trigger(a, "hashchange")), !0; 16902 }), 16903 g.intervalList.push(f(g.checkerFunction, g.options.hashChangeInterval)), 16904 !0 16905 ); 16906 }), 16907 g.Adapter.onDomLoad(g.hashChangeInit)), 16908 g.emulated.pushState && 16909 ((g.onHashChange = function (b) { 16910 var d = (b && b.newURL) || c.location.href, 16911 e = g.getHashByUrl(d), 16912 f = null, 16913 h = null, 16914 i = null, 16915 j; 16916 return g.isLastHash(e) 16917 ? (g.busy(!1), !1) 16918 : (g.doubleCheckComplete(), 16919 g.saveHash(e), 16920 e && g.isTraditionalAnchor(e) 16921 ? (g.Adapter.trigger(a, "anchorchange"), g.busy(!1), !1) 16922 : ((f = g.extractState(g.getFullUrl(e || c.location.href, !1), !0)), 16923 g.isLastSavedState(f) 16924 ? (g.busy(!1), !1) 16925 : ((h = g.getHashByState(f)), 16926 (j = g.discardedState(f)), 16927 j ? (g.getHashByIndex(-2) === g.getHashByState(j.forwardState) ? g.back(!1) : g.forward(!1), !1) : (g.pushState(f.data, f.title, f.url, !1), !0)))); 16928 }), 16929 g.Adapter.bind(a, "hashchange", g.onHashChange), 16930 (g.pushState = function (b, d, e, f) { 16931 if (g.getHashByUrl(e)) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); 16932 if (f !== !1 && g.busy()) return g.pushQueue({ scope: g, callback: g.pushState, args: arguments, queue: f }), !1; 16933 g.busy(!0); 16934 var h = g.createStateObject(b, d, e), 16935 i = g.getHashByState(h), 16936 j = g.getState(!1), 16937 k = g.getHashByState(j), 16938 l = g.getHash(); 16939 return ( 16940 g.storeState(h), 16941 (g.expectedStateId = h.id), 16942 g.recycleState(h), 16943 g.setTitle(h), 16944 i === k ? (g.busy(!1), !1) : i !== l && i !== g.getShortUrl(c.location.href) ? (g.setHash(i, !1), !1) : (g.saveState(h), g.Adapter.trigger(a, "statechange"), g.busy(!1), !0) 16945 ); 16946 }), 16947 (g.replaceState = function (a, b, c, d) { 16948 if (g.getHashByUrl(c)) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); 16949 if (d !== !1 && g.busy()) return g.pushQueue({ scope: g, callback: g.replaceState, args: arguments, queue: d }), !1; 16950 g.busy(!0); 16951 var e = g.createStateObject(a, b, c), 16952 f = g.getState(!1), 16953 h = g.getStateByIndex(-2); 16954 return g.discardState(f, e, h), g.pushState(e.data, e.title, e.url, !1), !0; 16955 })), 16956 g.emulated.pushState && 16957 g.getHash() && 16958 !g.emulated.hashChange && 16959 g.Adapter.onDomLoad(function () { 16960 g.Adapter.trigger(a, "hashchange"); 16961 }); 16962 }), 16963 typeof g.init != "undefined" && g.init(); 16964 })(window), 16965 (function (a, b) { 16966 "use strict"; 16967 var c = a.console || b, 16968 d = a.document, 16969 e = a.navigator, 16970 f = a.sessionStorage || !1, 16971 g = a.setTimeout, 16972 h = a.clearTimeout, 16973 i = a.setInterval, 16974 j = a.clearInterval, 16975 k = a.JSON, 16976 l = a.alert, 16977 m = (a.History = a.History || {}), 16978 n = a.history; 16979 (k.stringify = k.stringify || k.encode), (k.parse = k.parse || k.decode); 16980 if (typeof m.init != "undefined") throw new Error("History.js Core has already been loaded..."); 16981 (m.init = function () { 16982 return typeof m.Adapter == "undefined" ? !1 : (typeof m.initCore != "undefined" && m.initCore(), typeof m.initHtml4 != "undefined" && m.initHtml4(), !0); 16983 }), 16984 (m.initCore = function () { 16985 if (typeof m.initCore.initialized != "undefined") return !1; 16986 (m.initCore.initialized = !0), 16987 (m.options = m.options || {}), 16988 (m.options.hashChangeInterval = m.options.hashChangeInterval || 100), 16989 (m.options.safariPollInterval = m.options.safariPollInterval || 500), 16990 (m.options.doubleCheckInterval = m.options.doubleCheckInterval || 500), 16991 (m.options.storeInterval = m.options.storeInterval || 1e3), 16992 (m.options.busyDelay = m.options.busyDelay || 250), 16993 (m.options.debug = m.options.debug || !1), 16994 (m.options.initialTitle = m.options.initialTitle || d.title), 16995 (m.intervalList = []), 16996 (m.clearAllIntervals = function () { 16997 var a, 16998 b = m.intervalList; 16999 if (typeof b != "undefined" && b !== null) { 17000 for (a = 0; a < b.length; a++) j(b[a]); 17001 m.intervalList = null; 17002 } 17003 }), 17004 (m.debug = function () { 17005 (m.options.debug || !1) && m.log.apply(m, arguments); 17006 }), 17007 (m.log = function () { 17008 var a = typeof c != "undefined" && typeof c.log != "undefined" && typeof c.log.apply != "undefined", 17009 b = d.getElementById("log"), 17010 e, 17011 f, 17012 g, 17013 h, 17014 i; 17015 a ? ((h = Array.prototype.slice.call(arguments)), (e = h.shift()), typeof c.debug != "undefined" ? c.debug.apply(c, [e, h]) : c.log.apply(c, [e, h])) : (e = "\n" + arguments[0] + "\n"); 17016 for (f = 1, g = arguments.length; f < g; ++f) { 17017 i = arguments[f]; 17018 if (typeof i == "object" && typeof k != "undefined") 17019 try { 17020 i = k.stringify(i); 17021 } catch (j) {} 17022 e += "\n" + i + "\n"; 17023 } 17024 return b ? ((b.value += e + "\n-----\n"), (b.scrollTop = b.scrollHeight - b.clientHeight)) : a || l(e), !0; 17025 }), 17026 (m.getInternetExplorerMajorVersion = function () { 17027 var a = (m.getInternetExplorerMajorVersion.cached = 17028 typeof m.getInternetExplorerMajorVersion.cached != "undefined" 17029 ? m.getInternetExplorerMajorVersion.cached 17030 : (function () { 17031 var a = 3, 17032 b = d.createElement("div"), 17033 c = b.getElementsByTagName("i"); 17034 while ((b.innerHTML = "<!--[if gt IE " + ++a + "]><i></i><![endif]-->") && c[0]); 17035 return a > 4 ? a : !1; 17036 })()); 17037 return a; 17038 }), 17039 (m.isInternetExplorer = function () { 17040 var a = (m.isInternetExplorer.cached = typeof m.isInternetExplorer.cached != "undefined" ? m.isInternetExplorer.cached : Boolean(m.getInternetExplorerMajorVersion())); 17041 return a; 17042 }), 17043 (m.emulated = { 17044 pushState: !Boolean(a.history && a.history.pushState && a.history.replaceState && !/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(e.userAgent) && !/AppleWeb
17044Kit\/5([0-2]|3[0-2])/i.test(e.userAgent)), 17045 hashChange: Boolean(!("onhashchange" in a || "onhashchange" in d) || (m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 8)), 17046 }), 17047 (m.enabled = !m.emulated.pushState), 17048 (m.bugs = { 17049 setHash: Boolean(!m.emulated.pushState && e.vendor === "Apple Computer, Inc." && /AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)), 17050 safariPoll: Boolean(!m.emulated.pushState && e.vendor === "Apple Computer, Inc." && /AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)), 17051 ieDoubleCheck: Boolean(m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 8), 17052 hashEscape: Boolean(m.isInternetExplorer() && m.getInternetExplorerMajorVersion() < 7), 17053 }), 17054 (m.isEmptyObject = function (a) { 17055 for (var b in a) return !1; 17056 return !0; 17057 }), 17058 (m.cloneObject = function (a) { 17059 var b, c; 17060 return a ? ((b = k.stringify(a)), (c = k.parse(b))) : (c = {}), c; 17061 }), 17062 (m.getRootUrl = function () { 17063 var a = d.location.protocol + "//" + (d.location.hostname || d.location.host); 17064 if (d.location.port || !1) a += ":" + d.location.port; 17065 return (a += "/"), a; 17066 }), 17067 (m.getBaseHref = function () { 17068 var a = d.getElementsByTagName("base"), 17069 b = null, 17070 c = ""; 17071 return a.length === 1 && ((b = a[0]), (c = b.href.replace(/[^\/]+$/, ""))), (c = c.replace(/\/+$/, "")), c && (c += "/"), c; 17072 }), 17073 (m.getBaseUrl = function () { 17074 var a = m.getBaseHref() || m.getBasePageUrl() || m.getRootUrl(); 17075 return a; 17076 }), 17077 (m.getPageUrl = function () { 17078 var a = m.getState(!1, !1), 17079 b = (a || {}).url || d.location.href, 17080 c; 17081 return ( 17082 (c = b.replace(/\/+$/, "").replace(/[^\/]+$/, function (a, b, c) { 17083 return /\./.test(a) ? a : a + "/"; 17084 })), 17085 c 17086 ); 17087 }), 17088 (m.getBasePageUrl = function () { 17089 var a = 17090 d.location.href 17091 .replace(/[#\?].*/, "") 17092 .replace(/[^\/]+$/, function (a, b, c) { 17093 return /[^\/]$/.test(a) ? "" : a; 17094 }) 17095 .replace(/\/+$/, "") + "/"; 17096 return a; 17097 }), 17098 (m.getFullUrl = function (a, b) { 17099 var c = a, 17100 d = a.substring(0, 1); 17101 return ( 17102 (b = typeof b == "undefined" ? !0 : b), 17103 /[a-z]+\:\/\//.test(a) || 17104 (d === "/" 17105 ? (c = m.getRootUrl() + a.replace(/^\/+/, "")) 17106 : d === "#" 17107 ? (c = m.getPageUrl().replace(/#.*/, "") + a) 17108 : d === "?" 17109 ? (c = m.getPageUrl().replace(/[\?#].*/, "") + a) 17110 : b 17111 ? (c = m.getBaseUrl() + a.replace(/^(\.\/)+/, "")) 17112 : (c = m.getBasePageUrl() + a.replace(/^(\.\/)+/, ""))), 17113 c.replace(/\#$/, "") 17114 ); 17115 }), 17116 (m.getShortUrl = function (a) { 17117 var b = a, 17118 c = m.getBaseUrl(), 17119 d = m.getRootUrl(); 17120 return m.emulated.pushState && (b = b.replace(c, "")), (b = b.replace(d, "/")), m.isTraditionalAnchor(b) && (b = "./" + b), (b = b.replace(/^(\.\/)+/g, "./").replace(/\#$/, "")), b; 17121 }), 17122 (m.store = {}), 17123 (m.idToState = m.idToState || {}), 17124 (m.stateToId = m.stateToId || {}), 17125 (m.urlToId = m.urlToId || {}), 17126 (m.storedStates = m.storedStates || []), 17127 (m.savedStates = m.savedStates || []), 17128 (m.normalizeStore = function () { 17129 (m.store.idToState = m.store.idToState || {}), (m.store.urlToId = m.store.urlToId || {}), (m.store.stateToId = m.store.stateToId || {}); 17130 }), 17131 (m.getState = function (a, b) { 17132 typeof a == "undefined" && (a = !0), typeof b == "undefined" && (b = !0); 17133 var c = m.getLastSavedState(); 17134 return !c && b && (c = m.createStateObject()), a && ((c = m.cloneObject(c)), (c.url = c.cleanUrl || c.url)), c; 17135 }), 17136 (m.getIdByState = function (a) { 17137 var b = m.extractId(a.url), 17138 c; 17139 if (!b) { 17140 c = m.getStateString(a); 17141 if (typeof m.stateToId[c] != "undefined") b = m.stateToId[c]; 17142 else if (typeof m.store.stateToId[c] != "undefined") b = m.store.stateToId[c]; 17143 else { 17144 for (;;) { 17145 b = new Date().getTime() + String(Math.random()).replace(/\D/g, ""); 17146 if (typeof m.idToState[b] == "undefined" && typeof m.store.idToState[b] == "undefined") break; 17147 } 17148 (m.stateToId[c] = b), (m.idToState[b] = a); 17149 } 17150 } 17151 return b; 17152 }), 17153 (m.normalizeState = function (a) { 17154 var b, c; 17155 if (!a || typeof a != "object") a = {}; 17156 if (typeof a.normalized != "undefined") return a; 17157 if (!a.data || typeof a.data != "object") a.data = {}; 17158 (b = {}), 17159 (b.normalized = !0), 17160 (b.title = a.title || ""), 17161 (b.url = m.getFullUrl(m.unescapeString(a.url || d.location.href))), 17162 (b.hash = m.getShortUrl(b.url)), 17163 (b.data = m.cloneObject(a.data)), 17164 (b.id = m.getIdByState(b)), 17165 (b.cleanUrl = b.url.replace(/\??\&_suid.*/, "")), 17166 (b.url = b.cleanUrl), 17167 (c = !m.isEmptyObject(b.data)); 17168 if (b.title || c) (b.hash = m.getShortUrl(b.url).replace(/\??\&_suid.*/, "")), /\?/.test(b.hash) || (b.hash += "?"), (b.hash += "&_suid=" + b.id); 17169 return (b.hashedUrl = m.getFullUrl(b.hash)), (m.emulated.pushState || m.bugs.safariPoll) && m.hasUrlDuplicate(b) && (b.url = b.hashedUrl), b; 17170 }), 17171 (m.createStateObject = function (a, b, c) { 17172 var d = { data: a, title: b, url: c }; 17173 return (d = m.normalizeState(d)), d; 17174 }), 17175 (m.getStateById = function (a) { 17176 a = String(a); 17177 var c = m.idToState[a] || m.store.idToState[a] || b; 17178 return c; 17179 }), 17180 (m.getStateString = function (a) { 17181 var b, c, d; 17182 return (b = m.normalizeState(a)), (c = { data: b.data, title: a.title, url: a.url }), (d = k.stringify(c)), d; 17183 }), 17184 (m.getStateId = function (a) { 17185 var b, c; 17186 return (b = m.normalizeState(a)), (c = b.id), c; 17187 }), 17188 (m.getHashByState = function (a) { 17189 var b, c; 17190 return (b = m.normalizeState(a)), (c = b.hash), c; 17191 }), 17192 (m.extractId = function (a) { 17193 var b, c, d; 17194 return (c = /(.*)\&_suid=([0-9]+)$/.exec(a)), (d = c ? c[1] || a : a), (b = c ? String(c[2] || "") : ""), b || !1; 17195 }), 17196 (m.isTraditionalAnchor = function (a) { 17197 var b = !/[\/\?\.]/.test(a); 17198 return b; 17199 }), 17200 (m.extractState = function (a, b) { 17201 var c = null, 17202 d, 17203 e; 17204 return ( 17205 (b = b || !1), 17206 (d = m.extractId(a)), 17207 d && (c = m.getStateById(d)), 17208 c || ((e = m.getFullUrl(a)), (d = m.getIdByUrl(e) || !1), d && (c = m.getStateById(d)), !c && b && !m.isTraditionalAnchor(a) && (c = m.createStateObject(null, null, e))), 17209 c 17210 ); 17211 }), 17212 (m.getIdByUrl = function (a) { 17213 var c = m.urlToId[a] || m.store.urlToId[a] || b; 17214 return c; 17215 }), 17216 (m.getLastSavedState = function () { 17217 return m.savedStates[m.savedStates.length - 1] || b; 17218 }), 17219 (m.getLastStoredState = function () { 17220 return m.storedStates[m.storedStates.length - 1] || b; 17221 }), 17222 (m.hasUrlDuplicate = function (a) { 17223 var b = !1, 17224 c; 17225 return (c = m.extractState(a.url)), (b = c && c.id !== a.id), b; 17226 }), 17227 (m.storeState = function (a) { 17228 return (m.urlToId[a.url] = a.id), m.storedStates.push(m.cloneObject(a)), a; 17229 }), 17230 (m.isLastSavedState = function (a) { 17231 var b = !1, 17232 c, 17233 d, 17234 e; 17235 return m.savedStates.length && ((c = a.id), (d = m.getLastSavedState()), (e = d.id), (b = c === e)), b; 17236 }), 17237 (m.saveState = function (a) { 17238 return m.isLastSavedState(a) ? !1 : (m.savedStates.push(m.cloneObject(a)), !0); 17239 }), 17240 (m.getStateByIndex = function (a) { 17241 var b = null; 17242 return typeof a == "undefined" ? (b = m.savedStates[m.savedStates.length - 1]) : a < 0 ? (b = m.savedStates[m.savedStates.length + a]) : (b = m.savedStates[a]), b; 17243 }), 17244 (m.getHash = function () { 17245 var a = m.unescapeHash(d.location.hash); 17246 return a; 17247 }), 17248 (m.unescapeString = function (b) { 17249 var c = b, 17250 d; 17251 for (;;) { 17252 d = a.unescape(c); 17253 if (d === c) break; 17254 c = d; 17255 } 17256 return c; 17257 }), 17258 (m.unescapeHash = function (a) { 17259 var b = m.normalizeHash(a); 17260 return (b = m.unescapeString(b)), b; 17261 }), 17262 (m.normalizeHash = function (a) { 17263 var b = a.replace(/[^#]*#/, "").replace(/#.*/, ""); 17264 return b; 17265 }), 17266 (m.setHash = function (a, b) { 17267 var c, e, f; 17268 return b !== !1 && m.busy()
17269 ? (m.pushQueue({ scope: m, callback: m.setHash, args: arguments, queue: b }), !1) 17270 : ((c = m.escapeHash(a)), 17271 m.busy(!0), 17272 (e = m.extractState(a, !0)), 17273 e && !m.emulated.pushState ? m.pushState(e.data, e.title, e.url, !1) : d.location.hash !== c && (m.bugs.setHash ? ((f = m.getPageUrl()), m.pushState(null, null, f + "#" + c, !1)) : (d.location.hash = c)), 17274 m); 17275 }), 17276 (m.escapeHash = function (b) { 17277 var c = m.normalizeHash(b); 17278 return (c = a.escape(c)), m.bugs.hashEscape || (c = c.replace(/\%21/g, "!").replace(/\%26/g, "&").replace(/\%3D/g, "=").replace(/\%3F/g, "?")), c; 17279 }), 17280 (m.getHashByUrl = function (a) { 17281 var b = String(a).replace(/([^#]*)#?([^#]*)#?(.*)/, "$2"); 17282 return (b = m.unescapeHash(b)), b; 17283 }), 17284 (m.setTitle = function (a) { 17285 var b = a.title, 17286 c; 17287 b || ((c = m.getStateByIndex(0)), c && c.url === a.url && (b = c.title || m.options.initialTitle)); 17288 try { 17289 d.getElementsByTagName("title")[0].innerHTML = b.replace("<", "<").replace(">", ">").replace(" & ", " & "); 17290 } catch (e) {} 17291 return (d.title = b), m; 17292 }), 17293 (m.queues = []), 17294 (m.busy = function (a) { 17295 typeof a != "undefined" ? (m.busy.flag = a) : typeof m.busy.flag == "undefined" && (m.busy.flag = !1); 17296 if (!m.busy.flag) { 17297 h(m.busy.timeout); 17298 var b = function () { 17299 var a, c, d; 17300 if (m.busy.flag) return; 17301 for (a = m.queues.length - 1; a >= 0; --a) { 17302 c = m.queues[a]; 17303 if (c.length === 0) continue; 17304 (d = c.shift()), m.fireQueueItem(d), (m.busy.timeout = g(b, m.options.busyDelay)); 17305 } 17306 }; 17307 m.busy.timeout = g(b, m.options.busyDelay); 17308 } 17309 return m.busy.flag; 17310 }), 17311 (m.busy.flag = !1), 17312 (m.fireQueueItem = function (a) { 17313 return a.callback.apply(a.scope || m, a.args || []); 17314 }), 17315 (m.pushQueue = function (a) { 17316 return (m.queues[a.queue || 0] = m.queues[a.queue || 0] || []), m.queues[a.queue || 0].push(a), m; 17317 }), 17318 (m.queue = function (a, b) { 17319 return typeof a == "function" && (a = { callback: a }), typeof b != "undefined" && (a.queue = b), m.busy() ? m.pushQueue(a) : m.fireQueueItem(a), m; 17320 }), 17321 (m.clearQueue = function () { 17322 return (m.busy.flag = !1), (m.queues = []), m; 17323 }), 17324 (m.stateChanged = !1), 17325 (m.doubleChecker = !1), 17326 (m.doubleCheckComplete = function () { 17327 return (m.stateChanged = !0), m.doubleCheckClear(), m; 17328 }), 17329 (m.doubleCheckClear = function () { 17330 return m.doubleChecker && (h(m.doubleChecker), (m.doubleChecker = !1)), m; 17331 }), 17332 (m.doubleCheck = function (a) { 17333 return ( 17334 (m.stateChanged = !1), 17335 m.doubleCheckClear(), 17336 m.bugs.ieDoubleCheck && 17337 (m.doubleChecker = g(function () { 17338 return m.doubleCheckClear(), m.stateChanged || a(), !0; 17339 }, m.options.doubleCheckInterval)), 17340 m 17341 ); 17342 }), 17343 (m.safariStatePoll = function () { 17344 var b = m.extractState(d.location.href), 17345 c; 17346 if (!m.isLastSavedState(b)) c = b; 17347 else return; 17348 return c || (c = m.createStateObject()), m.Adapter.trigger(a, "popstate"), m; 17349 }), 17350 (m.back = function (a) { 17351 return a !== !1 && m.busy()
17352 ? (m.pushQueue({ scope: m, callback: m.back, args: arguments, queue: a }), !1) 17353 : (m.busy(!0), 17354 m.doubleCheck(function () { 17355 m.back(!1); 17356 }), 17357 n.go(-1), 17358 !0); 17359 }), 17360 (m.forward = function (a) { 17361 return a !== !1 && m.busy() 17362 ? (m.pushQueue({ scope: m, callback: m.forward, args: arguments, queue: a }), !1) 17363 : (m.busy(!0), 17364 m.doubleCheck(function () { 17365 m.forward(!1); 17366 }), 17367 n.go(1), 17368 !0); 17369 }), 17370 (m.go = function (a, b) { 17371 var c; 17372 if (a > 0) for (c = 1; c <= a; ++c) m.forward(b); 17373 else { 17374 if (!(a < 0)) throw new Error("History.go: History.go requires a positive or negative integer passed."); 17375 for (c = -1; c >= a; --c) m.back(b); 17376 } 17377 return m; 17378 }); 17379 if (m.emulated.pushState) { 17380 var o = function () {}; 17381 (m.pushState = m.pushState || o), (m.replaceState = m.replaceState || o); 17382 } else 17383 (m.onPopState = function (b, c) { 17384 var e = !1, 17385 f = !1, 17386 g, 17387 h; 17388 return ( 17389 m.doubleCheckComplete(), 17390 (g = m.getHash()), 17391 g 17392 ? ((h = m.extractState(g || d.location.href, !0)), h ? m.replaceState(h.data, h.title, h.url, !1) : (m.Adapter.trigger(a, "anchorchange"), m.busy(!1)), (m.expectedStateId = !1), !1) 17393 : ((e = m.Adapter.extractEventData("state", b, c) || !1), 17394 e ? (f = m.getStateById(e)) : m.expectedStateId ? (f = m.getStateById(m.expectedStateId)) : (f = m.extractState(d.location.href)), 17395 f || (f = m.createStateObject(null, null, d.location.href)), 17396 (m.expectedStateId = !1), 17397 m.isLastSavedState(f) ? (m.busy(!1), !1) : (m.storeState(f), m.saveState(f), m.setTitle(f), m.Adapter.trigger(a, "statechange"), m.busy(!1), !0)) 17398 ); 17399 }), 17400 m.Adapter.bind(a, "popstate", m.onPopState), 17401 (m.pushState = function (b, c, d, e) { 17402 if (m.getHashByUrl(d) && m.emulated.pushState) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); 17403 if (e !== !1 && m.busy()) return m.pushQueue({ scope: m, callback: m.pushState, args: arguments, queue: e }), !1; 17404 m.busy(!0); 17405 var f = m.createStateObject(b, c, d); 17406 return m.isLastSavedState(f) ? m.busy(!1) : (m.storeState(f), (m.expectedStateId = f.id), n.pushState(f.id, f.title, f.url), m.Adapter.trigger(a, "popstate")), !0; 17407 }), 17408 (m.replaceState = function (b, c, d, e) { 17409 if (m.getHashByUrl(d) && m.emulated.pushState) throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors)."); 17410 if (e !== !1 && m.busy()) return m.pushQueue({ scope: m, callback: m.replaceState, args: arguments, queue: e }), !1; 17411 m.busy(!0); 17412 var f = m.createStateObject(b, c, d); 17413 return m.isLastSavedState(f) ? m.busy(!1) : (m.storeState(f), (m.expectedStateId = f.id), n.replaceState(f.id, f.title, f.url), m.Adapter.trigger(a, "popstate")), !0; 17414 }); 17415 if (f) { 17416 try { 17417 m.store = k.parse(f.getItem("History.store")) || {}; 17418 } catch (p) { 17419 m.store = {}; 17420 }
17421 m.normalizeStore(); 17422 } else (m.store = {}), m.normalizeStore(); 17423 m.Adapter.bind(a, "beforeunload", m.clearAllIntervals), 17424 m.Adapter.bind(a, "unload", m.clearAllIntervals), 17425 m.saveState(m.storeState(m.extractState(d.location.href, !0))), 17426 f && 17427 ((m.onUnload = function () { 17428 var a, b; 17429 try { 17430 a = k.parse(f.getItem("History.store")) || {}; 17431 } catch (c) { 17432 a = {}; 17433 } 17434 (a.idToState = a.idToState || {}), (a.urlToId = a.urlToId || {}), (a.stateToId = a.stateToId || {}); 17435 for (b in m.idToState) { 17436 if (!m.idToState.hasOwnProperty(b)) continue; 17437 a.idToState[b] = m.idToState[b]; 17438 } 17439 for (b in m.urlToId) { 17440 if (!m.urlToId.hasOwnProperty(b)) continue; 17441 a.urlToId[b] = m.urlToId[b]; 17442 } 17443 for (b in m.stateToId) { 17444 if (!m.stateToId.hasOwnProperty(b)) continue; 17445 a.stateToId[b] = m.stateToId[b]; 17446 } 17447 (m.store = a), m.normalizeStore(), f.setItem("History.store", k.stringify(a)); 17448 }), 17449 m.intervalList.push(i(m.onUnload, m.options.storeInterval)), 17450 m.Adapter.bind(a, "beforeunload", m.onUnload), 17451 m.Adapter.bind(a, "unload", m.onUnload)); 17452 if (!m.emulated.pushState) { 17453 m.bugs.safariPoll && m.intervalList.push(i(m.safariStatePoll, m.options.safariPollInterval)); 17454 if (e.vendor === "Apple Computer, Inc." || (e.appCodeName || "") === "Mozilla") 17455 m.Adapter.bind(a, "hashchange", function () { 17456 m.Adapter.trigger(a, "popstate"); 17457 }), 17458 m.getHash() && 17459 m.Adapter.onDomLoad(function () { 17460 m.Adapter.trigger(a, "hashchange"); 17461 }); 17462 } 17463 }), 17464 m.init(); 17465 })(window); 17466var EasyAutocomplete = (function (a) { 17467 return ( 17468 (a.Configuration = function (a) { 17469 function b() { 17470 if ( 17471 ("xml" === a.dataType && 17472 (a.getValue || 17473 (a.getValue = function (a) { 17474 return $(a).text(); 17475 }), 17476 a.list || (a.list = {}), 17477 a.list.sort || (a.list.sort = {}), 17478 (a.list.sort.method = function (b, c) { 17479 return (b = a.getValue(b)), (c = a.getValue(c)), c > b ? -1 : b > c ? 1 : 0; 17480 }), 17481 a.list.match || (a.list.match = {}), 17482 (a.list.match.method = function (a, b) { 17483 return a.search(b) > -1; 17484 })), 17485 void 0 !== a.categories && a.categories instanceof Array) 17486 ) { 17487 for (var b = [], c = 0, d = a.categories.length; d > c; c += 1) { 17488 var e = a.categories[c]; 17489 for (var f in h.categories[0]) void 0 === e[f] && (e[f] = h.categories[0][f]); 17490 b.push(e); 17491 } 17492 a.categories = b; 17493 } 17494 } 17495 function c() { 17496 function b(a, c) { 17497 var d = a || {}; 17498 for (var e in a) void 0 !== c[e] && null !== c[e] && ("object" != typeof c[e] || c[e] instanceof Array ? (d[e] = c[e]) : b(a[e], c[e])); 17499 return void 0 !== c.data && null !== c.data && "object" == typeof c.data && (d.data = c.data), d; 17500 } 17501 h = b(h, a); 17502 } 17503 function d() { 17504 if ("list-required" !== h.url && "function" != typeof h.url) { 17505 var b = h.url; 17506 h.url = function () { 17507 return b; 17508 }; 17509 } 17510 if (void 0 !== h.ajaxSettings.url && "function" != typeof h.ajaxSettings.url) { 17511 var b = h.ajaxSettings.url; 17512 h.ajaxSettings.url = function () { 17513 return b; 17514 }; 17515 } 17516 if ("string" == typeof h.listLocation) { 17517 var c = h.listLocation; 17518 "XML" === h.dataType.toUpperCase() 17519 ? (h.listLocation = function (a) { 17520 return $(a).find(c); 17521 }) 17522 : (h.listLocation = function (a) { 17523 return a[c]; 17524 }); 17525 } 17526 if ("string" == typeof h.getValue) { 17527 var d = h.getValue; 17528 h.getValue = function (a) { 17529 return a[d]; 17530 }; 17531 } 17532 void 0 !== a.categories && (h.categoriesAssigned = !0); 17533 } 17534 function e() { 17535 void 0 !== a.ajaxSettings && "object" == typeof a.aja
17535xSettings ? (h.ajaxSettings = a.ajaxSettings) : (h.ajaxSettings = {}); 17536 } 17537 function f(a) { 17538 return void 0 !== h[a] && null !== h[a]; 17539 } 17540 function g(a, b) { 17541 function c(b, d) { 17542 for (var e in d) void 0 === b[e] && a.log("Property '" + e + "' does not exist in EasyAutocomplete options API."), "object" == typeof b[e] && -1 === $.inArray(e, i) && c(b[e], d[e]); 17543 } 17544 c(h, b); 17545 } 17546 var h = { 17547 data: "list-required", 17548 url: "list-required", 17549 dataType: "json", 17550 listLocation: function (a) { 17551 return a; 17552 }, 17553 xmlElementName: "", 17554 getValue: function (a) { 17555 return a; 17556 }, 17557 autocompleteOff: !0, 17558 placeholder: !1, 17559 ajaxCallback: function () {}, 17560 matchResponseProperty: !1, 17561 list: { 17562 sort: { 17563 enabled: !1, 17564 method: function (a, b) { 17565 return (a = h.getValue(a)), (b = h.getValue(b)), b > a ? -1 : a > b ? 1 : 0; 17566 }, 17567 }, 17568 maxNumberOfElements: 6, 17569 hideOnEmptyPhrase: !0, 17570 match: { 17571 enabled: !1, 17572 caseSensitive: !1, 17573 method: function (a, b) { 17574 return a.search(b) > -1; 17575 }, 17576 }, 17577 showAnimation: { type: "normal", time: 400, callback: function () {} }, 17578 hideAnimation: { type: "normal", time: 400, callback: function () {} }, 17579 onClickEvent: function () {}, 17580 onSelectItemEvent: function () {}, 17581 onLoadEvent: function () {}, 17582 onChooseEvent: function () {}, 17583 onKeyEnterEvent: function () {}, 17584 onMouseOverEvent: function () {}, 17585 onMouseOutEvent: function () {}, 17586 onShowListEvent: function () {}, 17587 onHideListEvent: function () {}, 17588 }, 17589 highlightPhrase: !0, 17590 theme: "", 17591 cssClasses: "", 17592 minCharNumber: 0, 17593 requestDelay: 0, 17594 adjustWidth: !0, 17595 ajaxSettings: {}, 17596 preparePostData: function (a, b) { 17597 return a; 17598 }, 17599 loggerEnabled: !0, 17600 template: "", 17601 categoriesAssigned: !1, 17602 categories: [{ maxNumberOfElements: 4 }], 17603 }, 17604 i = ["ajaxSettings", "template"]; 17605 (this.get = function (a) { 17606 return h[a]; 17607 }), 17608 (this.equals = function (a, b) { 17609 return !(!f(a) || h[a] !== b); 17610 }), 17611 (this.checkDataUrlProperties = function () { 17612 return "list-required" !== h.url || "list-required" !== h.data; 17613 }), 17614 (this.checkRequiredProperties = function () { 17615 for (var a in h) if ("required" === h[a]) return logger.error("Option " + a + " must be defined"), !1; 17616 return !0; 17617 }), 17618 (this.printPropertiesThatDoesntExist = function (a, b) { 17619 g(a, b); 17620 }), 17621 b(), 17622 c(), 17623 h.loggerEnabled === !0 && g(console, a), 17624 e(), 17625 d(); 17626 }), 17627 a 17628 ); 17629 })(EasyAutocomplete || {}), 17630 EasyAutocomplete = (function (a) { 17631 return ( 17632 (a.Logger = function () { 17633 (this.error = function (a) { 17634 console.log("ERROR: " + a); 17635 }), 17636 (this.warning = function (a) { 17637 console.log("WARNING: " + a); 17638 }); 17639 }), 17640 a 17641 ); 17642 })(EasyAutocomplete || {}), 17643 EasyAutocomplete = (function (a) { 17644 return ( 17645 (a.Constans = function () { 17646 var a = { CONTAINER_CLASS: "easy-autocomplete-container", CONTAINER_ID: "eac-container-", WRAPPER_CSS_CLASS: "easy-autocomplete" }; 17647 this.getValue = function (b) { 17648 return a[b]; 17649 }; 17650 }), 17651 a 17652 ); 17653 })(EasyAutocomplete || {}), 17654 EasyAutocomplete = (function (a) { 17655 return ( 17656 (a.ListBuilderService = function (a, b) { 17657 function c(b, c) { 17658 function d() { 17659 var d, 17660 e = {}; 17661 return ( 17662 void 0 !== b.xmlElementName && (e.xmlElementName = b.xmlElementName), 17663 void 0 !== b.listLocation ? (d = b.listLocation) : void 0 !== a.get("listLocation") && (d = a.get("listLocation")), 17664 void 0 !== d ? ("string" == typeof d ? (e.data = $(c).find(d)) : "function" == typeof d && (e.data = d(c))) : (e.data = c), 17665 e 17666 ); 17667 } 17668 function e() { 17669 var a = {}; 17670 return void 0 !== b.listLocation ? ("string" == typeof b.listLocation ? (a.data = c[b.listLocation]) : "function" == typeof b.listLocation && (a.data = b.listLocation(c))) : (a.data = c), a; 17671 } 17672 var f = {}; 17673 if ( 17674 ((f = "XML" === a.get("dataType").toUpperCase() ? d() : e()), 17675 void 0 !== b.header && (f.header = b.header), 17676 void 0 !== b.maxNumberOfElements && (f.maxNumberOfElements = b.maxNumberOfElements), 17677 void 0 !== a.get("list").maxNumberOfElements && (f.maxListSize = a.get("list").maxNumberOfElements), 17678 void 0 !== b.getValue) 17679 ) 17680 if ("string" == typeof b.getValue) { 17681 var g = b.getValue; 17682 f.getValue = function (a) { 17683 return a[g]; 17684 }; 17685 } else "function" == typeof b.getValue && (f.getValue = b.getValue); 17686 else f.getValue = a.get("getValue"); 17687 return f; 17688 } 17689 function d(b) { 17690 var c = []; 17691 return ( 17692 void 0 === b.xmlElementName && (b.xmlElementName = a.get("xmlElementName")), 17693 $(b.data) 17694 .find(b.xmlElementName) 17695 .each(function () { 17696 c.push(this); 17697 }), 17698 c 17699 ); 17700 } 17701 (this.init = function (b) { 17702 var c = [], 17703 d = {}; 17704 return (d.data = a.get("listLocation")(b)), (d.getValue = a.get("getValue")), (d.maxListSize = a.get("list").maxNumberOfElements), c.push(d), c; 17705 }), 17706 (this.updateCategories = function (b, d) { 17707 if (a.get("categoriesAssigned")) { 17708 b = []; 17709 for (var e = 0; e < a.get("categories").length; e += 1) { 17710 var f = c(a.get("categories")[e], d); 17711 b.push(f); 17712 } 17713 } 17714 return b; 17715 }), 17716 (this.convertXml = function (b) { 17717 if ("XML" === a.get("dataType").toUpperCase()) for (var c = 0; c < b.length; c += 1) b[c].data = d(b[c]); 17718 return b; 17719 }), 17720 (this.processData = function (c, d) { 17721 for (var e = 0, f = c.length; f > e; e += 1) c[e].data = b(a, c[e], d); 17722 return c; 17723 }), 17724 (this.checkIfDataExists = function (a) { 17725 for (var b = 0, c = a.length; c > b; b += 1) if (void 0 !== a[b].data && a[b].data instanceof Array && a[b].data.length > 0) return !0; 17726 return !1; 17727 }); 17728 }), 17729 a 17730 ); 17731 })(EasyAutocomplete || {}), 17732 EasyAutocomplete = (function (a) { 17733 return ( 17734 (a.proccess = function (b, c, d) { 17735 function e(a, c) { 17736 var d = [], 17737 e = ""; 17738 if (b.get("list").match.enabled) for (var g = 0, h = a.length; h > g; g += 1) (e = b.get("getValue")(a[g])), f(e, c) && d.push(a[g]); 17739 else d = a; 17740 return d; 17741 } 17742 function f(a, c) { 17743 return b.get("list").match.caseSensitive || ("string" == typeof a && (a = a.toLowerCase()), (c = c.toLowerCase())), !!b.get("list").match.method(a, c); 17744 }
17745 function g(a) { 17746 return void 0 !== c.maxNumberOfElements && a.length > c.maxNumberOfElements && (a = a.slice(0, c.maxNumberOfElements)), a; 17747 } 17748 function h(a) { 17749 return b.get("list").sort.enabled && a.sort(b.get("list").sort.method), a; 17750 } 17751 a.proccess.match = f; 17752 var i = c.data, 17753 j = d; 17754 return (i = e(i, j)), (i = g(i)), (i = h(i)); 17755 }), 17756 a 17757 ); 17758 })(EasyAutocomplete || {}), 17759 EasyAutocomplete = (function (a) { 17760 return ( 17761 (a.Template = function (a) { 17762 var b = { 17763 basic: { 17764 type: "basic", 17765 method: function (a) { 17766 return a; 17767 }, 17768 cssClass: "", 17769 }, 17770 description: { 17771 type: "description", 17772 fields: { description: "description" }, 17773 method: function (a) { 17774 return a + " - description"; 17775 }, 17776 cssClass: "eac-description", 17777 }, 17778 iconLeft: { 17779 type: "iconLeft", 17780 fields: { icon: "" }, 17781 method: function (a) { 17782 return a; 17783 }, 17784 cssClass: "eac-icon-left", 17785 }, 17786 iconRight: { 17787 type: "iconRight", 17788 fields: { iconSrc: "" }, 17789 method: function (a) { 17790 return a; 17791 }, 17792 cssClass: "eac-icon-right", 17793 }, 17794 links: { 17795 type: "links", 17796 fields: { link: "" }, 17797 method: function (a) { 17798 return a; 17799 }, 17800 cssClass: "", 17801 }, 17802 custom: { type: "custom", method: function () {}, cssClass: "" }, 17803 }, 17804 c = function (a) { 17805 var c, 17806 d = a.fields; 17807 return "description" === a.type 17808 ? ((c = b.description.method), 17809 "string" == typeof d.description 17810 ? (c = function (a, b) { 17811 return a + " - <span>" + b[d.description] + "</span>"; 17812 }) 17813 : "function" == typeof d.description && 17814 (c = function (a, b) { 17815 return a + " - <span>" + d.description(b) + "</span>"; 17816 }), 17817 c) 17818 : "iconRight" === a.type 17819 ? ("string" == typeof d.iconSrc 17820 ? (c = function (a, b) { 17821 return a + "<img class='eac-icon' src='" + b[d.iconSrc] + "' />"; 17822 }) 17823 : "function" == typeof d.iconSrc && 17824 (c = function (a, b) { 17825 return a + "<img class='eac-icon' src='" + d.iconSrc(b) + "' />"; 17826 }), 17827 c) 17828 : "iconLeft" === a.type 17829 ? ("string" == typeof d.iconSrc 17830 ? (c = function (a, b) { 17831 return "<img class='eac-icon' src='" + b[d.iconSrc] + "' />" + a; 17832 }) 17833 : "function" == typeof d.iconSrc && 17834 (c = function (a, b) { 17835 return "<img class='eac-icon' src='" + d.iconSrc(b) + "' />" + a; 17836 }), 17837 c) 17838 : "links" === a.type 17839 ? ("string" == typeof d.link 17840 ? (c = function (a, b) { 17841 return "<a href='" + b[d.link] + "' >" + a + "</a>"; 17842 }) 17843 : "function" == typeof d.link && 17844 (c = function (a, b) { 17845 return "<a href='" + d.link(b) + "' >" + a + "</a>"; 17846 }), 17847 c) 17848 : "custom" === a.type 17849 ? a.method 17850 : b.basic.method; 17851 }, 17852 d = function (a) { 17853 return a && a.type && a.type && b[a.type] ? c(a) : b.basic.method; 17854 }, 17855 e = function (a) { 17856 var c = function () { 17857 return ""; 17858 }; 17859 return a && a.type && a.type && b[a.type] 17860 ? (function () { 17861 var c = b[a.type].cssClass; 17862 return function () { 17863 return c; 17864 }; 17865 })() 17866 : c; 17867 }; 17868 (this.getTemplateClass = e(a)), (this.build = d(a)); 17869 }), 17870 a 17871 ); 17872 })(EasyAutocomplete || {}), 17873 EasyAutocomplete = (function (a) { 17874 return ( 17875 (a.main = function (b, c) { 17876 function d() { 17877 return 0 === t.length 17878 ? void p.error("Input field doesn't exist.") 17879 : o.checkDataUrlProperties() 17880 ? o.checkRequiredProperties() 17881 ? (e(), void g()) 17882 : void p.error("Will not work without mentioned properties.") 17883 : void p.error("One of options variables 'data' or 'url' must be defined."); 17884 } 17885 function e() { 17886 function a() { 17887 var a = $("<div>"), 17888 c = n.getValue("WRAPPER_CSS_CLASS"); 17889 o.get("theme") && "" !== o.get("theme") && (c += " eac-" + o.get("theme")),
17890 o.get("cssClasses") && "" !== o.get("cssClasses") && (c += " " + o.get("cssClasses")), 17891 "" !== q.getTemplateClass() && (c += " " + q.getTemplateClass()), 17892 a.addClass(c), 17893 t.wrap(a), 17894 o.get("adjustWidth") === !0 && b(); 17895 } 17896 function b() { 17897 var a = t.outerWidth(); 17898 t.parent().css("width", a); 17899 } 17900 function c() { 17901 t.unwrap(); 17902 } 17903 function d() { 17904 var a = $("<div>").addClass(n.getValue("CONTAINER_CLASS")); 17905 a.attr("id", f()).prepend($("<ul>")), 17906 (function () { 17907 a.on("show.eac", function () { 17908 switch (o.get("list").showAnimation.type) { 17909 case "slide": 17910 var b = o.get("list").showAnimation.time, 17911 c = o.get("list").showAnimation.callback; 17912 a.find("ul").slideDown(b, c); 17913 break; 17914 case "fade": 17915 var b = o.get("list").showAnimation.time, 17916 c = o.get("list").showAnimation.callback; 17917 a.find("ul").fadeIn(b), c; 17918 break; 17919 default: 17920 a.find("ul").show(); 17921 } 17922 o.get("list").onShowListEvent(); 17923 }) 17924 .on("hide.eac", function () { 17925 switch (o.get("list").hideAnimation.type) { 17926 case "slide": 17927 var b = o.get("list").hideAnimation.time, 17928 c = o.get("list").hideAnimation.callback; 17929 a.find("ul").slideUp(b, c); 17930 break; 17931 case "fade": 17932 var b = o.get("list").hideAnimation.time, 17933 c = o.get("list").hideAnimation.callback; 17934 a.find("ul").fadeOut(b, c); 17935 break; 17936 default: 17937 a.find("ul").hide(); 17938 } 17939 o.get("list").onHideListEvent(); 17940 }) 17941 .on("selectElement.eac", function () { 17942 a.find("ul li").removeClass("selected"), a.find("ul li").eq(w).addClass("selected"), o.get("list").onSelectItemEvent(); 17943 }) 17944 .on("loadElements.eac", function (b, c, d) { 17945 var e = "", 17946 f = a.find("ul"); 17947 f.empty().detach(), (v = []); 17948 for (var h = 0, i = 0, k = c.length; k > i; i += 1) { 17949 var l = c[i].data; 17950 if (0 !== l.length) { 17951 void 0 !== c[i].header && c[i].header.length > 0 && f.append("<div class='eac-category' >" + c[i].header + "</div>"); 17952 for (var m = 0, n = l.length; n > m && h < c[i].maxListSize; m += 1) 17953 (e = $("<li><div class='eac-item'></div></li>")), 17954 (function () { 17955 var a = m, 17956 b = h, 17957 f = c[i].getValue(l[a]); 17958 e.find(" > div") 17959 .on("click", function () { 17960 t.val(f).trigger("change"), (w = b), j(b), o.get("list").onClickEvent(), o.get("list").onChooseEvent(); 17961 }) 17962 .mouseover(function () { 17963 (w = b), j(b), o.get("list").onMouseOverEvent(); 17964 }) 17965 .mouseout(function () { 17966 o.get("list").onMouseOutEvent(); 17967 }) 17968 .html(q.build(g(f, d), l[a])); 17969 })(), 17970 f.append(e), 17971 v.push(l[m]), 17972 (h += 1); 17973 } 17974 } 17975 a.append(f), o.get("list").onLoadEvent(); 17976 }); 17977 })(), 17978 t.after(a); 17979 } 17980 function e() { 17981 t.next("." + n.getValue("CONTAINER_CLASS")).remove(); 17982 } 17983 function g(a, b) { 17984 return o.get("highlightPhrase") && "" !== b ? i(a, b) : a; 17985 } 17986 function h(a) { 17987 return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 17988 } 17989 function i(a, b) { 17990 var c = h(b); 17991 return (a + "").replace(new RegExp("(" + c + ")", "gi"), "<b>$1</b>"); 17992 } 17993 t.parent().hasClass(n.getValue("WRAPPER_CSS_CLASS")) && (e(), c()), a(), d(), (u = $("#" + f())), o.get("placeholder") && t.attr("placeholder", o.get("placeholder")); 17994 } 17995 function f() { 17996 var a = t.attr("id"); 17997 return (a = n.getValue("CONTAINER_ID") + a); 17998 } 17999 function g() { 18000 function a() { 18001 s("autocompleteOff", !0) && n(), b(), c(), d(), e(), f(), g(); 18002 } 18003 function b() { 18004 t.focusout(function () { 18005 var a, 18006 b = t.val(); 18007 o.get("list").match.caseSensitive || (b = b.toLowerCase()); 18008 for (var c = 0, d = v.length; d > c; c += 1) if (((a = o.get("getValue")(v[c])), o.get("list").match.caseSensitive || (a = a.toLowerCase()), a === b)) return (w = c), void j(w); 18009 }); 18010 } 18011 function c() { 18012 t.off("keyup").keyup(function (a) { 18013 function b(a) { 18014 function b() { 18015 var a = {}, 18016 b = o.get("ajaxSettings") || {}; 18017 for (var c in b) a[c] = b[c]; 18018 return a; 18019 } 18020 function c(a, b) { 18021 return o.get("matchResponseProperty") !== !1 18022 ? "string" == typeof o.get("matchResponseProperty") 18023 ? b[o.get("matchResponseProperty")] === a 18024 : "function" == typeof o.get("matchResponseProperty") 18025 ? o.get("matchResponseProperty")(b) === a 18026 : !0 18027 : !0; 18028 } 18029 if (!(a.length < o.get("minCharNumber"))) { 18030 if ("list-required" !== o.get("data")) { 18031 var d = o.get("data"), 18032 e = r.init(d); 18033 (e = r.updateCategories(e, d)), (e = r.processData(e, a)), k(e, a), t.parent().find("li").length > 0 ? h() : i(); 18034 } 18035 var f = b(); 18036 (void 0 !== f.url && "" !== f.url) || (f.url = o.get("url")), 18037 (void 0 !== f.dataType && "" !== f.dataType) || (f.dataType = o.get("dataType")), 18038 void 0 !== f.url && 18039 "list-required" !== f.url && 18040 ((f.url = f.url(a)), 18041 (f.data = o.get("preparePostData")(f.data, a)), 18042 $.ajax(f) 18043 .done(function (b) { 18044 var d = r.init(b); 18045 (d = r.updateCategories(d, b)), 18046 (d = r.convertXml(d)), 18047 c(a, b) && ((d = r.processData(d, a)), k(d, a)), 18048 r.checkIfDataExists(d) && t.parent().find("li").length > 0 ? h() : i(), 18049 o.get("ajaxCallback")(); 18050 }) 18051 .fail(function () { 18052 p.warning("Fail to load response data"); 18053 }) 18054 .always(function () {})); 18055 } 18056 } 18057 switch (a.keyCode) { 18058 case 27: 18059 i(), l(); 18060 break; 18061 case 38: 18062 a.preventDefault(), v.length > 0 && w > 0 && ((w -= 1), t.val(o.get("getValue")(v[w])), j(w)); 18063 break; 18064 case 40: 18065 a.preventDefault(), v.length > 0 && w < v.length - 1 && ((w += 1), t.val(o.get("getValue")(v[w])), j(w)); 18066 break; 18067 default: 18068 if (a.keyCode > 40 || 8 === a.keyCode) { 18069 var c = t.val(); 18070 o.get("list").hideOnEmptyPhrase !== !0 || 8 !== a.keyCode || "" !== c 18071 ? o.get("requestDelay") > 0 18072 ? (void 0 !== m && clearTimeout(m), 18073 (m = setTimeout(function () { 18074 b(c); 18075 }, o.get("requestDelay")))) 18076 : b(c) 18077 : i(); 18078 } 18079 } 18080 }); 18081 } 18082 function d() {
18083 t.on("keydown", function (a) { 18084 a = a || window.event; 18085 var b = a.keyCode; 18086 return 38 === b ? ((suppressKeypress = !0), !1) : void 0; 18087 }).keydown(function (a) { 18088 13 === a.keyCode && w > -1 && (t.val(o.get("getValue")(v[w])), o.get("list").onKeyEnterEvent(), o.get("list").onChooseEvent(), (w = -1), i(), a.preventDefault()); 18089 }); 18090 } 18091 function e() { 18092 t.off("keypress"); 18093 } 18094 function f() { 18095 t.focus(function () { 18096 "" !== t.val() && v.length > 0 && ((w = -1), h()); 18097 }); 18098 } 18099 function g() { 18100 t.blur(function () { 18101 setTimeout(function () { 18102 (w = -1), i(); 18103 }, 250); 18104 }); 18105 } 18106 function n() { 18107 t.attr("autocomplete", "off"); 18108 } 18109 a(); 18110 } 18111 function h() { 18112 u.trigger("show.eac"); 18113 } 18114 function i() { 18115 u.trigger("hide.eac"); 18116 } 18117 function j(a) { 18118 u.trigger("selectElement.eac", a); 18119 } 18120 function k(a, b) { 18121 u.trigger("loadElements.eac", [a, b]); 18122 } 18123 function l() { 18124 t.trigger("blur"); 18125 } 18126 var m, 18127 n = new a.Constans(), 18128 o = new a.Configuration(c), 18129 p = new a.Logger(), 18130 q = new a.Template(c.template), 18131 r = new a.ListBuilderService(o, a.proccess), 18132 s = o.equals, 18133 t = b, 18134 u = "", 18135 v = [], 18136 w = -1; 18137 (a.consts = n), 18138 (this.getConstants = function () { 18139 return n; 18140 }), 18141 (this.getConfiguration = function () { 18142 return o; 18143 }), 18144 (this.getContainer = function () { 18145 return u; 18146 }), 18147 (this.getSelectedItemIndex = function () { 18148 return w; 18149 }), 18150 (this.getItems = function () { 18151 return v; 18152 }), 18153 (this.getItemData = function (a) { 18154 return v.length < a || void 0 === v[a] ? -1 : v[a]; 18155 }), 18156 (this.getSelectedItemData = function () { 18157 return this.getItemData(w); 18158 }), 18159 (this.build = function () { 18160 e(); 18161 }), 18162 (this.init = function () { 18163 d(); 18164 }); 18165 }), 18166 (a.eacHandles = []), 18167 (a.getHandle = function (b) { 18168 return a.eacHandles[b]; 18169 }), 18170 (a.inputHasId = function (a) { 18171 return void 0 !== $(a).attr("id") && $(a).attr("id").length > 0; 18172 }), 18173 (a.assignRandomId = function (b) { 18174 var c = ""; 18175 do c = "eac-" + Math.floor(1e4 * Math.random()); 18176 while (0 !== $("#" + c).length); 18177 (elementId = a.consts.getValue("CONTAINER_ID") + c), $(b).attr("id", c); 18178 }), 18179 (a.setHandle = function (b, c) { 18180 a.eacHandles[c] = b; 18181 }), 18182 a 18183 ); 18184 })(EasyAutocomplete || {}); 18185!(function (a) { 18186 (a.fn.easyAutocomplete = function (b) { 18187 return this.each(function () { 18188 var c = a(this), 18189 d = new EasyAutocomplete.main(c, b); 18190 EasyAutocomplete.inputHasId(c) || EasyAutocomplete.assignRandomId(c), d.init(), EasyAutocomplete.setHandle(d, c.attr("id")); 18191 }); 18192 }), 18193 (a.fn.getSelectedItemIndex = function () { 18194 var b = a(this).attr("id"); 18195 return void 0 !== b ? EasyAutocomplete.getHandle(b).getSelectedItemIndex() : -1; 18196 }), 18197 (a.fn.getItems = function () { 18198 var b = a(this).attr("id"); 18199 return void 0 !== b ? EasyAutocomplete.getHandle(b).getItems() : -1; 18200 }), 18201 (a.fn.getItemData = function (b) { 18202 var c = a(this).attr("id"); 18203 return void 0 !== c && b > -1 ? EasyAutocomplete.getHandle(c).getItemData(b) : -1; 18204 }), 18205 (a.fn.getSelectedItemData = function () { 18206 var b = a(this).attr("id"); 18207 return void 0 !== b ? EasyAutocomplete.getHandle(b).getSelectedItemData() : -1; 18208 }); 18209})(jQuery); 18210!(function (t) { 18211 if ("object" == typeof exports && "undefined" != typeof module) module.exports = t(); 18212 else if ("function" == typeof define && define.amd) define([], t); 18213 else { 18214 var e; 18215 (e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this), (e.Chart = t()); 18216 } 18217})(function () { 18218 return (function t(e, n, i) { 18219 function a(r, l) { 18220 if (!n[r]) { 18221 if (!e[r]) { 18222 var s = "function" == typeof require && require; 18223 if (!l && s) return s(r, !0); 18224 if (o) return o(r, !0); 18225 var u = new Error("Cannot find module '" + r + "'"); 18226 throw ((u.code = "MODULE_NOT_FOUND"), u); 18227 } 18228 var d = (n[r] = { exports: {} }); 18229 e[r][0].call( 18230 d.exports, 18231 function (t) { 18232 var n = e[r][1][t]; 18233 return a(n ? n : t); 18234 }, 18235 d, 18236 d.exports, 18237 t, 18238 e, 18239 n, 18240 i 18241 ); 18242 } 18243 return n[r].exports; 18244 } 18245 for (var o = "function" == typeof require && require, r = 0; r < i.length; r++) a(i[r]); 18246 return a; 18247 })( 18248 { 18249 1: [function (t, e, n) {}, {}], 18250 2: [ 18251 function (t, e, n) { 18252 function i(t) { 18253 if (t) { 18254 var e = /^#([a-fA-F0-9]{3})$/, 18255 n = /^#([a-fA-F0-9]{6})$/, 18256 i = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, 18257 a = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/, 18258 o = /(\w+)/, 18259 r = [0, 0, 0], 18260 l = 1, 18261 s = t.match(e); 18262 if (s) { 18263 s = s[1]; 18264 for (var u = 0; u < r.length; u++) r[u] = parseInt(s[u] + s[u], 16); 18265 } else if ((s = t.match(n))) { 18266 s = s[1]; 18267 for (var u = 0; u < r.length; u++) r[u] = parseInt(s.slice(2 * u, 2 * u + 2), 16); 18268 } else if ((s = t.match(i))) { 18269 for (var u = 0; u < r.length; u++) r[u] = parseInt(s[u + 1]); 18270 l = parseFloat(s[4]); 18271 } else if ((s = t.match(a))) { 18272 for (var u = 0; u < r.length; u++) r[u] = Math.round(2.55 * parseFloat(s[u + 1])); 18273 l = parseFloat(s[4]); 18274 }
18274 else if ((s = t.match(o))) { 18275 if ("transparent" == s[1]) return [0, 0, 0, 0]; 18276 if (((r = y[s[1]]), !r)) return; 18277 } 18278 for (var u = 0; u < r.length; u++) r[u] = b(r[u], 0, 255); 18279 return (l = l || 0 == l ? b(l, 0, 1) : 1), (r[3] = l), r; 18280 } 18281 } 18282 function a(t) { 18283 if (t) { 18284 var e = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, 18285 n = t.match(e); 18286 if (n) { 18287 var i = parseFloat(n[4]), 18288 a = b(parseInt(n[1]), 0, 360), 18289 o = b(parseFloat(n[2]), 0, 100), 18290 r = b(parseFloat(n[3]), 0, 100), 18291 l = b(isNaN(i) ? 1 : i, 0, 1); 18292 return [a, o, r, l]; 18293 } 18294 } 18295 } 18296 function o(t) { 18297 if (t) { 18298 var e = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/, 18299 n = t.match(e); 18300 if (n) { 18301 var i = parseFloat(n[4]), 18302 a = b(parseInt(n[1]), 0, 360), 18303 o = b(parseFloat(n[2]), 0, 100), 18304 r = b(parseFloat(n[3]), 0, 100), 18305 l = b(isNaN(i) ? 1 : i, 0, 1); 18306 return [a, o, r, l]; 18307 } 18308 } 18309 } 18310 function r(t) { 18311 var e = i(t); 18312 return e && e.slice(0, 3); 18313 } 18314 function l(t) { 18315 var e = a(t); 18316 return e && e.slice(0, 3); 18317 } 18318 function s(t) { 18319 var e = i(t); 18320 return e ? e[3] : (e = a(t)) ? e[3] : (e = o(t)) ? e[3] : void 0; 18321 } 18322 function u(t) { 18323 return "#" + x(t[0]) + x(t[1]) + x(t[2]); 18324 } 18325 function d(t, e) { 18326 return e < 1 || (t[3] && t[3] < 1) ? c(t, e) : "rgb(" + t[0] + ", " + t[1] + ", " + t[2] + ")"; 18327 } 18328 function c(t, e) { 18329 return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "rgba(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + e + ")"; 18330 } 18331 function h(t, e) { 18332 if (e < 1 || (t[3] && t[3] < 1)) return f(t, e); 18333 var n = Math.round((t[0] / 255) * 100), 18334 i = Math.round((t[1] / 255) * 100), 18335 a = Math.round((t[2] / 255) * 100); 18336 return "rgb(" + n + "%, " + i + "%, " + a + "%)"; 18337 } 18338 function f(t, e) { 18339 var n = Math.round((t[0] / 255) * 100), 18340 i = Math.round((t[1] / 255) * 100), 18341 a = Math.round((t[2] / 255) * 100); 18342 return "rgba(" + n + "%, " + i + "%, " + a + "%, " + (e || t[3] || 1) + ")"; 18343 } 18344 function g(t, e) { 18345 return e < 1 || (t[3] && t[3] < 1) ? p(t, e) : "hsl(" + t[0] + ", " + t[1] + "%, " + t[2] + "%)"; 18346 } 18347 function p(t, e) { 18348 return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hsla(" + t[0] + ", " + t[1] + "%, " + t[2] + "%, " + e + ")"; 18349 } 18350 function m(t, e) { 18351 return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hwb(" + t[0] + ", " + t[1] + "%, " + t[2] + "%" + (void 0 !== e && 1 !== e ? ", " + e : "") + ")"; 18352 } 18353 function v(t) { 18354 return k[t.slice(0, 3)]; 18355 } 18356 function b(t, e, n) { 18357 return Math.min(Math.max(e, t), n); 18358 } 18359 function x(t) { 18360 var e = t.toString(16).toUpperCase(); 18361 return e.length < 2 ? "0" + e : e; 18362 } 18363 var y = t(6); 18364 e.exports = { getRgba: i, getHsla: a, getRgb: r, getHsl: l, getHwb: o, getAlpha: s, hexString: u, rgbString: d, rgbaString: c, percentStr
18364ing: h, percentaString: f, hslString: g, hslaString: p, hwbString: m, keyword: v }; 18365 var k = {}; 18366 for (var w in y) k[y[w]] = w; 18367 }, 18368 { 6: 6 }, 18369 ], 18370 3: [ 18371 function (t, e, n) { 18372 var i = t(5), 18373 a = t(2), 18374 o = function (t) { 18375 if (t instanceof o) return t; 18376 if (!(this instanceof o)) return new o(t); 18377 (this.valid = !1), (this.values = { rgb: [0, 0, 0], hsl: [0, 0, 0], hsv: [0, 0, 0], hwb: [0, 0, 0], cmyk: [0, 0, 0, 0], alpha: 1 }); 18378 var e; 18379 "string" == typeof t 18380 ? ((e = a.getRgba(t)), e ? this.setValues("rgb", e) : (e = a.getHsla(t)) ? this.setValues("hsl", e) : (e = a.getHwb(t)) && this.setValues("hwb", e)) 18381 : "object" == typeof t && 18382 ((e = t), 18383 void 0 !== e.r || void 0 !== e.red 18384 ? this.setValues("rgb", e) 18385 : void 0 !== e.l || void 0 !== e.lightness 18386 ? this.setValues("hsl", e) 18387 : void 0 !== e.v || void 0 !== e.value 18388 ? this.setValues("hsv", e) 18389 : void 0 !== e.w || void 0 !== e.whiteness 18390 ? this.setValues("hwb", e) 18391 : (void 0 === e.c && void 0 === e.cyan) || this.setValues("cmyk", e)); 18392 }; 18393 (o.prototype = { 18394 isValid: function () { 18395 return this.valid; 18396 }, 18397 rgb: function () { 18398 return this.setSpace("rgb", arguments); 18399 }, 18400 hsl: function () { 18401 return this.setSpace("hsl", arguments); 18402 }, 18403 hsv: function () { 18404 return this.setSpace("hsv", arguments); 18405 }, 18406 hwb: function () { 18407 return this.setSpace("hwb", arguments); 18408 }, 18409 cmyk: function () { 18410 return this.setSpace("cmyk", arguments); 18411 }, 18412 rgbArray: function () { 18413 return this.values.rgb; 18414 }, 18415 hslArray: function () { 18416 return this.values.hsl; 18417 }, 18418 hsvArray: function () { 18419 return this.values.hsv; 18420 }, 18421 hwbArray: function () { 18422 var t = this.values; 18423 return 1 !== t.alpha ? t.hwb.concat([t.alpha]) : t.hwb; 18424 }, 18425 cmykArray: function () { 18426 return this.values.cmyk; 18427 }, 18428 rgbaArray: function () { 18429 var t = this.values; 18430 return t.rgb.concat([t.alpha]); 18431 }, 18432 hslaArray: function () { 18433 var t = this.values; 18434 return t.hsl.concat([t.alpha]); 18435 }, 18436 alpha: function (t) { 18437 return void 0 === t ? this.values.alpha : (this.setValues("alpha", t), this); 18438 }, 18439 red: function (t) { 18440 return this.setChannel("rgb", 0, t); 18441 }, 18442 green: function (t) {
18443 return this.setChannel("rgb", 1, t); 18444 }, 18445 blue: function (t) { 18446 return this.setChannel("rgb", 2, t); 18447 }, 18448 hue: function (t) { 18449 return t && ((t %= 360), (t = t < 0 ? 360 + t : t)), this.setChannel("hsl", 0, t); 18450 }, 18451 saturation: function (t) { 18452 return this.setChannel("hsl", 1, t); 18453 }, 18454 lightness: function (t) { 18455 return this.setChannel("hsl", 2, t); 18456 }, 18457 saturationv: function (t) { 18458 return this.setChannel("hsv", 1, t); 18459 }, 18460 whiteness: function (t) { 18461 return this.setChannel("hwb", 1, t); 18462 }, 18463 blackness: function (t) { 18464 return this.setChannel("hwb", 2, t); 18465 }, 18466 value: function (t) { 18467 return this.setChannel("hsv", 2, t); 18468 }, 18469 cyan: function (t) { 18470 return this.setChannel("cmyk", 0, t); 18471 }, 18472 magenta: function (t) { 18473 return this.setChannel("cmyk", 1, t); 18474 }, 18475 yellow: function (t) { 18476 return this.setChannel("cmyk", 2, t); 18477 }, 18478 black: function (t) { 18479 return this.setChannel("cmyk", 3, t); 18480 }, 18481 hexString: function () { 18482 return a.hexString(this.values.rgb); 18483 }, 18484 rgbString: function () { 18485 return a.rgbString(this.values.rgb, this.values.alpha); 18486 }, 18487 rgbaString: function () { 18488 return a.rgbaString(this.values.rgb, this.values.alpha); 18489 }, 18490 percentString: function () { 18491 return a.percentString(this.values.rgb, this.values.alpha); 18492 }, 18493 hslString: function () { 18494 return a.hslString(this.values.hsl, this.values.alpha); 18495 }, 18496 hslaString: function () { 18497 return a.hslaString(this.values.hsl, this.values.alpha); 18498 }, 18499 hwbString: function () { 18500 return a.hwbString(this.values.hwb, this.values.alpha); 18501 }, 18502 keyword: function () { 18503 return a.keyword(this.values.rgb, this.values.alpha); 18504 }, 18505 rgbNumber: function () { 18506 var t = this.values.rgb; 18507 return (t[0] << 16) | (t[1] << 8) | t[2]; 18508 }, 18509 luminosity: function () { 18510 for (var t = this.values.rgb, e = [], n = 0; n < t.length; n++) { 18511 var i = t[n] / 255; 18512 e[n] = i <= 0.03928 ? i / 12.92 : Math.pow((i + 0.055) / 1.055, 2.4); 18513 } 18514 return 0.2126 * e[0] + 0.7152 * e[1] + 0.0722 * e[2]; 18515 }, 18516 contrast: function (t) { 18517 var e = this.luminosity(), 18518 n = t.luminosity(); 18519 return e > n ? (e + 0.05) / (n + 0.05) : (n + 0.05) / (e + 0.05); 18520 }, 18521 level: function (t) { 18522 var e = this.contrast(t); 18523 return e >= 7.1 ? "AAA" : e >= 4.5 ? "AA" : ""; 18524 }, 18525 dark: function () { 18526 var t = this.values.rgb, 18527 e = (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3; 18528 return e < 128; 18529 }, 18530 light: function () { 18531 return !this.dark(); 18532 }, 18533 negate: function () { 18534 for (var t = [], e = 0; e < 3; e++) t[e] = 255 - this.values.rgb[e]; 18535 return this.setValues("rgb", t), this; 18536 }, 18537 lighten: function (t) { 18538 var e = this.values.hsl; 18539 return (e[2] += e[2] * t), this.setValues("hsl", e), this; 18540 }, 18541 darken: function (t) { 18542 var e = this.values.hsl; 18543 return (e[2] -= e[2] * t), this.setValues("hsl", e), this; 18544 }, 18545 saturate: function (t) { 18546 var e = this.values.hsl; 18547 return (e[1] += e[1] * t), this.setValues("hsl", e), this; 18548 }, 18549 desaturate: function (t) { 18550 var e = this.values.hsl; 18551 return (e[1] -= e[1] * t), this.setValues("hsl", e), this; 18552 }, 18553 whiten: function (t) { 18554 var e = this.values.hwb; 18555 return (e[1] += e[1] * t), this.setValues("hwb", e), this; 18556 }, 18557 blacken: function (t) { 18558 var e = this.values.hwb; 18559 return (e[2] += e[2] * t), this.setValues("hwb", e), this; 18560 }, 18561 greyscale: function () { 18562 var t = this.values.rgb, 18563 e = 0.3 * t[0] + 0.59 * t[1] + 0.11 * t[2]; 18564 return this.setValues("rgb", [e, e, e]), this; 18565 }, 18566 clearer: function (t) { 18567 var e = this.values.alpha;
18568 return this.setValues("alpha", e - e * t), this; 18569 }, 18570 opaquer: function (t) { 18571 var e = this.values.alpha; 18572 return this.setValues("alpha", e + e * t), this; 18573 }, 18574 rotate: function (t) { 18575 var e = this.values.hsl, 18576 n = (e[0] + t) % 360; 18577 return (e[0] = n < 0 ? 360 + n : n), this.setValues("hsl", e), this; 18578 }, 18579 mix: function (t, e) { 18580 var n = this, 18581 i = t, 18582 a = void 0 === e ? 0.5 : e, 18583 o = 2 * a - 1, 18584 r = n.alpha() - i.alpha(), 18585 l = ((o * r === -1 ? o : (o + r) / (1 + o * r)) + 1) / 2, 18586 s = 1 - l; 18587 return this.rgb(l * n.red() + s * i.red(), l * n.green() + s * i.green(), l * n.blue() + s * i.blue()).alpha(n.alpha() * a + i.alpha() * (1 - a)); 18588 }, 18589 toJSON: function () { 18590 return this.rgb(); 18591 }, 18592 clone: function () { 18593 var t, 18594 e, 18595 n = new o(), 18596 i = this.values, 18597 a = n.values; 18598 for (var r in i) i.hasOwnProperty(r) && ((t = i[r]), (e = {}.toString.call(t)), "[object Array]" === e ? (a[r] = t.slice(0)) : "[object Number]" === e ? (a[r] = t) : console.error("unexpected color value:", t)); 18599 return n; 18600 }, 18601 }), 18602 (o.prototype.spaces = { 18603 rgb: ["red", "green", "blue"], 18604 hsl: ["hue", "saturation", "lightness"], 18605 hsv: ["hue", "saturation", "value"], 18606 hwb: ["hue", "whiteness", "blackness"], 18607 cmyk: ["cyan", "magenta", "yellow", "black"], 18608 }), 18609 (o.prototype.maxes = { rgb: [255, 255, 255], hsl: [360, 100, 100], hsv: [360, 100, 100], hwb: [360, 100, 100], cmyk: [100, 100, 100, 100] }), 18610 (o.prototype.getValues = function (t) { 18611 for (var e = this.values, n = {}, i = 0; i < t.length; i++) n[t.charAt(i)] = e[t][i]; 18612 return 1 !== e.alpha && (n.a = e.alpha), n; 18613 }), 18614 (o.prototype.setValues = function (t, e) { 18615 var n, 18616 a = this.values, 18617 o = this.spaces, 18618 r = this.maxes, 18619 l = 1; 18620 if (((this.valid = !0), "alpha" === t)) l = e; 18621 else if (e.length) (a[t] = e.slice(0, t.length)), (l = e[t.length]); 18622 else if (void 0 !== e[t.charAt(0)]) { 18623 for (n = 0; n < t.length; n++) a[t][n] = e[t.charAt(n)]; 18624 l = e.a; 18625 } else if (void 0 !== e[o[t][0]]) { 18626 var s = o[t]; 18627 for (n = 0; n < t.length; n++) a[t][n] = e[s[n]]; 18628 l = e.alpha; 18629 } 18630 if (((a.alpha = Math.max(0, Math.min(1, void 0 === l ? a.alpha : l))), "alpha" === t)) return !1; 18631 var u; 18632 for (n = 0; n < t.length; n++) (u = Math.max(0, Math.min(r[t][n], a[t][n]))), (a[t][n] = Math.round(u)); 18633 for (var d in o) d !== t && (a[d] = i[t][d](a[t])); 18634 return !0; 18635 }), 18636 (o.prototype.setSpace = function (t, e) { 18637 var n = e[0]; 18638 return void 0 === n ? this.getValues(t) : ("number" == typeof n && (n = Array.prototype.slice.call(e)), this.setValues(t, n), this); 18639 }), 18640 (o.prototype.setChannel = function (t, e, n) { 18641 var i = this.values[t]; 18642 return void 0 === n ? i[e] : n === i[e] ? this
18642: ((i[e] = n), this.setValues(t, i), this); 18643 }), 18644 "undefined" != typeof window && (window.Color = o), 18645 (e.exports = o); 18646 }, 18647 { 2: 2, 5: 5 }, 18648 ], 18649 4: [ 18650 function (t, e, n) { 18651 function i(t) { 18652 var e, 18653 n, 18654 i, 18655 a = t[0] / 255, 18656 o = t[1] / 255, 18657 r = t[2] / 255, 18658 l = Math.min(a, o, r), 18659 s = Math.max(a, o, r), 18660 u = s - l; 18661 return ( 18662 s == l ? (e = 0) : a == s ? (e = (o - r) / u) : o == s ? (e = 2 + (r - a) / u) : r == s && (e = 4 + (a - o) / u), 18663 (e = Math.min(60 * e, 360)), 18664 e < 0 && (e += 360), 18665 (i = (l + s) / 2), 18666 (n = s == l ? 0 : i <= 0.5 ? u / (s + l) : u / (2 - s - l)), 18667 [e, 100 * n, 100 * i] 18668 ); 18669 } 18670 function a(t) { 18671 var e, 18672 n, 18673 i, 18674 a = t[0], 18675 o = t[1], 18676 r = t[2], 18677 l = Math.min(a, o, r), 18678 s = Math.max(a, o, r), 18679 u = s - l; 18680 return ( 18681 (n = 0 == s ? 0 : ((u / s) * 1e3) / 10), 18682 s == l ? (e = 0) : a == s ? (e = (o - r) / u) : o == s ? (e = 2 + (r - a) / u) : r == s && (e = 4 + (a - o) / u), 18683 (e = Math.min(60 * e, 360)), 18684 e < 0 && (e += 360), 18685 (i = ((s / 255) * 1e3) / 10), 18686 [e, n, i] 18687 ); 18688 } 18689 function o(t) { 18690 var e = t[0], 18691 n = t[1], 18692 a = t[2], 18693 o = i(t)[0], 18694 r = (1 / 255) * Math.min(e, Math.min(n, a)), 18695 a = 1 - (1 / 255) * Math.max(e, Math.max(n, a)); 18696 return [o, 100 * r, 100 * a]; 18697 } 18698 function l(t) { 18699 var e, 18700 n, 18701 i, 18702 a, 18703 o = t[0] / 255, 18704 r = t[1] / 255, 18705 l = t[2] / 255; 18706 return (a = Math.min(1 - o, 1 - r, 1 - l)), (e = (1 - o - a) / (1 - a) || 0), (n = (1 - r - a) / (1 - a) || 0), (i = (1 - l - a) / (1 - a) || 0), [100 * e, 100 * n, 100 * i, 100 * a]; 18707 } 18708 function s(t) { 18709 return Z[JSON.stringify(t)]; 18710 } 18711 function u(t) {
18712 var e = t[0] / 255, 18713 n = t[1] / 255, 18714 i = t[2] / 255; 18715 (e = e > 0.04045 ? Math.pow((e + 0.055) / 1.055, 2.4) : e / 12.92), (n = n > 0.04045 ? Math.pow((n + 0.055) / 1.055, 2.4) : n / 12.92), (i = i > 0.04045 ? Math.pow((i + 0.055) / 1.055, 2.4) : i / 12.92); 18716 var a = 0.4124 * e + 0.3576 * n + 0.1805 * i, 18717 o = 0.2126 * e + 0.7152 * n + 0.0722 * i, 18718 r = 0.0193 * e + 0.1192 * n + 0.9505 * i; 18719 return [100 * a, 100 * o, 100 * r]; 18720 } 18721 function d(t) { 18722 var e, 18723 n, 18724 i, 18725 a = u(t), 18726 o = a[0], 18727 r = a[1], 18728 l = a[2]; 18729 return ( 18730 (o /= 95.047), 18731 (r /= 100), 18732 (l /= 108.883), 18733 (o = o > 0.008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116), 18734 (r = r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116), 18735 (l = l > 0.008856 ? Math.pow(l, 1 / 3) : 7.787 * l + 16 / 116), 18736 (e = 116 * r - 16), 18737 (n = 500 * (o - r)), 18738 (i = 200 * (r - l)), 18739 [e, n, i] 18740 ); 18741 } 18742 function c(t) { 18743 return B(d(t)); 18744 } 18745 function h(t) { 18746 var e, 18747 n, 18748 i, 18749 a, 18750 o, 18751 r = t[0] / 360, 18752 l = t[1] / 100, 18753 s = t[2] / 100; 18754 if (0 == l) return (o = 255 * s), [o, o, o]; 18755 (n = s < 0.5 ? s * (1 + l) : s + l - s * l), (e = 2 * s - n), (a = [0, 0, 0]); 18756 for (var u = 0; u < 3; u++) (i = r + (1 / 3) * -(u - 1)), i < 0 && i++, i > 1 && i--, (o = 6 * i < 1 ? e + 6 * (n - e) * i : 2 * i < 1 ? n : 3 * i < 2 ? e + (n - e) * (2 / 3 - i) * 6 : e), (a[u] = 255 * o); 18757 return a; 18758 } 18759 function f(t) { 18760 var e, 18761 n, 18762 i = t[0], 18763 a = t[1] / 100, 18764 o = t[2] / 100; 18765 return 0 === o ? [0, 0, 0] : ((o *= 2), (a *= o <= 1 ? o : 2 - o), (n = (o + a) / 2), (e = (2 * a) / (o + a)), [i, 100 * e, 100 * n]); 18766 } 18767 function p(t) { 18768 return o(h(t)); 18769 } 18770 function m(t) { 18771 return l(h(t)); 18772 } 18773 function v(t) { 18774 return s(h(t)); 18775 } 18776 function x(t) { 18777 var e = t[0] / 60, 18778 n = t[1] / 100, 18779 i = t[2] / 100, 18780 a = Math.floor(e) % 6, 18781 o = e - Math.floor(e), 18782 r = 255 * i * (1 - n), 18783 l = 255 * i * (1 - n * o), 18784 s = 255 * i * (1 - n * (1 - o)), 18785 i = 255 * i; 18786 switch (a) { 18787 case 0: 18788 return [i, s, r]; 18789 case 1: 18790 return [l, i, r]; 18791 case 2: 18792 return [r, i, s]; 18793 case 3: 18794 return [r, l, i]; 18795 case 4: 18796 return [s, r, i]; 18797 case 5: 18798 return [i, r, l]; 18799 } 18800 } 18801 function y(t) { 18802 var e, 18803 n, 18804 i = t[0], 18805 a = t[1] / 100, 18806 o = t[2] / 100; 18807 return (n = (2 - a) * o), (e = a * o), (e /= n <= 1 ? n : 2 - n), (e = e || 0), (n /= 2), [i, 100 * e, 100 * n]; 18808 } 18809 function k(t) { 18810 return o(x(t)); 18811 } 18812 function w(t) { 18813 return l(x(t)); 18814 } 18815 function M(t) { 18816 return s(x(t)); 18817 } 18818 function S(t) { 18819 var e, 18820 n, 18821 i, 18822 a, 18823 o = t[0] / 360, 18824 l = t[1] / 100, 18825 s = t[2] / 100, 18826 u = l + s; 18827 switch ((u > 1 && ((l /= u), (s /= u)), (e = Math.floor(6 * o)), (n = 1 - s), (i = 6 * o - e), 0 != (1 & e) && (i = 1 - i), (a = l + i * (n - l)), e)) { 18828 default: 18829 case 6: 18830 case 0: 18831 (r = n), (g = a), (b = l); 18832 break; 18833 case 1: 18834 (r = a), (g = n), (b = l); 18835 break; 18836 case 2: 18837 (r = l), (g = n), (b = a); 18838 break; 18839 case 3: 18840 (r = l), (g = a), (b = n); 18841 break; 18842 case 4: 18843 (r = a), (g = l), (b = n); 18844 break; 18845 case 5: 18846 (r = n), (g = l), (b = a); 18847 } 18848 return [255 * r, 255 * g, 255 * b]; 18849 } 18850 function C(t) { 18851 return i(S(t)); 18852 } 18853 function D(t) { 18854 return a(S(t)); 18855 } 18856 function I(t) { 18857 return l(S(t)); 18858 } 18859 function A(t) { 18860 return s(S(t)); 18861 } 18862 function P(t) { 18863 var e, 18864 n, 18865 i, 18866 a = t[0] / 100, 18867 o = t[1] / 100, 18868 r = t[2] / 100, 18869 l = t[3] / 100; 18870 return (e = 1 - Math.min(1, a * (1 - l) + l)), (n = 1 - Math.min(1, o * (1 - l) + l)), (i = 1 - Math.min(1, r * (1 - l) + l)), [255 * e, 255 * n, 255 * i]; 18871 } 18872 function _(t) { 18873 return i(P(t)); 18874 } 18875 function T(t) { 18876 return a(P(t)); 18877 } 18878 function F(t) { 18879 return o(P(t)); 18880 } 18881 function R(t) { 18882 return s(P(t)); 18883 } 18884 function L(t) { 18885 var e, 18886 n, 18887 i, 18888 a = t[0] / 100, 18889 o = t[1] / 100, 18890 r = t[2] / 100; 18891 return ( 18892 (e = 3.2406 * a + o * -1.5372 + r * -0.4986), 18893 (n = a * -0.9689 + 1.8758 * o + 0.0415 * r), 18894 (i = 0.0557 * a + o * -0.204 + 1.057 * r), 18895 (e = e > 0.0031308 ? 1.055 * Math.pow(e, 1 / 2.4) - 0.055 : (e *= 12.92)), 18896 (n = n > 0.0031308 ? 1.055 * Math.pow(n, 1 / 2.4) - 0.055 : (n *= 12.92)), 18897 (i = i > 0.0031308 ? 1.055 * Math.pow(i, 1 / 2.4) - 0.055 : (i *= 12.92)), 18898 (e = Math.min(Math.max(0, e), 1)), 18899 (n = Math.min(Math.max(0, n), 1)), 18900 (i = Math.min(Math.max(0, i), 1)), 18901 [255 * e, 255 * n, 255 * i] 18902 ); 18903 } 18904 function V(t) { 18905 var e, 18906 n, 18907 i, 18908 a = t[0], 18909 o = t[1], 18910 r = t[2]; 18911 return ( 18912 (a /= 95.047), 18913 (o /= 100), 18914 (r /= 108.883), 18915 (a = a > 0.008856 ? Math.pow(a, 1 / 3) : 7.787 * a + 16 / 116), 18916 (o = o > 0.008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116), 18917 (r = r > 0.008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116), 18918 (e = 116 * o - 16), 18919 (n = 500 * (a - o)), 18920 (i = 200 * (o - r)), 18921 [e, n, i] 18922 ); 18923 } 18924 function O(t) { 18925 return B(V(t)); 18926 } 18927 function z(t) { 18928 var e, 18929 n, 18930 i, 18931 a, 18932 o = t[0], 18933 r = t[1], 18934 l = t[2]; 18935 return ( 18936 o <= 8 ? ((n = (100 * o) / 903.3), (a = 7.787 * (n / 100) + 16 / 116)) : ((n = 100 * Math.pow((o + 16) / 116, 3)), (a = Math.pow(n / 100, 1 / 3))), 18937 (e = e / 95.047 <= 0.008856 ? (e = (95.047 * (r / 500 + a - 16 / 116)) / 7.787) : 95.047 * Math.pow(r / 500 + a, 3)), 18938 (i = i / 108.883 <= 0.008859 ? (i = (108.883 * (a - l / 200 - 16 / 116)) / 7.787) : 108.883 * Math.pow(a - l / 200, 3)), 18939 [e, n, i] 18940 ); 18941 } 18942 function B(t) { 18943 var e, 18944 n, 18945 i, 18946 a = t[0], 18947 o = t[1], 18948 r = t[2]; 18949 return (e = Math.atan2(r, o)), (n = (360 * e) / 2 / Math.PI), n < 0 && (n += 360), (i = Math.sqrt(o * o + r * r)), [a, i, n]; 18950 } 18951 function W(t) { 18952 return L(z(t)); 18953 } 18954 function N(t) { 18955 var e, 18956 n, 18957 i, 18958 a = t[0], 18959 o = t[1], 18960 r = t[2]; 18961 return (i = (r / 360) * 2 * Math.PI), (e = o * Math.cos(i)), (n = o * Math.sin(i)), [a, e, n]; 18962 } 18963 function E(t) { 18964 return z(N(t)); 18965 } 18966 function H(t) { 18967 return W(N(t)); 18968 } 18969 function q(t) { 18970 return J[t]; 18971 } 18972 function j(t) { 18973 return i(q(t)); 18974 } 18975 function Y(t) { 18976 return a(q(t)); 18977 } 18978 function U(t) { 18979 return o(q(t)); 18980 } 18981 function X(t) { 18982 return l(q(t)); 18983 } 18984 function K(t) { 18985 return d(q(t)); 18986 } 18987 function G(t) { 18988 return u(q(t)); 18989 } 18990 e.exports = { 18991 rgb2hsl: i, 18992 rgb2hsv: a, 18993 rgb2hwb: o, 18994 rgb2cmyk: l, 18995 rgb2keyword: s, 18996 rgb2xyz: u, 18997 rgb2lab: d, 18998 rgb2lch: c, 18999 hsl2rgb: h, 19000 hsl2hsv: f, 19001 hsl2hwb: p, 19002 hsl2cmyk: m, 19003 hsl2keyword: v, 19004 hsv2rgb: x, 19005 hsv2hsl: y, 19006 hsv2hwb: k, 19007 hsv2cmyk: w, 19008 hsv2keyword: M, 19009 hwb2rgb: S, 19010 hwb2hsl: C, 19011 hwb2hsv: D, 19012 hwb2cmyk: I, 19013 hwb2keyword: A, 19014 cmyk2rgb: P, 19015 cmyk2hsl: _, 19016 cmyk2hsv: T, 19017 cmyk2hwb: F, 19018 cmyk2keyword: R, 19019 keyword2rgb: q, 19020 keyword2hsl: j, 19021 keyword2hsv: Y, 19022 keyword2hwb: U, 19023 keyword2cmyk: X, 19024 keyword2lab: K, 19025 keyword2xyz: G, 19026 xyz2rgb: L, 19027 xyz2lab: V, 19028 xyz2lch: O, 19029 lab2xyz: z, 19030 lab2rgb: W, 19031 lab2lch: B, 19032 lch2lab: N, 19033 lch2xyz: E, 19034 lch2rgb: H, 19035 }; 19036 var J = { 19037 aliceblue: [240, 248, 255], 19038 antiquewhite: [250, 235, 215], 19039 aqua: [0, 255, 255], 19040 aquamarine: [127, 255, 212], 19041 azure: [240, 255, 255], 19042 beige: [245, 245, 220], 19043 bisque: [255, 228, 196], 19044 black: [0, 0, 0], 19045 blanchedalmond: [255, 235, 205], 19046 blue: [0, 0, 255], 19047 blueviolet: [138, 43, 226], 19048 brown: [165, 42, 42], 19049 burlywood: [222, 184, 135], 19050 cadetblue: [95, 158, 160], 19051 chartreuse: [127, 255, 0], 19052 chocolate: [210, 105, 30], 19053 coral: [255, 127, 80], 19054 cornflowerblue: [100, 149, 237], 19055 cornsilk: [255, 248, 220], 19056 crimson: [220, 20, 60], 19057 cyan: [0, 255, 255], 19058 darkblue: [0, 0, 139], 19059 darkcyan: [0, 139, 139], 19060 darkgoldenrod: [184, 134, 11], 19061 darkgray: [169, 169, 169], 19062 darkgreen: [0, 100, 0], 19063 darkgrey: [169, 169, 169], 19064 darkkhaki: [189, 183, 107], 19065 darkmagenta: [139, 0, 139], 19066 darkolivegreen: [85, 107, 47], 19067 darkorange: [255, 140, 0], 19068 darkorchid: [153, 50, 204], 19069 darkred: [139, 0, 0], 19070 darksalmon: [233, 150, 122], 19071 darkseagreen: [143, 188, 143], 19072 darkslateblue: [72, 61, 139], 19073 darkslategray: [47, 79, 79], 19074 darkslategrey: [47, 79, 79], 19075 darkturquoise: [0, 206, 209], 19076 darkviolet: [148, 0, 211], 19077
19077 deeppink: [255, 20, 147], 19078 deepskyblue: [0, 191, 255], 19079 dimgray: [105, 105, 105], 19080 dimgrey: [105, 105, 105], 19081 dodgerblue: [30, 144, 255], 19082 firebrick: [178, 34, 34], 19083 floralwhite: [255, 250, 240], 19084 forestgreen: [34, 139, 34], 19085 fuchsia: [255, 0, 255], 19086 gainsboro: [220, 220, 220], 19087 ghostwhite: [248, 248, 255], 19088 gold: [255, 215, 0], 19089 goldenrod: [218, 165, 32], 19090 gray: [128, 128, 128], 19091 green: [0, 128, 0], 19092 greenyellow: [173, 255, 47], 19093 grey: [128, 128, 128], 19094 honeydew: [240, 255, 240], 19095 hotpink: [255, 105, 180], 19096 indianred: [205, 92, 92], 19097 indigo: [75, 0, 130], 19098 ivory: [255, 255, 240], 19099 khaki: [240, 230, 140], 19100 lavender: [230, 230, 250], 19101 lavenderblush: [255, 240, 245], 19102 lawngreen: [124, 252, 0], 19103 lemonchiffon: [255, 250, 205], 19104 lightblue: [173, 216, 230], 19105 lightcoral: [240, 128, 128], 19106 lightcyan: [224, 255, 255], 19107 lightgoldenrodyellow: [250, 250, 210], 19108 lightgray: [211, 211, 211], 19109 lightgreen: [144, 238, 144], 19110 lightgrey: [211, 211, 211], 19111 lightpink: [255, 182, 193], 19112 lightsalmon: [255, 160, 122], 19113 lightseagreen: [32, 178, 170], 19114 lightskyblue: [135, 206, 250], 19115 lightslategray: [119, 136, 153], 19116 lightslategrey: [119, 136, 153], 19117 lightsteelblue: [176, 196, 222], 19118 lightyellow: [255, 255, 224], 19119 lime: [0, 255, 0], 19120 limegreen: [50, 205, 50], 19121 linen: [250, 240, 230], 19122 magenta: [255, 0, 255], 19123 maroon: [128, 0, 0], 19124 mediumaquamarine: [102, 205, 170], 19125 mediumblue: [0, 0, 205], 19126 mediumorchid: [186, 85, 211], 19127 mediumpurple: [147, 112, 219], 19128 mediumseagreen: [60, 179, 113], 19129 mediumslateblue: [123, 104, 238], 19130 mediumspringgreen: [0, 250, 154], 19131 mediumturquoise: [72, 209, 204], 19132 mediumvioletred: [199, 21, 133], 19133 midnightblue: [25, 25, 112], 19134 mintcream: [245, 255, 250], 19135 mistyrose: [255, 228, 225], 19136 moccasin: [255, 228, 181], 19137 navajowhite: [255, 222, 173], 19138 navy: [0, 0, 128], 19139 oldlace: [253, 245, 230], 19140 olive: [128, 128, 0], 19141 olivedrab: [107, 142, 35], 19142 orange: [255, 165, 0], 19143 orangered: [255, 69, 0], 19144 orchid: [218, 112, 214], 19145 palegoldenrod: [238, 232, 170], 19146 palegreen: [152, 251, 152], 19147 paleturquoise: [175, 238, 238], 19148 palevioletred: [219, 112, 147], 19149 papayawhip: [255, 239, 213], 19150 peachpuff: [255, 218, 185], 19151 peru: [205, 133, 63], 19152 pink: [255, 192, 203], 19153 plum: [221, 160, 221], 19154 powderblue: [176, 224, 230], 19155 purple: [128, 0, 128], 19156 rebeccapurple: [102, 51, 153], 19157 red: [255, 0, 0], 19158 rosybrown: [188, 143, 143], 19159 royalblue: [65, 105, 225], 19160 saddlebrown: [139, 69, 19], 19161 salmon: [250, 128, 114], 19162 sandybrown: [244, 164, 96], 19163 seagreen: [46, 139, 87], 19164 seashell: [255, 245, 238], 19165 sienna: [160, 82, 45], 19166 silver: [192, 192, 192], 19167 skyblue: [135, 206, 235], 19168 slateblue: [106, 90, 205], 19169 slategray: [112, 128, 144], 19170 slategrey: [112, 128, 144], 19171 snow: [255, 250, 250], 19172 springgreen: [0, 255, 127], 19173 steelblue: [70, 130, 180], 19174 tan: [210, 180, 140], 19175 teal: [0, 128, 128], 19176 thistle: [216, 191, 216], 19177 tomato: [255, 99, 71], 19178 turquoise: [64, 224, 208], 19179 violet: [238, 130, 238], 19180 wheat: [245, 222, 179], 19181 white: [255, 255, 255], 19182 whitesmoke: [245, 245, 245], 19183 yellow: [255, 255, 0], 19184 yellowgreen: [154, 205, 50], 19185 }, 19186 Z = {}; 19187 for (var Q in J) Z[JSON.stringify(J[Q])] = Q; 19188 }, 19189 {}, 19190 ], 19191 5: [ 19192 function (t, e, n) { 19193 var i = t(4), 19194 a = function () { 19195 return new u(); 19196 }; 19197 for (var o in i) { 19198 a[o + "Raw"] = (function (t) { 19199 return function (e) { 19200 return "number" == typeof e && (e = Array.prototype.slice.call(arguments)), i[t](e); 19201 }; 19202 })(o); 19203 var r = /(\w+)2(\w+)/.exec(o), 19204 l = r[1], 19205 s = r[2]; 19206 (a[l] = a[l] || {}), 19207 (a[l][s] = a[o] = (function (t) { 19208 return function (e) { 19209 "number" == typeof e && (e = Array.prototype.slice.call(arguments)); 19210 var n = i[t](e); 19211 if ("string" == typeof n || void 0 === n) return n; 19212 for (var a = 0; a < n.length; a++) n[a] = Math.round(n[a]); 19213 return n; 19214 }; 19215 })(o)); 19216 } 19217 var u = function () { 19218 this.convs = {}; 19219 }; 19220 (u.prototype.routeSpace = function (t, e) { 19221 var n = e[0]; 19222 return void 0 === n ? this.getValues(t) : ("number" == typeof n && (n = Array.prototype.slice.call(e)), this.setValues(t, n)); 19223 }), 19224 (u.prototype.setValues = function (t, e) { 19225 return (this.space = t), (this.convs = {}), (this.convs[t] = e), this; 19226 }), 19227 (u.prototype.getValues = function (t) { 19228 var e = this.convs[t]; 19229 if (!e) { 19230 var n = this.space, 19231 i = this.convs[n]; 19232 (e = a[n][t](i)), (this.convs[t] = e); 19233 } 19234 return e; 19235 }), 19236 ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function (t) { 19237 u.prototype[t] = function (e) { 19238 return this.routeSpace(t, arguments); 19239 }; 19240 }), 19241 (e.exports = a); 19242 }, 19243 { 4: 4 }, 19244 ], 19245 6: [ 19246 function (t, e, n) { 19247 e.exports = { 19248 aliceblue: [240, 248, 255], 19249 antiquewhite: [250, 235, 215], 19250 aqua: [0, 255, 255], 19251 aquamarine: [127, 255, 212], 19252 azure: [240, 255, 255], 19253 beige: [245, 245, 220], 19254 bisque: [255, 228, 196], 19255 black: [0, 0, 0], 19256 blanchedalmond: [255, 235, 205], 19257 blue: [0, 0, 255], 19258 blueviolet: [138, 43, 226], 19259 brown: [165, 42, 42], 19260 burlywood: [222, 184, 135], 19261 cadetblue: [95, 158, 160], 19262 chartreuse: [127, 255, 0], 19263 chocolate: [210, 105, 30], 19264 coral: [255, 127, 80], 19265 cornflowerblue: [100, 149, 237], 19266 cornsilk: [255, 248, 220], 19267 crimson: [220, 20, 60], 19268 cyan: [0, 255, 255], 19269 darkblue: [0, 0, 139], 19270 darkcyan: [0, 139, 139], 19271 darkgoldenrod: [184, 134, 11], 19272 darkgray: [169, 169, 169], 19273 darkgreen: [0, 100, 0], 19274 darkgrey: [169, 169, 169], 19275 darkkhaki: [189, 183, 107], 19276 darkmagenta: [139, 0, 139], 19277 darkolivegreen: [85, 107, 47], 19278 darkorange: [255, 140, 0], 19279 darkorchid: [153, 50, 204], 19280 darkred: [139, 0, 0], 19281 darksalmon: [233, 150, 122], 19282 darkseagreen: [143, 188, 143], 19283 darkslateblue: [72, 61, 139], 19284 darkslategray: [47, 79, 79], 19285 darkslategrey: [47, 79, 79], 19286 darkturquoise: [0, 206, 209], 19287 darkviolet: [148, 0, 211], 19288 deeppink: [255, 20, 147], 19289 deepskyblue: [0, 191, 255], 19290 dimgray: [105, 105, 105], 19291 dimgrey: [105, 105, 105], 19292 dodgerblue: [30, 144, 255], 19293 firebrick: [178, 34, 34], 19294 floralwhite: [255, 250, 240], 19295 forestgreen: [34, 139, 34], 19296 fuchsia: [255, 0, 255], 19297 gainsboro: [220, 220, 220], 19298 ghostwhite: [248, 248, 255], 19299 gold: [255, 215, 0], 19300 goldenrod: [218, 165, 32], 19301 gray: [128, 128, 128], 19302 green: [0, 128, 0], 19303 greenyellow: [173, 255, 47], 19304 grey: [128, 128, 128], 19305 honeydew: [240, 255, 240], 19306 hotpink: [255, 105, 180], 19307 indianred: [205, 92, 92], 19308 indigo: [75, 0, 130], 19309 ivory: [255, 255, 240], 19310 khaki: [240, 230, 140], 19311 lavender: [230, 230, 250], 19312 lavenderblush: [255, 240, 245], 19313 lawngreen: [124, 252, 0], 19314 lemonchiffon: [255, 250, 205], 19315 lightblue: [173, 216, 230], 19316 lightcoral: [240, 128, 128], 19317 lightcyan: [224, 255, 255], 19318 lightgoldenrodyellow: [250, 250, 210], 19319 lightgray: [211, 211, 211], 19320 lightgreen: [144, 238, 144], 19321 lightgrey: [211, 211, 211], 19322 lightpink: [255, 182, 193], 19323 lightsalmon: [255, 160, 122], 19324 lightseagreen: [32, 178, 170], 19325 lightskyblue: [135, 206, 250], 19326 lightslategray: [119, 136, 153], 19327 lightslategrey: [119, 136, 153], 19328 lightsteelblue: [176, 196, 222], 19329 lightyellow: [255, 255, 224], 19330 lime: [0, 255, 0], 19331 limegreen: [50, 205, 50], 19332 linen: [250, 240, 230], 19333 magenta: [255, 0, 255], 19334 maroon: [128, 0, 0], 19335 mediumaquamarine: [102, 205, 170], 19336 mediumblue: [0, 0, 205], 19337 mediumorchid: [186, 85, 211], 19338 mediumpurple: [147, 112, 219], 19339 mediumseagreen: [60, 179, 113], 19340 mediumslateblue: [123, 104, 238], 19341 mediumspringgreen: [0, 250, 154], 19342 mediumturquoise: [72, 209, 204], 19343 mediumvioletred: [199, 21, 133], 19344 midnightblue: [25, 25, 112], 19345 mintcream: [245, 255, 250], 19346 mistyrose: [255, 228, 225], 19347 moccasin: [255, 228, 181], 19348 navajowhite: [255, 222, 173], 19349 navy: [0, 0, 128], 19350 oldlace: [253, 245, 230], 19351 olive: [128, 128, 0], 19352 olivedrab: [107, 142, 35], 19353 orange: [255, 165, 0], 19354 orangered: [255, 69, 0], 19355 orchid: [218, 112, 214], 19356 palegoldenrod: [238, 232, 170], 19357 palegreen: [152, 251, 152], 19358 paleturquoise: [175, 238, 238], 19359 palevioletred: [219, 112, 147], 19360 papayawhip: [255, 239, 213], 19361 peachpuff: [255, 218, 185], 19362 peru: [205, 133, 63], 19363 pink: [255, 192, 203], 19364 plum: [221, 160, 221], 19365 powderblue: [176, 224, 230], 19366 purple: [128, 0, 128], 19367 rebeccapurple: [102, 51, 153], 19368 red: [255, 0, 0], 19369 rosybrown: [188, 143, 143], 19370 royalblue: [65, 105, 225], 19371 saddlebrown: [139, 69, 19], 19372 salmon: [250, 128, 114], 19373 sandybrown: [244, 164, 96], 19374 seagreen: [46, 139, 87], 19375 seashell: [255, 245, 238], 19376 sienna: [160, 82, 45], 19377 silver: [192, 192, 192], 19378 skyblue: [135, 206, 235], 19379 slateblue: [106, 90, 205], 19380 slategray: [112, 128, 144], 19381 slategrey: [112, 128, 144], 19382 snow: [255, 250, 250], 19383 springgreen: [0, 255, 127], 19384 steelblue: [70, 130, 180], 19385 tan: [210, 180, 140], 19386 teal: [0, 128, 128], 19387 thistle: [216, 191, 216], 19388 tomato: [255, 99, 71], 19389 turquoise: [64, 224, 208], 19390 violet: [238, 130, 238], 19391 wheat: [245, 222, 179], 19392 white: [255, 255, 255], 19393 whitesmoke: [245, 245, 245], 19394 yellow: [255, 255, 0], 19395 yellowg
19395reen: [154, 205, 50], 19396 }; 19397 }, 19398 {}, 19399 ], 19400 7: [ 19401 function (t, e, n) { 19402 var i = t(28)(); 19403 t(26)(i), 19404 t(40)(i), 19405 t(22)(i), 19406 t(25)(i), 19407 t(30)(i), 19408 t(21)(i), 19409 t(23)(i), 19410 t(24)(i), 19411 t(29)(i), 19412 t(32)(i), 19413 t(33)(i), 19414 t(31)(i), 19415 t(27)(i), 19416 t(34)(i), 19417 t(35)(i), 19418 t(36)(i), 19419 t(37)(i), 19420 t(38)(i), 19421 t(46)(i), 19422 t(44)(i), 19423 t(45)(i), 19424 t(47)(i), 19425 t(48)(i), 19426 t(49)(i), 19427 t(15)(i), 19428 t(16)(i), 19429 t(17)(i), 19430 t(18)(i), 19431 t(19)(i), 19432 t(20)(i), 19433 t(8)(i), 19434 t(9)(i), 19435 t(10)(i), 19436 t(11)(i), 19437 t(12)(i), 19438 t(13)(i), 19439 t(14)(i); 19440 var a = []; 19441 a.push(t(41)(i), t(42)(i), t(43)(i)), i.plugins.register(a), (e.exports = i), "undefined" != typeof window && (window.Chart = i); 19442 }, 19443 { 19444 10: 10, 19445 11: 11, 19446 12: 12, 19447 13: 13, 19448 14: 14, 19449 15: 15, 19450 16: 16, 19451 17: 17, 19452 18: 18, 19453 19: 19, 19454 20: 20, 19455 21: 21, 19456 22: 22, 19457 23: 23, 19458 24: 24, 19459 25: 25, 19460 26: 26, 19461 27: 27, 19462 28: 28, 19463 29: 29, 19464 30: 30, 19465 31: 31, 19466 32: 32, 19467 33: 33, 19468 34: 34, 19469 35: 35, 19470 36: 36, 19471 37: 37, 19472 38: 38, 19473 40: 40, 19474 41: 41, 19475 42: 42, 19476 43: 43, 19477 44: 44, 19478 45: 45, 19479 46: 46, 19480 47: 47, 19481 48: 48, 19482 49: 49, 19483 8: 8, 19484 9: 9, 19485 }, 19486 ], 19487 8: [ 19488 function (t, e, n) { 19489 "use strict"; 19490 e.exports = function (t) { 19491 t.Bar = function (e, n) { 19492 return (n.type = "bar"), new t(e, n); 19493 }; 19494 }; 19495 }, 19496 {}, 19497 ], 19498 9: [ 19499 function (t, e, n) { 19500 "use strict"; 19501 e.exports = function (t) { 19502 t.Bubble = function (e, n) { 19503 return (n.type = "bubble"), new t(e, n); 19504 }; 19505 }; 19506 }, 19507 {}, 19508 ], 19509 10: [ 19510 function (t, e, n) { 19511 "use strict"; 19512 e.exports = function (t) { 19513 t.Doughnut = function (e, n) { 19514 return (n.type = "doughnut"), new t(e, n); 19515 }; 19516 }; 19517 }, 19518 {}, 19519 ], 19520 11: [ 19521 function (t, e, n) { 19522 "use strict"; 19523 e.exports = function (t) { 19524 t.Line = function (e, n) { 19525 return (n.type = "line"), new t(e, n); 19526 }; 19527 }; 19528 }, 19529 {}, 19530 ], 19531 12: [ 19532 function (t, e, n) { 19533 "use strict"; 19534 e.exports = function (t) { 19535 t.PolarArea = function (e, n) { 19536 return (n.type = "polarArea"), new t(e, n); 19537 }; 19538 }; 19539 }, 19540 {}, 19541 ], 19542 13: [ 19543 function (t, e, n) { 19544 "use strict"; 19545 e.exports = function (t) { 19546 t.Radar = function (e, n) { 19547 return (n.type = "radar"), new t(e, n); 19548 }; 19549 }; 19550 }, 19551 {}, 19552 ], 19553 14: [ 19554 function (t, e, n) { 19555 "use strict"; 19556 e.exports = function (t) { 19557 var e = { 19558 hover: { mode: "single" }, 19559 scales: { xAxes: [{ type: "linear", position: "bottom", id: "x-axis-1" }], yAxes: [{ type: "linear", position: "left", id: "y-axis-1" }] }, 19560 tooltips: { 19561 callbacks: { 19562 title: function () { 19563 return ""; 19564 }, 19565 label: function (t) { 19566 return "(" + t.xLabel + ", " + t.yLabel + ")"; 19567 }, 19568 }, 19569 }, 19570 }; 19571 (t.defaults.scatter = e), 19572 (t.controllers.scatter = t.controllers.line), 19573 (t.Scatter = function (e, n) { 19574 return (n.type = "scatter"), new t(e, n); 19575 }); 19576 }; 19577 }, 19578 {}, 19579 ], 19580 15: [ 19581 function (t, e, n) { 19582 "use strict"; 19583 e.exports = function (t) { 19584 var e = t.helpers; 19585 (t.defaults.bar = { hover: { mode: "label" }, scales: { xAxes: [{ type: "category", categoryPercentage: 0.8, barPercentage: 0.9, gridLines: { offsetGridLines: !0 } }], yAxes: [{ type: "linear" }] } }), 19586 (t.controllers.bar = t.DatasetController.extend({ 19587 dataElementType: t.elements.Rectangle, 19588 initialize: function () { 19589 var e, 19590 n = this; 19591 t.DatasetController.prototype.initialize.apply(n, arguments), (e = n.getMeta()), (e.stack = n.getDataset().stack), (e.bar = !0); 19592 }, 19593 update: function (t) { 19594 var e, 19595 n, 19596 i = this, 19597 a = i.getMeta().data; 19598 for (i._ruler = i.getRuler(), e = 0, n = a.length; e < n; ++e) i.updateElement(a[e], e, t); 19599 }, 19600 updateElement: function (t, n, i) { 19601 var a = this, 19602 o = a.chart, 19603 r = a.getMeta(), 19604 l = a.getDataset(), 19605 s = t.custom || {}, 19606 u = o.options.elements.rectangle; 19607 (t._xScale = a.getScaleForId(r.xAxisID)), 19608 (t._yScale = a.getScaleForId(r.yAxisID)), 19609 (t._datasetIndex = a.index), 19610 (t._index = n), 19611 (t._model = { 19612 datasetLabel: l.label, 19613 label: o.data.labels[n], 19614 borderSkipped: s.borderSkipped ? s.borderSkipped : u.borderSkipped, 19615 backgroundColor: s.backgroundColor ? s.backgroundColor : e.getValueAtIndexOrDefault(l.backgroundColor, n, u.backgroundColor), 19616 borderColor: s.borderColor ? s.borderColor : e.getValueAtIndexOrDefault(l.borderColor, n, u.borderColor), 19617 borderWidth: s.borderWidth ? s.borderWidth : e.getValueAtIndexOrDefault(l.borderWidth, n, u.borderWidth), 19618 }), 19619 a.updateElementGeometry(t, n, i), 19620 t.pivot(); 19621 }, 19622 updateElementGeometry: function (t, e, n) { 19623 var i = this, 19624 a = t._model, 19625 o = i.getValueScale(), 19626 r = o.getBasePixel(), 19627 l = o.isHorizontal(), 19628 s = i._ruler || i.getRuler(), 19629 u = i.calculateBarValuePixels(i.index, e), 19630 d = i.calculateBarIndexPixels(i.index, e, s); 19631 (a.horizontal = l), (a.base = n ? r : u.base), (a.x = l ? (n ? r : u.head) : d.center), (a.y = l ? d.center : n ? r : u.head), (a.height = l ? d.size : void 0), (a.width = l ? void 0 : d.size); 19632 }, 19633 getValueScaleId: function () { 19634 return this.getMeta().yAxisID; 19635 }, 19636 getIndexScaleId: function () { 19637 return this.getMeta().xAxisID; 19638 }, 19639 getValueScale: function () {
19640 return this.getScaleForId(this.getValueScaleId()); 19641 }, 19642 getIndexScale: function () { 19643 return this.getScaleForId(this.getIndexScaleId()); 19644 }, 19645 getStackCount: function (t) { 19646 var e, 19647 n, 19648 i = this, 19649 a = i.chart, 19650 o = i.getIndexScale(), 19651 r = o.options.stacked, 19652 l = void 0 === t ? a.data.datasets.length : t + 1, 19653 s = []; 19654 for (e = 0; e < l; ++e) 19655 (n = a.getDatasetMeta(e)), 19656 n.bar && a.isDatasetVisible(e) && (r === !1 || (r === !0 && s.indexOf(n.stack) === -1) || (void 0 === r && (void 0 === n.stack || s.indexOf(n.stack) === -1))) && s.push(n.stack); 19657 return s.length; 19658 }, 19659 getStackIndex: function (t) { 19660 return this.getStackCount(t) - 1; 19661 }, 19662 getRuler: function () { 19663 var t = this, 19664 n = t.getIndexScale(), 19665 i = n.options, 19666 a = t.getStackCount(), 19667 o = n.isHorizontal() ? n.width : n.height, 19668 r = o / n.ticks.length, 19669 l = r * i.categoryPercentage, 19670 s = l / a, 19671 u = s * i.barPercentage; 19672 return ( 19673 (u = Math.min(e.getValueOrDefault(i.barThickness, u), e.getValueOrDefault(i.maxBarThickness, 1 / 0))), 19674 { stackCount: a, tickSize: r, categorySize: l, categorySpacing: r - l, fullBarSize: s, barSize: u, barSpacing: s - u, scale: n } 19675 ); 19676 }, 19677 calculateBarValuePixels: function (t, e) { 19678 var n, 19679 i, 19680 a, 19681 o, 19682 r, 19683 l, 19684 s = this, 19685 u = s.chart, 19686 d = s.getMeta(), 19687 c = s.getValueScale(), 19688 h = u.data.datasets, 19689 f = Number(h[t].data[e]), 19690 g = c.options.stacked, 19691 p = d.stack, 19692 m = 0; 19693 if (g || (void 0 === g && void 0 !== p)) 19694 for (n = 0; n < t; ++n) 19695 (i = u.getDatasetMeta(n)), 19696 i.bar && i.stack === p && i.controller.getValueScaleId() === c.id && u.isDatasetVisible(n) && ((a = Number(h[n].data[e])), ((f < 0 && a < 0) || (f >= 0 && a > 0)) && (m += a)); 19697 return (o = c.getPixelForValue(m)), (r = c.getPixelForValue(m + f)), (l = (r - o) / 2), { size: l, base: o, head: r, center: r + l / 2 }; 19698 }, 19699 calculateBarIndexPixels: function (t, e, n) { 19700 var i = this, 19701 a = n.scale, 19702 o = i.chart.isCombo, 19703 r = i.getStackIndex(t), 19704 l = a.getPixelForValue(null, e, t, o), 19705 s = n.barSize; 19706 return (l -= o ? n.tickSize / 2 : 0), (l += n.fullBarSize * r), (l += n.categorySpacing / 2), (l += n.barSpacing / 2), { size: s, base: l, head: l + s, center: l + s / 2 }; 19707 }, 19708 draw: function () { 19709 var t, 19710 n = this, 19711 i = n.chart, 19712 a = n.getMeta().data, 19713 o = n.getDataset(), 19714 r = a.length, 19715 l = 0; 19716 for (e.canvas.clipArea(i.ctx, i.chartArea); l < r; ++l) (t = o.data[l]), null === t || void 0 === t || isNaN(t) || a[l].draw(); 19717 e.canvas.unclipArea(i.ctx); 19718 }, 19719 setHoverStyle: function (t) { 19720 var n = this.chart.data.datasets[t._datasetIndex], 19721 i = t._index, 19722 a = t.custom || {}, 19723 o = t._model; 19724 (o.backgroundColor = a.hoverBackgroun
19724dColor ? a.hoverBackgroundColor : e.getValueAtIndexOrDefault(n.hoverBackgroundColor, i, e.getHoverColor(o.backgroundColor))), 19725 (o.borderColor = a.hoverBorderColor ? a.hoverBorderColor : e.getValueAtIndexOrDefault(n.hoverBorderColor, i, e.getHoverColor(o.borderColor))), 19726 (o.borderWidth = a.hoverBorderWidth ? a.hoverBorderWidth : e.getValueAtIndexOrDefault(n.hoverBorderWidth, i, o.borderWidth)); 19727 }, 19728 removeHoverStyle: function (t) { 19729 var n = this.chart.data.datasets[t._datasetIndex], 19730 i = t._index, 19731 a = t.custom || {}, 19732 o = t._model, 19733 r = this.chart.options.elements.rectangle; 19734 (o.backgroundColor = a.backgroundColor ? a.backgroundColor : e.getValueAtIndexOrDefault(n.backgroundColor, i, r.backgroundColor)), 19735 (o.borderColor = a.borderColor ? a.borderColor : e.getValueAtIndexOrDefault(n.borderColor, i, r.borderColor)), 19736 (o.borderWidth = a.borderWidth ? a.borderWidth : e.getValueAtIndexOrDefault(n.borderWidth, i, r.borderWidth)); 19737 }, 19738 })), 19739 (t.defaults.horizontalBar = { 19740 hover: { mode: "label" }, 19741 scales: { xAxes: [{ type: "linear", position: "bottom" }], yAxes: [{ position: "left", type: "category", categoryPercentage: 0.8, barPercentage: 0.9, gridLines: { offsetGridLines: !0 } }] }, 19742 elements: { rectangle: { borderSkipped: "left" } }, 19743 tooltips: { 19744 callbacks: { 19745 title: function (t, e) { 19746 var n = ""; 19747 return t.length > 0 && (t[0].yLabel ? (n = t[0].yLabel) : e.labels.length > 0 && t[0].index < e.labels.length && (n = e.labels[t[0].index])), n; 19748 }, 19749 label: function (t, e) { 19750 var n = e.datasets[t.datasetIndex].label || ""; 19751 return n + ": " + t.xLabel; 19752 }, 19753 }, 19754 }, 19755 }), 19756 (t.controllers.horizontalBar = t.controllers.bar.extend({ 19757 getValueScaleId: function () { 19758 return this.getMeta().xAxisID; 19759 }, 19760 getIndexScaleId: function () { 19761 return this.getMeta().yAxisID; 19762 }, 19763 })); 19764 }; 19765 }, 19766 {}, 19767 ], 19768 16: [ 19769 function (t, e, n) { 19770 "use strict"; 19771 e.exports = function (t) { 19772 var e = t.helpers; 19773 (t.defaults.bubble = { 19774 hover: { mode: "single" }, 19775 scales: { xAxes: [{ type: "linear", position: "bottom", id: "x-axis-0" }], yAxes: [{ type: "linear", position: "left", id: "y-axis-0" }] }, 19776 tooltips: { 19777 callbacks: { 19778 title: function () { 19779 return ""; 19780 }, 19781 label: function (t, e) { 19782 var n = e.datasets[t.datasetIndex].label || "", 19783 i = e.datasets[t.datasetIndex].data[t.index]; 19784 return n + ": (" + t.xLabel + ", " + t.yLabel + ", " + i.r + ")"; 19785 }, 19786 }, 19787 }, 19788 }), 19789 (t.controllers.bubble = t.DatasetController.extend({ 19790 dataElementType: t.elements.Point, 19791 update: function (t) { 19792 var n = this, 19793 i = n.getMeta(), 19794 a = i.data; 19795 e.each(a, function (e, i) { 19796 n.updateElement(e, i, t); 19797 }); 19798 }, 19799 updateElement: function (n, i, a) { 19800 var o = this, 19801 r = o.getMeta(), 19802 l = o.getScaleForId(r.xAxisID), 19803 s = o.getScaleForId(r.yAxisID), 19804 u = n.custom || {}, 19805 d = o.getDataset(), 19806 c = d.data[i], 19807 h = o.chart.options.elements.point, 19808 f = o.index; 19809 e.extend(n, { 19810 _xScale: l, 19811 _yScale: s, 19812 _datasetIndex: f, 19813 _index: i, 19814 _model: { 19815 x: a ? l.getPixelForDecimal(0.5) : l.getPixelForValue("object" == typeof c ? c : NaN, i, f, o.chart.isCombo), 19816 y: a ? s.getBasePixel() : s.getPixelForValue(c, i, f), 19817 radius: a ? 0 : u.radius ? u.radius : o.getRadius(c), 19818 hitRadius: u.hitRadius ? u.hitRadius : e.getValueAtIndexOrDefault(d.hitRadius, i, h.hitRadius), 19819 }, 19820 }), 19821 t.DatasetController.prototype.removeHoverStyle.call(o, n, h); 19822 var g = n._model; 19823 (g.skip = u.skip ? u.skip : isNaN(g.x) || isNaN(g.y)), n.pivot(); 19824 }, 19825 getRadius: function (t) { 19826 return t.r || this.chart.options.elements.point.radius; 19827 }, 19828 setHoverStyle: function (n) { 19829 var i = this; 19830 t.DatasetController.prototype.setHoverStyle.call(i, n); 19831 var a = i.chart.data.datasets[n._datasetIndex], 19832 o = n._index, 19833 r = n.custom || {}, 19834 l = n._model; 19835 l.radius = r.hoverRadius ? r.hoverRadius : e.getValueAtIndexOrDefault(a.hoverRadius, o, i.chart.options.elements.point.hoverRadius) + i.getRadius(a.data[o]); 19836 }, 19837 removeHoverStyle: function (e) { 19838 var n = this; 19839 t.DatasetController.prototype.removeHoverStyle.call(n, e, n.chart.options.elements.point); 19840 var i = n.chart.data.datasets[e._datasetIndex].data[e._index], 19841 a = e.custom || {}, 19842 o = e._model; 19843 o.radius = a.radius ? a.radius : n.getRadius(i); 19844 }, 19845 })); 19846 }; 19847 }, 19848 {}, 19849 ], 19850 17: [ 19851 function (t, e, n) { 19852 "use strict"; 19853 e.exports = function (t) { 19854 var e = t.helpers, 19855 n = t.defaults; 19856 (n.doughnut = { 19857 animation: { animateRotate: !0, animateScale: !1 }, 19858 aspectRatio: 1, 19859 hover: { mode: "single" }, 19860 legendCallback: function (t) { 19861 var e = []; 19862 e.push('<ul class="' + t.id + '-legend">'); 19863 var n = t.data, 19864 i = n.datasets, 19865 a = n.labels; 19866 if (i.length) for (var o = 0; o < i[0].data.length; ++o) e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), a[o] && e.push(a[o]), e.push("</li>"); 19867 return e.push("</ul>"), e.join(""); 19868 }, 19869 legend: { 19870 labels: { 19871 generateLabels: function (t) { 19872 var n = t.data; 19873 return n.labels.length && n.datasets.length 19874 ? n.labels.map(function (i, a) { 19875 var o = t.getDatasetMeta(0), 19876 r = n.datasets[0], 19877 l = o.data[a], 19878 s = (l && l.custom) || {}, 19879 u = e.getValueAtIndexOrDefault, 19880 d = t.options.elements.ar
19880c, 19881 c = s.backgroundColor ? s.backgroundColor : u(r.backgroundColor, a, d.backgroundColor), 19882 h = s.borderColor ? s.borderColor : u(r.borderColor, a, d.borderColor), 19883 f = s.borderWidth ? s.borderWidth : u(r.borderWidth, a, d.borderWidth); 19884 return { text: i, fillStyle: c, strokeStyle: h, lineWidth: f, hidden: isNaN(r.data[a]) || o.data[a].hidden, index: a }; 19885 }) 19886 : []; 19887 }, 19888 }, 19889 onClick: function (t, e) { 19890 var n, 19891 i, 19892 a, 19893 o = e.index, 19894 r = this.chart; 19895 for (n = 0, i = (r.data.datasets || []).length; n < i; ++n) (a = r.getDatasetMeta(n)), a.data[o] && (a.data[o].hidden = !a.data[o].hidden); 19896 r.update(); 19897 }, 19898 }, 19899 cutoutPercentage: 50, 19900 rotation: Math.PI * -0.5, 19901 circumference: 2 * Math.PI, 19902 tooltips: { 19903 callbacks: { 19904 title: function () { 19905 return ""; 19906 }, 19907 label: function (t, n) { 19908 var i = n.labels[t.index], 19909 a = ": " + n.datasets[t.datasetIndex].data[t.index]; 19910 return e.isArray(i) ? ((i = i.slice()), (i[0] += a)) : (i += a), i; 19911 }, 19912 }, 19913 }, 19914 }), 19915 (n.pie = e.clone(n.doughnut)), 19916 e.extend(n.pie, { cutoutPercentage: 0 }), 19917 (t.controllers.doughnut = t.controllers.pie = t.DatasetController.extend({ 19918 dataElementType: t.elements.Arc, 19919 linkScales: e.noop, 19920 getRingIndex: function (t) { 19921 for (var e = 0, n = 0; n < t; ++n) this.chart.isDatasetVisible(n) && ++e; 19922 return e; 19923 }, 19924 update: function (t) { 19925 var n = this, 19926 i = n.chart, 19927 a = i.chartArea, 19928 o = i.options, 19929 r = o.elements.arc, 19930 l = a.right - a.left - r.borderWidth, 19931 s = a.bottom - a.top - r.borderWidth, 19932 u = Math.min(l, s), 19933 d = { x: 0, y: 0 }, 19934 c = n.getMeta(), 19935 h = o.cutoutPercentage, 19936 f = o.circumference; 19937 if (f < 2 * Math.PI) { 19938 var g = o.rotation % (2 * Math.PI); 19939 g += 2 * Math.PI * (g >= Math.PI ? -1 : g < -Math.PI ? 1 : 0); 19940 var p = g + f, 19941 m = { x: Math.cos(g), y: Math.sin(g) }, 19942 v = { x: Math.cos(p), y: Math.sin(p) }, 19943 b = (g <= 0 && 0 <= p) || (g <= 2 * Math.PI && 2 * Math.PI <= p), 19944 x = (g <= 0.5 * Math.PI && 0.5 * Math.PI <= p) || (g <= 2.5 * Math.PI && 2.5 * Math.PI <= p), 19945 y = (g <= -Math.PI && -Math.PI <= p) || (g <= Math.PI && Math.PI <= p), 19946 k = (g <= 0.5 * -Math.PI && 0.5 * -Math.PI <= p) || (g <= 1.5 * Math.PI && 1.5 * Math.PI <= p), 19947 w = h / 100, 19948 M = { x: y ? -1 : Math.min(m.x * (m.x < 0 ? 1 : w), v.x * (v.x < 0 ? 1 : w)), y: k ? -1 : Math.min(m.y * (m.y < 0 ? 1 : w), v.y * (v.y < 0 ? 1 : w)) }, 19949 S = { x: b ? 1 : Math.max(m.x * (m.x > 0 ? 1 : w), v.x * (v.x > 0 ? 1 : w)), y: x ? 1 : Math.max(m.y * (m.y > 0 ? 1 : w), v.y * (v.y > 0 ? 1 : w)) }, 19950 C = { width: 0.5 * (S.x - M.x), height: 0.5 * (S.y - M.y) }; 19951 (u = Math.min(l / C.width, s / C.height)), (d = { x: (S.x + M.x) * -0.5, y: (S.y + M.y) * -0.5 }); 19952 } 19953 (i.borderWidth = n.getMaxBorderWidth(c.data)), 19954 (i.outerRadius = Math.max((u - i.borderWidth) / 2, 0)), 19955 (i.innerRadius = Math.max(h ? (i.outerRadius / 100) * h : 0, 0)), 19956 (i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount()), 19957 (i.offsetX = d.x * i.outerRadius), 19958 (i.offsetY = d.y * i.outerRadius), 19959 (c.total = n.calculateTotal()), 19960 (n.outerRadius = i.outerRadius - i.radiusLength * n.getRingIndex(n.index)), 19961 (n.innerRadius = Math.max(n.outerRadius - i.radiusLength, 0)), 19962 e.each(c.data, function (e, i) { 19963 n.updateElement(e, i, t); 19964 }); 19965 }, 19966 updateElement: function (t, n, i) { 19967 var a = this, 19968 o = a.chart, 19969 r = o.chartArea, 19970 l = o.options, 19971 s = l.animation, 19972 u = (r.left + r.right) / 2, 19973 d = (r.top + r.bottom) / 2, 19974 c = l.rotation, 19975 h = l.rotation, 19976 f = a.getDataset(), 19977 g = i && s.animateRotate ? 0 : t.hidden ? 0 : a.calculateCircumference(f.data[n]) * (l.circumference / (2 * Math.PI)), 19978 p = i && s.animateScale ? 0 : a.innerRadius, 19979 m = i && s.animateScale ? 0 : a.outerRadius, 19980 v = e.getValueAtIndexOrDefault; 19981 e.extend(t, { 19982 _datasetIndex: a.index, 19983 _index: n, 19984 _model: { x: u + o.offsetX, y: d + o.offsetY, startAngle: c, endAngle: h, circumference: g, outerRadius: m, innerRadius: p, label: v(f.label, n, o.data.labels[n]) }, 19985 }); 19986 var b = t._model; 19987 this.removeHoverStyle(t), 19988 (i && s.animateRotate) || (0 === n ? (b.startAngle = l.rotation) : (b.startAngle = a.getMeta().data[n - 1]._model.endAngle), (b.endAngle = b.startAngle + b.circumference)), 19989 t.pivot(); 19990 }, 19991 removeHoverStyle: function (e) { 19992 t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.ar
19992c); 19993 }, 19994 calculateTotal: function () { 19995 var t, 19996 n = this.getDataset(), 19997 i = this.getMeta(), 19998 a = 0; 19999 return ( 20000 e.each(i.data, function (e, i) { 20001 (t = n.data[i]), isNaN(t) || e.hidden || (a += Math.abs(t)); 20002 }), 20003 a 20004 ); 20005 }, 20006 calculateCircumference: function (t) { 20007 var e = this.getMeta().total; 20008 return e > 0 && !isNaN(t) ? 2 * Math.PI * (t / e) : 0; 20009 }, 20010 getMaxBorderWidth: function (t) { 20011 for (var e, n, i = 0, a = this.index, o = t.length, r = 0; r < o; r++) 20012 (e = t[r]._model ? t[r]._model.borderWidth : 0), (n = t[r]._chart ? t[r]._chart.config.data.datasets[a].hoverBorderWidth : 0), (i = e > i ? e : i), (i = n > i ? n : i); 20013 return i; 20014 }, 20015 })); 20016 }; 20017 }, 20018 {}, 20019 ], 20020 18: [ 20021 function (t, e, n) { 20022 "use strict"; 20023 e.exports = function (t) { 20024 function e(t, e) { 20025 return n.getValueOrDefault(t.showLine, e.showLines); 20026 } 20027 var n = t.helpers; 20028 (t.defaults.line = { showLines: !0, spanGaps: !1, hover: { mode: "label" }, scales: { xAxes: [{ type: "category", id: "x-axis-0" }], yAxes: [{ type: "linear", id: "y-axis-0" }] } }), 20029 (t.controllers.line = t.DatasetController.extend({ 20030 datasetElementType: t.elements.Line, 20031 dataElementType: t.elements.Point, 20032 update: function (t) { 20033 var i, 20034 a, 20035 o, 20036 r = this, 20037 l = r.getMeta(), 20038 s = l.dataset, 20039 u = l.data || [], 20040 d = r.chart.options, 20041 c = d.elements.line, 20042 h = r.getScaleForId(l.yAxisID), 20043 f = r.getDataset(), 20044 g = e(f, d); 20045 for ( 20046 g && 20047 ((o = s.custom || {}), 20048 void 0 !== f.tension && void 0 === f.lineTension && (f.lineTension = f.tension), 20049 (s._scale = h), 20050 (s._datasetIndex = r.index), 20051 (s._children = u), 20052 (s._model = { 20053 spanGaps: f.spanGaps ? f.spanGaps : d.spanGaps, 20054 tension: o.tension ? o.tension : n.getValueOrDefault(f.lineTension, c.tension), 20055 backgroundColor: o.backgroundColor ? o.backgroundColor : f.backgroundColor || c.backgroundColor, 20056 borderWidth: o.borderWidth ? o.borderWidth : f.borderWidth || c.borderWidth, 20057 borderColor: o.borderColor ? o.borderColor : f.borderColor || c.borderColor, 20058 borderCapStyle: o.borderCapStyle ? o.borderCapStyle : f.borderCapStyle || c.borderCapStyle, 20059 borderDash: o.borderDash ? o.borderDash : f.borderDash || c.borderDash, 20060 borderDashOffset: o.borderDashOffset ? o.borderDashOffset : f.borderDashOffset || c.borderDashOffset, 20061 borderJoinStyle: o.borderJoinStyle ? o.borderJoinStyle : f.borderJoinStyle || c.borderJoinStyle, 20062 fill: o.fill ? o.fill : void 0 !== f.fill ? f.fill : c.fill, 20063 steppedLine: o.steppedLine ? o.steppedLine : n.getValueOrDefault(f.steppedLine, c.stepped), 20064 cubicInterpolationMode: o.cubicInterpolationMode ? o.cubicInterpolationMode : n.getValueOrDefault(f.cubicInterpolationMode, c.cubicInterpolationMode), 20065 }), 20066 s.pivot()), 20067 i = 0, 20068 a = u.length; 20069 i < a; 20070 ++i 20071 ) 20072 r.updateElement(u[i], i, t); 20073 for (g && 0 !== s._model.tension && r.updateBezierControlPoints(), i = 0, a = u.length; i < a; ++i) u[i].pivot(); 20074 },
20075 getPointBackgroundColor: function (t, e) { 20076 var i = this.chart.options.elements.point.backgroundColor, 20077 a = this.getDataset(), 20078 o = t.custom || {}; 20079 return o.backgroundColor ? (i = o.backgroundColor) : a.pointBackgroundColor ? (i = n.getValueAtIndexOrDefault(a.pointBackgroundColor, e, i)) : a.backgroundColor && (i = a.backgroundColor), i; 20080 }, 20081 getPointBorderColor: function (t, e) { 20082 var i = this.chart.options.elements.point.borderColor, 20083 a = this.getDataset(), 20084 o = t.custom || {}; 20085 return o.borderColor ? (i = o.borderColor) : a.pointBorderColor ? (i = n.getValueAtIndexOrDefault(a.pointBorderColor, e, i)) : a.borderColor && (i = a.borderColor), i; 20086 }, 20087 getPointBorderWidth: function (t, e) { 20088 var i = this.chart.options.elements.point.borderWidth, 20089 a = this.getDataset(), 20090 o = t.custom || {}; 20091 return isNaN(o.borderWidth) ? (isNaN(a.pointBorderWidth) ? isNaN(a.borderWidth) || (i = a.borderWidth) : (i = n.getValueAtIndexOrDefault(a.pointBorderWidth, e, i))) : (i = o.borderWidth), i; 20092 }, 20093 updateElement: function (t, e, i) { 20094 var a, 20095 o, 20096 r = this, 20097 l = r.getMeta(), 20098 s = t.custom || {}, 20099 u = r.getDataset(), 20100 d = r.index, 20101 c = u.data[e], 20102 h = r.getScaleForId(l.yAxisID), 20103 f = r.getScaleForId(l.xAxisID), 20104 g = r.chart.options.elements.point, 20105 p = r.chart.data.labels || [], 20106 m = 1 === p.length || 1 === u.data.length || r.chart.isCombo; 20107 void 0 !== u.radius && void 0 === u.pointRadius && (u.pointRadius = u.radius), 20108 void 0 !== u.hitRadius && void 0 === u.pointHitRadius && (u.pointHitRadius = u.hitRadius), 20109 (a = f.getPixelForValue("object" == typeof c ? c : NaN, e, d, m)), 20110 (o = i ? h.getBasePixel() : r.calculatePointY(c, e, d)), 20111 (t._xScale = f), 20112 (t._yScale = h), 20113 (t._datasetIndex = d), 20114 (t._index = e), 20115 (t._model = { 20116 x: a, 20117 y: o, 20118 skip: s.skip || isNaN(a) || isNaN(o), 20119 radius: s.radius || n.getValueAtIndexOrDefault(u.pointRadius, e, g.radius), 20120 pointStyle: s.pointStyle || n.getValueAtIndexOrDefault(u.pointStyle, e, g.pointStyle), 20121 backgroundColor: r.getPointBackgroun
20121dColor(t, e), 20122 borderColor: r.getPointBorderColor(t, e), 20123 borderWidth: r.getPointBorderWidth(t, e), 20124 tension: l.dataset._model ? l.dataset._model.tension : 0, 20125 steppedLine: !!l.dataset._model && l.dataset._model.steppedLine, 20126 hitRadius: s.hitRadius || n.getValueAtIndexOrDefault(u.pointHitRadius, e, g.hitRadius), 20127 }); 20128 }, 20129 calculatePointY: function (t, e, n) { 20130 var i, 20131 a, 20132 o, 20133 r = this, 20134 l = r.chart, 20135 s = r.getMeta(), 20136 u = r.getScaleForId(s.yAxisID), 20137 d = 0, 20138 c = 0; 20139 if (u.options.stacked) { 20140 for (i = 0; i < n; i++) 20141 if (((a = l.data.datasets[i]), (o = l.getDatasetMeta(i)), "line" === o.type && o.yAxisID === u.id && l.isDatasetVisible(i))) { 20142 var h = Number(u.getRightValue(a.data[e])); 20143 h < 0 ? (c += h || 0) : (d += h || 0); 20144 } 20145 var f = Number(u.getRightValue(t)); 20146 return f < 0 ? u.getPixelForValue(c + f) : u.getPixelForValue(d + f); 20147 } 20148 return u.getPixelForValue(t); 20149 }, 20150 updateBezierControlPoints: function () { 20151 function t(t, e, n) { 20152 return Math.max(Math.min(t, n), e); 20153 } 20154 var e, 20155 i, 20156 a, 20157 o, 20158 r, 20159 l = this, 20160 s = l.getMeta(), 20161 u = l.chart.chartArea, 20162 d = s.data || []; 20163 if ( 20164 (s.dataset._model.spanGaps && 20165 (d = d.filter(function (t) { 20166 return !t._model.skip; 20167 })), 20168 "monotone" === s.dataset._model.cubicInterpolationMode) 20169 ) 20170 n.splineCurveMonotone(d); 20171 else 20172 for (e = 0, i = d.length; e < i; ++e) 20173 (a = d[e]), 20174 (o = a._model), 20175 (r = n.splineCurve(n.previousItem(d, e)._model, o, n.nextItem(d, e)._model, s.dataset._model.tension)), 20176 (o.controlPointPreviousX = r.previous.x), 20177 (o.controlPointPreviousY = r.previous.y), 20178 (o.controlPointNextX = r.next.x), 20179 (o.controlPointNextY = r.next.y); 20180 if (l.chart.options.elements.line.capBezierPoints) 20181 for (e = 0, i = d.length; e < i; ++e) 20182 (o = d[e]._model), 20183 (o.controlPointPreviousX = t(o.controlPointPreviousX, u.left, u.right)), 20184 (o.controlPointPreviousY = t(o.controlPointPreviousY, u.top, u.bottom)), 20185 (o.controlPointNextX = t(o.controlPointNextX, u.left, u.right)), 20186 (o.controlPointNextY = t(o.controlPointNextY, u.top, u.bottom)); 20187 }, 20188 draw: function () { 20189 var n = this, 20190 i = n.chart, 20191 a = n.getMeta(), 20192 o = a.data || [], 20193 r = i.chartArea, 20194 l = o.length, 20195 s = 0; 20196 for (t.canvasHelpers.clipArea(i.ctx, r), e(n.getDataset(), i.options) && a.dataset.draw(), t.canvasHelpers.unclipArea(i.ctx); s < l; ++s) o[s].draw(r); 20197 }, 20198 setHoverStyle: function (t) { 20199 var e = this.chart.data.datasets[t._datasetIndex], 20200 i = t._index, 20201 a = t.custom || {}, 20202 o = t._model; 20203 (o.radius = a.hoverRadius || n.getValueAtIndexOrDefault(e.pointHoverRadius, i, this.chart.options.elements.point.hoverRadius)), 20204 (o.backgroundColor = a.hoverBackgroun
20204dColor || n.getValueAtIndexOrDefault(e.pointHoverBackgroundColor, i, n.getHoverColor(o.backgroundColor))), 20205 (o.borderColor = a.hoverBorderColor || n.getValueAtIndexOrDefault(e.pointHoverBorderColor, i, n.getHoverColor(o.borderColor))), 20206 (o.borderWidth = a.hoverBorderWidth || n.getValueAtIndexOrDefault(e.pointHoverBorderWidth, i, o.borderWidth)); 20207 }, 20208 removeHoverStyle: function (t) { 20209 var e = this, 20210 i = e.chart.data.datasets[t._datasetIndex], 20211 a = t._index, 20212 o = t.custom || {}, 20213 r = t._model; 20214 void 0 !== i.radius && void 0 === i.pointRadius && (i.pointRadius = i.radius), 20215 (r.radius = o.radius || n.getValueAtIndexOrDefault(i.pointRadius, a, e.chart.options.elements.point.radius)), 20216 (r.backgroundColor = e.getPointBackgroun
20216dColor(t, a)), 20217 (r.borderColor = e.getPointBorderColor(t, a)), 20218 (r.borderWidth = e.getPointBorderWidth(t, a)); 20219 }, 20220 })); 20221 }; 20222 }, 20223 {}, 20224 ], 20225 19: [ 20226 function (t, e, n) { 20227 "use strict"; 20228 e.exports = function (t) { 20229 var e = t.helpers; 20230 (t.defaults.polarArea = { 20231 scale: { type: "radialLinear", angleLines: { display: !1 }, gridLines: { circular: !0 }, pointLabels: { display: !1 }, ticks: { beginAtZero: !0 } }, 20232 animation: { animateRotate: !0, animateScale: !0 }, 20233 startAngle: -0.5 * Math.PI, 20234 aspectRatio: 1, 20235 legendCallback: function (t) { 20236 var e = []; 20237 e.push('<ul class="' + t.id + '-legend">'); 20238 var n = t.data, 20239 i = n.datasets, 20240 a = n.labels; 20241 if (i.length) for (var o = 0; o < i[0].data.length; ++o) e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), a[o] && e.push(a[o]), e.push("</li>"); 20242 return e.push("</ul>"), e.join(""); 20243 }, 20244 legend: { 20245 labels: { 20246 generateLabels: function (t) { 20247 var n = t.data; 20248 return n.labels.length && n.datasets.length 20249 ? n.labels.map(function (i, a) { 20250 var o = t.getDatasetMeta(0), 20251 r = n.datasets[0], 20252 l = o.data[a], 20253 s = l.custom || {}, 20254 u = e.getValueAtIndexOrDefault, 20255 d = t.options.elements.arc, 20256 c = s.backgroundColor ? s.backgroundColor : u(r.backgroundColor, a, d.backgroundColor), 20257 h = s.borderColor ? s.borderColor : u(r.borderColor, a, d.borderColor), 20258 f = s.borderWidth ? s.borderWidth : u(r.borderWidth, a, d.borderWidth); 20259 return { text: i, fillStyle: c, strokeStyle: h, lineWidth: f, hidden: isNaN(r.data[a]) || o.data[a].hidden, index: a }; 20260 }) 20261 : []; 20262 }, 20263 }, 20264 onClick: function (t, e) { 20265 var n, 20266 i, 20267 a, 20268 o = e.index, 20269 r = this.chart; 20270 for (n = 0, i = (r.data.datasets || []).length; n < i; ++n) (a = r.getDatasetMeta(n)), (a.data[o].hidden = !a.data[o].hidden); 20271 r.update(); 20272 }, 20273 }, 20274 tooltips: { 20275 callbacks: { 20276 title: function () { 20277 return ""; 20278 }, 20279 label: function (t, e) { 20280 return e.labels[t.index] + ": " + t.yLabel; 20281 }, 20282 }, 20283 }, 20284 }), 20285 (t.controllers.polarArea = t.DatasetController.extend({ 20286 dataElementType: t.elements.Arc, 20287 linkScales: e.noop, 20288 update: function (t) { 20289 var n = this, 20290 i = n.chart, 20291 a = i.chartArea, 20292 o = n.getMeta(), 20293 r = i.options,
20294 l = r.elements.arc, 20295 s = Math.min(a.right - a.left, a.bottom - a.top); 20296 (i.outerRadius = Math.max((s - l.borderWidth / 2) / 2, 0)), 20297 (i.innerRadius = Math.max(r.cutoutPercentage ? (i.outerRadius / 100) * r.cutoutPercentage : 1, 0)), 20298 (i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount()), 20299 (n.outerRadius = i.outerRadius - i.radiusLength * n.index), 20300 (n.innerRadius = n.outerRadius - i.radiusLength), 20301 (o.count = n.countVisibleElements()), 20302 e.each(o.data, function (e, i) { 20303 n.updateElement(e, i, t); 20304 }); 20305 }, 20306 updateElement: function (t, n, i) { 20307 for ( 20308 var a = this, 20309 o = a.chart, 20310 r = a.getDataset(), 20311 l = o.options, 20312 s = l.animation, 20313 u = o.scale, 20314 d = e.getValueAtIndexOrDefault, 20315 c = o.data.labels, 20316 h = a.calculateCircumference(r.data[n]), 20317 f = u.xCenter, 20318 g = u.yCenter, 20319 p = 0, 20320 m = a.getMeta(), 20321 v = 0; 20322 v < n; 20323 ++v 20324 ) 20325 isNaN(r.data[v]) || m.data[v].hidden || ++p; 20326 var b = l.startAngle, 20327 x = t.hidden ? 0 : u.getDistanceFromCenterForValue(r.data[n]), 20328 y = b + h * p, 20329 k = y + (t.hidden ? 0 : h), 20330 w = s.animateScale ? 0 : u.getDistanceFromCenterForValue(r.data[n]); 20331 e.extend(t, { 20332 _datasetIndex: a.index, 20333 _index: n, 20334 _scale: u, 20335 _model: { x: f, y: g, innerRadius: 0, outerRadius: i ? w : x, startAngle: i && s.animateRotate ? b : y, endAngle: i && s.animateRotate ? b : k, label: d(c, n, c[n]) }, 20336 }), 20337 a.removeHoverStyle(t), 20338 t.pivot(); 20339 }, 20340 removeHoverStyle: function (e) { 20341 t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc); 20342 }, 20343 countVisibleElements: function () { 20344 var t = this.getDataset(), 20345 n = this.getMeta(), 20346 i = 0; 20347 return ( 20348 e.each(n.data, function (e, n) { 20349 isNaN(t.data[n]) || e.hidden || i++; 20350 }), 20351 i 20352 ); 20353 }, 20354 calculateCircumference: function (t) { 20355 var e = this.getMeta().count; 20356 return e > 0 && !isNaN(t) ? (2 * Math.PI) / e : 0; 20357 }, 20358 })); 20359 }; 20360 }, 20361 {}, 20362 ], 20363 20: [ 20364 function (t, e, n) { 20365 "use strict"; 20366 e.exports = function (t) { 20367 var e = t.helpers; 20368 (t.defaults.radar = { aspectRatio: 1, scale: { type: "radialLinear" }, elements: { line: { tension: 0 } } }), 20369 (t.controllers.radar = t.DatasetController.extend({ 20370 datasetElementType: t.elements.Line, 20371 dataElementType: t.elements.Point, 20372 linkScales: e.noop, 20373 update: function (t) { 20374 var n = this, 20375 i = n.getMeta(), 20376 a = i.dataset, 20377 o = i.data,
vendor: 4,106 bytes, lines 20378-20428
20378 r = a.custom || {}, 20379 l = n.getDataset(), 20380 s = n.chart.options.elements.line, 20381 u = n.chart.scale; 20382 void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), 20383 e.extend(i.dataset, { 20384 _datasetIndex: n.index, 20385 _scale: u, 20386 _children: o, 20387 _loop: !0, 20388 _model: { 20389 tension: r.tension ? r.tension : e.getValueOrDefault(l.lineTension, s.tension), 20390 backgroundColor: r.backgroundColor ? r.backgroundColor : l.backgroundColor || s.backgroundColor, 20391 borderWidth: r.borderWidth ? r.borderWidth : l.borderWidth || s.borderWidth, 20392 borderColor: r.borderColor ? r.borderColor : l.borderColor || s.borderColor, 20393 fill: r.fill ? r.fill : void 0 !== l.fill ? l.fill : s.fill, 20394 borderCapStyle: r.borderCapStyle ? r.borderCapStyle : l.borderCapStyle || s.borderCapStyle, 20395 borderDash: r.borderDash ? r.borderDash : l.borderDash || s.borderDash, 20396 borderDashOffset: r.borderDashOffset ? r.borderDashOffset : l.borderDashOffset || s.borderDashOffset, 20397 borderJoinStyle: r.borderJoinStyle ? r.borderJoinStyle : l.borderJoinStyle || s.borderJoinStyle, 20398 }, 20399 }), 20400 i.dataset.pivot(), 20401 e.each( 20402 o, 20403 function (e, i) { 20404 n.updateElement(e, i, t); 20405 }, 20406 n 20407 ), 20408 n.updateBezierControlPoints(); 20409 }, 20410 updateElement: function (t, n, i) { 20411 var a = this, 20412 o = t.custom || {}, 20413 r = a.getDataset(), 20414 l = a.chart.scale, 20415 s = a.chart.options.elements.point, 20416 u = l.getPointPositionForValue(n, r.data[n]); 20417 void 0 !== r.radius && void 0 === r.pointRadius && (r.pointRadius = r.radius), 20418 void 0 !== r.hitRadius && void 0 === r.pointHitRadius && (r.pointHitRadius = r.hitRadius), 20419 e.extend(t, { 20420 _datasetIndex: a.index, 20421 _index: n, 20422 _scale: l, 20423 _model: { 20424 x: i ? l.xCenter : u.x, 20425 y: i ? l.yCenter : u.y, 20426 tension: o.tension ? o.tension : e.getValueOrDefault(r.lineTension, a.chart.options.elements.line.tension), 20427 radius: o.radius ? o.radius : e.getValueAtIndexOrDefault(r.pointRadius, n, s.radius), 20428 backgroundColor: o.backgroundColor ? o.backgroundColor : e.getValueAtIndexOrDefault(r.pointBackgroun
20428dColor, n, s.backgroundColor), 20429 borderColor: o.borderColor ? o.borderColor : e.getValueAtIndexOrDefault(r.pointBorderColor, n, s.borderColor), 20430 borderWidth: o.borderWidth ? o.borderWidth : e.getValueAtIndexOrDefault(r.pointBorderWidth, n, s.borderWidth), 20431 pointStyle: o.pointStyle ? o.pointStyle : e.getValueAtIndexOrDefault(r.pointStyle, n, s.pointStyle), 20432 hitRadius: o.hitRadius ? o.hitRadius : e.getValueAtIndexOrDefault(r.pointHitRadius, n, s.hitRadius), 20433 }, 20434 }), 20435 (t._model.skip = o.skip ? o.skip : isNaN(t._model.x) || isNaN(t._model.y)); 20436 }, 20437 updateBezierControlPoints: function () { 20438 var t = this.chart.chartArea, 20439 n = this.getMeta(); 20440 e.each(n.data, function (i, a) { 20441 var o = i._model, 20442 r = e.splineCurve(e.previousItem(n.data, a, !0)._model, o, e.nextItem(n.data, a, !0)._model, o.tension); 20443 (o.controlPointPreviousX = Math.max(Math.min(r.previous.x, t.right), t.left)), 20444 (o.controlPointPreviousY = Math.max(Math.min(r.previous.y, t.bottom), t.top)), 20445 (o.controlPointNextX = Math.max(Math.min(r.next.x, t.right), t.left)), 20446 (o.controlPointNextY = Math.max(Math.min(r.next.y, t.bottom), t.top)), 20447 i.pivot(); 20448 }); 20449 }, 20450 setHoverStyle: function (t) { 20451 var n = this.chart.data.datasets[t._datasetIndex], 20452 i = t.custom || {}, 20453 a = t._index, 20454 o = t._model; 20455 (o.radius = i.hoverRadius ? i.hoverRadius : e.getValueAtIndexOrDefault(n.pointHoverRadius, a, this.chart.options.elements.point.hoverRadius)), 20456 (o.backgroundColor = i.hoverBackgroundColor ? i.hoverBackgroundColor : e.getValueAtIndexOrDefault(n.pointHoverBackgroundColor, a, e.getHoverColor(o.backgroundColor))), 20457 (o.borderColor = i.hoverBorderColor ? i.hoverBorderColor : e.getValueAtIndexOrDefault(n.pointHoverBorderColor, a, e.getHoverColor(o.borderColor))), 20458 (o.borderWidth = i.hoverBorderWidth ? i.hoverBorderWidth : e.getValueAtIndexOrDefault(n.pointHoverBorderWidth, a, o.borderWidth)); 20459 }, 20460 removeHoverStyle: function (t) { 20461 var n = this.chart.data.datasets[t._datasetIndex], 20462 i = t.custom || {}, 20463 a = t._index, 20464 o = t._model, 20465 r = this.chart.options.elements.point; 20466 (o.radius = i.radius ? i.radius : e.getValueAtIndexOrDefault(n.pointRadius, a, r.radius)), 20467 (o.backgroundColor = i.backgroundColor ? i.backgroundColor : e.getValueAtIndexOrDefault(n.pointBackgroun
20467dColor, a, r.backgroundColor)), 20468 (o.borderColor = i.borderColor ? i.borderColor : e.getValueAtIndexOrDefault(n.pointBorderColor, a, r.borderColor)), 20469 (o.borderWidth = i.borderWidth ? i.borderWidth : e.getValueAtIndexOrDefault(n.pointBorderWidth, a, r.borderWidth)); 20470 }, 20471 })); 20472 }; 20473 }, 20474 {}, 20475 ], 20476 21: [ 20477 function (t, e, n) { 20478 "use strict"; 20479 e.exports = function (t) { 20480 var e = t.helpers; 20481 (t.defaults.global.animation = { duration: 1e3, easing: "easeOutQuart", onProgress: e.noop, onComplete: e.noop }), 20482 (t.Animation = t.Element.extend({ chart: null, currentStep: 0, numSteps: 60, easing: "", render: null, onAnimationProgress: null, onAnimationComplete: null })), 20483 (t.animationService = { 20484 frameDuration: 17, 20485 animations: [], 20486 dropFrames: 0, 20487 request: null, 20488 addAnimation: function (t, e, n, i) { 20489 var a, 20490 o, 20491 r = this.animations; 20492 for (e.chart = t, i || (t.animating = !0), a = 0, o = r.length; a < o; ++a) if (r[a].chart === t) return void (r[a] = e); 20493 r.push(e), 1 === r.length && this.requestAnimationFrame(); 20494 }, 20495 cancelAnimation: function (t) { 20496 var n = e.findIndex(this.animations, function (e) { 20497 return e.chart === t; 20498 }); 20499 n !== -1 && (this.animations.splice(n, 1), (t.animating = !1)); 20500 }, 20501 requestAnimationFrame: function () { 20502 var t = this; 20503 null === t.request && 20504 (t.request = e.requestAnimFrame.call(window, function () { 20505 (t.request = null), t.startDigest(); 20506 })); 20507 }, 20508 startDigest: function () { 20509 var t = this, 20510 e = Date.now(), 20511 n = 0; 20512 t.dropFrames > 1 && ((n = Math.floor(t.dropFrames)), (t.dropFrames = t.dropFrames % 1)), t.advance(1 + n); 20513 var i = Date.now(); 20514 (t.dropFrames += (i - e) / t.frameDuration), t.animations.length > 0 && t.requestAnimationFrame(); 20515 }, 20516 advance: function (t) { 20517 for (var n, i, a = this.animations, o = 0; o < a.length; ) 20518 (n = a[o]), 20519 (i = n.chart), 20520 (n.currentStep = (n.currentStep || 0) + t), 20521 (n.currentStep = Math.min(n.currentStep, n.numSteps)), 20522 e.callback(n.render, [i, n], i), 20523 e.callback(n.onAnimationProgress, [n], i), 20524 n.currentStep >= n.numSteps ? (e.callback(n.onAnimationComplete, [n], i), (i.animating = !1), a.splice(o, 1)) : ++o; 20525 }, 20526 }), 20527 Object.defineProperty(t.Animation.prototype, "animationObject", { 20528 get: function () { 20529 return this; 20530 }, 20531 }), 20532 Object.defineProperty(t.Animation.prototype, "chartInstance", { 20533 get: function () { 20534 return this.chart; 20535 }, 20536 set: function (t) { 20537 this.chart = t; 20538 }, 20539 }); 20540 }; 20541 }, 20542 {}, 20543 ], 20544 22: [ 20545 function (t, e, n) { 20546 "use strict"; 20547 e.exports = function (t) { 20548 var e = (t.canvasHelpers = {}); 20549 (e.drawPoint = function (e, n, i, a, o) { 20550 var r, l, s, u, d, c; 20551 if ("object" == typeof n && ((r = n.toString()), "[object HTMLImageElement]" === r || "[object HTMLCanvasElement]" === r)) return void e.drawImage(n, a - n.width / 2, o - n.height / 2, n.width, n.height); 20552 if (!(isNaN(i) || i <= 0)) { 20553 switch (n) { 20554 default: 20555 e.beginPath(), e.arc(a, o, i, 0, 2 * Math.PI), e.closePath(), e.fill(); 20556 break; 20557 case "triangle": 20558 e.beginPath(), (l = (3 * i) / Math.sqrt(3)), (d = (l * Math.sqrt(3)) / 2), e.moveTo(a - l / 2, o + d / 3), e.lineTo(a + l / 2, o + d / 3), e.lineTo(a, o - (2 * d) / 3), e.closePath(), e.fill(); 20559 break; 20560 case "rect": 20561 (c = (1 / Math.SQRT2) * i), e.beginPath(), e.fillRect(a - c, o - c, 2 * c, 2 * c), e.strokeRect(a - c, o - c, 2 * c, 2 * c); 20562 break; 20563 case "rectRounded": 20564 var h = i / Math.SQRT2, 20565 f = a - h, 20566 g = o - h, 20567 p = Math.SQRT2 * i; 20568 t.helpers.drawRoundedRectangle(e, f, g, p, p, i / 2), e.fill(); 20569 break; 20570 case "rectRot": 20571 (c = (1 / Math.SQRT2) * i), e.beginPath(), e.moveTo(a - c, o), e.lineTo(a, o + c), e.lineTo(a + c, o), e.lineTo(a, o - c), e.closePath(), e.fill(); 20572 break; 20573 case "cross": 20574 e.beginPath(), e.moveTo(a, o + i), e.lineTo(a, o - i), e.moveTo(a - i, o), e.lineTo(a + i, o), e.closePath(); 20575 break; 20576 case "crossRot": 20577 e.beginPath(), (s = Math.cos(Math.PI / 4) * i), (u = Math.sin(Math.PI / 4) * i), e.moveTo(a - s, o - u), e.lineTo(a + s, o + u), e.moveTo(a - s, o + u), e.lineTo(a + s, o - u), e.closePath(); 20578 break; 20579 case "star": 20580 e.beginPath(), 20581 e.moveTo(a, o + i), 20582 e.lineTo(a, o - i), 20583 e.moveTo(a - i, o), 20584 e.lineTo(a + i, o), 20585 (s = Math.cos(Math.PI / 4) * i), 20586 (u = Math.sin(Math.PI / 4) * i), 20587 e.moveTo(a - s, o - u), 20588 e.lineTo(a + s, o + u), 20589 e.moveTo(a - s, o + u), 20590 e.lineTo(a + s, o - u), 20591 e.closePath(); 20592 break; 20593 case "line": 20594 e.beginPath(), e.moveTo(a - i, o), e.lineTo(a + i, o), e.closePath(); 20595 break; 20596 case "dash": 20597 e.beginPath(), e.moveTo(a, o), e.lineTo(a + i, o), e.closePath(); 20598 } 20599 e.stroke(); 20600 } 20601 }), 20602 (e.clipArea = function (t, e) { 20603 t.save(), t.beginPath(), t.rect(e.left, e.to
20603p, e.right - e.left, e.bottom - e.top), t.clip(); 20604 }), 20605 (e.unclipArea = function (t) { 20606 t.restore(); 20607 }), 20608 (e.lineTo = function (t, e, n, i) { 20609 return n.steppedLine 20610 ? ("after" === n.steppedLine ? t.lineTo(e.x, n.y) : t.lineTo(n.x, e.y), void t.lineTo(n.x, n.y)) 20611 : n.tension 20612 ? void t.bezierCurveTo( 20613 i ? e.controlPointPreviousX : e.controlPointNextX, 20614 i ? e.controlPointPreviousY : e.controlPointNextY, 20615 i ? n.controlPointNextX : n.controlPointPreviousX, 20616 i ? n.controlPointNextY : n.controlPointPreviousY, 20617 n.x, 20618 n.y 20619 ) 20620 : void t.lineTo(n.x, n.y); 20621 }), 20622 (t.helpers.canvas = e); 20623 }; 20624 }, 20625 {}, 20626 ], 20627 23: [ 20628 function (t, e, n) { 20629 "use strict"; 20630 e.exports = function (t) { 20631 function e(e) { 20632 e = e || {}; 20633 var n = (e.data = e.data || {}); 20634 return (n.datasets = n.datasets || []), (n.labels = n.labels || []), (e.options = a.configMerge(t.defaults.global, t.defaults[e.type], e.options || {})), e; 20635 } 20636 function n(t) { 20637 var e = t.options; 20638 e.scale 20639 ? (t.scale.options = e.scale) 20640 : e.scales && 20641 e.scales.xAxes.concat(e.scales.yAxes).forEach(function (e) { 20642 t.scales[e.id].options = e; 20643 }), 20644 (t.tooltip._options = e.tooltips); 20645 } 20646 function i(t) { 20647 return "top" === t || "bottom" === t; 20648 } 20649 var a = t.helpers, 20650 o = t.plugins, 20651 r = t.platform; 20652 (t.types = {}), 20653 (t.instances = {}), 20654 (t.controllers = {}), 20655 a.extend(t.prototype, { 20656 construct: function (n, i) { 20657 var o = this; 20658 i = e(i); 20659 var l = r.acquireContext(n, i), 20660 s = l && l.canvas, 20661 u = s && s.height, 20662 d = s && s.width; 20663 return ( 20664 (o.id = a.uid()), 20665 (o.ctx = l), 20666 (o.canvas = s), 20667 (o.config = i), 20668 (o.width = d), 20669 (o.height = u), 20670 (o.aspectRatio = u ? d / u : null), 20671 (o.options = i.options), 20672 (o._bufferedRender = !1), 20673 (o.chart = o), 20674 (o.controller = o), 20675 (t.instances[o.id] = o), 20676 Object.defineProperty(o, "data", { 20677 get: function () { 20678 return o.config.data; 20679 }, 20680 set: function (t) { 20681 o.config.data = t; 20682 }, 20683 }), 20684 l && s ? (o.initialize(), void o.update()) : void console.error("Failed to create chart: can't acquire context from the given item") 20685 ); 20686 }, 20687 initialize: function () { 20688 var t = this; 20689 return o.notify(t, "beforeInit"), a.retinaScale(t), t.bindEvents(), t.options.responsive && t.resize(!0), t.ensureScalesHaveIDs(), t.buildScales(), t.initToolTip(), o.notify(t, "afterInit"), t; 20690 }, 20691 clear: function () { 20692 return a.clear(this), this; 20693 }, 20694 stop: function () { 20695 return t.animationService.cancelAnimation(this), this; 20696 }, 20697 resize: function (t) { 20698 var e = this, 20699 n = e.options, 20700 i = e.canvas, 20701 r = (n.maintainAspectRatio && e.aspectRatio) || null, 20702 l = Math.floor(a.getMaximumWidth(i)), 20703 s = Math.floor(r ? l / r : a.getMaximumHeight(i)); 20704 if ((e.width !== l || e.height !== s) && ((i.width = e.width = l), (i.height = e.height = s), (i.style.width = l + "px"), (i.style.height = s + "px"), a.retinaScale(e), !t)) { 20705 var u = { width: l, height: s }; 20706 o.notify(e, "resize", [u]), e.o
20706ptions.onResize && e.options.onResize(e, u), e.stop(), e.update(e.options.responsiveAnimationDuration); 20707 } 20708 }, 20709 ensureScalesHaveIDs: function () { 20710 var t = this.options, 20711 e = t.scales || {}, 20712 n = t.scale; 20713 a.each(e.xAxes, function (t, e) { 20714 t.id = t.id || "x-axis-" + e; 20715 }), 20716 a.each(e.yAxes, function (t, e) { 20717 t.id = t.id || "y-axis-" + e; 20718 }), 20719 n && (n.id = n.id || "scale"); 20720 }, 20721 buildScales: function () { 20722 var e = this, 20723 n = e.options, 20724 o = (e.scales = {}), 20725 r = []; 20726 n.scales && 20727 (r = r.concat( 20728 (n.scales.xAxes || []).map(function (t) { 20729 return { options: t, dtype: "category", dposition: "bottom" }; 20730 }), 20731 (n.scales.yAxes || []).map(function (t) { 20732 return { options: t, dtype: "linear", dposition: "left" }; 20733 }) 20734 )), 20735 n.scale && r.push({ options: n.scale, dtype: "radialLinear", isDefault: !0, dposition: "chartArea" }), 20736 a.each(r, function (n) { 20737 var r = n.options, 20738 l = a.getValueOrDefault(r.type, n.dtype), 20739 s = t.scaleService.getScaleConstructor(l); 20740 if (s) { 20741 i(r.position) !== i(n.dposition) && (r.position = n.dposition); 20742 var u = new s({ id: r.id, options: r, ctx: e.ctx, chart: e }); 20743 (o[u.id] = u), n.isDefault && (e.scale = u); 20744 } 20745 }), 20746 t.scaleService.addScalesToLayout(this); 20747 }, 20748 buildOrUpdateControllers: function () { 20749 var e = this, 20750 n = [], 20751 i = []; 20752 if ( 20753 (a.each( 20754 e.data.datasets, 20755 function (a, o) { 20756 var r = e.getDatasetMeta(o); 20757 if ((r.type || (r.type = a.type || e.config.type), n.push(r.type), r.controller)) r.controller.updateIndex(o); 20758 else { 20759 var l = t.controllers[r.type]; 20760 if (void 0 === l) throw new Error('"' + r.type + '" is not a chart type.'); 20761 (r.controller = new l(e, o)), i.push(r.controller); 20762 } 20763 }, 20764 e 20765 ), 20766 n.length > 1) 20767 ) 20768 for (var o = 1; o < n.length; o++) 20769 if (n[o] !== n[o - 1]) { 20770 e.isCombo = !0; 20771 break; 20772 } 20773 return i; 20774 }, 20775 resetElements: function () { 20776 var t = this; 20777 a.each( 20778 t.data.datasets, 20779 function (e, n) { 20780 t.getDatasetMeta(n).controller.reset(); 20781 }, 20782 t 20783 ); 20784 }, 20785 reset: function () { 20786 this.resetElements(), this.tooltip.initialize(); 20787 }, 20788 update: function (t, e) { 20789 var i = this; 20790 if ((n(i), o.notify(i, "beforeUpdate") !== !1)) { 20791 i.tooltip._data = i.data; 20792 var r = i.buildOrUpdateControllers(); 20793 a.each( 20794 i.data.datasets, 20795 function (t, e) { 20796 i.getDatasetMeta(e).controller.buildOrUpdateElements(); 20797 }, 20798 i 20799 ), 20800 i.updateLayout(), 20801 a.each(r, function (t) { 20802 t.reset(); 20803 }), 20804 i.updateDatasets(), 20805 o.notify(i, "afterUpdate"), 20806 i._bufferedRender ? (i._bufferedRequest = { lazy: e, duration: t }) : i.render(t, e); 20807 } 20808 }, 20809 updateLayout: function () { 20810 var e = this; 20811 o.notify(e, "beforeLayout") !== !1 && (t.layoutService.update(this, this.width, this.height), o.notify(e, "afterScaleUpdate"), o.notify(e, "afterLayout")); 20812 }, 20813 updateDatasets: function () { 20814 var t = this; 20815 if (o.notify(t, "beforeDatasetsUpdate") !== !1) { 20816 for (var e = 0, n = t.data.datasets.length; e < n; ++e) t.updateDataset(e); 20817 o.notify(t, "afterDatasetsUpdate"); 20818 } 20819 }, 20820 updateDataset: function (t) { 20821 var e = this, 20822 n = e.getDatasetMeta(t), 20823 i = { meta: n, index: t }; 20824 o.notify(e, "beforeDatasetUpdate", [i]) !== !1 && (n.controller.update(
20824), o.notify(e, "afterDatasetUpdate", [i])); 20825 }, 20826 render: function (e, n) { 20827 var i = this; 20828 if (o.notify(i, "beforeRender") !== !1) { 20829 var r = i.options.animation, 20830 l = function (t) { 20831 o.notify(i, "afterRender"), a.callback(r && r.onComplete, [t], i); 20832 }; 20833 if (r && (("undefined" != typeof e && 0 !== e) || ("undefined" == typeof e && 0 !== r.duration))) { 20834 var s = new t.Animation({ 20835 numSteps: (e || r.duration) / 16.66, 20836 easing: r.easing, 20837 render: function (t, e) { 20838 var n = a.easingEffects[e.easing], 20839 i = e.currentStep, 20840 o = i / e.numSteps; 20841 t.draw(n(o), o, i); 20842 }, 20843 onAnimationProgress: r.onProgress, 20844 onAnimationComplete: l, 20845 }); 20846 t.animationService.addAnimation(i, s, e, n); 20847 } else i.draw(), l(new t.Animation({ numSteps: 0, chart: i })); 20848 return i; 20849 } 20850 }, 20851 draw: function (t) { 20852 var e = this; 20853 e.clear(), 20854 (void 0 !== t && null !== t) || (t = 1), 20855 e.transition(t), 20856 o.notify(e, "beforeDraw", [t]) !== !1 && 20857 (a.each( 20858 e.boxes, 20859 function (t) { 20860 t.draw(e.chartArea); 20861 }, 20862 e 20863 ), 20864 e.scale && e.scale.draw(), 20865 e.drawDatasets(t), 20866 e.tooltip.draw(), 20867 o.notify(e, "afterDraw", [t])); 20868 }, 20869 transition: function (t) { 20870 for (var e = this, n = 0, i = (e.data.datasets || []).length; n < i; ++n) e.isDatasetVisible(n) && e.getDatasetMeta(n).controller.transition(t); 20871 e.tooltip.transition(t); 20872 }, 20873 drawDatasets: function (t) { 20874 var e = this; 20875 if (o.notify(e, "beforeDatasetsDraw", [t]) !== !1) { 20876 for (var n = (e.data.datasets || []).length - 1; n >= 0; --n) e.isDatasetVisible(n) && e.drawDataset(n, t); 20877 o.notify(e, "afterDatasetsDraw", [t]); 20878 } 20879 }, 20880 drawDataset: function (t, e) { 20881 var n = this, 20882 i = n.getDatasetMeta(t), 20883 a = { meta: i, index: t, easingValue: e }; 20884 o.notify(n, "beforeDatasetDraw", [a]) !== !1 && (i.controller.draw(e), o.notify(n, "afterDatasetDraw", [a])); 20885 }, 20886 getElementAtEvent: function (e) { 20887 return t.Interaction.modes.single(this, e); 20888 }, 20889 getElementsAtEvent: function (e) { 20890 return t.Interaction.modes.label(this, e, { intersect: !0 }); 20891 }, 20892 getElementsAtXAxis: function (e) { 20893 return t.Interaction.modes["x-axis"](this, e, { intersect: !0 }); 20894 }, 20895 getElementsAtEventForMode: function (e, n, i) { 20896 var a = t.Interaction.modes[n]; 20897 return "function" == typeof a ? a(this, e, i) : []; 20898 }, 20899 getDatasetAtEvent: function (e) { 20900 return t.Interaction.modes.dataset(this, e, { intersect: !0 }); 20901 }, 20902 getDatasetMeta: function (t) { 20903 var e = this, 20904 n = e.data.datasets[t]; 20905 n._meta || (n._meta = {}); 20906 var i = n._meta[e.id]; 20907 return i || (i = n._meta[e.id] = { type: null, data: [], dataset: null, controller: null, hidden: null, xAxisID: null, yAxisID: null }), i; 20908 }, 20909 getVisibleDatasetCount: function () { 20910 for (var t = 0, e = 0, n = this.data.datasets.length; e < n; ++e) this.isDatasetVisible(e) && t++; 20911 return t; 20912 }, 20913 isDatasetVisible: function (t) { 20914 var e = this.getDatasetMeta(t); 20915 return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden; 20916 }, 20917 generateLegend: function () { 20918 return this.options.legendCallback(this); 20919 }, 20920 destroy: function () { 20921 var e, 20922 n, 20923 i, 20924 l = this, 20925 s = l.canvas; 20926 for (l.stop(), n = 0, i = l.data.datasets.length; n < i; ++n) (e = l.getDatasetMeta(n)), e.controller && (e.controller.destroy(), (e.controller = null)); 20927 s && (l.unbindEvents(), a.clear(l), r.releaseContext(l.ctx), (l.canvas = null), (l.ctx = null)), o.notify(l, "destroy"), delete t.instances[l.id]; 20928 }, 20929 toBase64Image: function () { 20930 return this.canvas.toDataURL.apply(this.canvas, arguments); 20931 }, 20932 initToolTip: function () { 20933 var e = this; 20934 (e.tooltip = new t.Tooltip({ _chart: e, _chartInstance: e, _data: e.data, _options: e.options.tooltips }, e)), e.tooltip.initialize(); 20935 }, 20936 bindEvents: function () { 20937 var t = this, 20938 e = (t._listeners = {}), 20939 n = function () { 20940 t.eventHandler.apply(t, arguments); 20941 }; 20942 a.each(t.options.events, function (i) { 20943 r.addEventListener(t, i, n), (e[i] = n
20943); 20944 }), 20945 t.options.responsive && 20946 ((n = function () { 20947 t.resize(); 20948 }), 20949 r.addEventListener(t, "resize", n), 20950 (e.resize = n)); 20951 }, 20952 unbindEvents: function () { 20953 var t = this, 20954 e = t._listeners; 20955 e && 20956 (delete t._listeners, 20957 a.each(e, function (e, n) { 20958 r.removeEventListener(t, n, e); 20959 })); 20960 }, 20961 updateHoverStyle: function (t, e, n) { 20962 var i, 20963 a, 20964 o, 20965 r = n ? "setHoverStyle" : "removeHoverStyle"; 20966 for (a = 0, o = t.length; a < o; ++a) (i = t[a]), i && this.getDatasetMeta(i._datasetIndex).controller[r](i); 20967 }, 20968 eventHandler: function (t) { 20969 var e = this, 20970 n = e.tooltip; 20971 if (o.notify(e, "beforeEvent", [t]) !== !1) { 20972 (e._bufferedRender = !0), (e._bufferedRequest = null); 20973 var i = e.handleEvent(t); 20974 (i |= n && n.handleEvent(t)), o.notify(e, "afterEvent", [t]); 20975 var a = e._bufferedRequest; 20976 return a ? e.render(a.duration, a.lazy) : i && !e.animating && (e.stop(), e.render(e.options.hover.animationDuration, !0)), (e._bufferedRender = !1), (e._bufferedRequest = null), e; 20977 } 20978 }, 20979 handleEvent: function (t) { 20980 var e = this, 20981 n = e.options || {}, 20982 i = n.hover, 20983 o = !1; 20984 return ( 20985 (e.lastActive = e.lastActive || []), 20986 "mouseout" === t.type ? (e.active = []) : (e.active = e.getElementsAtEventForMode(t, i.mode, i)), 20987 i.onHover && i.onHover.call(e, t.native, e.active), 20988 ("mouseup" !== t.type && "click" !== t.type) || (n.onClick && n.onClick.call(e, t.native, e.active)), 20989 e.lastActive.length && e.updateHoverStyle(e.lastActive, i.mode, !1), 20990 e.active.length && i.mode && e.updateHoverStyle(e.active, i.mode, !0), 20991 (o = !a.arrayEquals(e.active, e.lastActive)), 20992 (e.lastActive = e.active), 20993 o 20994 ); 20995 }, 20996 }), 20997 (t.Controller = t); 20998 }; 20999 }, 21000 {}, 21001 ], 21002 24: [ 21003 function (t, e, n) { 21004 "use strict"; 21005 e.exports = function (t) { 21006 function e(t, e) { 21007 return t._chartjs 21008 ? void t._chartjs.listeners.push(e) 21009 : (Object.defineProperty(t, "_chartjs", { configurable: !0, enumerable: !1, value: { listeners: [e] } }), 21010 void a.forEach(function (e) { 21011 var n = "onData" + e.charAt(0).toUpperCase() + e.slice(1), 21012 a = t[e]; 21013 Object.defineProperty(t, e, { 21014 configurable: !0, 21015 enumerable: !1, 21016 value: function () { 21017 var e = Array.prototype.slice.call(arguments), 21018 o = a.apply(this, e); 21019 return ( 21020 i.each(t._chartjs.listeners, function (t) { 21021 "function" == typeof t[n] && t[n].apply(t, e); 21022 }), 21023 o 21024 ); 21025 }, 21026 }); 21027 })); 21028 } 21029 function n(t, e) { 21030 var n = t._chartjs; 21031 if (n) { 21032 var i = n.listeners, 21033 o = i.indexOf(e); 21034 o !== -1 && i.splice(o, 1), 21035 i.length > 0 ||
21036 (a.forEach(function (e) { 21037 delete t[e]; 21038 }), 21039 delete t._chartjs); 21040 } 21041 } 21042 var i = t.helpers, 21043 a = ["push", "pop", "shift", "splice", "unshift"]; 21044 (t.DatasetController = function (t, e) { 21045 this.initialize(t, e); 21046 }), 21047 i.extend(t.DatasetController.prototype, { 21048 datasetElementType: null, 21049 dataElementType: null, 21050 initialize: function (t, e) { 21051 var n = this; 21052 (n.chart = t), (n.index = e), n.linkScales(), n.addElements(); 21053 }, 21054 updateIndex: function (t) { 21055 this.index = t; 21056 }, 21057 linkScales: function () { 21058 var t = this, 21059 e = t.getMeta(), 21060 n = t.getDataset(); 21061 null === e.xAxisID && (e.xAxisID = n.xAxisID || t.chart.options.scales.xAxes[0].id), null === e.yAxisID && (e.yAxisID = n.yAxisID || t.chart.options.scales.yAxes[0].id); 21062 }, 21063 getDataset: function () { 21064 return this.chart.data.datasets[this.index]; 21065 }, 21066 getMeta: function () { 21067 return this.chart.getDatasetMeta(this.index); 21068 }, 21069 getScaleForId: function (t) { 21070 return this.chart.scales[t]; 21071 }, 21072 reset: function () { 21073 this.update(!0); 21074 }, 21075 destroy: function () { 21076 this._data && n(this._data, this); 21077 }, 21078 createMetaDataset: function () { 21079 var t = this, 21080 e = t.datasetElementType; 21081 return e && new e({ _chart: t.chart, _datasetIndex: t.index }); 21082 }, 21083 createMetaData: function (t) { 21084 var e = this, 21085 n = e.dataElementType; 21086 return n && new n({ _chart: e.chart, _datasetIndex: e.index, _index: t }); 21087 }, 21088 addElements: function () { 21089 var t, 21090 e, 21091 n = this, 21092 i = n.getMeta(), 21093 a = n.getDataset().data || [], 21094 o = i.data; 21095 for (t = 0, e = a.length; t < e; ++t) o[t] = o[t] || n.createMetaData(t); 21096 i.dataset = i.dataset || n.createMetaDataset(); 21097 }, 21098 addElementAndReset: function (t) { 21099 var e = this.createMetaData(t); 21100 this.getMeta().data.splice(t, 0, e), this.updateElement(e, t, !0); 21101 }, 21102 buildOrUpdateElements: function () { 21103 var t = this, 21104 i = t.getDataset(), 21105 a = i.data || (i.data = []); 21106 t._data !== a && (t._data && n(t._data, t), e(a, t), (t._data = a)), t.resyncElements(); 21107 }, 21108 update: i.noop, 21109 transition: function (t) { 21110 for (var e = this.getMeta(), n = e.data || [], i = n.length, a = 0; a < i; ++a) n[a].transition(t); 21111 e.dataset && e.dataset.transition(t); 21112 }, 21113 draw: function () { 21114 var t = this.getMeta(), 21115 e = t.data || [], 21116 n = e.length, 21117 i = 0; 21118 for (t.dataset && t.dataset.draw(); i < n; ++i) e[i].draw(); 21119 }, 21120 removeHoverStyle: function (t, e) { 21121 var n = this.chart.data.datasets[t._datasetIndex], 21122 a = t._index, 21123 o = t.custom || {}, 21124 r = i.getValueAtIndexOrDefault, 21125 l = t._model; 21126 (l.backgroundColor = o.backgroundColor ? o.backgroundColor : r(n.backgroundColor, a, e.backgroundColor)), 21127 (l.borderColor = o.borderColor ? o.borderColor : r(n.borderColor, a, e.borderColor)), 21128 (l.borderWidth = o.borderWidth ? o.borderWidth : r(n.borderWidth, a, e.borderWidth)); 21129 }, 21130 setHoverStyle: function (t) { 21131 var e = this.chart.data.datasets[t._datasetIndex], 21132 n = t._index, 21133 a = t.custom || {}, 21134 o = i.getValueAtIndexOrDefault, 21135 r = i.getHoverColor, 21136 l = t._model; 21137 (l.backgroundColor = a.hoverBackgroun
21137dColor ? a.hoverBackgroundColor : o(e.hoverBackgroundColor, n, r(l.backgroundColor))), 21138 (l.borderColor = a.hoverBorderColor ? a.hoverBorderColor : o(e.hoverBorderColor, n, r(l.borderColor))), 21139 (l.borderWidth = a.hoverBorderWidth ? a.hoverBorderWidth : o(e.hoverBorderWidth, n, l.borderWidth)); 21140 }, 21141 resyncElements: function () { 21142 var t = this, 21143 e = t.getMeta(), 21144 n = t.getDataset().data, 21145 i = e.data.length, 21146 a = n.length; 21147 a < i ? e.data.splice(a, i - a) : a > i && t.insertElements(i, a - i); 21148 }, 21149 insertElements: function (t, e) { 21150 for (var n = 0; n < e; ++n) this.addElementAndReset(t + n); 21151 }, 21152 onDataPush: function () { 21153 this.insertElements(this.getDataset().data.length - 1, arguments.length); 21154 }, 21155 onDataPop: function () { 21156 this.getMeta().data.pop(); 21157 }, 21158 onDataShift: function () { 21159 this.getMeta().data.shift(); 21160 }, 21161 onDataSplice: function (t, e) { 21162 this.getMeta().data.splice(t, e), this.insertElements(t, arguments.length - 2); 21163 }, 21164 onDataUnshift: function () { 21165 this.insertElements(0, arguments.length); 21166 }, 21167 }), 21168 (t.DatasetController.extend = i.inherits); 21169 }; 21170 }, 21171 {}, 21172 ], 21173 25: [ 21174 function (t, e, n) { 21175 "use strict"; 21176 var i = t(3); 21177 e.exports = function (t) { 21178 function e(t, e, n, a) { 21179 var o, 21180 r, 21181 l, 21182 s, 21183 u, 21184 d, 21185 c, 21186 h, 21187 f, 21188 g = Object.keys(n); 21189 for (o = 0, r = g.length; o < r; ++o) 21190 if (((l = g[o]), (d = n[l]), e.hasOwnProperty(l) || (e[l] = d), (s = e[l]), s !== d && "_" !== l[0])) { 21191 if ((t.hasOwnProperty(l) || (t[l] = s), (u = t[l]), (c = typeof d), c === typeof u)) 21192 if ("string" === c) { 21193 if (((h = i(u)), h.valid && ((f = i(d)), f.valid))) { 21194 e[l] = f.mix(h, a).rgbString(); 21195 continue; 21196 } 21197 } else if ("number" === c && isFinite(u) && isFinite(d)) { 21198 e[l] = u + (d - u) * a; 21199 continue; 21200 } 21201 e[l] = d; 21202 } 21203 } 21204 var n = t.helpers; 21205 (t.elements = {}), 21206 (t.Element = function (t) { 21207 n.extend(this, t), this.initialize.apply(this, arguments); 21208 }), 21209 n.extend(t.Element.prototype, { 21210 initialize: function () { 21211 this.hidden = !1; 21212 }, 21213 pivot: function () { 21214 var t = this; 21215 return t._view || (t._view = n.clone(t._model)), (t._start = {}), t; 21216 }, 21217 transition: function (t) { 21218 var n = this, 21219 i = n._model, 21220 a = n._start, 21221 o = n._view; 21222 return i && 1 !== t ? (o || (o = n._view = {}), a || (a = n._start = {}), e(a, o, i, t), n) : ((n._view = i), (n._start = null), n); 21223 }, 21224 tooltipPosition: function () { 21225 return { x: this._model.x, y: this._model.y }; 21226 }, 21227 hasValue: function () { 21228 return n.isNumber(this._model.x) && n.isNumber(this._model.y); 21229 }, 21230 }), 21231 (t.Element.extend = n.inherits); 21232 }; 21233 }, 21234 { 3: 3 }, 21235 ], 21236 26: [ 21237 function (t, e, n) { 21238 "use strict"; 21239 var i = t(3); 21240 e.exports = function (t) { 21241 function e(t, e, n) { 21242 var i; 21243 return "string" == typeof t ? ((i = parseInt(t, 10)), t.indexOf("%") !== -1 && (i = (i / 100) * e.parentNode[n])) : (i = t), i; 21244 } 21245 function n(t) { 21246 return void 0 !== t && null !== t && "none" !== t; 21247 } 21248 function a(t, i, a) { 21249 var o = document.defaultView, 21250 r = t.parentNode, 21251 l = o.getComputedStyle(t)[i], 21252 s = o.getComputedStyle(r)[i], 21253 u = n(l), 21254 d = n(s), 21255 c = Number.POSITIVE_INFINITY; 21256 return u || d ? Math.min(u ? e(l, t, a) : c, d ? e(s, r, a) : c) : "none"; 21257 } 21258 var o = (t.helpers = {}); 21259 (o.each = function (t, e, n, i) { 21260 var a, r; 21261 if (o.isArray(t)) 21262 if (((r = t.length), i)) for (a = r - 1; a >= 0; a--) e.call(n, t[a], a); 21263 else for (a = 0; a < r; a++) e.call(n, t[a], a); 21264 else if ("object" == typeof t) { 21265 var l = Object.keys(t); 21266 for (r = l.length, a = 0; a < r; a++) e.call(n, t[l[a]], l[a]); 21267 } 21268 }), 21269 (o.clone = function (t) { 21270 var e = {}; 21271 return ( 21272 o.each(t, function (t, n) { 21273 o.isArray(t) ? (e[n] = t.slice(0)) : "object" == typeof t && null !== t ? (e[n] = o.clone(t)) : (e[n] = t); 21274 }), 21275 e 21276 ); 21277 }), 21278 (o.extend = function (t) { 21279 for ( 21280 var e = function (e, n) { 21281 t[n] = e; 21282 }, 21283 n = 1, 21284 i = arguments.length; 21285 n < i; 21286 n++ 21287 ) 21288 o.each(arguments[n], e); 21289 return t; 21290 }), 21291 (o.configMerge = function (e) { 21292 var n = o.clone(e); 21293 return ( 21294 o.each(Array.prototype.slice.call(arguments, 1), function (e) { 21295 o.each(e, function (e, i) { 21296 var a = n.hasOwnProperty(i), 21297 r = a ? n[i] : {}; 21298 "scales" === i 21299 ? (n[i] = o.scaleMerge(r, e)) 21300 : "scale" === i 21301 ? (n[i] = o.configMerge(r, t.scaleService.getScaleDefaults(e.type), e)) 21302 : !a || "object" != typeof r || o.isArray(r) || null === r || "object" != typeof e || o.isArray(e) 21303 ? (n[i] = e) 21304 : (n[i] = o.configMerge(r, e)); 21305 }); 21306 }), 21307 n 21308 ); 21309 }), 21310 (o.scaleMerge = function (e, n) { 21311 var i = o.clone(e); 21312 return ( 21313 o.each(n, function (e, n) { 21314 "xAxes" === n || "yAxes" === n 21315 ? i.hasOwnProperty(n) 21316 ? o.each(e, function (e, a) { 21317 var r = o.getValueOrDefault(e.type, "xAxes" === n ? "category" : "linear"), 21318 l = t.scaleService.getScaleDefaults(r); 21319 a >= i[n].length || !i[n][a].type ? i[n].push(o.configMerge(l, e)) : e.type && e.type !== i[n][a].type ? (i[n][a] = o.configMerge(i[n][a], l, e)) : (i[n][a] = o.configMerge(i[n][a], e)); 21320 }) 21321 : ((i[n] = []), 21322 o.each(e, function (e) { 21323 var a = o.getValueOrDefault(e.type, "xAxes" === n ? "category" : "linear"); 21324 i[n].push(o.configMerge(t.scaleService.getScaleDefaults(a), e)); 21325 })) 21326 : i.hasOwnProperty(n) && "object" == typeof i[n] && null !== i[n] && "object" == typeof e 21327 ? (i[n] = o.configMerge(i[n], e)) 21328 : (i[n] = e); 21329 }), 21330 i 21331 ); 21332 }), 21333 (o.getValueAtIndexOrDefault = function (t, e, n) { 21334 return void 0 === t || null === t ? n : o.isArray(t) ? (e < t.length ? t[e] : n) : t; 21335 }), 21336 (o.getValueOrDefault = function (t, e) { 21337 return void 0 === t ? e : t; 21338 }), 21339 (o.indexOf = Array.prototype.indexOf 21340 ? function (t, e) { 21341 return t.indexOf(e); 21342 } 21343 : function (t, e) { 21344 for (var n = 0, i = t.length; n < i; ++n) if (t[n] === e) return n; 21345 return -1; 21346 }), 21347 (o.where = function (t, e) { 21348 if (o.isArray(t) && Array.prototype.filter) return t.filter(e); 21349 var n = []; 21350 return ( 21351 o.each(t, function (t) { 21352 e(t) && n.push(t); 21353 }), 21354 n 21355 ); 21356 }), 21357 (o.findIndex = Array.prototype.findIndex 21358 ? function (t, e, n) { 21359 return t.findIndex(e, n); 21360 } 21361 : function (t, e, n) { 21362 n = void 0 === n ? t : n; 21363 for (var i = 0, a = t.length; i < a; ++i) if (e.call(n, t[i], i, t)) return i; 21364 return -1; 21365 }), 21366 (o.findNextWhere = function (t, e, n) { 21367 (void 0 !== n && null !== n) || (n = -1); 21368 for (var i = n + 1; i < t.length; i++) { 21369 var a = t[i]; 21370 if (e(a)) return a; 21371 } 21372 }), 21373 (o.findPreviousWhere = function (t, e, n) { 21374 (void 0 !== n && null !== n) || (n = t.length); 21375 for (var i = n - 1; i >= 0; i--) { 21376 var a = t[i]; 21377 if (e(a)) return a; 21378 } 21379 }), 21380 (o.inherits = function (t) { 21381 var e = this, 21382 n = 21383 t && t.hasOwnProperty("constructor") 21384 ? t.constructor 21385 : function () { 21386 return e.apply(this, arguments); 21387 }, 21388 i = function () { 21389 this.constructor = n; 21390 }; 21391 return (i.prototype = e.prototype), (n.prototype = new i()), (n.extend = o.inherits), t && o.extend(n.prototype, t), (n.__super__ = e.prototype), n; 21392 }), 21393 (o.noop = function () {}), 21394 (o.uid = (function () { 21395 var t = 0; 21396 return function () { 21397 return t++; 21398 }; 21399 })()), 21400 (o.isNumber = function (t) { 21401 return !isNaN(parseFloat(t)) && isFinite(t); 21402 }), 21403 (o.almostEquals = function (t, e, n) { 21404 return Math.abs(t - e) < n; 21405 }), 21406 (o.almostWhole = function (t, e) { 21407 var n = Math.round(t); 21408 return n - e < t && n + e > t; 21409 }), 21410 (o.max = function (t) { 21411 return t.reduce(function (t, e) { 21412 return isNaN(e) ? t : Math.max(t, e); 21413 }, Number.NEGATIVE_INFINITY); 21414 }), 21415 (o.min = function (t) { 21416 return t.reduce(function (t, e) { 21417 return isNaN(e) ? t : Math.min(t, e); 21418
21418}, Number.POSITIVE_INFINITY); 21419 }), 21420 (o.sign = Math.sign 21421 ? function (t) { 21422 return Math.sign(t); 21423 } 21424 : function (t) { 21425 return (t = +t), 0 === t || isNaN(t) ? t : t > 0 ? 1 : -1; 21426 }), 21427 (o.log10 = Math.log10 21428 ? function (t) { 21429 return Math.log10(t); 21430 } 21431 : function (t) { 21432 return Math.log(t) / Math.LN10; 21433 }), 21434 (o.toRadians = function (t) { 21435 return t * (Math.PI / 180); 21436 }), 21437 (o.toDegrees = function (t) { 21438 return t * (180 / Math.PI); 21439 }), 21440 (o.getAngleFromPoint = function (t, e) { 21441 var n = e.x - t.x, 21442 i = e.y - t.y, 21443 a = Math.sqrt(n * n + i * i), 21444 o = Math.atan2(i, n); 21445 return o < -0.5 * Math.PI && (o += 2 * Math.PI), { angle: o, distance: a }; 21446 }), 21447 (o.distanceBetweenPoints = function (t, e) { 21448 return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2)); 21449 }), 21450 (o.aliasPixel = function (t) { 21451 return t % 2 === 0 ? 0 : 0.5; 21452 }), 21453 (o.splineCurve = function (t, e, n, i) { 21454 var a = t.skip ? e : t, 21455 o = e, 21456 r = n.skip ? e : n, 21457 l = Math.sqrt(Math.pow(o.x - a.x, 2) + Math.pow(o.y - a.y, 2)), 21458 s = Math.sqrt(Math.pow(r.x - o.x, 2) + Math.pow(r.y - o.y, 2)), 21459 u = l / (l + s), 21460 d = s / (l + s); 21461 (u = isNaN(u) ? 0 : u), (d = isNaN(d) ? 0 : d); 21462 var c = i * u, 21463 h = i * d; 21464 return { previous: { x: o.x - c * (r.x - a.x), y: o.y - c * (r.y - a.y) }, next: { x: o.x + h * (r.x - a.x), y: o.y + h * (r.y - a.y) } }; 21465 }), 21466 (o.EPSILON = Number.EPSILON || 1e-14), 21467 (o.splineCurveMonotone = function (t) { 21468 var e, 21469 n, 21470 i, 21471 a, 21472 r = (t || []).map(function (t) { 21473 return { model: t._model, deltaK: 0, mK: 0 }; 21474 }), 21475 l = r.length; 21476 for (e = 0; e < l; ++e) 21477 if (((i = r[e]), !i.model.skip)) { 21478 if (((n = e > 0 ? r[e - 1] : null), (a = e < l - 1 ? r[e + 1] : null), a && !a.model.skip)) { 21479 var s = a.model.x - i.model.x; 21480 i.deltaK = 0 !== s ? (a.model.y - i.model.y) / s : 0; 21481 } 21482 !n || n.model.skip ? (i.mK = i.deltaK) : !a || a.model.skip ? (i.mK = n.deltaK) : this.sign(n.deltaK) !== this.sign(i.deltaK) ? (i.mK = 0) : (i.mK = (n.deltaK + i.deltaK) / 2); 21483 } 21484 var u, d, c, h; 21485 for (e = 0; e < l - 1; ++e) 21486 (i = r[e]), 21487 (a = r[e + 1]), 21488 i.model.skip || 21489 a.model.skip || 21490 (o.almostEquals(i.deltaK, 0, this.EPSILON) 21491 ? (i.mK = a.mK = 0) 21492 : ((u = i.mK / i.deltaK), (d = a.mK / i.deltaK), (h = Math.pow(u, 2) + Math.pow(d, 2)), h <= 9 || ((c = 3 / Math.sqrt(h)), (i.mK = u * c * i.deltaK), (a.mK = d * c * i.deltaK)))); 21493 var f; 21494 for (e = 0; e < l; ++e) 21495 (i = r[e]), 21496 i.model.skip || 21497 ((n = e > 0 ? r[e - 1] : null),
21498 (a = e < l - 1 ? r[e + 1] : null), 21499 n && !n.model.skip && ((f = (i.model.x - n.model.x) / 3), (i.model.controlPointPreviousX = i.model.x - f), (i.model.controlPointPreviousY = i.model.y - f * i.mK)), 21500 a && !a.model.skip && ((f = (a.model.x - i.model.x) / 3), (i.model.controlPointNextX = i.model.x + f), (i.model.controlPointNextY = i.model.y + f * i.mK))); 21501 }), 21502 (o.nextItem = function (t, e, n) { 21503 return n ? (e >= t.length - 1 ? t[0] : t[e + 1]) : e >= t.length - 1 ? t[t.length - 1] : t[e + 1]; 21504 }), 21505 (o.previousItem = function (t, e, n) { 21506 return n ? (e <= 0 ? t[t.length - 1] : t[e - 1]) : e <= 0 ? t[0] : t[e - 1]; 21507 }), 21508 (o.niceNum = function (t, e) { 21509 var n, 21510 i = Math.floor(o.log10(t)), 21511 a = t / Math.pow(10, i); 21512 return (n = e ? (a < 1.5 ? 1 : a < 3 ? 2 : a < 7 ? 5 : 10) : a <= 1 ? 1 : a <= 2 ? 2 : a <= 5 ? 5 : 10), n * Math.pow(10, i); 21513 }); 21514 var r = (o.easingEffects = { 21515 linear: function (t) { 21516 return t; 21517 }, 21518 easeInQuad: function (t) { 21519 return t * t; 21520 }, 21521 easeOutQuad: function (t) { 21522 return -1 * t * (t - 2); 21523 }, 21524 easeInOutQuad: function (t) { 21525 return (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1); 21526 }, 21527 easeInCubic: function (t) { 21528 return t * t * t; 21529 }, 21530 easeOutCubic: function (t) { 21531 return 1 * ((t = t / 1 - 1) * t * t + 1); 21532 }, 21533 easeInOutCubic: function (t) { 21534 return (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2); 21535 }, 21536 easeInQuart: function (t) { 21537 return t * t * t * t; 21538 }, 21539 easeOutQuart: function (t) { 21540 return -1 * ((t = t / 1 - 1) * t * t * t - 1); 21541 }, 21542 easeInOutQuart: function (t) { 21543 return (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2); 21544 }, 21545 easeInQuint: function (t) { 21546 return 1 * (t /= 1) * t * t * t * t; 21547 }, 21548 easeOutQuint: function (t) { 21549 return 1 * ((t = t / 1 - 1) * t * t * t * t + 1); 21550 }, 21551 easeInOutQuint: function (t) { 21552 return (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2); 21553 }, 21554 easeInSine: function (t) { 21555 return -1 * Math.cos((t / 1) * (Math.PI / 2)) + 1; 21556 }, 21557 easeOutSine: function (t) { 21558 return 1 * Math.sin((t / 1) * (Math.PI / 2)); 21559 }, 21560 easeInOutSine: function (t) { 21561 return -0.5 * (Math.cos((Math.PI * t) / 1) - 1); 21562 }, 21563 easeInExpo: function (t) { 21564 return 0 === t ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1)); 21565 }, 21566 easeOutExpo: function (t) { 21567 return 1 === t ? 1 : 1 * (-Math.pow(2, (-10 * t) / 1) + 1); 21568 }, 21569 easeInOutExpo: function (t) { 21570 return 0 === t ? 0 : 1 === t ? 1 : (t /= 0.5) < 1 ? 0.5 * Math.pow(2, 10 * (t - 1)) : 0.5 * (-Math.pow(2, -10 * --t) + 2); 21571 }, 21572 easeInCirc: function (t) { 21573 return t >= 1 ? t : -1 * (Math.sqrt(1 - (t /= 1) * t) - 1); 21574 }, 21575 easeOutCirc: function (t) { 21576 return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t); 21577 }, 21578 easeInOutCirc: function (t) { 21579 return (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1); 21580 }, 21581 easeInElastic: function (t) { 21582 var e = 1.70158, 21583 n = 0, 21584 i = 1; 21585 return 0 === t 21586 ? 0 21587 : 1 === (t /= 1) 21588 ? 1 21589 : (n || (n = 0.3), i < Math.abs(1) ? ((i
21589= 1), (e = n / 4)) : (e = (n / (2 * Math.PI)) * Math.asin(1 / i)), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin(((1 * t - e) * (2 * Math.PI)) / n))); 21590 }, 21591 easeOutElastic: function (t) { 21592 var e = 1.70158, 21593 n = 0, 21594 i = 1; 21595 return 0 === t 21596 ? 0 21597 : 1 === (t /= 1) 21598 ? 1 21599 : (n || (n = 0.3), i < Math.abs(1) ? ((i = 1), (e = n / 4)) : (e = (n / (2 * Math.PI)) * Math.asin(1 / i)), i * Math.pow(2, -10 * t) * Math.sin(((1 * t - e) * (2 * Math.PI)) / n) + 1); 21600 }, 21601 easeInOutElastic: function (t) { 21602 var e = 1.70158, 21603 n = 0, 21604 i = 1; 21605 return 0 === t 21606 ? 0 21607 : 2 === (t /= 0.5) 21608 ? 1 21609 : (n || (n = 1 * (0.3 * 1.5)), 21610 i < Math.abs(1) ? ((i = 1), (e = n / 4)) : (e = (n / (2 * Math.PI)) * Math.asin(1 / i)), 21611 t < 1 ? -0.5 * (i * Math.pow(2, 10 * (t -= 1)) * Math.sin(((1 * t - e) * (2 * Math.PI)) / n)) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin(((1 * t - e) * (2 * Math.PI)) / n) * 0.5 + 1); 21612 }, 21613 easeInBack: function (t) { 21614 var e = 1.70158; 21615 return 1 * (t /= 1) * t * ((e + 1) * t - e); 21616 }, 21617 easeOutBack: function (t) { 21618 var e = 1.70158; 21619 return 1 * ((t = t / 1 - 1) * t * ((e + 1) * t + e) + 1); 21620 }, 21621 easeInOutBack: function (t) { 21622 var e = 1.70158; 21623 return (t /= 0.5) < 1 ? 0.5 * (t * t * (((e *= 1.525) + 1) * t - e)) : 0.5 * ((t -= 2) * t * (((e *= 1.525) + 1) * t + e) + 2); 21624 }, 21625 easeInBounce: function (t) { 21626 return 1 - r.easeOutBounce(1 - t); 21627 }, 21628 easeOutBounce: function (t) { 21629 return (t /= 1) < 1 / 2.75 21630 ? 1 * (7.5625 * t * t) 21631 : t < 2 / 2.75 21632 ? 1 * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) 21633 : t < 2.5 / 2.75 21634 ? 1 * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) 21635 : 1 * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375); 21636 }, 21637 easeInOutBounce: function (t) { 21638 return t < 0.5 ? 0.5 * r.easeInBounce(2 * t) : 0.5 * r.easeOutBounce(2 * t - 1) + 0.5; 21639 }, 21640 }); 21641 (o.requestAnimFrame = (function () { 21642 return "undefined" == typeof window 21643 ? function (t) { 21644 t(); 21645 } 21646 : window.requestAnimationFrame || 21647 window.webkitRequestAnimationFrame || 21648 window.mozRequestAnimationFrame || 21649 window.oRequestAnimationFrame || 21650 window.msRequestAnimationFrame || 21651 function (t) { 21652 return window.setTimeout(t, 1e3 / 60); 21653 }; 21654 })()), 21655 (o.getRelativePosition = function (t, e) { 21656 var n, 21657 i, 21658 a = t.originalEvent || t, 21659 r = t.currentTarget || t.srcElement, 21660 l = r.getBoundingClientRect(), 21661 s = a.touches; 21662 s && s.length > 0 ? ((n = s[0].clientX), (i = s[0].clientY)) : ((n = a.clientX), (i = a.clientY)); 21663 var u = parseFloat(o.getStyle(r, "padding-left")), 21664 d = parseFloat(o.getStyle(r, "padding-top")), 21665 c = parseFloat(o.getStyle(r, "padding-right")), 21666 h = parseFloat(o.getStyle(r, "padding-bottom")), 21667 f = l.right - l.left - u - c, 21668 g = l.bottom - l.top - d - h; 21669 return (n = Math.round((((n - l.left - u) / f) * r.width) / e.currentDevicePixelRatio)), (i = Math.round((((i - l.top - d) / g) * r.height) / e.currentDevicePixelRatio)), { x: n, y: i }; 21670 }), 21671 (o.addEvent = function (t, e, n) { 21672 t.addEventListener ? t.addEventListener(e, n) : t.attachEvent ? t.attachEvent("on" + e, n) : (t["on" + e] = n); 21673 }), 21674 (o.removeEvent = function (t, e, n) { 21675 t.removeEventListener ? t.removeEventListener(e, n, !1) : t.detachEvent ? t.detachEvent("on" + e, n) : (t["on" + e] = o.no
21675op); 21676 }), 21677 (o.getConstraintWidth = function (t) { 21678 return a(t, "max-width", "clientWidth"); 21679 }), 21680 (o.getConstraintHeight = function (t) { 21681 return a(t, "max-height", "clientHeight"); 21682 }), 21683 (o.getMaximumWidth = function (t) { 21684 var e = t.parentNode, 21685 n = parseInt(o.getStyle(e, "padding-left"), 10), 21686 i = parseInt(o.getStyle(e, "padding-right"), 10), 21687 a = e.clientWidth - n - i, 21688 r = o.getConstraintWidth(t); 21689 return isNaN(r) ? a : Math.min(a, r); 21690 }), 21691 (o.getMaximumHeight = function (t) { 21692 var e = t.parentNode, 21693 n = parseInt(o.getStyle(e, "padding-top"), 10), 21694 i = parseInt(o.getStyle(e, "padding-bottom"), 10), 21695 a = e.clientHeight - n - i, 21696 r = o.getConstraintHeight(t); 21697 return isNaN(r) ? a : Math.min(a, r); 21698 }), 21699 (o.getStyle = function (t, e) { 21700 return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e); 21701 }), 21702 (o.retinaScale = function (t) { 21703 var e = (t.currentDevicePixelRatio = window.devicePixelRatio || 1); 21704 if (1 !== e) { 21705 var n = t.canvas, 21706 i = t.height, 21707 a = t.width; 21708 (n.height = i * e), (n.width = a * e), t.ctx.scale(e, e), (n.style.height = i + "px"), (n.style.width = a + "px"); 21709 } 21710 }), 21711 (o.clear = function (t) { 21712 t.ctx.clearRect(0, 0, t.width, t.height); 21713 }), 21714 (o.fontString = function (t, e, n) { 21715 return e + " " + t + "px " + n; 21716 }), 21717 (o.longestText = function (t, e, n, i) { 21718 i = i || {}; 21719 var a = (i.data = i.data || {}), 21720 r = (i.garbageCollect = i.garbageCollect || []); 21721 i.font !== e && ((a = i.data = {}), (r = i.garbageCollect = []), (i.font = e)), (t.font = e); 21722 var l = 0; 21723 o.each(n, function (e) { 21724 void 0 !== e && null !== e && o.isArray(e) !== !0 21725 ? (l = o.measureText(t, a, r, l, e)) 21726 : o.isArray(e) && 21727 o.each(e, function (e) { 21728 void 0 === e || null === e || o.isArray(e) || (l = o.measureText(t, a, r, l, e)); 21729 }); 21730 }); 21731 var s = r.length / 2; 21732 if (s > n.length) { 21733 for (var u = 0; u < s; u++) delete a[r[u]]; 21734 r.splice(0, s); 21735 } 21736 return l; 21737 }), 21738 (o.measureText = function (t, e, n, i, a) { 21739 var o = e[a]; 21740 return o || ((o = e[a] = t.measureText(a).width), n.push(a)), o > i && (i = o), i; 21741 }), 21742 (o.numberOfLabelLines = function (t) { 21743 var e = 1; 21744 return ( 21745 o.each(t, function (t) { 21746 o.isArray(t) && t.length > e && (e = t.length); 21747 }), 21748 e 21749 ); 21750 }), 21751 (o.drawRoundedRectangle = function (t, e, n, i, a, o) { 21752 t.beginPath(), 21753 t.moveTo(e + o, n), 21754 t.lineTo(e + i - o, n), 21755 t.quadraticCurveTo(e + i, n, e + i, n + o), 21756 t.lineTo(e + i, n + a - o), 21757 t.quadraticCurveTo(e + i, n + a, e + i - o, n + a), 21758 t.lineTo(e + o, n + a), 21759 t.quadraticCurveTo(e, n + a, e, n + a - o), 21760 t.lineTo(e, n + o), 21761 t.quadraticCurveTo(e, n, e + o, n), 21762 t.closePath(); 21763 }), 21764 (o.color = i 21765 ? function (e) { 21766 return e instanceof CanvasGradient && (e = t.defaults.global.defaultColor), i(e); 21767 } 21768 : function (t) { 21769 return console.error("Color.js not found!"), t; 21770 }), 21771 (o.isArray = Array.isArray 21772 ? function (t) { 21773 return Array.isArray(t); 21774 } 21775 : function (t) { 21776 return "[object Array]" === Object.prototype.toString.call(t); 21777 }), 21778 (o.arrayEquals = function (t, e) { 21779 var n, i, a, r; 21780 if (!t || !e || t.length !== e.length) return !1; 21781 for (n = 0, i = t.length; n < i; ++n) 21782 if (((a = t[n]), (r = e[n]), a
21782instanceof Array && r instanceof Array)) { 21783 if (!o.arrayEquals(a, r)) return !1; 21784 } else if (a !== r) return !1; 21785 return !0; 21786 }), 21787 (o.callback = function (t, e, n) { 21788 t && "function" == typeof t.call && t.apply(n, e); 21789 }), 21790 (o.getHoverColor = function (t) { 21791 return t instanceof CanvasPattern ? t : o.color(t).saturate(0.5).darken(0.1).rgbString(); 21792 }), 21793 (o.callCallback = o.callback); 21794 }; 21795 }, 21796 { 3: 3 }, 21797 ], 21798 27: [ 21799 function (t, e, n) { 21800 "use strict"; 21801 e.exports = function (t) { 21802 function e(t, e) { 21803 return t.native ? { x: t.x, y: t.y } : r.getRelativePosition(t, e); 21804 } 21805 function n(t, e) { 21806 var n, 21807 i, 21808 a, 21809 o, 21810 r, 21811 l = t.data.datasets; 21812 for (i = 0, o = l.length; i < o; ++i) 21813 if (t.isDatasetVisible(i)) 21814 for (n = t.getDatasetMeta(i), a = 0, r = n.data.length; a < r; ++a) { 21815 var s = n.data[a]; 21816 s._view.skip || e(s); 21817 } 21818 } 21819 function i(t, e) { 21820 var i = []; 21821 return ( 21822 n(t, function (t) { 21823 t.inRange(e.x, e.y) && i.push(t); 21824 }), 21825 i 21826 ); 21827 } 21828 function a(t, e, i, a) { 21829 var o = Number.POSITIVE_INFINITY, 21830 l = []; 21831 return ( 21832 a || (a = r.distanceBetweenPoints), 21833 n(t, function (t) { 21834 if (!i || t.inRange(e.x, e.y)) { 21835 var n = t.getCenterPoint(), 21836 r = a(e, n); 21837 r < o ? ((l = [t]), (o = r)) : r === o && l.push(t); 21838 } 21839 }), 21840 l 21841 ); 21842 } 21843 function o(t, n, o) { 21844 var r = e(n, t), 21845 l = function (t, e) { 21846 return Math.abs(t.x - e.x); 21847 }, 21848 s = o.intersect ? i(t, r) : a(t, r, !1, l), 21849 u = []; 21850 return s.length 21851 ? (t.data.datasets.forEach(function (e, n) { 21852 if (t.isDatasetVisible(n)) { 21853 var i = t.getDatasetMeta(n), 21854 a = i.data[s[0]._index]; 21855 a && !a._view.skip && u.push(a); 21856 } 21857 }), 21858 u) 21859 : []; 21860 } 21861 var r = t.helpers; 21862 t.Interaction = { 21863 modes: { 21864 single: function (t, i) { 21865 var a = e(i, t), 21866 o = []; 21867 return ( 21868 n(t, function (t) { 21869 if (t.inRange(a.x, a.y)) return o.push(t), o; 21870 }), 21871 o.slice(0, 1) 21872 ); 21873 }, 21874 label: o, 21875 index: o, 21876 dataset: function (t, n, o) { 21877 var r = e(n, t), 21878 l = o.intersect ? i(t, r) : a(t, r, !1); 21879 return l.length > 0 && (l = t.getDatasetMeta(l[0]._datasetIndex).data), l; 21880 }, 21881 "x-axis": function (t, e) { 21882 return o(t, e, !0); 21883 }, 21884 point: function (t, n) { 21885 var a = e(n, t); 21886 return i(t, a); 21887 }, 21888 nearest: function (t, n, i) { 21889 var o = e(n, t), 21890 r = a(t, o, i.intersect); 21891 return ( 21892 r.length > 1 && 21893 r.sort(function (t, e) { 21894 var n = t.getArea(), 21895 i = e.getArea(), 21896 a = n - i; 21897 return 0 === a && (a = t._datasetIndex - e._datasetIndex), a; 21898 }), 21899 r.slice(0, 1) 21900 ); 21901 }, 21902 x: function (t, i, a) { 21903 var o = e(i, t), 21904 r = [], 21905 l = !1; 21906 return ( 21907 n(t, function (t) { 21908 t.inXRange(o.x) && r.push(t), t.inRange(o.x, o.y) && (l = !0); 21909 }), 21910 a.intersect && !l && (r = []), 21911 r 21912 ); 21913 }, 21914 y: function (t, i, a) { 21915 var o = e(i, t), 21916 r = [], 21917 l = !1; 21918 return ( 21919 n(t, function (t) { 21920 t.inYRange(o.y) && r.push(t), t.inRange(o.x, o.y) && (l = !0); 21921 }), 21922 a.intersect && !l && (r = []), 21923 r 21924 ); 21925 }, 21926 }, 21927 }; 21928 }; 21929 }, 21930 {}, 21931 ], 21932 28: [ 21933 function (t, e, n) { 21934 "use strict"; 21935 e.exports = function () { 21936 var t = function (t, e) { 21937 return this.construct(t, e), this; 21938 }; 21939 return ( 21940 (t.defaults = { 21941 global: { 21942 responsive: !0, 21943 responsiveAnimationDuration: 0, 21944 maintainAspectRatio: !0, 21945 events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"], 21946 hover: { onHover: null, mode: "nearest", intersect: !0, animationDuration: 400 }, 21947 onClick: null, 21948 defaultColor: "rgba(0,0,0,0.1)", 21949 defaultFontColor: "#666", 21950 defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", 21951 defaultFontSize: 12, 21952 defaultFontStyle: "normal", 21953 showLines: !0, 21954 elements: {}, 21955 legendCallback: function (t) { 21956 var e = []; 21957 e.push('<ul class="' + t.id + '-legend">'); 21958 for (var n = 0; n < t.data.datasets.length; n++) 21959 e.push('<li><span style="background-color:' + t.data.datasets[n].backgroundColor + '"></span>'), t.data.datasets[n].label && e.push(t.data.datasets[n].label), e.push("</li>"); 21960 return e.push("</ul>"), e.join(""); 21961 }, 21962 }, 21963 }), 21964 (t.Chart = t), 21965 t 21966 ); 21967 }; 21968 }, 21969 {}, 21970 ], 21971 29: [ 21972 function (t, e, n) { 21973 "use strict"; 21974 e.exports = function (t) { 21975 function e(t, e) { 21976 return i.where(t, function (t) { 21977 return t.position === e; 21978 }); 21979 } 21980 function n(t, e) { 21981 t.forEach(function (t, e) { 21982 return (t._tmpIndex_ = e), t; 21983 }), 21984 t.sort(function (t, n) { 21985 var i = e ? n : t, 21986 a = e ? t : n; 21987 return i.weight === a.weight ? i._tmpIndex_ - a._tmpIndex_ : i.weight - a.weight; 21988 }), 21989 t.forEach(function (t) { 21990 delete t._tmpIndex_; 21991 }); 21992 } 21993 var i = t.helpers; 21994 t.layoutService = { 21995 defaults: {}, 21996 addBox: function (t, e) { 21997 t.boxes || (t.boxes = []), (e.fullWidth = e.fullWidth || !1), (e.position = e.position || "top"), (e.weight = e.weight || 0
21997), t.boxes.push(e); 21998 }, 21999 removeBox: function (t, e) { 22000 var n = t.boxes ? t.boxes.indexOf(e) : -1; 22001 n !== -1 && t.boxes.splice(n, 1); 22002 }, 22003 configure: function (t, e, n) { 22004 for (var i, a = ["fullWidth", "position", "weight"], o = a.length, r = 0; r < o; ++r) (i = a[r]), n.hasOwnProperty(i) && (e[i] = n[i]); 22005 }, 22006 update: function (t, a, o) { 22007 function r(t) { 22008 var e, 22009 n = t.isHorizontal(); 22010 n ? ((e = t.update(t.fullWidth ? k : I, D)), (A -= e.height)) : ((e = t.update(C, S)), (I -= e.width)), P.push({ horizontal: n, minSize: e, box: t }); 22011 } 22012 function l(t) { 22013 var e = i.findNextWhere(P, function (e) { 22014 return e.box === t; 22015 }); 22016 if (e) 22017 if (t.isHorizontal()) { 22018 var n = { left: Math.max(L, _), right: Math.max(V, T), top: 0, bottom: 0 }; 22019 t.update(t.fullWidth ? k : I, w / 2, n); 22020 } else t.update(e.minSize.width, A); 22021 } 22022 function s(t) { 22023 var e = i.findNextWhere(P, function (e) { 22024 return e.box === t; 22025 }), 22026 n = { left: 0, right: 0, top: O, bottom: z }; 22027 e && t.update(e.minSize.width, A, n); 22028 } 22029 function u(t) { 22030 t.isHorizontal() 22031 ? ((t.left = t.fullWidth ? h : L), (t.right = t.fullWidth ? a - f : L + I), (t.top = q), (t.bottom = q + t.height), (q = t.bottom)) 22032 : ((t.left = H), (t.right = H + t.width), (t.top = O), (t.bottom = O + A), (H = t.right)); 22033 } 22034 if (t) { 22035 var d = t.options.layout, 22036 c = d ? d.padding : null, 22037 h = 0, 22038 f = 0, 22039 g = 0, 22040 p = 0; 22041 isNaN(c) ? ((h = c.left || 0), (f = c.right || 0), (g = c.top || 0), (p = c.bottom || 0)) : ((h = c), (f = c), (g = c), (p = c)); 22042 var m = e(t.boxes, "left"), 22043 v = e(t.boxes, "right"), 22044 b = e(t.boxes, "top"), 22045 x = e(t.boxes, "bottom"), 22046 y = e(t.boxes, "chartArea"); 22047 n(m, !0), n(v, !1), n(b, !0), n(x, !1); 22048 var k = a - h - f, 22049 w = o - g - p, 22050 M = k / 2, 22051 S = w / 2, 22052 C = (a - M) / (m.length + v.length), 22053 D = (o - S) / (b.length + x.length), 22054 I = k, 22055 A = w, 22056 P = []; 22057 i.each(m.concat(v, b, x), r); 22058 var _ = 0, 22059 T = 0, 22060 F = 0, 22061 R = 0; 22062 i.each(b.concat(x), function (t) { 22063 if (t.getPadding) { 22064 var e = t.getPadding(); 22065 (_ = Math.max(_, e.left)), (T = Math.max(T, e.right)); 22066 } 22067 }), 22068 i.each(m.concat(v), function (t) { 22069 if (t.getPadding) { 22070 var e = t.getPadding(); 22071 (F = Math.max(F, e.top)), (R = Math.max(R, e.bottom)); 22072 } 22073 }); 22074 var L = h, 22075 V = f, 22076 O = g, 22077 z = p; 22078 i.each(m.concat(v), l), 22079 i.each(m, function (t) { 22080 L += t.width; 22081 }), 22082 i.each(v, function (t) { 22083 V += t.width; 22084 }), 22085 i.each(b.concat(x), l), 22086 i.each(b, function (t) {
22087 O += t.height; 22088 }), 22089 i.each(x, function (t) { 22090 z += t.height; 22091 }), 22092 i.each(m.concat(v), s), 22093 (L = h), 22094 (V = f), 22095 (O = g), 22096 (z = p), 22097 i.each(m, function (t) { 22098 L += t.width; 22099 }), 22100 i.each(v, function (t) { 22101 V += t.width; 22102 }), 22103 i.each(b, function (t) { 22104 O += t.height; 22105 }), 22106 i.each(x, function (t) { 22107 z += t.height; 22108 }); 22109 var B = Math.max(_ - L, 0); 22110 (L += B), (V += Math.max(T - V, 0)); 22111 var W = Math.max(F - O, 0); 22112 (O += W), (z += Math.max(R - z, 0)); 22113 var N = o - O - z, 22114 E = a - L - V; 22115 (E === I && N === A) || 22116 (i.each(m, function (t) { 22117 t.height = N; 22118 }), 22119 i.each(v, function (t) { 22120 t.height = N; 22121 }), 22122 i.each(b, function (t) { 22123 t.fullWidth || (t.width = E); 22124 }), 22125 i.each(x, function (t) { 22126 t.fullWidth || (t.width = E); 22127 }), 22128 (A = N), 22129 (I = E)); 22130 var H = h + B, 22131 q = g + W; 22132 i.each(m.concat(b), u), 22133 (H += I), 22134 (q += A), 22135 i.each(v, u), 22136 i.each(x, u), 22137 (t.chartArea = { left: L, top: O, right: L + I, bottom: O + A }), 22138 i.each(y, function (e) { 22139 (e.left = t.chartArea.left), (e.top = t.chartArea.top), (e.right = t.chartArea.right), (e.bottom = t.chartArea.bottom), e.update(I, A); 22140 }); 22141 } 22142 }, 22143 }; 22144 }; 22145 }, 22146 {}, 22147 ], 22148 30: [ 22149 function (t, e, n) { 22150 "use strict"; 22151 e.exports = function (t) { 22152 var e = t.helpers; 22153 (t.defaults.global.plugins = {}), 22154 (t.plugins = { 22155 _plugins: [], 22156 _cacheId: 0, 22157 register: function (t) { 22158 var e = this._plugins; 22159 [].concat(t).forEach(function (t) { 22160 e.indexOf(t) === -1 && e.push(t); 22161 }), 22162 this._cacheId++; 22163 }, 22164 unregister: function (t) { 22165 var e = this._plugins; 22166 [].concat(t).forEach(function (t) { 22167 var n = e.indexOf(t); 22168 n !== -1 && e.splice(n, 1); 22169 }), 22170 this._cacheId++; 22171 }, 22172 clear: function () { 22173 (this._plugins = []), this._cacheId++; 22174 }, 22175 count: function () { 22176 return this._plugins.length; 22177 }, 22178 getAll: function () { 22179 return this._plugins; 22180 }, 22181 notify: function (t, e, n) { 22182 var i, 22183 a, 22184 o, 22185 r, 22186 l, 22187 s = this.descriptors(t),
22188 u = s.length; 22189 for (i = 0; i < u; ++i) if (((a = s[i]), (o = a.plugin), (l = o[e]), "function" == typeof l && ((r = [t].concat(n || [])), r.push(a.options), l.apply(o, r) === !1))) return !1; 22190 return !0; 22191 }, 22192 descriptors: function (n) { 22193 var i = n._plugins || (n._plugins = {}); 22194 if (i.id === this._cacheId) return i.descriptors; 22195 var a = [], 22196 o = [], 22197 r = (n && n.config) || {}, 22198 l = t.defaults.global.plugins, 22199 s = (r.options && r.options.plugins) || {}; 22200 return ( 22201 this._plugins.concat(r.plugins || []).forEach(function (t) { 22202 var n = a.indexOf(t); 22203 if (n === -1) { 22204 var i = t.id, 22205 r = s[i]; 22206 r !== !1 && (r === !0 && (r = e.clone(l[i])), a.push(t), o.push({ plugin: t, options: r || {} })); 22207 } 22208 }), 22209 (i.descriptors = o), 22210 (i.id = this._cacheId), 22211 o 22212 ); 22213 }, 22214 }), 22215 (t.pluginService = t.plugins), 22216 (t.PluginBase = t.Element.extend({})); 22217 }; 22218 }, 22219 {}, 22220 ], 22221 31: [ 22222 function (t, e, n) { 22223 "use strict"; 22224 e.exports = function (t) { 22225 function e(t, e, n) { 22226 return i.isArray(e) ? i.longestText(t, n, e) : t.measureText(e).width; 22227 } 22228 function n(e) { 22229 var n = i.getValueOrDefault, 22230 a = t.defaults.global, 22231 o = n(e.fontSize, a.defaultFontSize), 22232 r = n(e.fontStyle, a.defaultFontStyle), 22233 l = n(e.fontFamily, a.defaultFontFamily); 22234 return { size: o, style: r, family: l, font: i.fontString(o, r, l) }; 22235 } 22236 var i = t.helpers; 22237 (t.defaults.scale = { 22238 display: !0, 22239 position: "left", 22240 gridLines: { 22241 display: !0, 22242 color: "rgba(0, 0, 0, 0.1)", 22243 lineWidth: 1, 22244 drawBorder: !0, 22245 drawOnChartArea: !0, 22246 drawTicks: !0, 22247 tickMarkLength: 10, 22248 zeroLineWidth: 1, 22249 zeroLineColor: "rgba(0,0,0,0.25)", 22250 zeroLineBorderDash: [], 22251 zeroLineBorderDashOffset: 0, 22252 offsetGridLines: !1, 22253 borderDash: [], 22254 borderDashOffset: 0, 22255 }, 22256 scaleLabel: { labelString: "", display: !1 }, 22257 ticks: { beginAtZero: !1, minRotation: 0, maxRotation: 50, mirror: !1, padding: 0, reverse: !1, display: !0, autoSkip: !0, autoSkipPadding: 0, labelOffset: 0, callback: t.Ticks.formatters.values }, 22258 }), 22259 (t.Scale = t.Element.extend({ 22260 getPadding: function () { 22261 var t = this; 22262 return { left: t.paddingLeft || 0, top: t.paddingTop || 0, right: t.paddingRight || 0, bottom: t.paddingBottom || 0 }; 22263 }, 22264 beforeUpdate: function () { 22265 i.callback(this.options.beforeUpdate, [this]); 22266 }, 22267 update: function (t, e, n) { 22268 var a = this; 22269 return ( 22270 a.beforeUpdate(), 22271 (a.maxWidth = t), 22272 (a.maxHeight = e), 22273 (a.margins = i.extend({ left: 0, right: 0, top: 0, bottom: 0 }, n)), 22274 (a.longestTextCache = a.longestTextCache || {}), 22275 a.beforeSetDimensions(), 22276 a.setDimensions(), 22277 a.afterSetDimensions(), 22278 a.beforeDataLimits(), 22279 a.determineDataLimits(), 22280 a.afterDataLimits(), 22281 a.beforeBuildTicks(), 22282 a.buildTicks(), 22283 a.afterBuildTicks(), 22284 a.beforeTickToLabelConversion(), 22285 a.convertTicksToLabels(), 22286 a.afterTickToLabelConversion(), 22287 a.beforeCalculateTickRotation(), 22288 a.calculateTickRotation(), 22289 a.afterCalculateTickRotation(), 22290 a.beforeFit(), 22291 a.fit(), 22292 a.afterFit(), 22293 a.afterUpdate(), 22294 a.minSize 22295 ); 22296 }, 22297 afterUpdate: function () { 22298 i.callback(this.options.afterUpdate, [this]); 22299 }, 22300 beforeSetDimensions: function () { 22301 i.callback(this.options.beforeSetDimensions, [this]); 22302 }, 22303 setDimensions: function () { 22304 var t = this; 22305 t.isHorizontal() ? ((t.width = t.maxWidth), (t.left = 0), (t.right = t.width)) : ((t.height = t.maxHeight), (t.top = 0), (t.bottom = t.height)), 22306 (t.paddingLeft = 0), 22307 (t.paddingTop = 0), 22308 (t.paddingRight = 0), 22309 (t.paddingBottom = 0); 22310 }, 22311 afterSetDimensions: function () { 22312 i.callback(this.options.afterSetDimensions, [this]); 22313 }, 22314 beforeDataLimits: function () { 22315 i.callback(this.options.beforeDataLimits, [this]); 22316 }, 22317 determineDataLimits: i.noop, 22318 afterDataLimits: function () { 22319 i.callback(this.options.afterDataLimits, [this]); 22320 }, 22321 beforeBuildTicks: function () { 22322 i.callback(this.options.beforeBuildTicks, [this]); 22323 }, 22324 buildTicks: i.noop, 22325 afterBuildTicks: function () { 22326 i.callback(this.options.afterBuildTicks, [this]); 22327 }, 22328 beforeTickToLabelConversion: function () { 22329 i.callback(this.options.beforeTickToLabelConversion, [this]); 22330 }, 22331 convertTicksToLabels: function () { 22332 var t = this, 22333 e = t.options.ticks; 22334 t.ticks = t.ticks.map(e.userCallback || e.callback); 22335 }, 22336 afterTickToLabelConversion: function () { 22337 i.callback(this.options.afterTickToLabelConversion, [this]); 22338 }, 22339 beforeCalculateTickRotation: function () { 22340 i.callback(this.options.beforeCalculateTickRotation, [this]); 22341 }, 22342 calculateTickRotation: function () { 22343 var t = this, 22344 e = t.ctx, 22345 a = t.options.ticks, 22346 o = n(a); 22347 e.font = o.font; 22348 var r = a.minRotation || 0; 22349 if (t.options.display && t.isHorizontal()) 22350 for (var l, s, u = i.longestText(e, o.font, t.ticks, t.longestTextCache), d = u, c = t.getPixelForTick(1) - t.getPixelForTick(0) - 6; d > c && r < a.maxRotation; ) { 22351 var h = i.toRadians(r);
22352 if (((l = Math.cos(h)), (s = Math.sin(h)), s * u > t.maxHeight)) { 22353 r--; 22354 break; 22355 } 22356 r++, (d = l * u); 22357 } 22358 t.labelRotation = r; 22359 }, 22360 afterCalculateTickRotation: function () { 22361 i.callback(this.options.afterCalculateTickRotation, [this]); 22362 }, 22363 beforeFit: function () { 22364 i.callback(this.options.beforeFit, [this]); 22365 }, 22366 fit: function () { 22367 var t = this, 22368 a = (t.minSize = { width: 0, height: 0 }), 22369 o = t.options, 22370 r = o.ticks, 22371 l = o.scaleLabel, 22372 s = o.gridLines, 22373 u = o.display, 22374 d = t.isHorizontal(), 22375 c = n(r), 22376 h = 1.5 * n(l).size, 22377 f = o.gridLines.tickMarkLength; 22378 if ( 22379 (d ? (a.width = t.isFullWidth() ? t.maxWidth - t.margins.left - t.margins.right : t.maxWidth) : (a.width = u && s.drawTicks ? f : 0), 22380 d ? (a.height = u && s.drawTicks ? f : 0) : (a.height = t.maxHeight), 22381 l.display && u && (d ? (a.height += h) : (a.width += h)), 22382 r.display && u) 22383 ) { 22384 var g = i.longestText(t.ctx, c.font, t.ticks, t.longestTextCache), 22385 p = i.numberOfLabelLines(t.ticks), 22386 m = 0.5 * c.size; 22387 if (d) { 22388 t.longestLabelWidth = g; 22389 var v = i.toRadians(t.labelRotation), 22390 b = Math.cos(v), 22391 x = Math.sin(v), 22392 y = x * g + c.size * p + m * p; 22393 (a.height = Math.min(t.maxHeight, a.height + y)), (t.ctx.font = c.font); 22394 var k = t.ticks[0], 22395 w = e(t.ctx, k, c.font), 22396 M = t.ticks[t.ticks.length - 1], 22397 S = e(t.ctx, M, c.font); 22398 0 !== t.labelRotation 22399 ? ((t.paddingLeft = "bottom" === o.position ? b * w + 3 : b * m + 3), (t.paddingRight = "bottom" === o.position ? b * m + 3 : b * S + 3)) 22400 : ((t.paddingLeft = w / 2 + 3), (t.paddingRight = S / 2 + 3)); 22401 } else r.mirror ? (g = 0) : (g += t.options.ticks.padding), (a.width = Math.min(t.maxWidth, a.width + g)), (t.paddingTop = c.size / 2), (t.paddingBottom = c.size / 2); 22402 } 22403 t.handleMargins(), (t.width = a.width), (t.height = a.height); 22404 }, 22405 handleMargins: function () { 22406 var t = this; 22407 t.margins && 22408 ((t.paddingLeft = Math.max(t.paddingLeft - t.margins.left, 0)), 22409 (t.paddingTop = Math.max(t.paddingTop
22409- t.margins.top, 0)), 22410 (t.paddingRight = Math.max(t.paddingRight - t.margins.right, 0)), 22411 (t.paddingBottom = Math.max(t.paddingBottom - t.margins.bottom, 0))); 22412 }, 22413 afterFit: function () { 22414 i.callback(this.options.afterFit, [this]); 22415 }, 22416 isHorizontal: function () { 22417 return "top" === this.options.position || "bottom" === this.options.position; 22418 }, 22419 isFullWidth: function () { 22420 return this.options.fullWidth; 22421 }, 22422 getRightValue: function (t) { 22423 return null === t || "undefined" == typeof t 22424 ? NaN 22425 : "number" != typeof t || isFinite(t) 22426 ? "object" == typeof t 22427 ? t instanceof Date || t.isValid 22428 ? t 22429 : this.getRightValue(this.isHorizontal() ? t.x : t.y) 22430 : t 22431 : NaN; 22432 }, 22433 getLabelForIndex: i.noop, 22434 getPixelForValue: i.noop, 22435 getValueForPixel: i.noop, 22436 getPixelForTick: function (t, e) { 22437 var n = this; 22438 if (n.isHorizontal()) { 22439 var i = n.width - (n.paddingLeft + n.paddingRight), 22440 a = i / Math.max(n.ticks.length - (n.options.gridLines.offsetGridLines ? 0 : 1), 1), 22441 o = a * t + n.paddingLeft; 22442 e && (o += a / 2); 22443 var r = n.left + Math.round(o); 22444 return (r += n.isFullWidth() ? n.margins.left : 0); 22445 } 22446 var l = n.height - (n.paddingTop + n.paddingBottom); 22447 return n.top + t * (l / (n.ticks.length - 1)); 22448 }, 22449 getPixelForDecimal: function (t) { 22450 var e = this; 22451 if (e.isHorizontal()) { 22452 var n = e.width - (e.paddingLeft + e.paddingRight), 22453 i = n * t + e.paddingLeft, 22454 a = e.left + Math.round(i); 22455 return (a += e.isFullWidth() ? e.margins.left : 0); 22456 } 22457 return e.top + t * e.height; 22458 }, 22459 getBasePixel: function () { 22460 return this.getPixelForValue(this.getBaseValue()); 22461 }, 22462 getBaseValue: function () { 22463 var t = this, 22464 e = t.min, 22465 n = t.max; 22466 return t.beginAtZero ? 0 : e < 0 && n < 0 ? n : e > 0 && n > 0 ? e : 0; 22467 }, 22468 draw: function (e) { 22469 var a = this, 22470 o = a.options; 22471 if (o.display) { 22472 var r, 22473 l, 22474 s = a.ctx, 22475 u = t.defaults.global, 22476 d = o.ticks, 22477 c = o.gridLines, 22478 h = o.scaleLabel, 22479 f = 0 !== a.labelRotation, 22480 g = d.autoSkip, 22481 p = a.isHorizontal(); 22482 d.maxTicksLimit && (l = d.maxTicksLimit); 22483 var m = i.getValueOrDefault(d.fontColor, u.defaultFontColor), 22484 v = n(d), 22485 b = c.drawTicks ? c.tickMarkLength : 0, 22486 x = i.getValueOrDefault(h.fontColor, u.defaultFontColor), 22487 y = n(h), 22488 k = i.toRadians(a.labelRotation), 22489 w = Math.cos(k), 22490 M = a.longestLabelWidth * w; 22491 s.fillStyle = m; 22492 var S = []; 22493 if (p) { 22494 if ( 22495 ((r = !1), 22496 (M + d.autoSkipPadding) * a.ticks.length > a.width - (a.paddingLeft + a.paddingRight) && 22497 (r = 1 + Math.floor(((M + d.autoSkipPadding) * a.ticks.length) / (a.width - (a.paddingLeft + a.paddingRight)))), 22498 l && a.ticks.length > l) 22499 ) 22500 for (; !r || a.ticks.length / (r || 1) > l; ) r || (r = 1), (r += 1); 22501 g || (r = !1); 22502 } 22503 var C = "right" === o.position ? a.left : a.right - b, 22504 D = "right" === o.position ? a.left + b : a.right, 22505 I = "bottom" === o.position ? a.top : a.bottom - b, 22506 A = "bottom" === o.position ? a.top + b : a.bottom; 22507 if ( 22508 (i.each(a.ticks, function (t, n) { 22509 if (void 0 !== t && null !== t) { 22510 var l = a.ticks.length === n + 1, 22511 s = (r > 1 && n % r > 0) || (n % r === 0 && n + r >= a.ticks.length); 22512 if ((!s || l) && void 0 !== t && null !== t) { 22513 var h, g, m, v; 22514 n === ("undefined" != typeof a.zeroLineIndex ? a.zeroLineIndex : 0) 22515 ? ((h = c.zeroLineWi
22515dth), (g = c.zeroLineColor), (m = c.zeroLineBorderDash), (v = c.zeroLineBorderDashOffset)) 22516 : ((h = i.getValueAtIndexOrDefault(c.lineWidth, n)), 22517 (g = i.getValueAtIndexOrDefault(c.color, n)), 22518 (m = i.getValueOrDefault(c.borderDash, u.borderDash)), 22519 (v = i.getValueOrDefault(c.borderDashOffset, u.borderDashOffset))); 22520 var x, 22521 y, 22522 w, 22523 M, 22524 P, 22525 _, 22526 T, 22527 F, 22528 R, 22529 L, 22530 V = "middle", 22531 O = "middle"; 22532 if (p) { 22533 "bottom" === o.position 22534 ? ((O = f ? "middle" : "top"), (V = f ? "right" : "center"), (L = a.top + b)) 22535 : ((O = f ? "middle" : "bottom"), (V = f ? "left" : "center"), (L = a.bottom - b)); 22536 var z = a.getPixelForTick(n) + i.aliasPixel(h); 22537 (R = a.getPixelForTick(n, c.offsetGridLines) + d.labelOffset), (x = w = P = T = z), (y = I), (M = A), (_ = e.top), (F = e.bottom); 22538 } else { 22539 var B, 22540 W = "left" === o.position, 22541 N = d.padding; 22542 d.mirror ? ((V = W ? "left" : "right"), (B = N)) : ((V = W ? "right" : "left"), (B = b + N)), (R = W ? a.right - B : a.left + B); 22543 var E = a.getPixelForTick(n); 22544 (E += i.aliasPixel(h)), (L = a.getPixelForTick(n, c.offsetGridLines)), (x = C), (w = D), (P = e.left), (T = e.right), (y = M = _ = F = E); 22545 } 22546 S.push({ 22547 tx1: x, 22548 ty1: y, 22549 tx2: w, 22550 ty2: M, 22551 x1: P, 22552 y1: _, 22553 x2: T, 22554 y2: F, 22555 labelX: R, 22556 labelY: L, 22557 glWidth: h, 22558 glColor: g, 22559 glBorderDash: m, 22560 glBorderDashOffset: v, 22561 rotation: -1 * k, 22562 label: t, 22563 textBaseline: O, 22564 textAlign: V, 22565 }); 22566 } 22567 } 22568 }), 22569 i.each(S, function (t) { 22570 if ( 22571 (c.display && 22572 (s.save(), 22573 (s.lineWidth = t.glWidth), 22574 (s.strokeStyle = t.glColor), 22575 s.setLineDash && (s.setLineDash(t.glBorderDash), (s.lineDashOffset = t.glBorderDashOffset)), 22576 s.beginPath(), 22577 c.drawTicks && (s.moveTo(t.tx1, t.ty1), s.lineTo(t.tx2, t.ty2)), 22578 c.drawOnChartArea && (s.moveTo(t.x1, t.y1), s.lineTo(t.x2, t.y2)), 22579 s.stroke(), 22580 s.restore(
22580)), 22581 d.display) 22582 ) { 22583 s.save(), s.translate(t.labelX, t.labelY), s.rotate(t.rotation), (s.font = v.font), (s.textBaseline = t.textBaseline), (s.textAlign = t.textAlign); 22584 var e = t.label; 22585 if (i.isArray(e)) for (var n = 0, a = 0; n < e.length; ++n) s.fillText("" + e[n], 0, a), (a += 1.5 * v.size); 22586 else s.fillText(e, 0, 0); 22587 s.restore(); 22588 } 22589 }), 22590 h.display) 22591 ) { 22592 var P, 22593 _, 22594 T = 0; 22595 if (p) (P = a.left + (a.right - a.left) / 2), (_ = "bottom" === o.position ? a.bottom - y.size / 2 : a.top + y.size / 2); 22596 else { 22597 var F = "left" === o.position; 22598 (P = F ? a.left + y.size / 2 : a.right - y.size / 2), (_ = a.top + (a.bottom - a.top) / 2), (T = F ? -0.5 * Math.PI : 0.5 * Math.PI); 22599 } 22600 s.save(), s.translate(P, _), s.rotate(T), (s.textAlign = "center"), (s.textBaseline = "middle"), (s.fillStyle = x), (s.font = y.font), s.fillText(h.labelString, 0, 0
22600), s.restore(); 22601 } 22602 if (c.drawBorder) { 22603 (s.lineWidth = i.getValueAtIndexOrDefault(c.lineWidth, 0)), (s.strokeStyle = i.getValueAtIndexOrDefault(c.color, 0)); 22604 var R = a.left, 22605 L = a.right, 22606 V = a.top, 22607 O = a.bottom, 22608 z = i.aliasPixel(s.lineWidth); 22609 p ? ((V = O = "top" === o.position ? a.bottom : a.top), (V += z), (O += z)) : ((R = L = "left" === o.position ? a.right : a.left), (R += z), (L += z)), 22610 s.beginPath(), 22611 s.moveTo(R, V), 22612 s.lineTo(L, O), 22613 s.stroke(); 22614 } 22615 } 22616 }, 22617 })); 22618 }; 22619 }, 22620 {}, 22621 ], 22622 32: [ 22623 function (t, e, n) { 22624 "use strict"; 22625 e.exports = function (t) { 22626 var e = t.helpers; 22627 t.scaleService = { 22628 constructors: {}, 22629 defaults: {}, 22630 registerScaleType: function (t, n, i) { 22631 (this.constructors[t] = n), (this.defaults[t] = e.clone(i)); 22632 }, 22633 getScaleConstructor: function (t) { 22634 return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0; 22635 }, 22636 getScaleDefaults: function (n) { 22637 return this.defaults.hasOwnProperty(n) ? e.scaleMerge(t.defaults.scale, this.defaults[n]) : {}; 22638 }, 22639 updateScaleDefaults: function (t, n) { 22640 var i = this.defaults; 22641 i.hasOwnProperty(t) && (i[t] = e.extend(i[t], n)); 22642 }, 22643 addScalesToLayout: function (n) { 22644 e.each(n.scales, function (e) { 22645 (e.fullWidth = e.options.fullWidth), (e.position = e.options.position), (e.weight = e.options.weight), t.layoutService.addBox(n, e); 22646 }); 22647 }, 22648 }; 22649 }; 22650 }, 22651 {}, 22652 ], 22653 33: [ 22654 function (t, e, n) { 22655 "use strict"; 22656 e.exports = function (t) { 22657 var e = t.helpers; 22658 t.Ticks = { 22659 generators: { 22660 linear: function (t, n) { 22661 var i, 22662 a = []; 22663 if (t.stepSize && t.stepSize > 0) i = t.stepSize; 22664 else { 22665 var o = e.niceNum(n.max - n.min, !1); 22666 i = e.niceNum(o / (t.maxTicks - 1), !0); 22667 } 22668 var r = Math.floor(n.min / i) * i, 22669 l = Math.ceil(n.max / i) * i; 22670 t.min && t.max && t.stepSize && e.almostWhole((t.max - t.min) / t.stepSize, i / 1e3) && ((r = t.min), (l = t.max)); 22671 var s = (l - r) / i; 22672 (s = e.almostEquals(s, Math.round(s), i / 1e3) ? Math.round(s) : Math.ceil(s)), a.push(void 0 !== t.min ? t.min : r); 22673 for (var u = 1; u < s; ++u) a.push(r + u * i); 22674 return a.push(void 0 !== t.max ? t.max : l), a; 22675 }, 22676 logarithmic: function (t, n) { 22677 var i, 22678 a, 22679 o = [], 22680 r = e.getValueOrDefault, 22681 l = r(t.min, Math.pow(10, Math.floor(e.log10(n.min)))), 22682 s = Math.floor(e.log10(n.max)),
22683 u = Math.ceil(n.max / Math.pow(10, s)); 22684 0 === l 22685 ? ((i = Math.floor(e.log10(n.minNotZero))), (a = Math.floor(n.minNotZero / Math.pow(10, i))), o.push(l), (l = a * Math.pow(10, i))) 22686 : ((i = Math.floor(e.log10(l))), (a = Math.floor(l / Math.pow(10, i)))); 22687 do o.push(l), ++a, 10 === a && ((a = 1), ++i), (l = a * Math.pow(10, i)); 22688 while (i < s || (i === s && a < u)); 22689 var d = r(t.max, l); 22690 return o.push(d), o; 22691 }, 22692 }, 22693 formatters: { 22694 values: function (t) { 22695 return e.isArray(t) ? t : "" + t; 22696 }, 22697 linear: function (t, n, i) { 22698 var a = i.length > 3 ? i[2] - i[1] : i[1] - i[0]; 22699 Math.abs(a) > 1 && t !== Math.floor(t) && (a = t - Math.floor(t)); 22700 var o = e.log10(Math.abs(a)), 22701 r = ""; 22702 if (0 !== t) { 22703 var l = -1 * Math.floor(o); 22704 (l = Math.max(Math.min(l, 20), 0)), (r = t.toFixed(l)); 22705 } else r = "0"; 22706 return r; 22707 }, 22708 logarithmic: function (t, n, i) { 22709 var a = t / Math.pow(10, Math.floor(e.log10(t))); 22710 return 0 === t ? "0" : 1 === a || 2 === a || 5 === a || 0 === n || n === i.length - 1 ? t.toExponential() : ""; 22711 }, 22712 }, 22713 }; 22714 }; 22715 }, 22716 {}, 22717 ], 22718 34: [ 22719 function (t, e, n) { 22720 "use strict"; 22721 e.exports = function (t) { 22722 function e(t, e) { 22723 var n = s.color(t); 22724 return n.alpha(e * n.alpha()).rgbaString(); 22725 } 22726 function n(t, e) { 22727 return e && (s.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t; 22728 } 22729 function i(t) { 22730 var e = t._xScale, 22731 n = t._yScale || t._scale, 22732 i = t._index, 22733 a = t._datasetIndex; 22734 return { xLabel: e ? e.getLabelForIndex(i, a) : "", yLabel: n ? n.getLabelForIndex(i, a) : "", index: i, datasetIndex: a, x: t._model.x, y: t._model.y }; 22735 } 22736 function a(e) { 22737 var n = t.defaults.global, 22738 i = s.getValueOrDefault; 22739 return { 22740 xPadding: e.xPadding, 22741 yPadding: e.yPadding, 22742 xAlign: e.xAlign, 22743 yAlign: e.yAlign, 22744 bodyFontColor: e.bodyFontColor, 22745 _bodyFontFamily: i(e.bodyFontFamily, n.defaultFontFamily), 22746 _bodyFontStyle: i(e.bodyFontStyle, n.defaultFontStyle), 22747 _bodyAlign: e.bodyAlign, 22748 bodyFontSize: i(e.bodyFontSize, n.defaultFontSize), 22749 bodySpacing: e.bodySpacing, 22750 titleFontColor: e.titleFontColor, 22751 _titleFontFamily: i(e.titleFontFamily, n.defaultFontFamily), 22752 _titleFontStyle: i(e.titleFontStyle, n.defaultFontStyle), 22753 titleFontSize: i(e.titleFontSize, n.defaultFontSize), 22754 _titleAlign: e.titleAlign, 22755 titleSpacing: e.titleSpacing, 22756 titleMarginBottom: e.titleMarginBottom, 22757 footerFontColor: e.footerFontColor, 22758 _footerFontFamily: i(e.footerFontFamily, n.defaultFontFamily), 22759 _footerFontStyle: i(e.footerFontStyle, n.defaultFontStyle), 22760 footerFontSize: i(e.footerFontSize, n.defaultFontSize), 22761 _footerAlign: e.footerAlign, 22762 footerSpacing: e.footerSpacing, 22763 footerMarginTop: e.footerMarginTop, 22764 caretSize: e.caretSize, 22765 cornerRadius: e.cornerRadius, 22766 backgroundColor: e.backgroundColor, 22767 opacity: 0,
22768 legendColorBackground: e.multiKeyBackground, 22769 displayColors: e.displayColors, 22770 borderColor: e.borderColor, 22771 borderWidth: e.borderWidth, 22772 }; 22773 } 22774 function o(t, e) { 22775 var n = t._chart.ctx, 22776 i = 2 * e.yPadding, 22777 a = 0, 22778 o = e.body, 22779 r = o.reduce(function (t, e) { 22780 return t + e.before.length + e.lines.length + e.after.length; 22781 }, 0); 22782 r += e.beforeBody.length + e.afterBody.length; 22783 var l = e.title.length, 22784 u = e.footer.length, 22785 d = e.titleFontSize, 22786 c = e.bodyFontSize, 22787 h = e.footerFontSize; 22788 (i += l * d), 22789 (i += l ? (l - 1) * e.titleSpacing : 0), 22790 (i += l ? e.titleMarginBottom : 0), 22791 (i += r * c), 22792 (i += r ? (r - 1) * e.bodySpacing : 0), 22793 (i += u ? e.footerMarginTop : 0), 22794 (i += u * h), 22795 (i += u ? (u - 1) * e.footerSpacing : 0); 22796 var f = 0, 22797 g = function (t) { 22798 a = Math.max(a, n.measureText(t).width + f); 22799 }; 22800 return ( 22801 (n.font = s.fontString(d, e._titleFontStyle, e._titleFontFamily)), 22802 s.each(e.title, g), 22803 (n.font = s.fontString(c, e._bodyFontStyle, e._bodyFontFamily)), 22804 s.each(e.beforeBody.concat(e.afterBody), g), 22805 (f = e.displayColors ? c + 2 : 0), 22806 s.each(o, function (t) { 22807 s.each(t.before, g), s.each(t.lines, g), s.each(t.after, g); 22808 }), 22809 (f = 0), 22810 (n.font = s.fontString(h, e._footerFontStyle, e._footerFontFamily)), 22811 s.each(e.footer, g), 22812 (a += 2 * e.xPadding), 22813 { width: a, height: i } 22814 ); 22815 } 22816 function r(t, e) { 22817 var n = t._model, 22818 i = t._chart, 22819 a = t._chart.chartArea, 22820 o = "center", 22821 r = "center"; 22822 n.y < e.height ? (r = "top") : n.y > i.height - e.height && (r = "bottom"); 22823 var l, 22824 s, 22825 u, 22826 d, 22827 c, 22828 h = (a.left + a.right) / 2, 22829 f = (a.top + a.bottom) / 2; 22830 "center" === r 22831 ? ((l = function (t) { 22832 return t <= h; 22833 }), 22834 (s = function (t) { 22835 return t > h; 22836 })) 22837 : ((l = function (t) { 22838 return t <= e.width / 2; 22839 }), 22840 (s = function (t) { 22841 return t >= i.width - e.width / 2; 22842 })), 22843 (u = function (t) { 22844 return t + e.width > i.width; 22845 }), 22846 (d = function (t) { 22847 return t - e.width < 0; 22848 }), 22849 (c = function (t) { 22850 return t <= f ? "top" : "bottom"; 22851 }), 22852 l(n.x) ? ((o = "left"), u(n.x) && ((o = "center"), (r = c(n.y)))) : s(n.x) && ((o = "right"), d(n.x) && ((o = "center"), (r = c(n.y)))); 22853 var g = t._options; 22854 return { xAlign: g.xAlign ? g.xAlign : o, yAlign: g.yAlign ? g.yAlign : r }; 22855 } 22856 function l(t, e, n) { 22857 var i = t.x, 22858 a = t.y, 22859 o = t.caretSize, 22860 r = t.caretPadding, 22861 l = t.cornerRadius, 22862 s = n.xAlign, 22863 u = n.yAlign, 22864 d = o + r, 22865 c = l + r; 22866 return ( 22867 "right" === s ? (i -= e.width) : "center" === s && (i -= e.width / 2), 22868 "top" === u ? (a += d) : (a -= "bottom" === u ? e.height + d : e.height / 2), 22869 "center" === u ? ("left" === s ? (i += d) : "right" === s && (i -= d)) : "left" === s ? (i -= c) : "right" === s && (i += c), 22870 { x: i, y: a } 22871 ); 22872 } 22873 var s = t.helpers; 22874 (t.defaults.global.tooltips = { 22875 enabled: !0, 22876 custom: null, 22877 mode: "nearest", 22878 position: "average", 22879 intersect: !0, 22880 backgroundColor: "rgba(0,0,0,0.8)", 22881 titleFontStyle: "bold", 22882 titleSpacing: 2, 22883 titleMarginBottom: 6, 22884 titleFontColor: "#fff", 22885 titleAlign: "left", 22886 bodySpacing: 2, 22887 bodyFontColor: "#fff", 22888 bodyAlign: "left", 22889 footerFontStyle: "bold", 22890 footerSpacing: 2, 22891 footerMarginTop: 6, 22892 footerFontColor: "#fff", 22893 footerAlign: "left", 22894 yPadding: 6, 22895 xPadding: 6, 22896 caretPadding: 2, 22897 caretSize: 5, 22898 cornerRadius: 6,
22899 multiKeyBackground: "#fff", 22900 displayColors: !0, 22901 borderColor: "rgba(0,0,0,0)", 22902 borderWidth: 0, 22903 callbacks: { 22904 beforeTitle: s.noop, 22905 title: function (t, e) { 22906 var n = "", 22907 i = e.labels, 22908 a = i ? i.length : 0; 22909 if (t.length > 0) { 22910 var o = t[0]; 22911 o.xLabel ? (n = o.xLabel) : a > 0 && o.index < a && (n = i[o.index]); 22912 } 22913 return n; 22914 }, 22915 afterTitle: s.noop, 22916 beforeBody: s.noop, 22917 beforeLabel: s.noop, 22918 label: function (t, e) { 22919 var n = e.datasets[t.datasetIndex].label || ""; 22920 return n && (n += ": "), (n += t.yLabel); 22921 }, 22922 labelColor: function (t, e) { 22923 var n = e.getDatasetMeta(t.datasetIndex), 22924 i = n.data[t.index], 22925 a = i._view; 22926 return { borderColor: a.borderColor, backgroundColor: a.backgroundColor }; 22927 }, 22928 afterLabel: s.noop, 22929 afterBody: s.noop, 22930 beforeFooter: s.noop, 22931 footer: s.noop, 22932 afterFooter: s.noop, 22933 }, 22934 }), 22935 (t.Tooltip = t.Element.extend({ 22936 initialize: function () { 22937 this._model = a(this._options); 22938 }, 22939 getTitle: function () { 22940 var t = this, 22941 e = t._options, 22942 i = e.callbacks, 22943 a = i.beforeTitle.apply(t, arguments), 22944 o = i.title.apply(t, arguments), 22945 r = i.afterTitle.apply(t, arguments), 22946 l = []; 22947 return (l = n(l, a)), (l = n(l, o)), (l = n(l, r)); 22948 }, 22949 getBeforeBody: function () { 22950 var t = this._options.callbacks.beforeBody.apply(this, arguments); 22951 return s.isArray(t) ? t : void 0 !== t ? [t] : []; 22952 }, 22953 getBody: function (t, e) { 22954 var i = this, 22955 a = i._options.callbacks, 22956 o = []; 22957 return ( 22958 s.each(t, function (t) { 22959 var r = { before: [], lines: [], after: [] }; 22960 n(r.before, a.beforeLabel.call(i, t, e)), n(r.lines, a.label.call(i, t, e)), n(r.after, a.afterLabel.call(i, t, e)), o.push(r); 22961 }), 22962 o 22963 ); 22964 }, 22965 getAfterBody: function () { 22966 var t = this._options.callbacks.afterBody.apply(this, arguments); 22967 return s.isArray(t) ? t : void 0 !== t ? [t] : []; 22968 }, 22969 getFooter: function () { 22970 var t = this, 22971 e = t._options.callbacks, 22972 i = e.beforeFooter.apply(t, arguments), 22973 a = e.footer.apply(t, arguments), 22974 o = e.afterFooter.apply(t, arguments), 22975 r = []; 22976 return (r = n(r, i)), (r = n(r, a)), (r = n(r, o)); 22977 }, 22978 update: function (e) { 22979 var n, 22980 u, 22981 d = this, 22982 c = d._options, 22983 h = d._model, 22984 f = (d._model = a(c)), 22985 g = d._active, 22986 p = d._data, 22987 m = { xAlign: h.xAlign, yAlign: h.yAlign }, 22988 v = { x: h.x, y: h.y }, 22989 b = { width: h.width, height: h.height }, 22990 x = { x: h.caretX, y: h.caretY }; 22991 if (g.length) { 22992 f.opacity = 1; 22993 var y = []; 22994 x = t.Tooltip.positioners[c.position](g, d._eventPosition); 22995 var k = []; 22996 for (n = 0, u = g.length; n < u; ++n) k.push(i(g[n])); 22997 c.filter && 22998 (k = k.filter(function (t) { 22999 return c.filter(t, p); 23000 })), 23001 c.itemSort && 23002 (k = k.sort(function (t, e) { 23003 return c.itemSort(t, e, p); 23004 })), 23005 s.each(k, function (t) { 23006 y.push(c.callbacks.labelColor.call(d, t, d._chart)); 23007 }), 23008 (f.title = d.getTitle(k, p)), 23009 (f.beforeBody = d.getBeforeBody(k, p)), 23010 (f.body = d.getBody(k, p)), 23011 (f.afterBody = d.getAfterBody(k, p)), 23012 (f.footer = d.getFooter(k, p)), 23013 (f.x = Math.round(x.x)), 23014 (f.y = Math.round(x.y)), 23015 (f.caretPadding = c.caretPadding), 23016 (f.labelColors = y), 23017 (f.dataPoints = k), 23018 (b = o(this, f)), 23019 (m = r(this, b)), 23020 (v = l(f, b, m)); 23021 } else f.opacity = 0; 23022 return ( 23023 (f.xAlign = m.xAlign), 23024 (f.yAlign = m.yAlign), 23025 (f.x = v.x), 23026 (f.y = v.y), 23027 (f.width = b.width),
23028 (f.height = b.height), 23029 (f.caretX = x.x), 23030 (f.caretY = x.y), 23031 (d._model = f), 23032 e && c.custom && c.custom.call(d, f), 23033 d 23034 ); 23035 }, 23036 drawCaret: function (t, e) { 23037 var n = this._chart.ctx, 23038 i = this._view, 23039 a = this.getCaretPosition(t, e, i); 23040 n.lineTo(a.x1, a.y1), n.lineTo(a.x2, a.y2), n.lineTo(a.x3, a.y3); 23041 }, 23042 getCaretPosition: function (t, e, n) { 23043 var i, 23044 a, 23045 o, 23046 r, 23047 l, 23048 s, 23049 u = n.caretSize, 23050 d = n.cornerRadius, 23051 c = n.xAlign, 23052 h = n.yAlign, 23053 f = t.x, 23054 g = t.y, 23055 p = e.width, 23056 m = e.height; 23057 if ("center" === h) (l = g + m / 2), "left" === c ? ((i = f), (a = i - u), (o = i), (r = l + u), (s = l - u)) : ((i = f + p), (a = i + u), (o = i), (r = l - u), (s = l + u)); 23058 else if (("left" === c ? ((a = f + d + u), (i = a - u), (o = a + u)) : "right" === c ? ((a = f + p - d - u), (i = a - u), (o = a + u)) : ((a = f + p / 2), (i = a - u), (o = a + u)), "top" === h)) 23059 (r = g), (l = r - u), (s = r); 23060 else { 23061 (r = g + m), (l = r + u), (s = r); 23062 var v = o; 23063 (o = i), (i = v); 23064 } 23065 return { x1: i, x2: a, x3: o, y1: r, y2: l, y3: s }; 23066 }, 23067 drawTitle: function (t, n, i, a) { 23068 var o = n.title; 23069 if (o.length) { 23070 (i.textAlign = n._titleAlign), (i.textBaseline = "top"); 23071 var r = n.titleFontSize, 23072 l = n.titleSpacing; 23073 (i.fillStyle = e(n.titleFontColor, a)), (i.font = s.fontString(r, n._titleFontStyle, n._titleFontFamily)); 23074 var u, d; 23075 for (u = 0, d = o.length; u < d; ++u) i.fillText(o[u], t.x, t.y), (t.y += r + l), u + 1 === o.length && (t.y += n.titleMarginBottom - l); 23076 } 23077 }, 23078 drawBody: function (t, n, i, a) { 23079 var o = n.bodyFontSize, 23080 r = n.bodySpacing, 23081 l = n.body; 23082 (i.textAlign = n._bodyAlign), (i.textBaseline = "top"); 23083 var u = e(n.bodyFontColor, a); 23084 (i.fillStyle = u), (i.font = s.fontString(o, n._bodyFontStyle, n._bodyFontFamily)); 23085 var d = 0, 23086 c = function (e) { 23087 i.fillText(e, t.x + d, t.y), (t.y += o + r); 23088 }; 23089 s.each(n.beforeBody, c); 23090 var h = n.displayColors; 23091 (d = h ? o + 2 : 0), 23092 s.each(l, function (r, l) { 23093 s.each(r.before, c), 23094 s.each(r.lines, function (r) { 23095 h && 23096 ((i.fillStyle = e(n.legendColorBackgroun
23096d, a)), 23097 i.fillRect(t.x, t.y, o, o), 23098 (i.strokeStyle = e(n.labelColors[l].borderColor, a)), 23099 i.strokeRect(t.x, t.y, o, o), 23100 (i.fillStyle = e(n.labelColors[l].backgroundColor, a)), 23101 i.fillRect(t.x + 1, t.y + 1, o - 2, o - 2), 23102 (i.fillStyle = u)), 23103 c(r); 23104 }), 23105 s.each(r.after, c); 23106 }), 23107 (d = 0), 23108 s.each(n.afterBody, c), 23109 (t.y -= r); 23110 }, 23111 drawFooter: function (t, n, i, a) { 23112 var o = n.footer; 23113 o.length && 23114 ((t.y += n.footerMarginTop), 23115 (i.textAlign = n._footerAlign), 23116 (i.textBaseline = "top"), 23117 (i.fillStyle = e(n.footerFontColor, a)), 23118 (i.font = s.fontString(n.footerFontSize, n._footerFontStyle, n._footerFontFamily)), 23119 s.each(o, function (e) { 23120 i.fillText(e, t.x, t.y), (t.y += n.footerFontSize + n.footerSpacing); 23121 })); 23122 }, 23123 drawBackground: function (t, n, i, a, o) { 23124 (i.fillStyle = e(n.backgroundColor, o)), (i.strokeStyle = e(n.borderColor, o)), (i.lineWidth = n.borderWidth); 23125 var r = n.xAlign, 23126 l = n.yAlign, 23127 s = t.x, 23128 u = t.y, 23129 d = a.width, 23130 c = a.height, 23131 h = n.cornerRadius; 23132 i.beginPath(), 23133 i.moveTo(s + h, u), 23134 "top" === l && this.drawCaret(t, a), 23135 i.lineTo(s + d - h, u), 23136 i.quadraticCurveTo(s + d, u, s + d, u + h), 23137 "center" === l && "right" === r && this.drawCaret(t, a), 23138 i.lineTo(s + d, u + c - h), 23139 i.quadraticCurveTo(s + d, u + c, s + d - h, u + c), 23140 "bottom" === l && this.drawCaret(t, a), 23141 i.lineTo(s + h, u + c), 23142 i.quadraticCurveTo(s, u + c, s, u + c - h), 23143 "center" === l && "left" === r && this.drawCaret(t, a), 23144 i.lineTo(s, u + h), 23145 i.quadraticCurveTo(s, u, s + h, u), 23146 i.closePath(), 23147 i.fill(), 23148 n.borderWidth > 0 && i.stroke(); 23149 }, 23150 draw: function () { 23151 var t = this._chart.ctx, 23152 e = this._view; 23153 if (0 !== e.opacity) { 23154 var n = { width: e.width, height: e.height }, 23155 i = { x: e.x, y: e.y }, 23156 a = Math.abs(e.opacity < 0.001) ? 0 : e.opacity, 23157 o = e.title.length || e.beforeBody.length || e.body.length || e.afterBody.length || e.footer.length; 23158 this._options.enabled && o && (this.drawBackgroun
23158d(i, e, t, n, a), (i.x += e.xPadding), (i.y += e.yPadding), this.drawTitle(i, e, t, a), this.drawBody(i, e, t, a), this.drawFooter(i, e, t, a)); 23159 } 23160 }, 23161 handleEvent: function (t) { 23162 var e = this, 23163 n = e._options, 23164 i = !1; 23165 if (((e._lastActive = e._lastActive || []), "mouseout" === t.type ? (e._active = []) : (e._active = e._chart.getElementsAtEventForMode(t, n.mode, n)), (i = !s.arrayEquals(e._active, e._lastActive)), !i)) 23166 return !1; 23167 if (((e._lastActive = e._active), n.enabled || n.custom)) { 23168 e._eventPosition = { x: t.x, y: t.y }; 23169 var a = e._model; 23170 e.update(!0), e.pivot(), (i |= a.x !== e._model.x || a.y !== e._model.y); 23171 } 23172 return i; 23173 }, 23174 })), 23175 (t.Tooltip.positioners = { 23176 average: function (t) { 23177 if (!t.length) return !1; 23178 var e, 23179 n, 23180 i = 0, 23181 a = 0, 23182 o = 0; 23183 for (e = 0, n = t.length; e < n; ++e) { 23184 var r = t[e]; 23185 if (r && r.hasValue()) { 23186 var l = r.tooltipPosition(); 23187 (i += l.x), (a += l.y), ++o; 23188 } 23189 } 23190 return { x: Math.round(i / o), y: Math.round(a / o) }; 23191 }, 23192 nearest: function (t, e) { 23193 var n, 23194 i, 23195 a, 23196 o = e.x, 23197 r = e.y, 23198 l = Number.POSITIVE_INFINITY; 23199 for (i = 0, a = t.length; i < a; ++i) { 23200 var u = t[i]; 23201 if (u && u.hasValue()) { 23202 var d = u.getCenterPoint(), 23203 c = s.distanceBetweenPoints(e, d); 23204 c < l && ((l = c), (n = u)); 23205 } 23206 } 23207 if (n) { 23208 var h = n.tooltipPosition(); 23209 (o = h.x), (r = h.y); 23210 } 23211 return { x: o, y: r }; 23212 }, 23213 }); 23214 }; 23215 }, 23216 {}, 23217 ], 23218 35: [ 23219 function (t, e, n) { 23220 "use strict"; 23221 e.exports = function (t) { 23222 var e = t.helpers, 23223 n = t.defaults.global; 23224 (n.elements.arc = { backgroundColor: n.defaultColor, borderColor: "#fff", borderWidth: 2 }), 23225 (t.elements.Arc = t.Element.extend({ 23226 inLabelRange: function (t) { 23227 var e = this._view; 23228 return !!e && Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2); 23229 }, 23230 inRange: function (t, n) { 23231 var i = this._view; 23232 if (i) { 23233 for (var a = e.getAngleFromPoint(i, { x: t, y: n }), o = a.angle, r = a.distance, l = i.startAngle, s = i.endAngle; s < l; ) s += 2 * Math.PI; 23234 for (; o > s; ) o -= 2 * Math.PI; 23235 for (; o < l; ) o += 2 * Math.PI; 23236 var u = o >= l && o <= s, 23237 d = r >= i.innerRadius && r <= i.outerRadius; 23238 return u && d; 23239 } 23240 return !1; 23241 }, 23242 getCenterPoint: function () { 23243 var t = this._view, 23244 e = (t.startAngle + t.endAngle) / 2, 23245 n = (t.innerRadius + t.outerRadius) / 2;
23246 return { x: t.x + Math.cos(e) * n, y: t.y + Math.sin(e) * n }; 23247 }, 23248 getArea: function () { 23249 var t = this._view; 23250 return Math.PI * ((t.endAngle - t.startAngle) / (2 * Math.PI)) * (Math.pow(t.outerRadius, 2) - Math.pow(t.innerRadius, 2)); 23251 }, 23252 tooltipPosition: function () { 23253 var t = this._view, 23254 e = t.startAngle + (t.endAngle - t.startAngle) / 2, 23255 n = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius; 23256 return { x: t.x + Math.cos(e) * n, y: t.y + Math.sin(e) * n }; 23257 }, 23258 draw: function () { 23259 var t = this._chart.ctx, 23260 e = this._view, 23261 n = e.startAngle, 23262 i = e.endAngle; 23263 t.beginPath(), 23264 t.arc(e.x, e.y, e.outerRadius, n, i), 23265 t.arc(e.x, e.y, e.innerRadius, i, n, !0), 23266 t.closePath(), 23267 (t.strokeStyle = e.borderColor), 23268 (t.lineWidth = e.borderWidth), 23269 (t.fillStyle = e.backgroundColor), 23270 t.fill(), 23271 (t.lineJoin = "bevel"), 23272 e.borderWidth && t.stroke(); 23273 }, 23274 })); 23275 }; 23276 }, 23277 {}, 23278 ], 23279 36: [ 23280 function (t, e, n) { 23281 "use strict"; 23282 e.exports = function (t) { 23283 var e = t.helpers, 23284 n = t.defaults.global; 23285 (t.defaults.global.elements.line = { 23286 tension: 0.4, 23287 backgroundColor: n.defaultColor, 23288 borderWidth: 3, 23289 borderColor: n.defaultColor, 23290 borderCapStyle: "butt", 23291 borderDash: [], 23292 borderDashOffset: 0, 23293 borderJoinStyle: "miter", 23294 capBezierPoints: !0, 23295 fill: !0, 23296 }), 23297 (t.elements.Line = t.Element.extend({ 23298 draw: function () { 23299 var t, 23300 i, 23301 a, 23302 o, 23303 r = this, 23304 l = r._view, 23305 s = r._chart.ctx, 23306 u = l.spanGaps, 23307 d = r._children.slice(), 23308 c = n.elements.line, 23309 h = -1; 23310 for ( 23311 r._loop && d.length && d.push(d[0]), 23312 s.save(), 23313 s.lineCap = l.borderCapStyle || c.borderCapStyle, 23314 s.setLineDash && s.setLineDash(l.borderDash || c.borderDash), 23315 s.lineDashOffset = l.borderDashOffset || c.borderDashOffset, 23316 s.lineJoin = l.borderJoinStyle || c.borderJoinStyle, 23317 s.lineWidth = l.borderWidth || c.borderWidth, 23318 s.strokeStyle = l.borderColor || n.defaultColor, 23319 s.beginPath(), 23320 h = -1, 23321 t = 0; 23322 t < d.length; 23323 ++t 23324 ) 23325 (i = d[t]), 23326 (a = e.previousItem(d, t)), 23327 (o = i._view), 23328 0 === t ? o.skip || (s.moveTo(o.x, o.y), (h = t)) : ((a = h === -1 ? a : d[h]), o.skip || ((h !== t - 1 && !u) || h === -1 ? s.moveTo(o.x, o.y) : e.canvas.lineTo(s, a._view, i._view), (h = t)));
23329 s.stroke(), s.restore(); 23330 }, 23331 })); 23332 }; 23333 }, 23334 {}, 23335 ], 23336 37: [ 23337 function (t, e, n) { 23338 "use strict"; 23339 e.exports = function (t) { 23340 function e(t) { 23341 var e = this._view; 23342 return !!e && Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hitRadius, 2); 23343 } 23344 function n(t) { 23345 var e = this._view; 23346 return !!e && Math.pow(t - e.y, 2) < Math.pow(e.radius + e.hitRadius, 2); 23347 } 23348 var i = t.helpers, 23349 a = t.defaults.global, 23350 o = a.defaultColor; 23351 (a.elements.point = { radius: 3, pointStyle: "circle", backgroundColor: o, borderWidth: 1, borderColor: o, hitRadius: 1, hoverRadius: 4, hoverBorderWidth: 1 }), 23352 (t.elements.Point = t.Element.extend({ 23353 inRange: function (t, e) { 23354 var n = this._view; 23355 return !!n && Math.pow(t - n.x, 2) + Math.pow(e - n.y, 2) < Math.pow(n.hitRadius + n.radius, 2); 23356 }, 23357 inLabelRange: e, 23358 inXRange: e, 23359 inYRange: n, 23360 getCenterPoint: function () { 23361 var t = this._view; 23362 return { x: t.x, y: t.y }; 23363 }, 23364 getArea: function () { 23365 return Math.PI * Math.pow(this._view.radius, 2); 23366 }, 23367 tooltipPosition: function () { 23368 var t = this._view; 23369 return { x: t.x, y: t.y, padding: t.radius + t.borderWidth }; 23370 }, 23371 draw: function (e) { 23372 var n = this._view, 23373 r = this._model, 23374 l = this._chart.ctx, 23375 s = n.pointStyle, 23376 u = n.radius, 23377 d = n.x, 23378 c = n.y, 23379 h = t.helpers.color, 23380 f = 1.01, 23381 g = 0; 23382 n.skip || 23383 ((l.strokeStyle = n.borderColor || o), 23384 (l.lineWidth = i.getValueOrDefault(n.borderWidth, a.elements.point.borderWidth)), 23385 (l.fillStyle = n.backgroundColor || o), 23386 void 0 !== e && 23387 (r.x < e.left || e.right * f < r.x || r.y < e.top || e.bottom * f < r.y) && 23388 (r.x < e.left 23389 ? (g = (d - r.x) / (e.left - r.x)) 23390 : e.right * f < r.x 23391 ? (g = (r.x - d) / (r.x - e.right)) 23392 : r.y < e.top 23393 ? (g = (c - r.y) / (e.top - r.y)) 23394 : e.bottom * f < r.y && (g = (r.y - c) / (r.y - e.bottom)), 23395 (g = Math.round(100 * g) / 100), 23396 (l.strokeStyle = h(l.strokeStyle).alpha(g).rgbString()), 23397 (l.fillStyle = h(l.fillStyle).alpha(g).rgbString())), 23398 t.canvasHelpers.drawPoint(l, s, u, d, c)); 23399 }, 23400 })); 23401 }; 23402 }, 23403 {}, 23404 ], 23405 38: [ 23406 function (t, e, n) { 23407 "use strict"; 23408 e.exports = function (t) { 23409 function e(t) { 23410 return void 0 !== t._view.width; 23411 } 23412 function n(t) { 23413 var n, 23414 i, 23415 a, 23416 o, 23417 r = t._view; 23418 if (e(t)) { 23419 var l = r.width / 2; 23420 (n = r.x - l), (i = r.x + l), (a = Math.min(r.y, r.base)), (o = Math.max(r.y, r.base)); 23421 } else { 23422 var s = r.height / 2; 23423 (n = Math.min(r.x, r.base)), (i = Math.max(r.x, r.base)), (a = r.y - s), (o = r.y + s); 23424 } 23425 return { left: n, top: a, right: i, bottom: o }; 23426 } 23427 var i = t.defaults.global; 23428 (i.elements.rectangle = { backgroundColor: i.defaultColor, borderWidth: 0, borderColor: i.defaultColor, borderSkipped: "bottom" }), 23429 (t.elements.Rectangle = t.Element.extend({ 23430 draw: function () { 23431 function t(t) { 23432 return v[(x + t) % 4]; 23433 } 23434 var e, 23435 n, 23436 i, 23437 a, 23438 o, 23439 r, 23440 l, 23441 s = this._chart.ctx, 23442 u = this._view, 23443 d = u.borderWidth; 23444 if ( 23445 (u.horizontal 23446 ? ((e = u.base), (n = u.x), (i = u.y - u.height / 2), (a = u.y + u.height / 2), (o = n > e ? 1 : -1), (r = 1), (l = u.borderSkipped || "left")) 23447 : ((e = u.x - u.width / 2), (n = u.x + u.width / 2), (i = u.y), (a = u.base), (o = 1), (r = a > i ? 1 : -1), (l = u.borderSkipped || "bottom")), 23448 d) 23449 ) { 23450 var c = Math.min(Math.abs(e - n), Math.abs(i - a)); 23451 d = d > c ? c : d; 23452 var h = d / 2, 23453 f = e + ("left" !== l ? h * o : 0), 23454 g = n + ("right" !== l ? -h * o : 0), 23455 p = i + ("top" !== l ? h * r : 0), 23456 m = a + ("bottom" !== l ? -h * r : 0); 23457 f !== g && ((i = p), (a = m)), p !== m && ((e = f), (n = g)); 23458 } 23459 s.beginPath(), (s.fillStyle = u.backgroundColor), (s.strokeStyle = u.borderColor), (s.lineWidth = d); 23460 var v = [ 23461 [e, a], 23462 [e, i], 23463 [n, i], 23464 [n, a], 23465 ], 23466 b = ["bottom", "left", "top", "right"], 23467 x = b.indexOf(l, 0); 23468 x === -1 && (x = 0); 23469 var y = t(0); 23470 s.moveTo(y[0], y[1]); 23471 for (var k = 1; k < 4; k++) (y = t(k)), s.lineTo(y[0], y[1]); 23472 s.fill(), d && s.stroke(); 23473 }, 23474 height: function () { 23475 var t = this._view; 23476 return t.base - t.y; 23477 }, 23478 inRange: function (t, e) { 23479 var i = !1; 23480 if (this._view) { 23481 var a = n(this); 23482 i = t >= a.left && t <= a.right && e >= a.top && e <= a.bottom; 23483 } 23484 return i; 23485 }, 23486 inLabelRange: function (t, i) { 23487 var a = this; 23488 if (!a._view) return !1; 23489 var o = !1, 23490 r = n(a); 23491 return (o = e(a) ? t >= r.left && t <= r.right : i >= r.top && i <= r.bottom); 23492 }, 23493 inXRange: function (t) { 23494 var e = n(this); 23495 return t >= e.left && t <= e.right; 23496 }, 23497 inYRange: function (t) { 23498 var e = n(this); 23499 return t >= e.top && t <= e.bottom; 23500 }, 23501 getCenterPoint: function () { 23502 var t, 23503 n, 23504 i = this._view; 23505 return e(this) ? ((t = i.x), (n = (i.y + i.base) / 2)) : ((t = (i.x + i.base) / 2), (n = i.y)), { x: t, y: n }; 23506 }, 23507 getArea: function () { 23508 var t = this._view; 23509 return t.width * Math.abs(t.y - t.base); 23510 }, 23511 tooltipPosition: function () { 23512 var t = this._view; 23513 return { x: t.x, y: t.y }; 23514 }, 23515 })); 23516 }; 23517 }, 23518 {}, 23519 ], 23520 39: [ 23521 function (t, e, n) { 23522 "use strict"; 23523 e.exports = function (t) { 23524 function e(t, e) { 23525 var n = s.getStyle(t, e), 23526 i = n && n.match(/^(\d+)(\.\d+)?px$/); 23527 return i ? Number(i[1]) : void 0; 23528 } 23529 function n(t, n) { 23530 var i = t.style, 23531 a = t.getAttribute("height"), 23532 o = t.getAttribute("width"); 23533 if (((t._chartjs = { initial: { height: a, width: o, style: { display: i.display, height: i.height, width: i.width } } }), (i.display = i.display || "block"), null === o || "" === o)) { 23534 var r = e(t, "width"); 23535 void 0 !== r && (t.width = r); 23536 } 23537 if (null === a || "" === a) 23538 if ("" === t.style.height) t.height = t.width / (n.options.aspectRatio || 2); 23539 else { 23540 var l = e(t, "height"); 23541 void 0 !== r && (t.height = l); 23542 } 23543 return t; 23544 } 23545 function i(t, e, n, i, a) { 23546 return { type: t, chart: e, native: a || null, x: void 0 !== n ? n : null, y: void 0 !== i ? i : null }; 23547 } 23548 function a(t, e) { 23549 var n = u[t.type] || t.type, 23550 a = s.getRelativePosition(t, e); 23551 return i(n, e, a.x, a.y, t); 23552 } 23553 function o(t) { 23554 var e = document.createElement("iframe"); 23555 return ( 23556 (e.className = "chartjs-hidden-iframe"), 23557 (e.style.cssText = "display:block;overflow:hidden;border:0;margin:0;top:0;left:0;bottom:0;right:0;height:100%;width:100%;position:absolute;pointer-events:none;z-index:-1;"), 23558 (e.tabIndex = -1), 23559 s.addEvent(e, "load", function () { 23560 s.addEvent(e.contentWindow || e, "resize", t), t(); 23561 }), 23562 e 23563 ); 23564 } 23565 function r(t, e, n) { 23566 var a = (t._chartjs = { ticking: !1 }), 23567 r = function () { 23568 a.ticking || 23569 ((a.ticking = !0), 23570 s.requestAnimFrame.call(window, function () { 23571 if (a.resizer) return (a.ticking = !1), e(i("resize", n)); 23572 })); 23573 }; 23574 (a.resizer = o(r)), t.insertBefore(a.resizer, t.firstChild); 23575 } 23576 function l(t) { 23577 if (t && t._chartjs) { 23578 var e = t._chartjs.resizer; 23579 e && (e.parentNode.removeChild(e), (t._chartjs.resizer = null)), delete t._chartjs; 23580 } 23581 } 23582 var s = t.helpers, 23583 u = { 23584 touchstart: "mousedown", 23585 touchmove: "mousemove", 23586 touchend: "mouseup", 23587 pointerenter: "mouseenter", 23588 pointerdown: "mousedown", 23589 pointermove: "mousemove", 23590 pointerup: "mouseup", 23591 pointerleave: "mouseout", 23592 pointerout: "mouseout", 23593 }; 23594 return { 23595 acquireContext: function (t, e) { 23596 "string" == typeof t ? (t = document.getElementById(t)) : t.length && (t = t[0]), t && t.canvas && (t = t.canvas); 23597 var i = t && t.getContext && t.getContext("2d"); 23598 return i && i.canvas === t ? (n(t, e), i) : null; 23599 }, 23600 releaseContext: function (t) { 23601 var e = t.canvas; 23602 if (e._chartjs) { 23603 var n = e._chartjs.initial; 23604 ["height", "width"].forEach(function (t) { 23605 var i = n[t]; 23606 void 0 === i || null === i ? e.removeAttribute(t) : e.setAttribute(t, i); 23607 }), 23608 s.each(n.style || {}, function (t, n) { 23609 e.style[n] = t; 23610 }), 23611 (e.width = e.width
23611), 23612 delete e._chartjs; 23613 } 23614 }, 23615 addEventListener: function (t, e, n) { 23616 var i = t.canvas; 23617 if ("resize" === e) return void r(i.parentNode, n, t); 23618 var o = n._chartjs || (n._chartjs = {}), 23619 l = o.proxies || (o.proxies = {}), 23620 u = (l[t.id + "_" + e] = function (e) { 23621 n(a(e, t)); 23622 }); 23623 s.addEvent(i, e, u); 23624 }, 23625 removeEventListener: function (t, e, n) { 23626 var i = t.canvas; 23627 if ("resize" === e) return void l(i.parentNode, n); 23628 var a = n._chartjs || {}, 23629 o = a.proxies || {}, 23630 r = o[t.id + "_" + e]; 23631 r && s.removeEvent(i, e, r); 23632 }, 23633 }; 23634 }; 23635 }, 23636 {}, 23637 ], 23638 40: [ 23639 function (t, e, n) { 23640 "use strict"; 23641 var i = t(39); 23642 e.exports = function (t) { 23643 (t.platform = { acquireContext: function () {}, releaseContext: function () {}, addEventListener: function () {}, removeEventListener: function () {} }), t.helpers.extend(t.platform, i(t)); 23644 }; 23645 }, 23646 { 39: 39 }, 23647 ], 23648 41: [ 23649 function (t, e, n) { 23650 "use strict"; 23651 e.exports = function (t) { 23652 function e(t, e, n) { 23653 var i, 23654 a = t._model || {}, 23655 o = a.fill; 23656 if ((void 0 === o && (o = !!a.backgroundColor), o === !1 || null === o)) return !1; 23657 if (o === !0) return "origin"; 23658 if (((i = parseFloat(o, 10)), isFinite(i) && Math.floor(i) === i)) return ("-" !== o[0] && "+" !== o[0]) || (i = e + i), !(i === e || i < 0 || i >= n) && i; 23659 switch (o) { 23660 case "bottom": 23661 return "start"; 23662 case "top": 23663 return "end"; 23664 case "zero": 23665 return "origin"; 23666 case "origin": 23667 case "start": 23668 case "end": 23669 return o; 23670 default: 23671 return !1; 23672 } 23673 } 23674 function n(t) { 23675 var e, 23676 n = t.el._model || {}, 23677 i = t.el._scale || {}, 23678 a = t.fill, 23679 o = null; 23680 if (isFinite(a)) return null; 23681 if ( 23682 ("start" === a 23683 ? (o = void 0 === n.scaleBottom ? i.bottom : n.scaleBottom) 23684 : "end" === a 23685 ? (o = void 0 === n.scaleTop ? i.top : n.scaleTop) 23686 : void 0 !== n.scaleZero 23687 ? (o = n.scaleZero) 23688 : i.getBasePosition 23689 ? (o = i.getBasePosition()) 23690 : i.getBasePixel && (o = i.getBasePixel()), 23691 void 0 !== o && null !== o) 23692 ) { 23693 if (void 0 !== o.x && void 0 !== o.y) return o; 23694 if ("number" == typeof o && isFinite(o)) return (e = i.isHorizontal()), { x: e ? o : null, y: e ? null : o }; 23695 } 23696 return null; 23697 } 23698 function i(t, e, n) { 23699 var i, 23700 a = t[e], 23701 o = a.fill, 23702 r = [e]; 23703 if (!n) return o; 23704 for (; o !== !1 && r.indexOf(o) === -1; ) { 23705 if (!isFinite(o)) return o; 23706 if (((i = t[o]), !i)) return !1; 23707 if (i.visible) return o; 23708 r.push(o), (o = i.fill); 23709 } 23710 return !1; 23711 } 23712 function a(t) { 23713 var e = t.fill, 23714 n = "dataset"; 23715 return e === !1 ? null : (isFinite(e) || (n = "boundary"), d[n](t)); 23716 } 23717 function o(t) { 23718 return t && !t.skip; 23719 } 23720 function r(t, e, n, i, a) { 23721 var o; 23722 if (i && a) { 23723 for (t.moveTo(e[0].x, e[0].y), o = 1; o < i; ++o) u.canvas.lineTo(t, e[o - 1], e[o]); 23724 for (t.lineTo(n[a - 1].x, n[a - 1].y), o = a - 1; o > 0; --o) u.canvas.lineTo(t, n[o], n[o - 1], !0); 23725 } 23726 } 23727 function l(t, e, n, i, a, l) { 23728 var s, 23729 u, 23730 d, 23731 c, 23732 h, 23733 f, 23734 g, 23735 p = e.length, 23736 m = i.spanGaps, 23737 v = [], 23738 b = [], 23739 x = 0, 23740 y = 0; 23741 for (t.beginPath(), s = 0, u = p + !!l; s < u; ++s) 23742 (d = s % p), 23743 (c = e[d]._view), 23744 (h = n(c, d, i)), 23745 (f = o(c)), 23746 (g = o(h)), 23747 f && g ? ((x = v.push(c)), (y = b.push(h))) : x && y && (m ? (f && v.push(c), g && b.push(h)) : (r(t, v, b, x, y), (x = y = 0), (v = []), (b = []))); 23748 r(t, v, b, x, y), t.closePath(), (t.fillStyle = a), t.fill(); 23749 } 23750 t.defaults.global.plugins.filler = { propagate: !0 }; 23751 var s = t.defaults, 23752 u = t.helpers, 23753 d = { 23754 dataset: function (t) { 23755 var e = t.fill, 23756 n = t.chart, 23757 i = n.getDatasetMeta(e), 23758 a = i && n.isDatasetVisible(e), 23759 o = (a && i.dataset._children) || []; 23760 return o.length 23761 ? function (t, e) { 23762 return o[e]._view || null; 23763 } 23764 : null; 23765 }, 23766 boundary: function (t) { 23767 var e = t.boundary, 23768 n = e ? e.x : null, 23769 i = e ? e.y : null; 23770 return function (t) { 23771 return { x: null === n ? t.x : n, y: null === i ? t.y : i }; 23772 }; 23773 }, 23774 }; 23775 return { 23776 id: "filler", 23777 afterDatasetsUpdate: function (o, r) { 23778 var l, 23779 s, 23780 u, 23781 d, 23782 c = (o.data.datasets || []).length, 23783 h = r.propagate, 23784 f = []; 23785 for (s = 0; s < c; ++s) 23786 (l = o.getDatasetMeta(s)), 23787 (u = l.dataset), 23788 (d = null),
23789 u && u._model && u instanceof t.elements.Line && (d = { visible: o.isDatasetVisible(s), fill: e(u, s, c), chart: o, el: u }), 23790 (l.$filler = d), 23791 f.push(d); 23792 for (s = 0; s < c; ++s) (d = f[s]), d && ((d.fill = i(f, s, h)), (d.boundary = n(d)), (d.mapper = a(d))); 23793 }, 23794 beforeDatasetDraw: function (t, e) { 23795 var n = e.meta.$filler; 23796 if (n) { 23797 var i = n.el, 23798 a = i._view, 23799 o = i._children || [], 23800 r = n.mapper, 23801 u = a.backgroundColor || s.global.defaultColor; 23802 r && u && o.length && l(t.ctx, o, r, a, u, i._loop); 23803 } 23804 }, 23805 }; 23806 }; 23807 }, 23808 {}, 23809 ], 23810 42: [ 23811 function (t, e, n) { 23812 "use strict"; 23813 e.exports = function (t) { 23814 function e(t, e) { 23815 return t.usePointStyle ? e * Math.SQRT2 : t.boxWidth; 23816 } 23817 function n(e, n) { 23818 var i = new t.Legend({ ctx: e.ctx, options: n, chart: e }); 23819 a.configure(e, i, n), a.addBox(e, i), (e.legend = i); 23820 } 23821 var i = t.helpers, 23822 a = t.layoutService, 23823 o = i.noop; 23824 return ( 23825 (t.defaults.global.legend = { 23826 display: !0, 23827 position: "top", 23828 fullWidth: !0, 23829 reverse: !1, 23830 weight: 1e3, 23831 onClick: function (t, e) { 23832 var n = e.datasetIndex, 23833 i = this.chart, 23834 a = i.getDatasetMeta(n); 23835 (a.hidden = null === a.hidden ? !i.data.datasets[n].hidden : null), i.update(); 23836 }, 23837 onHover: null, 23838 labels: { 23839 boxWidth: 40, 23840 padding: 10, 23841 generateLabels: function (t) { 23842 var e = t.data; 23843 return i.isArray(e.datasets) 23844 ? e.datasets.map(function (e, n) { 23845 return { 23846 text: e.label, 23847 fillStyle: i.isArray(e.backgroundColor) ? e.backgroundColor[0] : e.backgroundColor, 23848 hidden: !t.isDatasetVisible(n), 23849 lineCap: e.borderCapStyle, 23850 lineDash: e.borderDash, 23851 lineDashOffset: e.borderDashOffset, 23852 lineJoin: e.borderJoinStyle, 23853 lineWidth: e.borderWidth, 23854 strokeStyle: e.borderColor, 23855 pointStyle: e.pointStyle, 23856 datasetIndex: n, 23857 }; 23858 }, this) 23859 : []; 23860 }, 23861 }, 23862 }), 23863 (t.Legend = t.Element.extend({ 23864 initialize: function (t) { 23865 i.extend(this, t), (this.legendHitBoxes = []), (this.doughnutMode = !1); 23866 }, 23867 beforeUpdate: o, 23868 update: function (t, e, n) { 23869 var i = this; 23870 return ( 23871 i.beforeUpdate(), 23872 (i.maxWidth = t), 23873 (i.maxHeight = e), 23874 (i.margins = n), 23875 i.beforeSetDimensions(), 23876 i.setDimensions(), 23877 i.afterSetDimensions(), 23878 i.beforeBuildLabels(), 23879 i.buildLabels(), 23880 i.afterBuildLabels(), 23881 i.beforeFit(), 23882 i.fit(), 23883 i.afterFit(), 23884 i.afterUpdate(), 23885 i.minSize 23886 ); 23887 }, 23888 afterUpdate: o, 23889 beforeSetDimensions: o, 23890 setDimensions: function () { 23891 var t = this; 23892 t.isHorizontal() ? ((t.width = t.maxWidth), (t.left = 0), (t.right = t.width)) : ((t.height = t.maxHeight), (t.top = 0), (t.bottom = t.height)), 23893 (t.paddingLeft = 0), 23894 (t.paddingTop = 0), 23895 (t.paddingRight = 0), 23896 (t.paddingBottom = 0), 23897 (t.minSize = { width: 0, height: 0 }); 23898 }, 23899 afterSetDimensions: o, 23900 beforeBuildLabels: o, 23901 buildLabels: function () { 23902 var t = this, 23903 e = t.options.labels, 23904 n = e.generateLabels.call(t, t.chart); 23905 e.filter && 23906 (n = n.filter(function (n) { 23907 return e.filter(n, t.chart.data); 23908 })), 23909 t.options.reverse && n.reverse(), 23910 (t.legendItems = n); 23911 }, 23912 afterBuildLabels: o, 23913 beforeFit: o, 23914 fit: function () { 23915 var n = this, 23916 a = n.options, 23917 o = a.labels, 23918 r = a.display, 23919 l = n.ctx, 23920 s = t.defaults.global, 23921 u = i.getValueOrDefault, 23922 d = u(o.fontSize, s.defaultFontSize), 23923 c = u(o.fontStyle, s.defaultFontStyle), 23924 h = u(o.fontFamily, s.defaultFontFamily), 23925 f = i.fontString(d, c, h), 23926 g = (n.legendHitBoxes = []), 23927 p = n.minSize, 23928 m = n.isHorizontal(); 23929 if ((m ? ((p.width = n.maxWidth), (p.height = r ? 10 : 0)) : ((p.width = r ? 10 : 0), (p.height = n.maxHeight)), r)) 23930 if (((l.font = f), m)) { 23931 var v = (n.lineWidths = [0]), 23932 b = n.legendItems.length ? d + o.padding : 0; 23933 (l.textAlign = "left"), 23934 (l.textBaseline = "top"), 23935 i.each(n.legendItems, function (t, i) { 23936 var a = e(o, d), 23937 r = a + d / 2 + l.measureText(t.text).width; 23938 v[v.length - 1] + r + o.padding >= n.width && ((b += d + o.padding), (v[v.length] = n.left)), (g[i] = { left: 0, top: 0, width: r, height: d }), (v[v.length - 1] += r + o.padding); 23939 }), 23940 (p.height += b); 23941 } else { 23942 var x = o.padding, 23943 y = (n.columnWidths = []), 23944 k = o.padding, 23945 w = 0, 23946 M = 0, 23947 S = d + x; 23948 i.each(n.legendItems, function (t, n) { 23949 var i = e(o, d), 23950 a = i + d / 2 + l.measureText(t.text).width; 23951 M + S > p.height && ((k += w + o.padding), y.push(w), (w = 0), (M = 0)), (w = Math.max(w, a)), (M += S), (g[n] = { left: 0, top: 0, width: a, height: d }); 23952 }), 23953 (k += w), 23954 y.push(w), 23955 (p.width += k); 23956 } 23957 (n.width = p.width), (n.height = p.height); 23958 }, 23959 afterFit: o, 23960 isHorizontal: function () { 23961 return "top" === this.options.position || "bottom" === this.options.position; 23962 }, 23963 draw: function () { 23964 var n = this, 23965 a = n.options, 23966 o = a.labels, 23967 r = t.defaults.global, 23968 l = r.elements.line, 23969 s = n.width, 23970 u = n.lineWidths; 23971 if (a.display) { 23972 var d, 23973 c = n.ctx, 23974 h = i.getValueOrDefault, 23975 f = h(o.fontColor, r.defaultFontColor), 23976 g = h(o.fontSize, r.defaultFontSize), 23977 p = h(o.fontStyle, r.defaultFontStyle), 23978 m = h(o.fontFamily, r.defaultFontFamily), 23979 v = i.fontString(g, p, m); 23980 (c.textAlign = "left"), (c.textBaseline = "top"), (c.lineWidth = 0.5), (c.strokeStyle = f), (c.fillStyle = f), (c.font = v); 23981 var b = e(o, g), 23982 x = n.legendHitBoxes, 23983 y = function (e, n, i) { 23984 if (!(isNaN(b) || b <= 0)) { 23985 c.save(), 23986 (c.fillStyle = h(i.fillStyle, r.defaultColor)), 23987 (c.lineCap = h(i.lineCap, l.borderCapStyle)), 23988 (c.lineDashOffset = h(i.lineDashOffset, l.borderDashOffset)), 23989 (c.lineJoin = h(i.lineJoin, l.borderJoinStyle)), 23990 (c.lineWidth = h(i.lineWidth, l.borderWidth)), 23991 (c.strokeStyle = h(i.strokeStyle, r.defaultColor)); 23992 var o = 0 === h(i.lineWidth, l.borderWidth); 23993 if ((c.setLineDash && c.setLineDash(h(i.lineDash, l.borderDash)), a.labels && a.labels.usePointStyle)) { 23994 var s = (g * Math.SQRT2) / 2, 23995 u = s / Math.SQRT2, 23996 d = e + u, 23997 f = n + u; 23998 t.canvasHelpers.drawPoint(c, i.pointStyle, s, d, f); 23999 } else o || c.strokeRect(e, n, b, g), c.fillRect(e, n, b, g);
24000 c.restore(); 24001 } 24002 }, 24003 k = function (t, e, n, i) { 24004 c.fillText(n.text, b + g / 2 + t, e), n.hidden && (c.beginPath(), (c.lineWidth = 2), c.moveTo(b + g / 2 + t, e + g / 2), c.lineTo(b + g / 2 + t + i, e + g / 2), c.stroke()); 24005 }, 24006 w = n.isHorizontal(); 24007 d = w ? { x: n.left + (s - u[0]) / 2, y: n.top + o.padding, line: 0 } : { x: n.left + o.padding, y: n.top + o.padding, line: 0 }; 24008 var M = g + o.padding; 24009 i.each(n.legendItems, function (t, e) { 24010 var i = c.measureText(t.text).width, 24011 a = b + g / 2 + i, 24012 r = d.x, 24013 l = d.y; 24014 w 24015 ? r + a >= s && ((l = d.y += M), d.line++, (r = d.x = n.left + (s - u[d.line]) / 2)) 24016 : l + M > n.bottom && ((r = d.x = r + n.columnWidths[d.line] + o.padding), (l = d.y = n.top + o.padding), d.line++), 24017 y(r, l, t), 24018 (x[e].left = r), 24019 (x[e].top = l), 24020 k(r, l, t, i), 24021 w ? (d.x += a + o.padding) : (d.y += M); 24022 }); 24023 } 24024 }, 24025 handleEvent: function (t) { 24026 var e = this, 24027 n = e.options, 24028 i = "mouseup" === t.type ? "click" : t.type, 24029 a = !1; 24030 if ("mousemove" === i) { 24031 if (!n.onHover) return; 24032 } else { 24033 if ("click" !== i) return; 24034 if (!n.onClick) return; 24035 } 24036 var o = t.x, 24037 r = t.y; 24038 if (o >= e.left && o <= e.right && r >= e.top && r <= e.bottom) 24039 for (var l = e.legendHitBoxes, s = 0; s < l.length; ++s) { 24040 var u = l[s]; 24041 if (o >= u.left && o <= u.left + u.width && r >= u.top && r <= u.top + u.height) { 24042 if ("click" === i) { 24043 n.onClick.call(e, t.native, e.legendItems[s]), (a = !0); 24044 break; 24045 } 24046 if ("mousemove" === i) { 24047 n.onHover.call(e, t.native, e.legendItems[s]), (a = !0); 24048 break; 24049 } 24050 } 24051 } 24052 return a; 24053 }, 24054 })), 24055 { 24056 id: "legend", 24057 beforeInit: function (t) { 24058 var e = t.options.legend; 24059 e && n(t, e); 24060 }, 24061 beforeUpdate: function (e) { 24062 var o = e.options.legend, 24063 r = e.legend; 24064 o ? ((o = i.configMerge(t.defaults.global.legend, o)), r ? (a.configure(e, r, o), (r.options = o)) : n(e, o)) : r && (a.removeBox(e, r), delete e.legend); 24065 }, 24066 afterEvent: function (t, e) { 24067 var n = t.legend; 24068 n && n.handleEvent(e); 24069 }, 24070 } 24071 ); 24072 }; 24073 }, 24074 {}, 24075 ], 24076 43: [ 24077 function (t, e, n) { 24078 "use strict"; 24079 e.exports = function (t) { 24080 function e(e, n) { 24081 var a = new t.Title({ ctx: e.ctx, options: n, chart: e }); 24082 i.configure(e, a, n), i.addBox(e, a), (e.titleBlock = a); 24083 } 24084 var n = t.helpers, 24085 i = t.layoutService, 24086 a = n.noop; 24087 return ( 24088 (t.defaults.global.title = { display: !1, position: "top", fullWidth: !0, weight: 2e3, fontStyle: "bold", padding: 10, text: "" }), 24089 (t.Title = t.Element.extend({ 24090 initialize: function (t) { 24091 var e = this; 24092 n.extend(e, t), (e.legendHitBoxes = []); 24093 }, 24094 beforeUpdate: a, 24095 update: function (t, e, n) { 24096 var i = this; 24097 return ( 24098 i.beforeUpdate(), 24099 (i.maxWidth = t), 24100 (i.maxHeight = e), 24101 (i.margins = n), 24102 i.beforeSetDimensions(), 24103 i.setDimensions(), 24104 i.afterSetDimensions(), 24105 i.beforeBuildLabels(), 24106 i.buildLabels(), 24107 i.afterBuildLabels(), 24108 i.beforeFit(), 24109 i.fit(), 24110 i.afterFit(), 24111 i.afterUpdate(), 24112 i.minSize 24113 ); 24114 }, 24115 afterUpdate: a, 24116 beforeSetDimensions: a, 24117 setDimensions: function () { 24118 var t = this; 24119 t.isHorizontal() ? ((t.width = t.maxWidth), (t.left = 0), (t.right = t.width)) : ((t.height = t.maxHeight), (t.top = 0), (t.bottom = t.height)), 24120 (t.paddingLeft = 0), 24121 (t.paddingTop = 0), 24122 (t.paddingRight = 0), 24123 (t.paddingBottom = 0), 24124 (t.minSize = { width: 0, height: 0 }); 24125 }, 24126 afterSetDimensions: a, 24127 beforeBuildLabels: a, 24128 buildLabels: a, 24129 afterBuildLabels: a, 24130 beforeFit: a, 24131 fit: function () { 24132 var e = this, 24133 i = n.getValueOrDefault, 24134 a = e.options, 24135 o = t.defaults.global, 24136 r = a.display, 24137 l = i(a.fontSize, o.defaultFontSize), 24138 s = e.minSize; 24139 e.isHorizontal() ? ((s.width = e.maxWidth), (s.height = r ? l + 2 * a.padding : 0)) : ((s.width = r ? l + 2 * a.padding : 0), (s.height = e.maxHeight)), (e.width = s.width), (e.height = s.height); 24140 }, 24141 afterFit: a, 24142 isHorizontal: function () { 24143 var t = this.options.position; 24144 return "top" === t || "bottom" === t; 24145 }, 24146 draw: function () { 24147 var e = this, 24148 i = e.ctx, 24149 a = n.getValueOrDefault, 24150 o = e.options, 24151 r = t.defaults.global; 24152 if (o.display) { 24153 var l, 24154 s, 24155 u, 24156 d = a(o.fontSize, r.defaultFontSize), 24157 c = a(o.fontStyle, r.defaultFontStyle), 24158 h = a(o.fontFamily, r.defaultFontFamily), 24159 f = n.fontString(d, c, h), 24160 g = 0, 24161 p = e.top, 24162 m = e.left, 24163 v = e.bottom, 24164 b = e.right; 24165 (i.fillStyle = a(o.fontColor, r.defaultFontColor)), 24166 (i.font = f), 24167 e.isHorizontal() 24168 ? ((l = m + (b - m) / 2), (s = p + (v - p) / 2), (u = b - m)) 24169 : ((l = "left" === o.position ? m + d / 2 : b - d / 2), (s = p + (v - p) / 2), (u = v - p), (g = Math.PI * ("left" === o.position ? -0.5 : 0.5))), 24170 i.save(), 24171 i.translate(l, s), 24172 i.rotate(g), 24173 (i.textAlign = "center"), 24174 (i.textBaseline = "middle"), 24175 i.fillText(o.text, 0, 0, u),
24176 i.restore(); 24177 } 24178 }, 24179 })), 24180 { 24181 id: "title", 24182 beforeInit: function (t) { 24183 var n = t.options.title; 24184 n && e(t, n); 24185 }, 24186 beforeUpdate: function (a) { 24187 var o = a.options.title, 24188 r = a.titleBlock; 24189 o ? ((o = n.configMerge(t.defaults.global.title, o)), r ? (i.configure(a, r, o), (r.options = o)) : e(a, o)) : r && (t.layoutService.removeBox(a, r), delete a.titleBlock); 24190 }, 24191 } 24192 ); 24193 }; 24194 }, 24195 {}, 24196 ], 24197 44: [ 24198 function (t, e, n) { 24199 "use strict"; 24200 e.exports = function (t) { 24201 var e = t.helpers, 24202 n = { position: "bottom" }, 24203 i = t.Scale.extend({ 24204 getLabels: function () { 24205 var t = this.chart.data; 24206 return (this.isHorizontal() ? t.xLabels : t.yLabels) || t.labels; 24207 }, 24208 determineDataLimits: function () { 24209 var t = this, 24210 n = t.getLabels(); 24211 (t.minIndex = 0), (t.maxIndex = n.length - 1); 24212 var i; 24213 void 0 !== t.options.ticks.min && ((i = e.indexOf(n, t.options.ticks.min)), (t.minIndex = i !== -1 ? i : t.minIndex)), 24214 void 0 !== t.options.ticks.max && ((i = e.indexOf(n, t.options.ticks.max)), (t.maxIndex = i !== -1 ? i : t.maxIndex)), 24215 (t.min = n[t.minIndex]), 24216 (t.max = n[t.maxIndex]); 24217 }, 24218 buildTicks: function () { 24219 var t = this, 24220 e = t.getLabels(); 24221 t.ticks = 0 === t.minIndex && t.maxIndex === e.length - 1 ? e : e.slice(t.minIndex, t.maxIndex + 1); 24222 }, 24223 getLabelForIndex: function (t, e) { 24224 var n = this, 24225 i = n.chart.data, 24226 a = n.isHorizontal(); 24227 return i.yLabels && !a ? n.getRightValue(i.datasets[e].data[t]) : n.ticks[t - n.minIndex]; 24228 }, 24229 getPixelForValue: function (t, e, n, i) { 24230 var a, 24231 o = this, 24232 r = Math.max(o.maxIndex + 1 - o.minIndex - (o.options.gridLines.offsetGridLines ? 0 : 1), 1); 24233 if ((void 0 !== t && null !== t && (a = o.isHorizontal() ? t.x : t.y), void 0 !== a || (void 0 !== t && isNaN(e)))) { 24234 var l = o.getLabels(); 24235 t = a || t; 24236 var s = l.indexOf(t); 24237 e = s !== -1 ? s : e; 24238 } 24239 if (o.isHorizontal()) { 24240 var u = o.width / r, 24241 d = u * (e - o.minIndex); 24242 return ((o.options.gridLines.offsetGridLines && i) || (o.maxIndex === o.minIndex && i)) && (d += u / 2), o.left + Math.round(d); 24243 } 24244 var c = o.height / r, 24245 h = c * (e - o.minIndex); 24246 return o.options.gridLines.offsetGridLines && i && (h += c / 2), o.top + Math.round(h); 24247 }, 24248 getPixelForTick: function (t, e) { 24249 return this.getPixelForValue(this.ticks[t], t + this.minIndex, null, e); 24250 }, 24251 getValueForPixel: function (t) { 24252 var e, 24253 n = this, 24254 i = Math.max(n.ticks.length - (n.options.gridLines.offsetGridLines ? 0 : 1), 1), 24255 a = n.isHorizontal(), 24256 o = (a ? n.width : n.height) / i; 24257 return (t -= a ? n.left : n.top), n.options.gridLines.offsetGridLines && (t -= o / 2), (e = t <= 0 ? 0 : Math.round(t / o)); 24258 }, 24259 getBasePixel: function () { 24260 return this.bottom; 24261 }, 24262 }); 24263 t.scaleService.registerScaleType("category", i, n); 24264 }; 24265 }, 24266 {}, 24267 ], 24268 45: [ 24269 function (t, e, n) { 24270 "use strict"; 24271 e.exports = function (t) { 24272 var e = t.helpers, 24273 n = { position: "left", ticks: { callback: t.Ticks.formatters.linear } }, 24274 i = t.LinearScaleBase.extend({ 24275 determineDataLimits: function () { 24276 function t(t) { 24277 return l ? t.xAxisID === n.id : t.yAxisID === n.id; 24278 } 24279 var n = this, 24280 i = n.options, 24281 a = n.chart, 24282 o = a.data, 24283 r = o.datasets, 24284 l = n.isHorizontal(), 24285 s = 0, 24286 u = 1; 24287 (n.min = null), (n.max = null); 24288 var d = i.stacked; 24289 if ( 24290 (void 0 === d && 24291 e.each(r, function (e, n) { 24292 if (!d) { 24293 var i = a.getDatasetMeta(n); 24294 a.isDatasetVisible(n) && t(i) && void 0 !== i.stack && (d = !0); 24295 } 24296 }), 24297 i.stacked || d) 24298 ) { 24299 var c = {}; 24300 e.each(r, function (o, r) { 24301 var l = a.getDatasetMeta(r), 24302 s = [l.type, void 0 === i.stacked && void 0 === l.stack ? r : "", l.stack].join("."); 24303 void 0 === c[s] && (c[s] = { positiveValues: [], negativeValues: [] }); 24304 var u = c[s].positiveValues, 24305 d = c[s].negativeValues; 24306 a.isDatasetVisible(r) && 24307 t(l) && 24308 e.each(o.data, function (t, e) { 24309 var a = +n.getRightValue(t); 24310 isNaN(a) || l.data[e].hidden || ((u[e] = u[e] || 0), (d[e] = d[e] || 0), i.relativePoints ? (u[e] = 100) : a < 0 ? (d[e] += a) : (u[e] += a)); 24311 }); 24312 }), 24313 e.each(c, function (t) { 24314 var i = t.positiveValues.concat(t.negativeValues), 24315 a = e.min(i), 24316 o = e.max(i); 24317 (n.min = null === n.min ? a : Math.min(n.min, a)), (n.max = null === n.max ? o : Math.max(n.max, o)); 24318 }); 24319 } else 24320 e.each(r, function (i, o) { 24321 var r = a.getDatasetMeta(o); 24322 a.isDatasetVisible(o) && 24323 t(r) && 24324 e.each(i.data, function (t, e) { 24325 var i = +n.getRightValue(t); 24326 isNaN(i) || r.data[e].hidden || (null === n.min ? (n.min = i) : i < n.min && (n.min = i), null === n.max ? (n.max = i) : i > n.max && (n.max = i)); 24327 }); 24328 }); 24329 (n.min = isFinite(n.min) ? n.min : s), (n.max = isFinite(n.max) ? n.max : u), this.handleTickRangeOptions(); 24330 }, 24331 getTickLimit: function () { 24332 var n, 24333 i = this, 24334 a = i.options.ticks; 24335 if (i.isHorizontal()) n = Math.min(a.maxTicksLimit ? a.maxTicksLimit : 11, Math.ceil(i.width / 50)); 24336 else { 24337 var o = e.getValueOrDefault(a.fontSize, t.defaults.global.defaultFontSize); 24338 n = Math.min(a.maxTicksLimit ? a.maxTicksLimit : 11, Math.ceil(i.height / (2 * o))); 24339 } 24340 return n; 24341 }, 24342 handleDirectionalChanges: function () { 24343 this.isHorizontal() || this.ticks.reverse(); 24344 }, 24345 getLabelForIndex: function (t, e) { 24346 return +this.getRightValue(this.chart.data.datasets[e].data[t]); 24347 }, 24348 getPixelForValue: function (t) { 24349 var e, 24350 n = this, 24351 i = n.start, 24352 a = +n.getRightValue(t), 24353 o = n.end - i; 24354 return n.isHorizontal() ? ((e = n.left + (n.width / o) * (a - i)), Math.round(e)) : ((e = n.bottom - (n.height / o) * (a - i)), Math.round(e)); 24355 }, 24356 getValueForPixel: function (t) { 24357 var e = this, 24358 n = e.isHorizontal(), 24359 i = n ? e.width : e.height, 24360 a = (n ? t - e.left : e.bottom - t) / i; 24361 return e.start + (e.end - e.start) * a; 24362 }, 24363 getPixelForTick: function (t) { 24364 return this.getPixelForValue(this.ticksAsNumbers[t]); 24365 }, 24366 }); 24367 t.scaleService.registerScaleType("linear", i, n); 24368 }; 24369 }, 24370 {}, 24371 ], 24372 46: [ 24373 function (t, e, n) { 24374 "use strict"; 24375 e.exports = function (t) { 24376 var e = t.helpers, 24377 n = e.noop; 24378 t.LinearScaleBase = t.Scale.extend({ 24379 handleTickRangeOptions: function () { 24380 var t = this, 24381 n = t.options, 24382 i = n.ticks; 24383 if (i.beginAtZero) { 24384 var a = e.sign(t.min), 24385 o = e.sign(t.max); 24386 a < 0 && o < 0 ? (t.max = 0) : a > 0 && o > 0 && (t.min = 0); 24387 } 24388 void 0 !== i.min ? (t.min = i.min) : void 0 !== i.suggestedMin && (null === t.min ? (t.min = i.suggestedMin) : (t.min = Math.min(t.min, i.suggestedMin))
24388), 24389 void 0 !== i.max ? (t.max = i.max) : void 0 !== i.suggestedMax && (null === t.max ? (t.max = i.suggestedMax) : (t.max = Math.max(t.max, i.suggestedMax))), 24390 t.min === t.max && (t.max++, i.beginAtZero || t.min--); 24391 }, 24392 getTickLimit: n, 24393 handleDirectionalChanges: n, 24394 buildTicks: function () { 24395 var n = this, 24396 i = n.options, 24397 a = i.ticks, 24398 o = n.getTickLimit(); 24399 o = Math.max(2, o); 24400 var r = { maxTicks: o, min: a.min, max: a.max, stepSize: e.getValueOrDefault(a.fixedStepSize, a.stepSize) }, 24401 l = (n.ticks = t.Ticks.generators.linear(r, n)); 24402 n.handleDirectionalChanges(), (n.max = e.max(l)), (n.min = e.min(l)), a.reverse ? (l.reverse(), (n.start = n.max), (n.end = n.min)) : ((n.start = n.min), (n.end = n.max)); 24403 }, 24404 convertTicksToLabels: function () { 24405 var e = this; 24406 (e.ticksAsNumbers = e.ticks.slice()), (e.zeroLineIndex = e.ticks.indexOf(0)), t.Scale.prototype.convertTicksToLabels.call(e); 24407 }, 24408 }); 24409 }; 24410 }, 24411 {}, 24412 ], 24413 47: [ 24414 function (t, e, n) { 24415 "use strict"; 24416 e.exports = function (t) { 24417 var e = t.helpers, 24418 n = { position: "left", ticks: { callback: t.Ticks.formatters.logarithmic } }, 24419 i = t.Scale.extend({ 24420 determineDataLimits: function () { 24421 function t(t) { 24422 return u ? t.xAxisID === n.id : t.yAxisID === n.id; 24423 } 24424 var n = this, 24425 i = n.options, 24426 a = i.ticks, 24427 o = n.chart, 24428 r = o.data, 24429 l = r.datasets, 24430 s = e.getValueOrDefault, 24431 u = n.isHorizontal(); 24432 (n.min = null), (n.max = null), (n.minNotZero = null); 24433 var d = i.stacked; 24434 if ( 24435 (void 0 === d && 24436 e.each(l, function (e, n) { 24437 if (!d) { 24438 var i = o.getDatasetMeta(n); 24439 o.isDatasetVisible(n) && t(i) && void 0 !== i.stack && (d = !0); 24440 } 24441 }), 24442 i.stacked || d) 24443 ) { 24444 var c = {}; 24445 e.each(l, function (a, r) { 24446 var l = o.getDatasetMeta(r), 24447 s = [l.type, void 0 === i.stacked && void 0 === l.stack ? r : "", l.stack].join("."); 24448 o.isDatasetVisible(r) && 24449 t(l) && 24450 (void 0 === c[s] && (c[s] = []), 24451 e.each(a.data, function (t, e) { 24452 var a = c[s], 24453 o = +n.getRightValue(t); 24454 isNaN(o) || l.data[e].hidden || ((a[e] = a[e] || 0), i.relativePoints ? (a[e] = 100) : (a[e] += o)); 24455 })); 24456 }), 24457 e.each(c, function (t) { 24458 var i = e.min(t), 24459 a = e.max(t); 24460 (n.min = null === n.min ? i : Math.min(n.min, i)), (n.max = null === n.max ? a : Math.max(n.max, a)); 24461 }); 24462 } else 24463 e.each(l, function (i, a) { 24464 var r = o.getDatasetMeta(a); 24465 o.isDatasetVisible(a) && 24466 t(r) && 24467 e.each(i.data, function (t, e) { 24468 var i = +n.getRightValue(t); 24469 isNaN(i) || 24470 r.data[e].hidden || 24471 (null === n.min ? (n.min = i) : i < n.min && (n.min = i), 24472 null === n.max ? (n.max = i) : i > n.max && (n.max = i), 24473 0 !== i && (null === n.minNotZero || i < n.minNotZero) && (n.minNotZero = i)); 24474 }); 24475 }); 24476 (n.min = s(a.min, n.min)), 24477 (n.max = s(a.max, n.max)), 24478 n.min === n.max && (0 !== n.min && null !== n.min ? ((n.min = Math.pow(10, Math.floor(e.log10(n.min)) - 1)), (n.max = Math.pow(10, Math.floor(e.log10(n.max)) + 1))) : ((n.min = 1), (n.max = 10))); 24479 }, 24480 buildTicks: function () { 24481 var n = this, 24482 i = n.options, 24483 a = i.ticks, 24484 o = { min: a.min, max: a.max }, 24485 r = (n.ticks = t.Ticks.generators.logarithmic(o, n)); 24486 n.isHorizontal() || r.reverse(), (n.max = e.max(r)), (n.min = e.min(r)), a.reverse ? (r.reverse(), (n.start = n.max), (n.end = n.min)) : ((n.start = n.min), (n.end = n.max)); 24487 }, 24488 convertTicksToLabels: function () { 24489 (this.tickValues = this.ticks.slice()), t.Scale.prototype.convertTicksToLabels.call(this); 24490 }, 24491 getLabelForIndex: function (t, e) { 24492 return +this.getRightValue(this.chart.data.datasets[e].data[t]); 24493 }, 24494 getPixelForTick: function (t) { 24495 return this.getPixelForValue(this.tickValues[t]); 24496 }, 24497 getPixelForValue: function (t) { 24498 var n, 24499 i, 24500 a, 24501 o = this, 24502 r = o.start, 24503 l = +o.getRightValue(t), 24504 s = o.options, 24505 u = s.ticks; 24506 return ( 24507 o.isHorizontal() 24508 ? ((a = e.log10(o.end) - e.log10(r)), 0 === l ? (i = o.left) : ((n = o.width), (i = o.left + (n / a) * (e.log10(l) - e.log10(r))))) 24509 : ((n = o.height), 24510 0 !== r || u.reverse 24511 ? 0 === o.end && u.reverse 24512 ? ((a = e.log10(o.start) - e.log10(o.minNotZero)), 24513 (i = l === o.end ? o.top : l === o.minNotZero ? o.top + 0.02 * n : o.top + 0.02 * n + ((0.98 * n) / a) * (e.log10(l) - e.log10(o.minNotZero)))) 24514 : 0 === l 24515 ? (i = u.reverse ? o.top : o.bottom) 24516 : ((a = e.log10(o.end) - e.log10(r)), (n = o.height), (i = o.bottom - (n / a) * (e.log10(l) - e.log10(r)))) 24517 : ((a = e.log10(o.end) - e.log10(o.minNotZero)), 24518 (i = l === r ? o.bottom : l === o.minNotZero ? o.bottom - 0.02 * n : o.bottom - 0.02 * n - ((0.98 * n) / a) * (e.log10(l) - e.log10(o.minNotZero))))), 24519 i 24520 ); 24521 }, 24522 getValueForPixel: function (t) { 24523 var n, 24524 i, 24525 a = this, 24526 o = e.log10(a.end) - e.log10(a.start); 24527 return a.isHorizontal() ? ((i
24527= a.width), (n = a.start * Math.pow(10, ((t - a.left) * o) / i))) : ((i = a.height), (n = Math.pow(10, ((a.bottom - t) * o) / i) / a.start)), n; 24528 }, 24529 }); 24530 t.scaleService.registerScaleType("logarithmic", i, n); 24531 }; 24532 }, 24533 {}, 24534 ], 24535 48: [ 24536 function (t, e, n) { 24537 "use strict"; 24538 e.exports = function (t) { 24539 function e(t) { 24540 var e = t.options; 24541 return e.angleLines.display || e.pointLabels.display ? t.chart.data.labels.length : 0; 24542 } 24543 function n(t) { 24544 var e = t.options.pointLabels, 24545 n = f.getValueOrDefault(e.fontSize, g.defaultFontSize), 24546 i = f.getValueOrDefault(e.fontStyle, g.defaultFontStyle), 24547 a = f.getValueOrDefault(e.fontFamily, g.defaultFontFamily), 24548 o = f.fontString(n, i, a); 24549 return { size: n, style: i, family: a, font: o }; 24550 } 24551 function i(t, e, n) { 24552 return f.isArray(n) ? { w: f.longestText(t, t.font, n), h: n.length * e + 1.5 * (n.length - 1) * e } : { w: t.measureText(n).width, h: e }; 24553 } 24554 function a(t, e, n, i, a) { 24555 return t === i || t === a ? { start: e - n / 2, end: e + n / 2 } : t < i || t > a ? { start: e - n - 5, end: e } : { start: e, end: e + n + 5 }; 24556 } 24557 function o(t) { 24558 var o, 24559 r, 24560 l, 24561 s = n(t), 24562 u = Math.min(t.height / 2, t.width / 2), 24563 d = { r: t.width, l: 0, t: t.height, b: 0 }, 24564 c = {}; 24565 (t.ctx.font = s.font), (t._pointLabelSizes = []); 24566 var h = e(t); 24567 for (o = 0; o < h; o++) { 24568 (l = t.getPointPosition(o, u)), (r = i(t.ctx, s.size, t.pointLabels[o] || "")), (t._pointLabelSizes[o] = r); 24569 var g = t.getIndexAngle(o), 24570 p = f.toDegrees(g) % 360, 24571 m = a(p, l.x, r.w, 0, 180), 24572 v = a(p, l.y, r.h, 90, 270); 24573 m.start < d.l && ((d.l = m.start), (c.l = g)), m.end > d.r && ((d.r = m.end), (c.r = g)), v.start < d.t && ((d.t = v.start), (c.t = g)), v.end > d.b && ((d.b = v.end), (c.b = g)); 24574 } 24575 t.setReductions(u, d, c); 24576 } 24577 function r(t) { 24578 var e = Math.min(t.height / 2, t.width / 2); 24579 (t.drawingArea = Math.round(e)), t.setCenterPoint(0, 0, 0, 0); 24580 } 24581 function l(t) { 24582 return 0 === t || 180 === t ? "center" : t < 180 ? "left" : "right"; 24583 } 24584 function s(t, e, n, i) { 24585 if (f.isArray(e)) for (var a = n.y, o = 1.5 * i, r = 0; r < e.length; ++r) t.fillText(e[r], n.x, a), (a += o); 24586 else t.fillText(e, n.x, n.y); 24587 } 24588 function u(t, e, n) { 24589 90 === t || 270 === t ? (n.y -= e.h / 2) : (t > 270 || t < 90) && (n.y -= e.h); 24590 } 24591 function d(t) { 24592 var i = t.ctx, 24593 a = f.getValueOrDefault, 24594 o = t.options, 24595 r = o.angleLines, 24596 d = o.pointLabels; 24597 (i.lineWidth = r.lineWidth), (i.strokeStyle = r.color); 24598 var c = t.getDistanceFromCenterForValue(o.reverse ? t.min : t.max), 24599 h = n(t); 24600 i.textBaseline = "top"; 24601 for (var p = e(t) - 1; p >= 0; p--) { 24602 if (r.display) { 24603 var m = t.getPointPosition(p, c); 24604 i.beginPath(), i.moveTo(t.xCenter, t.yCenter), i.lineTo(m.x, m.y), i.stroke(), i.closePath(); 24605 } 24606 if (d.display) { 24607 var v = t.getPointPosition(p, c + 5), 24608 b = a(d.fontColor, g.defaultFontColor); 24609 (i.font = h.font), (i.fillStyle = b); 24610 var x = t.getIndexAngle(p), 24611 y = f.toDegrees(x); 24612 (i.textAlign = l(y)), u(y, t._pointLabelSizes[p], v), s(i, t.pointLabels[p] || "", v, h.size); 24613 } 24614 } 24615 } 24616 function c(t, n, i, a) { 24617 var o = t.ctx; 24618 if (((o.strokeStyle = f.getValueAtIndexOrDefault(n.color, a - 1)), (o.lineWidth = f.getValueAtIndexOrDefault(n.lineWidth, a - 1)), t.options.gridLines.circular)) 24619 o.beginPath(), o.arc(t.xCenter, t.yCenter, i, 0, 2 * Math.PI), o.closePath(), o.stroke(); 24620 else { 24621 var r = e(t); 24622 if (0 === r) return; 24623 o.beginPath(); 24624 var l = t.getPointPosition(0, i); 24625 o.moveTo(l.x, l.y); 24626 for (var s = 1; s < r;
24626 s++) (l = t.getPointPosition(s, i)), o.lineTo(l.x, l.y); 24627 o.closePath(), o.stroke(); 24628 } 24629 } 24630 function h(t) { 24631 return f.isNumber(t) ? t : 0; 24632 } 24633 var f = t.helpers, 24634 g = t.defaults.global, 24635 p = { 24636 display: !0, 24637 animate: !0, 24638 position: "chartArea", 24639 angleLines: { display: !0, color: "rgba(0, 0, 0, 0.1)", lineWidth: 1 }, 24640 gridLines: { circular: !1 }, 24641 ticks: { showLabelBackdrop: !0, backdropColor: "rgba(255,255,255,0.75)", backdropPaddingY: 2, backdropPaddingX: 2, callback: t.Ticks.formatters.linear }, 24642 pointLabels: { 24643 display: !0, 24644 fontSize: 10, 24645 callback: function (t) { 24646 return t; 24647 }, 24648 }, 24649 }, 24650 m = t.LinearScaleBase.extend({ 24651 setDimensions: function () { 24652 var t = this, 24653 e = t.options, 24654 n = e.ticks; 24655 (t.width = t.maxWidth), (t.height = t.maxHeight), (t.xCenter = Math.round(t.width / 2)), (t.yCenter = Math.round(t.height / 2)); 24656 var i = f.min([t.height, t.width]), 24657 a = f.getValueOrDefault(n.fontSize, g.defaultFontSize); 24658 t.drawingArea = e.display ? i / 2 - (a / 2 + n.backdropPaddingY) : i / 2; 24659 }, 24660 determineDataLimits: function () { 24661 var t = this, 24662 e = t.chart, 24663 n = Number.POSITIVE_INFINITY, 24664 i = Number.NEGATIVE_INFINITY; 24665 f.each(e.data.datasets, function (a, o) { 24666 if (e.isDatasetVisible(o)) { 24667 var r = e.getDatasetMeta(o); 24668 f.each(a.data, function (e, a) { 24669 var o = +t.getRightValue(e); 24670 isNaN(o) || r.data[a].hidden || ((n = Math.min(o, n)), (i = Math.max(o, i))); 24671 }); 24672 } 24673 }), 24674 (t.min = n === Number.POSITIVE_INFINITY ? 0 : n), 24675 (t.max = i === Number.NEGATIVE_INFINITY ? 0 : i), 24676 t.handleTickRangeOptions(); 24677 }, 24678 getTickLimit: function () { 24679 var t = this.options.ticks, 24680 e = f.getValueOrDefault(t.fontSize, g.defaultFontSize); 24681 return Math.min(t.maxTicksLimit ? t.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * e))); 24682 }, 24683 convertTicksToLabels: function () { 24684 var e = this; 24685 t.LinearScaleBase.prototype.convertTicksToLabels.call(e), (e.pointLabels = e.chart.data.labels.map(e.options.pointLabels.callback, e)); 24686 }, 24687 getLabelForIndex: function (t, e) { 24688 return +this.getRightValue(this.chart.data.datasets[e].data[t]); 24689 }, 24690 fit: function () { 24691 this.options.pointLabels.display ? o(this) : r(this); 24692 }, 24693 setReductions: function (t, e, n) { 24694 var i = this, 24695 a = e.l / Math.sin(n.l), 24696 o = Math.max(e.r - i.width, 0) / Math.sin(n.r), 24697 r = -e.t / Math.cos(n.t), 24698 l = -Math.max(e.b - i.height, 0) / Math.cos(n.b); 24699 (a = h(a)), (o = h(o)), (r = h(r)), (l = h(l)), (i.drawingArea = Math.min(Math.round(t - (a + o) / 2), Math.round(t - (r + l) / 2))), i.setCenterPoint(a, o, r, l); 24700 }, 24701 setCenterPoint: function (t, e, n, i) { 24702 var a = this, 24703 o = a.width - e - a.drawingArea, 24704 r = t + a.drawingArea, 24705 l = n + a.drawingArea, 24706 s = a.height - i - a.drawingArea; 24707 (a.xCenter = Math.round((r + o) / 2 + a.left)), (a.yCenter = Math.round((l + s) / 2 + a.top)); 24708 }, 24709 getIndexAngle: function (t) { 24710 var n = (2 * Math.PI) / e(this), 24711 i = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0, 24712 a = (i * Math.PI * 2) / 360; 24713 return t * n + a; 24714 }, 24715 getDistanceFromCenterForValue: function (t) { 24716 var e = this; 24717 if (null === t) return 0; 24718 var n = e.drawingArea / (e.max - e.min); 24719 return e.options.reverse ? (e.max - t) * n : (t - e.min) * n; 24720 }, 24721 getPointPosition: function (t, e) { 24722 var n = this, 24723 i = n.getIndexAngle(t) - Math.PI / 2; 24724 return { x: Math.round(Math.cos(i) * e) + n.xCenter, y: Math.round(Math.sin(i) * e) + n.yCenter }; 24725 }, 24726 getPointPositionForValue: function (t, e) { 24727 return this.getPointPosition(t, this.getDistanceFromCenterForValue(e)); 24728 }, 24729 getBasePosition: function () { 24730 var t = this, 24731 e = t.min, 24732 n = t.max; 24733 return t.getPointPositionForValue(0, t.beginAtZero ? 0 : e < 0 && n < 0 ? n : e > 0 && n > 0 ? e : 0); 24734 }, 24735 draw: function () { 24736 var t = this, 24737 e = t.options, 24738 n = e.gridLines, 24739 i = e.ticks, 24740 a = f.getValueOrDefault;
24741 if (e.display) { 24742 var o = t.ctx, 24743 r = a(i.fontSize, g.defaultFontSize), 24744 l = a(i.fontStyle, g.defaultFontStyle), 24745 s = a(i.fontFamily, g.defaultFontFamily), 24746 u = f.fontString(r, l, s); 24747 f.each(t.ticks, function (l, s) { 24748 if (s > 0 || e.reverse) { 24749 var d = t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]), 24750 h = t.yCenter - d; 24751 if ((n.display && 0 !== s && c(t, n, d, s), i.display)) { 24752 var f = a(i.fontColor, g.defaultFontColor); 24753 if (((o.font = u), i.showLabelBackdrop)) { 24754 var p = o.measureText(l).width; 24755 (o.fillStyle = i.backdropColor), o.fillRect(t.xCenter - p / 2 - i.backdropPaddingX, h - r / 2 - i.backdropPaddingY, p + 2 * i.backdropPaddingX, r + 2 * i.backdropPaddingY); 24756 } 24757 (o.textAlign = "center"), (o.textBaseline = "middle"), (o.fillStyle = f), o.fillText(l, t.xCenter, h); 24758 } 24759 } 24760 }), 24761 (e.angleLines.display || e.pointLabels.display) && d(t); 24762 } 24763 }, 24764 }); 24765 t.scaleService.registerScaleType("radialLinear", m, p); 24766 }; 24767 }, 24768 {}, 24769 ], 24770 49: [ 24771 function (t, e, n) { 24772 "use strict"; 24773 var i = t(1); 24774 (i = "function" == typeof i ? i : window.moment), 24775 (e.exports = function (t) { 24776 function e(t, e) { 24777 var n = t.options.time; 24778 if ("string" == typeof n.parser) return i(e, n.parser); 24779 if ("function" == typeof n.parser) return n.parser(e); 24780 if ("function" == typeof e.getMonth || "number" == typeof e) return i(e); 24781 if (e.isValid && e.isValid()) return e; 24782 var a = n.format; 24783 return "string" != typeof a && a.call ? (console.warn("options.time.format is deprecated and replaced by options.time.parser."), a(e)) : i(e, a); 24784 } 24785 function n(t, e, n, i) { 24786 for (var a, o = Object.keys(l), r = o.length, s = o.indexOf(t); s < r; s++) { 24787 a = o[s]; 24788 var u = l[a], 24789 d = (u.steps && u.steps[u.steps.length - 1]) || u.maxStep; 24790 if (void 0 === d || Math.ceil((n - e) / (d * u.size)) <= i) break; 24791 } 24792 return a; 24793 } 24794 function a(t, e, n, i) { 24795 var a = l[n], 24796 o = a.size, 24797 r = Math.ceil((e - t) / o), 24798 s = 1, 24799 u = e - t; 24800 if (a.steps) for (var d = a.steps.length, c = 0; c < d && r > i; c++) (s = a.steps[c]), (r = Math.ceil(u / (o * s))); 24801 else for (; r > i && i > 0;
24801 ) ++s, (r = Math.ceil(u / (o * s))); 24802 return s; 24803 } 24804 function o(t, e, n) { 24805 var a = []; 24806 if (t.maxTicks) { 24807 var o = t.stepSize; 24808 a.push(void 0 !== t.min ? t.min : n.min); 24809 for (var r = i(n.min); r.add(o, t.unit).valueOf() < n.max; ) a.push(r.valueOf()); 24810 var l = t.max || n.max; 24811 a[a.length - 1] !== l && a.push(l); 24812 } 24813 return a; 24814 } 24815 var r = t.helpers, 24816 l = { 24817 millisecond: { size: 1, steps: [1, 2, 5, 10, 20, 50, 100, 250, 500] }, 24818 second: { size: 1e3, steps: [1, 2, 5, 10, 30] }, 24819 minute: { size: 6e4, steps: [1, 2, 5, 10, 30] }, 24820 hour: { size: 36e5, steps: [1, 2, 3, 6, 12] }, 24821 day: { size: 864e5, steps: [1, 2, 5] }, 24822 week: { size: 6048e5, maxStep: 4 }, 24823 month: { size: 2628e6, maxStep: 3 }, 24824 quarter: { size: 7884e6, maxStep: 4 }, 24825 year: { size: 3154e7, maxStep: !1 }, 24826 }, 24827 s = { 24828 position: "bottom", 24829 time: { 24830 parser: !1, 24831 format: !1, 24832 unit: !1, 24833 round: !1, 24834 displayFormat: !1, 24835 isoWeekday: !1, 24836 minUnit: "millisecond", 24837 displayFormats: { millisecond: "h:mm:ss.SSS a", second: "h:mm:ss a", minute: "h:mm:ss a", hour: "MMM D, hA", day: "ll", week: "ll", month: "MMM YYYY", quarter: "[Q]Q - YYYY", year: "YYYY" }, 24838 }, 24839 ticks: { autoSkip: !1 }, 24840 }; 24841 t.Ticks.generators.time = function (t, e) { 24842 var n, 24843 a, 24844 r = t.isoWeekday; 24845 return ( 24846 "week" === t.unit && r !== !1 24847 ? ((n = i(e.min).startOf("isoWeek").isoWeekday(r).valueOf()), (a = i(e.max).startOf("isoWeek").isoWeekday(r)), e.max - a > 0 && a.add(1, "week"), (a = a.valueOf())) 24848 : ((n = i(e.min).startOf(t.unit).valueOf()), (a = i(e.max).startOf(t.unit)), e.max - a > 0 && a.add(1, t.unit), (a = a.valueOf())), 24849 o(t, e, { min: n, max: a }) 24850 ); 24851 }; 24852 var u = t.Scale.extend({ 24853 initialize: function () { 24854 if (!i) throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com"); 24855 t.Scale.prototype.initialize.call(this); 24856 }, 24857 determineDataLimits: function () { 24858 var t, 24859 n = this, 24860 i = n.options.time, 24861 a = Number.MAX_SAFE_INTEGER, 24862 o = Number.MIN_SAFE_INTEGER, 24863 l = n.chart.data, 24864 s = { labels: [], datasets: [] }; 24865 r.each(l.labels, function (r, l) { 24866 var u = e(n, r); 24867 u.isValid() && (i.round && u.startOf(i.round), (t = u.valueOf()), (a = Math.min(t, a)), (o = Math.max(t, o)), (s.labels[l] = t)); 24868 }), 24869 r.each(l.datasets, function (l, u) { 24870 var d = []; 24871 "object" == typeof l.data[0] && null !== l.data[0] && n.chart.isDatasetVisible(u) 24872 ? r.each(l.data, function (r, l) { 24873 var s = e(n, n.getRightValue(r)); 24874 s.isValid() && (i.round && s.startOf(i.round), (t = s.valueOf()), (a = Math.min(t, a)), (o = Math.max(t, o)), (d[l] = t)); 24875 }) 24876 : (d = s.labels.slice()), 24877 (s.datasets[u] = d); 24878 }), 24879 (n.dataMin = a), 24880 (n.dataMax = o), 24881 (n._parsedData = s); 24882 }, 24883 buildTicks: function () { 24884 var i, 24885 o, 24886 l = this, 24887 s = l.options.time, 24888 u = l.dataMin, 24889 d = l.dataMax; 24890 if (s.min) { 24891 var c = e(l, s.min); 24892 s.round && c.round(s.round), (i = c.valueOf()); 24893 } 24894 s.max && (o = e(l, s.max).valueOf()); 24895 var h = l.getLabelCapacity(i || u), 24896 f = s.unit || n(s.minUnit, i || u, o || d, h); 24897 l.displayFormat = s.displayFormats[f]; 24898 var g = s.stepSize || a(i || u, o || d, f, h); 24899 (l.ticks = t.Ticks.generators.time({ maxTicks: h, min: i, max: o, stepSize: g, unit: f, isoWeekday: s.isoWeekday }, { min: u, max: d })), (l.max = r.max(l.ticks)), (l.min = r.min(l.ticks)); 24900 }, 24901 getLabelForIndex: function (t, n) { 24902 var i = this, 24903 a = i.chart.data.labels && t < i.chart.data.labels.length ? i.chart.data.labels[t] : "", 24904 o = i.chart.data.datasets[n].data[t]; 24905 return null !== o && "object" == typeof o && (a = i.getRightValue(o)), i.options.time.tooltipFormat && (a = e(i, a).format(i.options.time.tooltipFormat)), a; 24906 }, 24907 tickFormatFunction: function (t, e, n) { 24908 var i = t.format(this.displayFormat), 24909 a = this.options.ticks, 24910 o = r.getValueOrDefault(a.callback, a.userCallback); 24911 return o ? o(i, e, n) : i; 24912 }, 24913 convertTicksToLabels: function () { 24914 var t = this; 24915 (t.ticksAsTimestamps = t.ticks), 24916 (t.ticks = t.ticks 24917 .map(function (t) { 24918 return i(t); 24919 }) 24920 .map(t.tickFormatFunction, t)); 24921 }, 24922 getPixelForOffset: function (t) { 24923 var e = this, 24924 n = e.max - e.min, 24925 i = n ? (t - e.min) / n : 0; 24926 if (e.isHorizontal()) { 24927 var a = e.width * i; 24928 return e.left + Math.round(a); 24929 } 24930 var o = e.height * i; 24931 return e.top + Math.round(o); 24932 }, 24933 getPixelForValue: function (t, n, i) { 24934 var a = this, 24935 o = null; 24936 if ( 24937 (void 0 !== n && void 0 !== i && (o = a._parsedData.datasets[i][n]), null === o && ((t && t.isValid) || (t = e(a, a.getRightValue(t))), t && t.isValid && t.isValid() && (o = t.valueOf())), null !== o) 24938 ) 24939 return a.getPixelForOffset(o); 24940 }, 24941 getPixelForTick: function (t) { 24942 return this.getPixelForOffset(this.ticksAsTimestamps[t]); 24943 }, 24944 getValueForPixel: function (t) { 24945 var e = this, 24946 n = e.isHorizontal() ? e.width : e.height, 24947 a = (t - (e.isHorizontal() ? e.left : e.top)) / n; 24948 return i(e.min + a * (e.max - e.min)); 24949 }, 24950 getLabelWidth: function (e) { 24951 var n = this, 24952 i = n.options.ticks, 24953 a = n.ctx.measureText(e).width, 24954 o = Math.cos(r.toRadians(i.maxRotation)), 24955 l = Math.sin(r.toRadians(i.maxRotation)), 24956 s = r.getValueOrDefault(i.fontSize, t.defaults.global.defaultFontSize); 24957 return a * o + s * l; 24958 }, 24959 getLabelCapacity: function (t) { 24960 var e = this; 24961 e.displayFormat = e.options.time.displayFormats.millisecond; 24962 var n = e.tickFormatFunction(i(t), 0, []), 24963 a = e.getLabelWidth(n), 24964 o = e.isHorizontal() ? e.width : e.height, 24965 r = o / a; 24966 return r; 24967 }, 24968 }); 24969 t.scaleService.registerScaleType("time", u, s); 24970 }); 24971 }, 24972 { 1: 1 }, 24973 ], 24974 }, 24975 {}, 24976 [7] 24977 )(7); 24978}); 24979// HighChart library start here
24980!/** 24981 * Highcharts JS v11.4.0 (2024-03-04) 24982 * 24983 * (c) 2009-2024 Torstein Honsi 24984 * 24985 * License: www.highcharts.com/license 24986 */function(t,e){"object"==typeof module&&module.exports?(e.default=e,module.exports=t&&t.document?e(t):e):"function"==typeof define&&define.amd?define("highcharts/highcharts",function(){return e(t)}):(t.Highcharts&&t.Highcharts.error(16,!0),t.Highcharts=e(t))}("undefined"!=typeof window?window:this,function(t){"use strict";var e={};function i(e,i,s,r){e.hasOwnProperty(i)||(e[i]=r.apply(null,s),"function"==typeof CustomEvent&&t.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:i,module:e[i]}})))}return i(e,"Core/Globals.js",[],function(){var e,i;return(i=e||(e={})).SVG_NS="http://www.w3.org/2000/svg",i.product="Highcharts",i.version="11.4.0",i.win=void 0!==t?t:{},i.doc=i.win.document,i.svg=i.doc&&i.doc.createElementNS&&!!i.doc.createElementNS(i.SVG_NS,"svg").createSVGRect,i.userAgent=i.win.navigator&&i.win.navigator.userAgent||"",i.isChrome=-1!==i.userAgent.indexOf("Chrome"),i.isFirefox=-1!==i.userAgent.indexOf("Firefox"),i.isMS=/(edge|msie|trident)/i.test(i.userAgent)&&!i.win.opera,i.isSafari=!i.isChrome&&-1!==i.userAgent.indexOf("Safari"),i.isTouchDevice=/(Mobile|Android|Windows Phone)/.test(i.userAgent),i.isWebKit=-1!==i.userAgent.indexOf("AppleWebKit"),i.deg2rad=2*Math.PI/360,i.hasBidiBug=i.isFirefox&&4>parseInt(i.userAgent.split("Firefox/")[1],10),i.marginNames=["plotTop","marginRight","marginBottom","plotLeft"],i.noop=function(){},i.supportsPassiveEvents=function(){let t=!1;if(!i.isMS){let e=Object.defineProperty({},"passive",{get:function(){t=!0}});i.win.addEventListener&&i.win.removeEventListener&&(i.win.addEventListener("testPassive",i.noop,e),i.win.removeEventListener("testPassive",i.noop,e))}return t}(),i.charts=[],i.composed=[],i.dateFormats={},i.seriesTypes={},i.symbolSizes={},i.chartCount=0,e}),i(e,"Core/Utilities.js",[e["Core/Globals.js"]],function(t){let e;let{charts:i,doc:s,win:r}=t;function o(e,i,s,a){let n=i?"Highcharts error":"Highcharts warning";32===e&&(e=`${n}: Deprecated member`);let h=p(e),l=h?`${n} #${e}: www.highcharts.com/errors/${e}/`:e.toString();if(void 0!==a){let t="";h&&(l+="?"),k(a,function(e,i){t+=` 24987 - ${i}: ${e}`,h&&(l+=encodeURI(i)+"="+encodeURI(e))}),l+=t}M(t,"displayError",{chart:s,code:e,message:l,params:a},function(){if(i)throw Error(l);r.console&&-1===o.messages.indexOf(l)&&console.warn(l)}),o.messages.push(l)}function a(t,e){return parseInt(t,e||10)}function n(t){return"string"==typeof t}function h(t){let e=Object.prototype.toString.call(t);return"[object Array]"===e||"[object Array Iterator]"===e}function l(t,e){return!!t&&"object"==typeof t&&(!e||!h(t))}function d(t){return l(t)&&"number"==typeof t.nodeType}function c(t){let e=t&&t.constructor;return!!(l(t,!0)&&!d(t)&&e&&e.name&&"Object"!==e.name)}function p(t){return"number"==typeof t&&!isNaN(t)&&t<1/0&&t>-1/0}function u(t){return null!=t}function g(t,e,i){let s;let r=n(e)&&!u(i),o=(e,i)=>{u(e)?t.setAttribute(i,e):r?(s=t.getAttribute(i))||"class"!==i||(s=t.getAttribute(i+"Name")):t.removeAttribute(i)};return n(e)?o(i,e):k(e,o),s}function f(t){return h(t)?t:[t]}function m(t,e){let i;for(i in t||(t={}),e)t[i]=e[i];return t}function x(){let t=arguments,e=t.length;for(let i=0;i<e;i++){let e=t[i];if(null!=e)return e}}function y(t,e){m(t.style,e)}function b(t){return Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function v(t,e){return t>1e14?t:parseFloat(t.toPrecision(e||14))}(o||(o={})).messages=[],Math.easeInOutSine=function(t){return -.5*(Math.cos(Math.PI*t)-1)};let S=Array.prototype.find?function(t,e){return t.find(e)}:function(t,e){let i;let s=t.length;for(i=0;i<s;i++)if(e(t[i],i))return t[i]};function k(t,e,i){for(let s in t)Object.hasOwnProperty.call(t,s)&&e.call(i||t[s],t[s],s,t)}function C(t,e,i){function s(e,i){let s=t.removeEventListener;s&&s.call(t,e,i,!1)}function r(i){let r,o;t.nodeName&&(e?(r={})[e]=!0:r=i,k(r,function(t,e){if(i[e])for(o=i[e].length;o--;)s(e,i[e][o].fn)}))}let o="function"==typeof t&&t.prototype||t;if(Object.hasOwnProperty.call(o,"hcEvents")){let t=o.hcEvents;if(e){let o=t[e]||[];i?(t[e]=o.filter(function(t){return i!==t.fn}),s(e,i)):(r(t),t[e]=[])}else r(t),delete o.hcEvents}}function M(e,i,r,o){if(r=r||{}
24987,s.createEvent&&(e.dispatchEvent||e.fireEvent&&e!==t)){let t=s.createEvent("Events");t.initEvent(i,!0,!0),r=m(t,r),e.dispatchEvent?e.dispatchEvent(r):e.fireEvent(i,r)}else if(e.hcEvents){r.target||m(r,{preventDefault:function(){r.defaultPrevented=!0},target:e,type:i});let t=[],s=e,o=!1;for(;s.hcEvents;)Object.hasOwnProperty.call(s,"hcEvents")&&s.hcEvents[i]&&(t.length&&(o=!0),t.unshift.apply(t,s.hcEvents[i])),s=Object.getPrototypeOf(s);o&&t.sort((t,e)=>t.order-e.order),t.forEach(t=>{!1===t.fn.call(e,r)&&r.preventDefault()})}o&&!r.defaultPrevented&&o.call(e,r)}k({map:"map",each:"forEach",grep:"filter",reduce:"reduce",some:"some"},function(e,i){t[i]=function(t){return o(32,!1,void 0,{[`Highcharts.${i}`]:`use Array.${e}`}),Array.prototype[e].apply(t,[].slice.call(arguments,1))}});let w=function(){let t=Math.random().toString(36).substring(2,9)+"-",i=0;return function(){return"highcharts-"+(e?"":t)+i++}}();return r.jQuery&&(r.jQuery.fn.highcharts=function(){let e=[].slice.call(arguments);if(this[0])return e[0]?(new t[n(e[0])?e.shift():"Chart"](this[0],e[0],e[1]),this):i[g(this[0],"data-highcharts-chart")]}),{addEvent:function(e,i,s,r={}){let o="function"==typeof e&&e.prototype||e;Object.hasOwnProperty.call(o,"hcEvents")||(o.hcEvents={});let a=o.hcEvents;t.Point&&e instanceof t.Point&&e.series&&e.series.chart&&(e.series.chart.runTrackerClick=!0);let n=e.addEventListener;n&&n.call(e,i,s,!!t.supportsPassiveEvents&&{passive:void 0===r.passive?-1!==i.indexOf("touch"):r.passive,capture:!1}),a[i]||(a[i]=[]);let h={fn:s,order:"number"==typeof r.order?r.order:1/0};return a[i].push(h),a[i].sort((t,e)=>t.order-e.order),function(){C(e,i,s)}},arrayMax:function(t){let e=t.length,i=t[0];for(;e--;)t[e]>i&&(i=t[e]);return i},arrayMin:function(t){let e=t.length,i=t[0];for(;e--;)t[e]<i&&(i=t[e]);return i},attr:g,clamp:function(t,e,i){return t>e?t<i?t:i:e},clearTimeout:function(t){u(t)&&clearTimeout(t)},correctFloat:v,createElement:function(t,e,i,r,o){let a=s.createElement(t);return e&&m(a,e),o&&y(a,{padding:"0",border:"none",margin:"0"}),i&&y(a,i),r&&r.appendChild(a),a},css:y,defined:u,destroyObjectProperties:function(t,e,i){k(t,function(s,r){s!==e&&s?.destroy&&s.destroy(),(s?.destroy||!i)&&delete t[r]})},diffObjects:function(t,e,i,s){let r={};return function t(e,r,o,a){let n=i?r:e;k(e,function(i,d){if(!a&&s&&s.indexOf(d)>-1&&r[d]){i=f(i),o[d]=[];for(let e=0;e<Math.max(i.length,r[d].length);e++)r[d][e]&&(void 0===i[e]?o[d][e]=r[d][e]:(o[d][e]={},t(i[e],r[d][e],o[d][e],a+1)))}else l(i,!0)&&!i.nodeType?(o[d]=h(i)?[]:{},t(i,r[d]||{},o[d],a+1),0!==Object.keys(o[d]).length||"colorAxis"===d&&0===a||delete o[d]):(e[d]!==r[d]||d in e&&!(d in r))&&"__proto__"!==d&&"constructor"!==d&&(o[d]=n[d])})}(t,e,r,0),r},discardElement:function(t){t&&t.parentElement&&t.parentElement.removeChild(t)},erase:function(t,e){let i=t.length;for(;i--;)if(t[i]===e){t.splice(i,1);break}},error:o,extend:m,extendClass:function(t,e){let i=function(){};return i.prototype=new t,m(i.prototype,e),i},find:S,fireEvent:M,getClosestDistance:function(t,e){let i,s,r,o;let a=!e;return t.forEach(t=>{if(t.length>1)for(o=s=t.length-1;o>0;o--)(r=t[o]-t[o-1])<0&&!a?(e?.(),e=void 0):r&&(void 0===i||r<i)&&(i=r)}),i},getMagnitude:b,getNestedProperty:function(t,e){let i=t.split(".");for(;i.length&&u(e);){let t=i.shift();if(void 0===t||"__proto__"===t)return;if("this"===t){let t;return l(e)&&(t=e["@this"]),t??e}let s=e[t];if(!u(s)||"function"==typeof s||"number"==typeof s.nodeType||s===r)return;e=s}return e},getStyle:function t(e,i,s){let o;if("width"===i){let i=Math.min(e.offsetWidth,e.scrollWidth),s=e.getBoundingClientRect&&e.getBoundingClientRect().width;return s<i&&s>=i-1&&(i=Math.floor(s)),Math.max(0,i-(t(e,"padding-left",!0)||0)-(t(e,"padding-right",!0)||0))}if("height"===i)return Math.max(0,Math.min(e.offsetHeight,e.scrollHeight)-(t(e,"padding-top",!0)||0)-(t(e,"padding-bottom",!0)||0));let n=r.getComputedStyle(e,void 0);return n&&(o=n.getPropertyValue(i),x(s,"opacity"!==i)&&(o=a(o))),o},inArray:function(t,e,i){return o(32,!1,void 0,{"Highcharts.inArray":"use Array.indexOf"}),e.indexOf(t,i)},insertItem:function(t,e){let i;let s=t.options.index,r=e.length;for(i=t.options.isInternal?r:0;i<r+1;i++)if(!e[i]||p(s)&&s<x(e[i].options.index,e[i]._i)||e[i].options.isInternal){e.splice(i,0,t);break}return i},isArray:h,isClass:c,isDOMElement:d,isFunction:function(t){return"function"==typeof t},isNumber:p,isObject:l,isString:n,keys:function(t){return o(32,!1,void 0,{"Highcharts.keys":"use Object.keys"}),Object.keys(t)},merge:function(){let t,e=arguments,i={},s=function(t,e){return"object"!=typeof t&&(t={}),k(e,function(i,r){"__proto__"!==r&&"constructor"!==r&&(!l(i,!0)||c(i)||d(i)?t[r]=e[r]:t[r]=s(t[r]||{},i))}),t};!0===e[0]&&(i=e[1],e=Array.prototype.slice.call(e,2));let r=e.length;for(t=0;t<r;t++)i=s(i,e[t]);return i}
24987,normalizeTickInterval:function(t,e,i,s,r){let o,a=t;i=x(i,b(t));let n=t/i;for(!e&&(e=r?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===s&&(1===i?e=e.filter(function(t){return t%1==0}):i<=.1&&(e=[1/i]))),o=0;o<e.length&&(a=e[o],(!r||!(a*i>=t))&&(r||!(n<=(e[o]+(e[o+1]||e[o]))/2)));o++);return v(a*i,-Math.round(Math.log(.001)/Math.LN10))},objectEach:k,offset:function(t){let e=s.documentElement,i=t.parentElement||t.parentNode?t.getBoundingClientRect():{top:0,left:0,width:0,height:0};return{top:i.top+(r.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(r.pageXOffset||e.scrollLeft)-(e.clientLeft||0),width:i.width,height:i.height}},pad:function(t,e,i){return Array((e||2)+1-String(t).replace("-","").length).join(i||"0")+t},pick:x,pInt:a,pushUnique:function(t,e){return 0>t.indexOf(e)&&!!t.push(e)},relativeLength:function(t,e,i){return/%$/.test(t)?e*parseFloat(t)/100+(i||0):parseFloat(t)},removeEvent:C,replaceNested:function(t,...e){let i,s;do for(s of(i=t,e))t=t.replace(s[0],s[1]);while(t!==i);return t},splat:f,stableSort:function(t,e){let i,s;let r=t.length;for(s=0;s<r;s++)t[s].safeI=s;for(t.sort(function(t,s){return 0===(i=e(t,s))?t.safeI-s.safeI:i}),s=0;s<r;s++)delete t[s].safeI},syncTimeout:function(t,e,i){return e>0?setTimeout(t,e,i):(t.call(0,i),-1)},timeUnits:{millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5,week:6048e5,month:24192e5,year:314496e5},uniqueKey:w,useSerialIds:function(t){return e=x(t,e)},wrap:function(t,e,i){let s=t[e];t[e]=function(){let t=arguments,e=this;return i.apply(this,[function(){return s.apply(e,arguments.length?arguments:t)}].concat([].slice.call(arguments)))}}}}),i(e,"Core/Chart/ChartDefaults.js",[],function(){return{alignThresholds:!1,panning:{enabled:!1,type:"x"},styledMode:!1,borderRadius:0,colorCount:10,allowMutatingData:!0,ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{},position:{}},reflow:!0,type:"line",zooming:{singleTouch:!1,resetButton:{theme:{zIndex:6},position:{align:"right",x:-10,y:10}}},width:null,height:null,borderColor:"#334eff",backgroundColor:"#ffffff",plotBorderColor:"#cccccc"}}),i(e,"Core/Color/Palettes.js",[],function(){return{colors:["#2caffe","#544fc5","#00e272","#fe6a35","#6b8abc","#d568fb","#2ee0ca","#fa4b42","#feb56a","#91e8e1"]}}),i(e,"Core/Time.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{win:i}=t,{defined:s,error:r,extend:o,isNumber:a,isObject:n,merge:h,objectEach:l,pad:d,pick:c,splat:p,timeUnits:u}=e,g=t.isSafari&&i.Intl&&i.Intl.DateTimeFormat.prototype.formatRange,f=t.isSafari&&i.Intl&&!i.Intl.DateTimeFormat.prototype.formatRange;class m{constructor(t){this.options={},this.useUTC=!1,this.variableTimezone=!1,this.Date=i.Date,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.update(t)}get(t,e){if(this.variableTimezone||this.timezoneOffset){let i=e.getTime(),s=i-this.getTimezoneOffset(e);e.setTime(s);let r=e["getUTC"+t]();return e.setTime(i),r}return this.useUTC?e["getUTC"+t]():e["get"+t]()}set(t,e,i){if(this.variableTimezone||this.timezoneOffset){if("Milliseconds"===t||"Seconds"===t||"Minutes"===t&&this.getTimezoneOffset(e)%36e5==0)return e["setUTC"+t](i);let s=this.getTimezoneOffset(e),r=e.getTime()-s;e.setTime(r),e["setUTC"+t](i);let o=this.getTimezoneOffset(e);return r=e.getTime()+o,e.setTime(r)}return this.useUTC||g&&"FullYear"===t?e["setUTC"+t](i):e["set"+t](i)}update(t={}){let e=c(t.useUTC,!0);this.options=t=h(!0,this.options,t),this.Date=t.Date||i.Date||Date,this.useUTC=e,this.timezoneOffset=e&&t.timezoneOffset||void 0,this.getTimezoneOffset=this.timezoneOffsetFunction(),this.variableTimezone=e&&!!(t.getTimezoneOffset||t.timezone)}makeTime(t,e,i,s,r,o){let a,n,h;return this.useUTC?(a=this.Date.UTC.apply(0,arguments),n=this.getTimezoneOffset(a),a+=n,n!==(h=this.getTimezoneOffset(a))?a+=h-n:n-36e5!==this.getTimezoneOffset(a-36e5)||f||(a-=36e5)):a=new this.Date(t,e,c(i,1),c(s,0),c(r,0),c(o,0)).getTime(),a}timezoneOffsetFunction(){let t=this,e=this.options,i=e.getTimezoneOffset;return this.useUTC?e.timezone?t=>{try{let i=`shortOffset,${e.timezone||""}`,[s,r,o,n,h=0]=(m.formatCache[i]=m.formatCache[i]||Intl.DateTimeFormat("en",{timeZone:e.timezone,timeZoneName:"shortOffset"}
24987)).format(t).split(/(GMT|:)/).map(Number),l=-(36e5*(o+h/60));if(a(l))return l}catch(t){r(34)}return 0}:this.useUTC&&i?t=>6e4*i(t.valueOf()):()=>6e4*(t.timezoneOffset||0):t=>6e4*new Date(t.toString()).getTimezoneOffset()}dateFormat(e,i,r){if(!s(i)||isNaN(i))return t.defaultOptions.lang&&t.defaultOptions.lang.invalidDate||"";e=c(e,"%Y-%m-%d %H:%M:%S");let a=this,n=new this.Date(i),h=this.get("Hours",n),p=this.get("Day",n),u=this.get("Date",n),g=this.get("Month",n),f=this.get("FullYear",n),m=t.defaultOptions.lang,x=m&&m.weekdays,y=m&&m.shortWeekdays;return l(o({a:y?y[p]:x[p].substr(0,3),A:x[p],d:d(u),e:d(u,2," "),w:p,b:m.shortMonths[g],B:m.months[g],m:d(g+1),o:g+1,y:f.toString().substr(2,2),Y:f,H:d(h),k:h,I:d(h%12||12),l:h%12||12,M:d(this.get("Minutes",n)),p:h<12?"AM":"PM",P:h<12?"am":"pm",S:d(this.get("Seconds",n)),L:d(Math.floor(i%1e3),3)},t.dateFormats),function(t,s){for(;-1!==e.indexOf("%"+s);)e=e.replace("%"+s,"function"==typeof t?t.call(a,i):t)}),r?e.substr(0,1).toUpperCase()+e.substr(1):e}resolveDTLFormat(t){return n(t,!0)?t:{main:(t=p(t))[0],from:t[1],to:t[2]}}getTimeTicks(t,e,i,r){let a,n,h,l;let d=this,p=d.Date,g=[],f={},m=new p(e),x=t.unitRange,y=t.count||1;if(r=c(r,1),s(e)){d.set("Milliseconds",m,x>=u.second?0:y*Math.floor(d.get("Milliseconds",m)/y)),x>=u.second&&d.set("Seconds",m,x>=u.minute?0:y*Math.floor(d.get("Seconds",m)/y)),x>=u.minute&&d.set("Minutes",m,x>=u.hour?0:y*Math.floor(d.get("Minutes",m)/y)),x>=u.hour&&d.set("Hours",m,x>=u.day?0:y*Math.floor(d.get("Hours",m)/y)),x>=u.day&&d.set("Date",m,x>=u.month?1:Math.max(1,y*Math.floor(d.get("Date",m)/y))),x>=u.month&&(d.set("Month",m,x>=u.year?0:y*Math.floor(d.get("Month",m)/y)),n=d.get("FullYear",m)),x>=u.year&&(n-=n%y,d.set("FullYear",m,n)),x===u.week&&(l=d.get("Day",m),d.set("Date",m,d.get("Date",m)-l+r+(l<r?-7:0))),n=d.get("FullYear",m);let t=d.get("Month",m),o=d.get("Date",m),c=d.get("Hours",m);e=m.getTime(),(d.variableTimezone||!d.useUTC)&&s(i)&&(h=i-e>4*u.month||d.getTimezoneOffset(e)!==d.getTimezoneOffset(i));let p=m.getTime();for(a=1;p<i;)g.push(p),x===u.year?p=d.makeTime(n+a*y,0):x===u.month?p=d.makeTime(n,t+a*y):h&&(x===u.day||x===u.week)?p=d.makeTime(n,t,o+a*y*(x===u.day?1:7)):h&&x===u.hour&&y>1?p=d.makeTime(n,t,o,c+a*y):p+=x*y,a++;g.push(p),x<=u.hour&&g.length<1e4&&g.forEach(function(t){t%18e5==0&&"000000000"===d.dateFormat("%H%M%S%L",t)&&(f[t]="day")})}return g.info=o(t,{higherRanks:f,totalRange:x*y}),g}getDateFormat(t,e,i,s){let r=this.dateFormat("%m-%d %H:%M:%S.%L",e),o="01-01 00:00:00.000",a={millisecond:15,second:12,minute:9,hour:6,day:3},n="millisecond",h=n;for(n in u){if(t===u.week&&+this.dateFormat("%w",e)===i&&r.substr(6)===o.substr(6)){n="week";break}if(u[n]>t){n=h;break}if(a[n]&&r.substr(a[n])!==o.substr(a[n]))break;"week"!==n&&(h=n)}return this.resolveDTLFormat(s[n]).main}}return m.formatCache={},m}),i(e,"Core/Defaults.js",[e["Core/Chart/ChartDefaults.js"],e["Core/Globals.js"],e["Core/Color/Palettes.js"],e["Core/Time.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){let{isTouchDevice:o,svg:a}=e,{merge:n}=r,h={colors:i.colors,symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],decimalPoint:".",numericSymbols:["k","M","G","T","P","E"],resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:t,title:{style:{color:"#333333",fontWeight:"bold"},text:"Chart title",align:"center",margin:15,widthAdjust:-44},subtitle:{style:{color:"#666666",fontSize:"0.8em"},text:"",align:"center",widthAdjust:-44},caption:{margin:15,style:{color:"#666666",fontSize:"0.8em"},text:"",align:"left",verticalAlign:"bottom"},plotOptions:{},legend:{enabled:!0,align:"center",alignColumns:!0,className:"highcharts-no-tooltip",layout:"horizontal",itemMarginBottom:2,itemMarginTop:2,labelFormatter:function(){return this.name},borderColor:"#999999",borderRadius:0,navigation:{style:{fontSize:"0.8em"},activeColor:"#0022ff",inactiveColor:"#cccccc"},itemStyle:{color:"#333333",cursor:"pointer",fontSize:"0.8em",textDecoration:"none",textOverflow:"ellipsis"},itemHoverStyle:{color:"#000000"},itemHiddenStyle:{color:"#666666",textDecoration:"line-through"},shadow:!1,itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},squareSymbol:!0,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontSize:"0.8em",fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"#ffffff",opacity:.5,textAlign:"center"}},tooltip:{enabled:!0,animation:a,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %e %b, %H:%M:%S.%L",second:"%A, %e %b, %H:%M:%S",minute:"%A, %e %b, %H:%M",hour:"%A, %e %b, %H:%M",day:"%A, %e %b %Y",week:"Week from %A, %e %b %Y",month:"%B %Y",year:"%Y"},footerFormat:"",headerShape:"callout",hideDelay:500,padding:8,shape:"callout",shared:!1,snap:o?25:10,headerFormat:'<span style="font-size: 0.8em">{point.key}</span><br/>',pointFormat:'<span style="color:{point.color}">â</span> {series.name}: <b>{point.y}</b><br/>',backgroundColor:"#ffffff",borderWidth:void 0,shadow:!0,stickOnContact:!1,style:{color:"#333333",cursor:"default",fontSize:"0.8em"},useHTML:!1},credits:{enabled:!0,href:"https://www.highcharts.com?credits",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#999999",fontSize:"0.6em"},text:"Highcharts.com"}};h.chart.styledMode=!1;let l=new s(h.time);return{defaultOptions:h,defaultTime:l,getOptions:function(){return h},setOptions:function(t){return n(!0,h,t),(t.time||t.global)&&(e.time?e.time.update(n(h.global,h.time,t.global,t.time)):e.time=l),h}}}),i(e,"Core/Color/Color.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{isNumber:i,merge:s,pInt:r}=e;class o{static parse(t){return t?new o(t):o.None}constructor(e){let i,s,r,a;this.rgba=[NaN,NaN,NaN,NaN],this.input=e;let n=t.Color;if(n&&n!==o)return new n(e);if("object"==typeof e&&void 0!==e.stops)this.stops=e.stops.map(t=>new o(t[1]));else if("string"==typeof e){if(this.input=e=o.names[e.toLowerCase()]||e,"#"===e.charAt(0)){let t=e.length,i=parseInt(e.substr(1),16);7===t?s=[(16711680&i)>>16,(65280&i)>>8,255&i,1]:4===t&&(s=[(3840&i)>>4|(3840&i)>>8,(240&i)>>4|240&i,(15&i)<<4|15&i,1])}if(!s)for(r=o.parsers.length;r--&&!s;)(i=(a=o.parsers[r]).regex.exec(e))&&(s=a.parse(i))}s&&(this.rgba=s)}get(t){let e=this.input,r=this.rgba;if("object"==typeof e&&void 0!==this.stops){let i=s(e);return i.stops=[].slice.call(i.stops),this.stops.forEach((e,s)=>{i.stops[s]=[i.stops[s][0],e.get(t)]}),i}return r&&i(r[0])?"rgb"!==t&&(t||1!==r[3])?"a"===t?`${r[3]}`:"rgba("+r.join(",")+")":"rgb("+r[0]+","+r[1]+","+r[2]+")":e}brighten(t){let e=this.rgba;if(this.stops)this.stops.forEach(function(e){e.brighten(t)});else if(i(t)&&0!==t)for(let i=0;i<3;i++)e[i]+=r(255*t),e[i]<0&&(e[i]=0),e[i]>255&&(e[i]=255);return this}setOpacity(t){return this.rgba[3]=t,this}tweenTo(t,e){let s=this.rgba,r=t.rgba;
24987if(!i(s[0])||!i(r[0]))return t.input||"none";let o=1!==r[3]||1!==s[3];return(o?"rgba(":"rgb(")+Math.round(r[0]+(s[0]-r[0])*(1-e))+","+Math.round(r[1]+(s[1]-r[1])*(1-e))+","+Math.round(r[2]+(s[2]-r[2])*(1-e))+(o?","+(r[3]+(s[3]-r[3])*(1-e)):"")+")"}}return o.names={white:"#ffffff",black:"#000000"},o.parsers=[{regex:/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,parse:function(t){return[r(t[1]),r(t[2]),r(t[3]),parseFloat(t[4],10)]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(t){return[r(t[1]),r(t[2]),r(t[3]),1]}}],o.None=new o(""),o}),i(e,"Core/Animation/Fx.js",[e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{parse:s}=t,{win:r}=e,{isNumber:o,objectEach:a}=i;class n{constructor(t,e,i){this.pos=NaN,this.options=e,this.elem=t,this.prop=i}dSetter(){let t=this.paths,e=t&&t[0],i=t&&t[1],s=this.now||0,r=[];if(1!==s&&e&&i){if(e.length===i.length&&s<1)for(let t=0;t<i.length;t++){let a=e[t],n=i[t],h=[];for(let t=0;t<n.length;t++){let e=a[t],i=n[t];o(e)&&o(i)&&!("A"===n[0]&&(4===t||5===t))?h[t]=e+s*(i-e):h[t]=i}r.push(h)}else r=i}else r=this.toD||[];this.elem.attr("d",r,void 0,!0)}update(){let t=this.elem,e=this.prop,i=this.now,s=this.options.step;this[e+"Setter"]?this[e+"Setter"]():t.attr?t.element&&t.attr(e,i,null,!0):t.style[e]=i+this.unit,s&&s.call(t,i,this)}run(t,e,i){let s=this,o=s.options,a=function(t){return!a.stopped&&s.step(t)},h=r.requestAnimationFrame||function(t){setTimeout(t,13)},l=function(){for(let t=0;t<n.timers.length;t++)n.timers[t]()||n.timers.splice(t--,1);n.timers.length&&h(l)};t!==e||this.elem["forceAnimate:"+this.prop]?(this.startTime=+new Date,this.start=t,this.end=e,this.unit=i,this.now=this.start,this.pos=0,a.elem=this.elem,a.prop=this.prop,a()&&1===n.timers.push(a)&&h(l)):(delete o.curAnim[this.prop],o.complete&&0===Object.keys(o.curAnim).length&&o.complete.call(this.elem))}step(t){let e,i;let s=+new Date,r=this.options,o=this.elem,n=r.complete,h=r.duration,l=r.curAnim;return o.attr&&!o.element?e=!1:t||s>=h+this.startTime?(this.now=this.end,this.pos=1,this.update(),l[this.prop]=!0,i=!0,a(l,function(t){!0!==t&&(i=!1)}),i&&n&&n.call(o),e=!1):(this.pos=r.easing((s-this.startTime)/h),this.now=this.start+(this.end-this.start)*this.pos,this.update(),e=!0),e}initPath(t,e,i){let s=t.startX,r=t.endX,a=i.slice(),n=t.isArea,h=n?2:1,l,d,c,p,u=e&&e.slice();if(!u)return[a,a];function g(t,e){for(;t.length<d;){let i=t[0],s=e[d-t.length];if(s&&"M"===i[0]&&("C"===s[0]?t[0]=["C",i[1],i[2],i[1],i[2],i[1],i[2]]:t[0]=["L",i[1],i[2]]),t.unshift(i),n){let e=t.pop();t.push(t[t.length-1],e)}}}function f(t){for(;t.length<d;){let e=t[Math.floor(t.length/h)-1].slice();if("C"===e[0]&&(e[1]=e[5],e[2]=e[6]),n){let i=t[Math.floor(t.length/h)].slice();t.splice(t.length/2,0,e,i)}else t.push(e)}}if(s&&r&&r.length){for(c=0;c<s.length;c++){if(s[c]===r[0]){l=c;break}if(s[0]===r[r.length-s.length+c]){l=c,p=!0;break}if(s[s.length-1]===r[r.length-s.length+c]){l=s.length-c;break}}void 0===l&&(u=[])}return u.length&&o(l)&&(d=a.length+l*h,p?(g(u,a),f(a)):(g(a,u),f(u))),[u,a]}fillSetter(){n.prototype.strokeSetter.apply(this,arguments)}strokeSetter(){this.elem.attr(this.prop,s(this.start).tweenTo(s(this.end),this.pos),void 0,!0)}}return n.timers=[],n}),i(e,"Core/Animation/AnimationUtilities.js",[e["Core/Animation/Fx.js"],e["Core/Utilities.js"]],function(t,e){let{defined:i,getStyle:s,isArray:r,isNumber:o,isObject:a,merge:n,objectEach:h,pick:l}=e;function d(t){return a(t)?n({duration:500,defer:0},t):{duration:t?500:0,defer:0}}function c(e,i){let s=t.timers.length;for(;s--;)t.timers[s].elem!==e||i&&i!==t.timers[s].prop||(t.timers[s].stopped=!0)}return{animate:function(e,i,l){let d,p="",u,g,f;a(l)||(f=arguments,l={duration:f[2],easing:f[3],complete:f[4]}),o(l.duration)||(l.duration=400),l.easing="function"==typeof l.easing?l.easing:Math[l.easing]||Math.easeInOutSine,l.curAnim=n(i),h(i,function(o,a){c(e,a),g=new t(e,l,a),u=void 0,"d"===a&&r(i.d)?(g.paths=g.initPath(e,e.pathArray,i.d),g.toD=i.d,d=0,u=1):e.attr?d=e.attr(a):(d=parseFloat(s(e,a))||0,"opacity"!==a&&(p="px")),u||(u=o),"string"==typeof u&&u.match("px")&&(u=u.replace(/px/g,"")),g.run(d,u,p)})},animObject:d,getDeferredAnimation:function(t,e,s){let r=d(e),o=s?[s]:t.series,n=0,h=0;return o.forEach(t=>{let s=d(t.options.animation);n=a(e)&&i(e.defer)?r.defer:Math.max(n,s.duration+s.defer),h=Math.min(r.duration,s.duration)}),t.renderer.forExport&&(n=0),{defer:Math.max(0,n-h),duration:Math.min(n,h)}},setAnimation:function(t,e){e.renderer.globalAnimation=l(t,e.options.chart.animation,!0)},stop:c}}),i(e,"Core/Renderer/HTML/AST.js",[e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e){let{SVG_NS:i,win:s}=t,{attr:r,createElement:o,css:a,error:n,isFunction:h,isString:l,objectEach:d,splat:c}=e,{trustedTypes:p}=s,u=p&&h(p.createPolicy)&&p.createPolicy("highcharts",{createHTML:t=>t}),g=u?u.createHTML(""):"",f=function(){try{return!!new DOMParser().parseFromString(g,"text/html")}catch(t){return!1}}();class m{static filterUserAttributes(t){return d(t,(e,i)=>{let s=!0;-1===m.allowedAttributes.indexOf(i)&&(s=!1),-1!==["background","dynsrc","href","lowsrc","src"].indexOf(i)&&(s=l(e)&&m.allowedReferences.some(t=>0===e.indexOf(t))),s||(n(33,!1,void 0,{"Invalid attribute in config":`${i}`}),delete t[i]),l(e)&&t[i]&&(t[i]=e.replace(/</g,"<"))}),t}static parseStyle(t){return t.split(";").reduce((t,e)=>{let i=e.split(":").map(t=>t.trim()),s=i.shift();return s&&i.length&&(t[s.replace(/-([a-z])/g,t=>t[1].toUpperCase())]=i.join(":")),t},{})}static setElementHTML(t,e){t.innerHTML=m.emptyHTML,e&&new m(e).addToDOM(t)}constructor(t){this.nodes="string"==typeof t?this.parseMarkup(t):t}addToDOM(e){return function e(s,o){let h;
24987return c(s).forEach(function(s){let l;let c=s.tagName,p=s.textContent?t.doc.createTextNode(s.textContent):void 0,u=m.bypassHTMLFiltering;if(c){if("#text"===c)l=p;else if(-1!==m.allowedTags.indexOf(c)||u){let n="svg"===c?i:o.namespaceURI||i,h=t.doc.createElementNS(n,c),g=s.attributes||{};d(s,function(t,e){"tagName"!==e&&"attributes"!==e&&"children"!==e&&"style"!==e&&"textContent"!==e&&(g[e]=t)}),r(h,u?g:m.filterUserAttributes(g)),s.style&&a(h,s.style),p&&h.appendChild(p),e(s.children||[],h),l=h}else n(33,!1,void 0,{"Invalid tagName in config":c})}l&&o.appendChild(l),h=l}),h}(this.nodes,e)}parseMarkup(t){let e;let i=[];if(t=t.trim().replace(/ style=(["'])/g," data-style=$1"),f)e=new DOMParser().parseFromString(u?u.createHTML(t):t,"text/html");else{let i=o("div");i.innerHTML=t,e={body:i}}let s=(t,e)=>{let i=t.nodeName.toLowerCase(),r={tagName:i};"#text"===i&&(r.textContent=t.textContent||"");let o=t.attributes;if(o){let t={};[].forEach.call(o,e=>{"data-style"===e.name?r.style=m.parseStyle(e.value):t[e.name]=e.value}),r.attributes=t}if(t.childNodes.length){let e=[];[].forEach.call(t.childNodes,t=>{s(t,e)}),e.length&&(r.children=e)}e.push(r)};return[].forEach.call(e.body.childNodes,t=>s(t,i)),i}}return m.allowedAttributes=["alt","aria-controls","aria-describedby","aria-expanded","aria-haspopup","aria-hidden","aria-label","aria-labelledby","aria-live","aria-pressed","aria-readonly","aria-roledescription","aria-selected","class","clip-path","color","colspan","cx","cy","d","dx","dy","disabled","fill","filterUnits","flood-color","flood-opacity","height","href","id","in","markerHeight","markerWidth","offset","opacity","orient","padding","paddingLeft","paddingRight","patternUnits","r","refX","refY","role","scope","slope","src","startOffset","stdDeviation","stroke","stroke-linecap","stroke-width","style","tableValues","result","rowspan","summary","target","tabindex","text-align","text-anchor","textAnchor","textLength","title","type","valign","width","x","x1","x2","xlink:href","y","y1","y2","zIndex"],m.allowedReferences=["https://","http://","mailto:","/","../","./","#"],m.allowedTags=["a","abbr","b","br","button","caption","circle","clipPath","code","dd","defs","div","dl","dt","em","feComponentTransfer","feDropShadow","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feOffset","feMerge","feMergeNode","filter","h1","h2","h3","h4","h5","h6","hr","i","img","li","linearGradient","marker","ol","p","path","pattern","pre","rect","small","span","stop","strong","style","sub","sup","svg","table","text","textPath","thead","title","tbody","tspan","td","th","tr","u","ul","#text"],m.emptyHTML=g,m.bypassHTMLFiltering=!1,m}),i(e,"Core/Templating.js",[e["Core/Defaults.js"],e["Core/Utilities.js"]],function(t,e){let{defaultOptions:i,defaultTime:s}=t,{extend:r,getNestedProperty:o,isArray:a,isNumber:n,isObject:h,pick:l,pInt:d}=e,c={add:(t,e)=>
24987t+e,divide:(t,e)=>0!==e?t/e:"",eq:(t,e)=>t==e,each:function(t){let e=arguments[arguments.length-1];return!!a(t)&&t.map((i,s)=>p(e.body,r(h(i)?i:{"@this":i},{"@index":s,"@first":0===s,"@last":s===t.length-1}))).join("")},ge:(t,e)=>t>=e,gt:(t,e)=>t>e,if:t=>!!t,le:(t,e)=>t<=e,lt:(t,e)=>t<e,multiply:(t,e)=>t*e,ne:(t,e)=>t!=e,subtract:(t,e)=>t-e,unless:t=>!t};function p(t="",e,r){let a=/\{([a-zA-Z0-9\:\.\,;\-\/<>%_@"'= #\(\)]+)\}/g,n=/\(([a-zA-Z0-9\:\.\,;\-\/<>%_@"'= ]+)\)/g,h=[],d=/f$/,g=/\.([0-9])/,f=i.lang,m=r&&r.time||s,x=r&&r.numberFormatter||u,y=(t="")=>{let i;return"true"===t||"false"!==t&&((i=Number(t)).toString()===t?i:o(t,e))},b,v,S=0,k;for(;null!==(b=a.exec(t));){let i=n.exec(b[1]);i&&(b=i,k=!0),v&&v.isBlock||(v={ctx:e,expression:b[1],find:b[0],isBlock:"#"===b[1].charAt(0),start:b.index,startInner:b.index+b[0].length,length:b[0].length});let s=b[1].split(" ")[0].replace("#","");c[s]&&(v.isBlock&&s===v.fn&&S++,v.fn||(v.fn=s));let r="else"===b[1];if(v.isBlock&&v.fn&&(b[1]===`/${v.fn}`||r)){if(S)!r&&S--;else{let e=v.startInner,i=t.substr(e,b.index-e);void 0===v.body?(v.body=i,v.startInner=b.index+b[0].length):v.elseBody=i,v.find+=i+b[0],r||(h.push(v),v=void 0)}}else v.isBlock||h.push(v);if(i&&!v?.isBlock)break}return h.forEach(i=>{let s,r;let{body:o,elseBody:a,expression:n,fn:h}=i;if(h){let t=[i],l=n.split(" ");for(r=c[h].length;r--;)t.unshift(y(l[r+1]));s=c[h].apply(e,t),i.isBlock&&"boolean"==typeof s&&(s=p(s?o:a,e))}else{let t=n.split(":");if(s=y(t.shift()||""),t.length&&"number"==typeof s){let e=t.join(":");if(d.test(e)){let t=parseInt((e.match(g)||["","-1"])[1],10);null!==s&&(s=x(s,t,f.decimalPoint,e.indexOf(",")>-1?f.thousandsSep:""))}else s=m.dateFormat(e,s)}}t=t.replace(i.find,l(s,""))}),k?p(t,e,r):t}function u(t,e,s,r){let o,a;t=+t||0,e=+e;let h=i.lang,c=(t.toString().split(".")[1]||"").split("e")[0].length,p=t.toString().split("e"),u=e;-1===e?e=Math.min(c,20):n(e)?e&&p[1]&&p[1]<0&&((a=e+ +p[1])>=0?(p[0]=(+p[0]).toExponential(a).split("e")[0],e=a):(p[0]=p[0].split(".")[0]||0,t=e<20?(p[0]*Math.pow(10,p[1])).toFixed(e):0,p[1]=0)):e=2;let g=(Math.abs(p[1]?p[0]:t)+Math.pow(10,-Math.max(e,c)-1)).toFixed(e),f=String(d(g)),m=f.length>3?f.length%3:0;return s=l(s,h.decimalPoint),r=l(r,h.thousandsSep),o=(t<0?"-":"")+(m?f.substr(0,m)+r:""),0>+p[1]&&!u?o="0":o+=f.substr(m).replace(/(\d{3})(?=\d)/g,"$1"+r),e&&(o+=s+g.slice(-e)),p[1]&&0!=+o&&(o+="e"+p[1]),o}return{dateFormat:function(t,e,i){return s.dateFormat(t,e,i)},format:p,helpers:c,numberFormat:u}}),i(e,"Core/Renderer/RendererRegistry.js",[e["Core/Globals.js"]],function(t){var e,i;let s;return(i=e||(e={})).rendererTypes={},i.getRendererType=function(t=s){return i.rendererTypes[t]||i.rendererTypes[s]},i.registerRendererType=function(e,r,o){i.rendererTypes[e]=r,(!s||o)&&(s=e,t.Renderer=r)},e}),i(e,"Core/Renderer/RendererUtilities.js",[e["Core/Utilities.js"]],function(t){var e;let{clamp:i,pick:s,pushUnique:r,stableSort:o}=t;return(e||(e={})).distribute=function t(e,a,n){let h=e,l=h.reducedLen||a,d=(t,e)=>t.target-e.target,c=[],p=e.length,u=[],g=c.push,f,m,x,y=!0,b,v,S=0,k;for(f=p;f--;)S+=e[f].size;if(S>l){for(o(e,(t,e)=>(e.rank||0)-(t.rank||0)),x=(k=e[0].rank===e[e.length-1].rank)?p/2:-1,m=k?x:p-1;x&&S>l;)b=e[f=Math.floor(m)],r(u,f)&&(S-=b.size),m+=x,k&&m>=e.length&&(x/=2,m=x);u.sort((t,e)=>e-t).forEach(t=>g.apply(c,e.splice(t,1)))}for(o(e,d),e=e.map(t=>({size:t.size,targets:[t.target],align:s(t.align,.5)}));y;){for(f=e.length;f--;)b=e[f],v=(Math.min.apply(0,b.targets)+Math.max.apply(0,b.targets))/2,b.pos=i(v-b.size*b.align,0,a-b.size);for(f=e.length,y=!1;f--;)f>0&&e[f-1].pos+e[f-1].size>e[f].pos&&(e[f-1].size+=e[f].size,e[f-1].targets=e[f-1].targets.concat(e[f].targets),e[f-1].align=.5,e[f-1].pos+e[f-1].size>a&&(e[f-1].pos=a-e[f-1].size),e.splice(f,1),y=!0)}return g.apply(h,c),f=0,e.some(e=>{let i=0;return(e.targets||[]).some(()=>(h[f].pos=e.pos+i,void 0!==n&&Math.abs(h[f].pos-h[f].target)>n)?(h.slice(0,f+1).forEach(t=>delete t.pos),h.reducedLen=(h.reducedLen||a)-.1*a,h.reducedLen>.1*a&&t(h,a,n),!0):(i+=h[f].size,f++,!1))}),o(h,d),h},e}
24987),i(e,"Core/Renderer/SVG/SVGElement.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{animate:r,animObject:o,stop:a}=t,{deg2rad:n,doc:h,svg:l,SVG_NS:d,win:c}=i,{addEvent:p,attr:u,createElement:g,css:f,defined:m,erase:x,extend:y,fireEvent:b,isArray:v,isFunction:S,isObject:k,isString:C,merge:M,objectEach:w,pick:T,pInt:A,replaceNested:P,syncTimeout:L,uniqueKey:O}=s;class D{_defaultGetter(t){let e=T(this[t+"Value"],this[t],this.element?this.element.getAttribute(t):null,0);return/^[\-0-9\.]+$/.test(e)&&(e=parseFloat(e)),e}_defaultSetter(t,e,i){i.setAttribute(e,t)}add(t){let e;let i=this.renderer,s=this.element;return t&&(this.parentGroup=t),void 0!==this.textStr&&"text"===this.element.nodeName&&i.buildText(this),this.added=!0,(!t||t.handleZ||this.zIndex)&&(e=this.zIndexSetter()),e||(t?t.element:i.box).appendChild(s),this.onAdd&&this.onAdd(),this}addClass(t,e){let i=e?"":this.attr("class")||"";return(t=(t||"").split(/ /g).reduce(function(t,e){return -1===i.indexOf(e)&&t.push(e),t},i?[i]:[]).join(" "))!==i&&this.attr("class",t),this}afterSetters(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)}align(t,e,i,s=!0){let r,o,a,n,h;let l={},d=this.renderer,c=d.alignedObjects;t?(this.alignOptions=t,this.alignByTranslate=e,(!i||C(i))&&(this.alignTo=a=i||"renderer",x(c,this),c.push(this),i=void 0)):(t=this.alignOptions,e=this.alignByTranslate,a=this.alignTo),i=T(i,d[a],d);let p=t.align,u=t.verticalAlign;return r=(i.x||0)+(t.x||0),o=(i.y||0)+(t.y||0),"right"===p?n=1:"center"===p&&(n=2),n&&(r+=(i.width-(t.width||0))/n),l[e?"translateX":"x"]=Math.round(r),"bottom"===u?h=1:"middle"===u&&(h=2),h&&(o+=(i.height-(t.height||0))/h),l[e?"translateY":"y"]=Math.round(o),s&&(this[this.placed?"animate":"attr"](l),this.placed=!0),this.alignAttr=l,this}alignSetter(t){let e={left:"start",center:"middle",right:"end"};e[t]&&(this.alignValue=t,this.element.setAttribute("text-anchor",e[t]))}animate(t,e,i){let s=o(T(e,this.renderer.globalAnimation,!0)),a=s.defer;return h.hidden&&(s.duration=0),0!==s.duration?(i&&(s.complete=i),L(()=>{this.element&&r(this,t,s)},a)):(this.attr(t,void 0,i||s.complete),w(t,function(t,e){s.step&&s.step.call(this,t,{prop:e,pos:1,elem:this})},this)),this}applyTextOutline(t){let e=this.element;-1!==t.indexOf("contrast")&&(t=t.replace(/contrast/g,this.renderer.getContrast(e.style.fill)));let s=t.split(" "),r=s[s.length-1],o=s[0];if(o&&"none"!==o&&i.svg){this.fakeTS=!0,o=o.replace(/(^[\d\.]+)(.*?)$/g,function(t,e,i){return 2*Number(e)+i}),this.removeTextOutline();let t=h.createElementNS(d,"tspan");u(t,{class:"highcharts-text-outline",fill:r,stroke:r,"stroke-width":o,"stroke-linejoin":"round"});let i=e.querySelector("textPath")||e;[].forEach.call(i.childNodes,e=>{let i=e.cloneNode(!0);i.removeAttribute&&["fill","stroke","stroke-width","stroke"].forEach(t=>i.removeAttribute(t)),t.appendChild(i)});let s=0;[].forEach.call(i.querySelectorAll("text tspan"),t=>{s+=Number(t.getAttribute("dy"))});let a=h.createElementNS(d,"tspan");a.textContent="â",u(a,{x:Number(e.getAttribute("x")),dy:-s}),t.appendChild(a),i.insertBefore(t,i.firstChild)}}attr(t,e,i,s){let r=this.element,o=D.symbolCustomAttribs,n,h,l=this,d;return"string"==typeof t&&void 0!==e&&(n=t,(t={})[n]=e),"string"==typeof t?l=(this[t+"Getter"]||this._defaultGetter).call(this,t,r):(w(t,function(e,i){d=!1,s||a(this,i),this.symbolName&&-1!==o.indexOf(i)&&(h||(this.symbolAttr(t),h=!0),d=!0),this.rotation&&("x"===i||"y"===i)&&(this.doTransform=!0),d||(this[i+"Setter"]||this._defaultSetter).call(this,e,i,r)},this),this.afterSetters()),i&&i.call(this),l}clip(t){if(t&&!t.clipPath){let e=O()+"-",i=this.renderer.createElement("clipPath").attr({id:e}).add(this.renderer.defs);y(t,{clipPath:i,id:e,count:0}),t.add(i)}return this.attr("clip-path",t?`url(${this.renderer.url}#${t.id})`:"none")}crisp(t,e){let i=Math.round(e=e||t.strokeWidth||0)%2/2;return t.x=Math.floor(t.x||this.x||0)+i,t.y=Math.floor(t.y||this.y||0)+i,t.width=Math.floor((t.width||this.width||0)-2*i),t.height=Math.floor((t.height||this.height||0)-2*i),m(t.strokeWidth)&&(t.strokeWidth=e),t}complexColor(t,i,s){let r=this.renderer,o,a,n,h,l,d,c,p,u,g,f=[],x;b(this.renderer,"complexColor",{args:arguments},function(){if(t.radialGradient?a="radialGradient":t.linearGradient&&(a="linearGradient"),a){if(n=t[a],l=r.gradients,d=t.stops,u=s.radialReference,v(n)&&(t[a]=n={x1:n[0],y1:n[1],x2:n[2],y2:n[3],gradientUnits:"userSpaceOnUse"}),"radialGradient"===a&&u&&!m(n.gradientUnits)&&(h=n,n=M(n,r.getRadialAttr(u,h),{gradientUnits:"userSpaceOnUse"})),w(n,function(t,e){"id"!==e&&f.push(e,t)}),w(d,function(t){f.push(t)}),l[f=f.join(",")])g=l[f].attr("id");else{n.id=g=O();let t=l[f]=r.createElement(a).attr(n).add(r.defs);t.radAttr=h,t.stops=[],d.forEach(function(i){0===i[1].indexOf("rgba")?(c=(o=e.parse(i[1])).get("rgb"),p=o.get("a")):(c=i[1],p=1);let s=r.createElement("stop").attr({offset:i[0],"stop-color":c,"stop-opacity":p}).add(t);t.stops.push(s)})}x="url("+r.url+"#"+g+")",s.setAttribute(i,x),s.gradient=f,t.toString=function(){return x}}})}css(t){let e=this.styles,i={},s=this.element,r,o=!e;if(e&&w(t,function(t,s){e&&e[s]!==t&&(i[s]=t,o=!0)}),o){e&&(t=y(e,i)),null===t.width||"auto"===t.width?delete this.textWidth:"text"===s.nodeName.toLowerCase()&&t.width&&(r=this.textWidth=A(t.width)),y(this.styles,t),r&&!l&&this.renderer.forExport&&delete t.width;let o=M(t);s.namespaceURI===this.SVG_NS&&(["textOutline","textOverflow","width"].forEach(t=>o&&delete o[t]),o.color&&(o.fill=o.color)),f(s,o)}return this.added&&("text"===this.element.nodeName&&this.renderer.buildText(this),t.textOutline&&this.applyTextOutline(t.textOutline)),this}dashstyleSetter(t){let e,i=this["stroke-width"];if("inherit"===i&&(i=1),t=t&&t.toLowerCase()){let s=t.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=s.length;e--;)s[e]=""+A(s[e])*T(i,NaN);t=s.join(",").replace(/NaN/g,"none"),this.element.setAttribute("stroke-dasharray",t)}}destroy(){let t=this,e=t.element||{},i=t.renderer,s=e.ownerSVGElement,r="SPAN"===e.nodeName&&t.parentGroup||void 0,o,n;if(e.onclick=e.onmouseout=e.onmouseover=e.onmousemove=e.point=null,a(t),t.clipPath&&s){let e=t.clipPath;[].forEach.call(s.querySelectorAll("[clip-path],[CLIP-PATH]"),function(t){t.getAttribute("clip-path").indexOf(e.element.i
24987d)>-1&&t.removeAttribute("clip-path")}),t.clipPath=e.destroy()}if(t.connector=t.connector?.destroy(),t.stops){for(n=0;n<t.stops.length;n++)t.stops[n].destroy();t.stops.length=0,t.stops=void 0}for(t.safeRemoveChild(e);r&&r.div&&0===r.div.childNodes.length;)o=r.parentGroup,t.safeRemoveChild(r.div),delete r.div,r=o;t.alignTo&&x(i.alignedObjects,t),w(t,function(e,i){t[i]&&t[i].parentGroup===t&&t[i].destroy&&t[i].destroy(),delete t[i]})}dSetter(t,e,i){v(t)&&("string"==typeof t[0]&&(t=this.renderer.pathToSegments(t)),this.pathArray=t,t=t.reduce((t,e,i)=>e&&e.join?(i?t+" ":"")+e.join(" "):(e||"").toString(),"")),/(NaN| {2}|^$)/.test(t)&&(t="M 0 0"),this[e]!==t&&(i.setAttribute(e,t),this[e]=t)}fillSetter(t,e,i){"string"==typeof t?i.setAttribute(e,t):t&&this.complexColor(t,e,i)}hrefSetter(t,e,i){i.setAttributeNS("http://www.w3.org/1999/xlink",e,t)}getBBox(t,e){let i,s,r,o;let{alignValue:a,element:n,renderer:h,styles:l,textStr:d}=this,{cache:c,cacheKeys:p}=h,u=n.namespaceURI===this.SVG_NS,g=T(e,this.rotation,0),x=h.styledMode?n&&D.prototype.getStyle.call(n,"font-size"):l.fontSize;if(m(d)&&(-1===(o=d.toString()).indexOf("<")&&(o=o.replace(/[0-9]/g,"0")),o+=["",h.rootFontSize,x,g,this.textWidth,a,l.textOverflow,l.fontWeight].join(",")),o&&!t&&(i=c[o]),!i){if(u||h.forExport){try{r=this.fakeTS&&function(t){let e=n.querySelector(".highcharts-text-outline");e&&f(e,{display:t})},S(r)&&r("none"),i=n.getBBox?y({},n.getBBox()):{width:n.offsetWidth,height:n.offsetHeight,x:0,y:0},S(r)&&r("")}catch(t){}(!i||i.width<0)&&(i={x:0,y:0,width:0,height:0})}else i=this.htmlGetBBox();s=i.height,u&&(i.height=s=({"11px,17":14,"13px,20":16})[`${x||""},${Math.round(s)}`]||s),g&&(i=this.getRotatedBox(i,g))}if(o&&(""===d||i.height>0)){for(;p.length>250;)delete c[p.shift()];c[o]||p.push(o),c[o]=i}return i}getRotatedBox(t,e){let{x:i,y:s,width:r,height:o}=t,{alignValue:a,translateY:h,rotationOriginX:l=0,rotationOriginY:d=0}=this,c={right:1,center:.5}[a||0]||0,p=Number(this.element.getAttribute("y")||0)-(h?0:s),u=e*n,g=(e-90)*n,f=Math.cos(u),m=Math.sin(u),x=r*f,y=r*m,b=Math.cos(g),v=Math.sin(g),[[S,k],[C,M]]=[l,d].map(t=>[t-t*f,t*m]),w=i+c*(r-x)+S+M+p*b,T=w+x,A=T-o*b,P=A-x,L=s+p-c*y-k+C+p*v,O=L+y,D=O-o*v,E=D-y,I=Math.min(w,T,A,P),j=Math.min(L,O,D,E),B=Math.max(w,T,A,P)-I,R=Math.max(L,O,D,E)-j;return{x:I,y:j,width:B,height:R}}getStyle(t){return c.getComputedStyle(this.element||this,"").getPropertyValue(t)}hasClass(t){return -1!==(""+this.attr("class")).split(" ").indexOf(t)}hide(){return this.attr({visibility:"hidden"})}htmlGetBBox(){return{height:0,width:0,x:0,y:0}}constructor(t,e){this.onEvents={},this.opacity=1,this.SVG_NS=d,this.element="span"===e||"body"===e?g(e):h.createElementNS(this.SVG_NS,e),this.renderer=t,this.styles={},b(this,"afterInit")}on(t,e){let{onEvents:i}=this;return i[t]&&i[t](),i[t]=p(this.element,t,e),this}opacitySetter(t,e,i){let s=Number(Number(t).toFixed(3));this.opacity=s,i.setAttribute(e,s)}removeClass(t){return this.attr("class",(""+this.attr("class")).replace(C(t)?RegExp(`(^| )${t}( |$)`):t," ").replace(/ +/g," ").trim())}removeTextOutline(){let t=this.element.querySelector("tspan.highcharts-text-outline");t&&this.safeRemoveChild(t)}safeRemoveChild(t){let e=t.parentNode;e&&e.removeChild(t)}setRadialReference(t){let e=this.element.gradient&&this.renderer.gradients[this.element.gradient];return this.element.radialReference=t,e&&e.radAttr&&e.animate(this.renderer.getRadialAttr(t,e.radAttr)),this}setTextPath(t,e){e=M(!0,{enabled:!0,attributes:{dy:-5,startOffset:"50%",textAnchor:"middle"}},e);let i=this.renderer.url,s=this.text||this,r=s.textPath,{attributes:o,enabled:a}=e;if(t=t||r&&r.path,r&&r.undo(),t&&a){let e=p(s,"afterModifyTree",e=>{if(t&&a){let r=t.attr("id");r||t.attr("id",r=O());let a={x:0,y:0};m(o.dx)&&(a.dx=o.dx,delete o.dx),m(o.dy)&&(a.dy=o.dy,delete o.dy),s.attr(a),this.attr({transform:""}),this.box&&(this.box=this.box.destroy());let n=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:"textPath",attributes:y(o,{"text-anchor":o.textAnchor,href:`${i}#${r}`}),children:n}}});s.textPath={path:t,undo:e}}else s.attr({dx:0,dy:0}),delete s.textPath;return this.added&&(s.textCache="",this.renderer.buildText(s)),this}shadow(t){let{renderer:e}=this,i=M(this.parentGroup?.rotation===90?{offsetX:-1,offsetY:-1}:{},k(t)?t:{}),s=e.shadowDefinition(i);return this.attr({filter:t?`url(${e.url}#${s})`:"none"})}show(t=!0){return this.attr({visibility:t?"inherit":"visible"})}"stroke-widthSetter"(t,e,i){this[e]=t,i.setAttribute(e,t)}strokeWidth(){if(!this.renderer.styledMode)return this["stroke-width"]||0;let t=this.getStyle("stroke-width"),e=0,i;return/px$/.test(t)?e=A(t):""!==t&&(u(i=h.createElementNS(d,"rect"),{width:t,"stroke-width":0}),this.element.parentNode.appendChild(i),e=i.getBBox().width,i.parentNode.removeChild(i)),e}symbolAttr(t){let e=this;
24987D.symbolCustomAttribs.forEach(function(i){e[i]=T(t[i],e[i])}),e.attr({d:e.renderer.symbols[e.symbolName](e.x,e.y,e.width,e.height,e)})}textSetter(t){t!==this.textStr&&(delete this.textPxLength,this.textStr=t,this.added&&this.renderer.buildText(this))}titleSetter(t){let e=this.element,i=e.getElementsByTagName("title")[0]||h.createElementNS(this.SVG_NS,"title");e.insertBefore?e.insertBefore(i,e.firstChild):e.appendChild(i),i.textContent=P(T(t,""),[/<[^>]*>/g,""]).replace(/</g,"<").replace(/>/g,">")}toFront(){let t=this.element;return t.parentNode.appendChild(t),this}translate(t,e){return this.attr({translateX:t,translateY:e})}updateTransform(t="transform"){let{element:e,matrix:i,rotation:s=0,rotationOriginX:r,rotationOriginY:o,scaleX:a,scaleY:n,translateX:h=0,translateY:l=0}=this,d=["translate("+h+","+l+")"];m(i)&&d.push("matrix("+i.join(",")+")"),s&&(d.push("rotate("+s+" "+T(r,e.getAttribute("x"),0)+" "+T(o,e.getAttribute("y")||0)+")"),this.text?.element.tagName==="SPAN"&&this.text.attr({rotation:s,rotationOriginX:(r||0)-this.padding,rotationOriginY:(o||0)-this.padding})),(m(a)||m(n))&&d.push("scale("+T(a,1)+" "+T(n,1)+")"),d.length&&!(this.text||this).textPath&&e.setAttribute(t,d.join(" "))}visibilitySetter(t,e,i){"inherit"===t?i.removeAttribute(e):this[e]!==t&&i.setAttribute(e,t),this[e]=t}xGetter(t){return"circle"===this.element.nodeName&&("x"===t?t="cx":"y"===t&&(t="cy")),this._defaultGetter(t)}zIndexSetter(t,e){let i=this.renderer,s=this.parentGroup,r=(s||i).element||i.box,o=this.element,a=r===i.box,n,h,l,d=!1,c,p=this.added,u;if(m(t)?(o.setAttribute("data-z-index",t),t=+t,this[e]===t&&(p=!1)):m(this[e])&&o.removeAttribute("data-z-index"),this[e]=t,p){for((t=this.zIndex)&&s&&(s.handleZ=!0),u=(n=r.childNodes).length-1;u>=0&&!d;u--)c=!m(l=(h=n[u]).getAttribute("data-z-index")),h!==o&&(t<0&&c&&!a&&!u?(r.insertBefore(o,n[u]),d=!0):(A(l)<=t||c&&(!m(t)||t>=0))&&(r.insertBefore(o,n[u+1]),d=!0));d||(r.insertBefore(o,n[a?3:0]),d=!0)}return d}}return D.symbolCustomAttribs=["anchorX","anchorY","clockwise","end","height","innerR","r","start","width","x","y"],D.prototype.strokeSetter=D.prototype.fillSetter,D.prototype.yGetter=D.prototype.xGetter,D.prototype.matrixSetter=D.prototype.rotationOriginXSetter=D.prototype.rotationOriginYSetter=D.prototype.rotationSetter=D.prototype.scaleXSetter=D.prototype.scaleYSetter=D.prototype.translateXSetter=D.prototype.translateYSetter=D.prototype.verticalAlignSetter=function(t,e){this[e]=t,this.doTransform=!0},D}),i(e,"Core/Renderer/SVG/SVGLabel.js",[e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e){let{defined:i,extend:s,isNumber:r,merge:o,pick:a,removeEvent:n}=e;class h extends t{constructor(t,e,i,s,r,o,a,n,l,d){let c;super(t,"g"),this.paddingLeftSetter=this.paddingSetter,this.paddingRightSetter=this.paddingSetter,this.textStr=e,this.x=i,this.y=s,this.anchorX=o,this.anchorY=a,this.baseline=l,this.className=d,this.addClass("button"===d?"highcharts-no-tooltip":"highcharts-label"),d&&this.addClass("highcharts-"+d),this.text=t.text(void 0,0,0,n).attr({zIndex:1}),"string"==typeof r&&((c=/^url\((.*?)\)$/.test(r))||this.renderer.symbols[r])&&(this.symbolKey=r),this.bBox=h.emptyBBox,this.padding=3,this.baselineOffset=0,this.needsBox=t.styledMode||c,this.deferredAttr={},this.alignFactor=0}alignSetter(t){let e={left:0,center:.5,right:1}[t];e!==this.alignFactor&&(this.alignFactor=e,this.bBox&&r(this.xSetting)&&this.attr({x:this.xSetting}))}anchorXSetter(t,e){this.anchorX=t,this.boxAttr(e,Math.round(t)-this.getCrispAdjust()-this.xSetting)}anchorYSetter(t,e){this.anchorY=t,this.boxAttr(e,t-this.ySetting)}boxAttr(t,e){this.box?this.box.attr(t,e):this.deferredAttr[t]=e}css(e){if(e){let t={};e=o(e),h.textProps.forEach(i=>{void 0!==e[i]&&(t[i]=e[i],delete e[i])}),this.text.css(t),"fontSize"in t||"fontWeight"in t?this.updateTextPadding():("width"in t||"textOverflow"in t)&&this.updateBoxSize()}return t.prototype.css.call(this,e)}destroy(){n(this.element,"mouseenter"),n(this.element,"mouseleave"),this.text&&this.text.destroy(),this.box&&(this.box=this.box.destroy()),t.prototype.destroy.call(this)}fillSetter(t,e){t&&(this.needsBox=!0),this.fill=t,this.boxAttr(e,t)}getBBox(t,e){this.textStr&&0===this.bBox.width&&0===this.bBox.height&&this.updateBoxSize();let{padding:i,height:s=0,translateX:r=0,translateY:o=0,width:n=0}=this,h=a(this.paddingLeft,i),l=e??(this.rotation||0),d={width:n,height:s,x:r+this.bBox.x-h,y:o+this.bBox.y-i+this.baselineOffset};return l&&(d=this.getRotatedBox(d,l)),d}getCrispAdjust(){return this.renderer.styledMode&&this.box?this.box.strokeWidth()%2/2:(this["stroke-width"]?parseInt(this["stroke-width"],10):0)%2/2}heightSetter(t){this.heightSetting=t}onAdd(){this.text.add(this),this.attr({text:a(this.textStr,""),x:this.x||0,y:this.y||0}),this.box&&i(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})}paddingSetter(t,e){r(t)?t!==this[e]&&(this[e]=t,this.updateTextPadding()):this[e]=void 0}rSetter(t,e){this.boxAttr(e,t)}strokeSetter(t,e){this.stroke=t,this.boxAttr(e,t)}"stroke-widthSetter"(t,e){t&&(this.needsBox=!0),this["stroke-width"]=t,this.boxAttr(e,t)}"text-alignSetter"(t){this.textAlign=t}textSetter(t){void 0!==t&&this.text.attr({text:t}),this.updateTextPadding()}updateBoxSize(){let t;let e=this.text,o={},a=this.padding,n=this.bBox=(!r(this.widthSetting)||!r(this.heightSetting)||this.textAlign)&&i(e.textStr)?e.getBBox(void 0,0):h.emptyBBox;this.width=this.getPaddedWidth(),this.height=(this.heightSetting||n.height||0)+2*a;let l=this.renderer.fontMetrics(e);if(this.baselineOffset=a+Math.min((this.text.firstLineMetrics||l).b,n.height||1/0),this.heightSetting&&(this.baselineOffset+=(this.heightSetting-l.h)/2),this.needsBox&&!e.textPath){if(!this.box){let t=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect();t.addClass(("button"===this.className?"":"highcharts-label-box")+(this.className?" highcharts-"+this.className+"-box":"")),t.add(this)}t=this.getCrispAdjust(),o.x=t,o.y=(this.baseline?-this.baselineOffset:0)+t,o.width=Math.round(this.width),o.height=Math.round(this.height),this.box.attr(s(o,this.deferredAttr)),this.deferredAttr={}}}updateTextPadding(){let t=this.text;if(!t.textPath){this.updateBoxSize();let e=this.baseline?0:this.baselineOffset,s=a(this.paddingLeft,this.padding);i(this.widthSetting)&&this.bBox&&("center"===this.textAlign||"right"===this.textAlign)&&(s+=({center:.5,right:1})[this.textAlign]*(this.widthSetting-this.bBox.width)),(s!==t.x||e!==t.y)&&(t.attr("x",s),t.hasBoxWidthChanged&&(this.bBox=t.getBBox(!0)),void 0!==e&&t.attr("y",e)),t.x=s,t.y=e}}widthSetter(t){this.widthSetting=r(t)?t:void 0}getPaddedWidth(){let t=this.padding,e=a(this.paddingLeft,t),i=a(this.paddingRight,t);return(this.widthSetting||this.bBox.width||0)+e+i}xSetter(t){this.x=t,this.alignFactor&&(t-=this.alignFactor*this.getPaddedWidth(),this["forceAnimate:x"]=!0),this.xSetting=Math.round(t),this.attr("translateX",this.xSetting)}ySetter(t){this.ySetting=this.y=Math.round(t),this.attr("translateY",this.ySetting)}}return h.emptyBBox={width:0,height:0,x:0,y:0},h.textProps=["color","direction","fontFamily","fontSize","fontStyle","fontWeight","lineHeight","textAlign","textDecoration","textOutline","textOverflow","whiteSpace","width"],h}),i(e,"Core/Renderer/SVG/Symbols.js",[e["Core/Utilities.js"]],function(t){let{defined:e,isNumber:i,pick:s}=t;function r(t,i,r,o,a){let n=[];if(a){let h=a.start||0,l=s(a.r,r),d=s(a.r,o||r),c=.001>Math.abs((a.end||0)-h-2*Math.PI),p=(a.end||0)-.001,u=a.innerR,g=s(a.open,c),f=Math.cos(h),m=Math.sin(h),x=Math.cos(p),y=Math.sin(p),b=s(a.longArc,p-h-Math.PI<.001?0:1),v=["A",l,d,0,b,s(a.clockwise,1),t+l*x,i+d*y];v.params={start:h,end:p,cx:t,cy:i},n.push(["M",t+l*f,i+d*m],v),e(u)&&((v=["A",u,u,0,b,e(a.clockwise)?1-a.clockwise:0,t+u*f,i+u*m]).params={start:p,end:h,cx:t,cy:i},n.push(g?["M",t+u*x,i+u*y]:["L",t+u*x,i+u*y],v)),g||n.push(["Z"])}return n}
24987function o(t,e,i,s,r){return r&&r.r?a(t,e,i,s,r):[["M",t,e],["L",t+i,e],["L",t+i,e+s],["L",t,e+s],["Z"]]}function a(t,e,i,s,r){let o=r?.r||0;return[["M",t+o,e],["L",t+i-o,e],["A",o,o,0,0,1,t+i,e+o],["L",t+i,e+s-o],["A",o,o,0,0,1,t+i-o,e+s],["L",t+o,e+s],["A",o,o,0,0,1,t,e+s-o],["L",t,e+o],["A",o,o,0,0,1,t+o,e],["Z"]]}return{arc:r,callout:function(t,e,s,r,o){let n=Math.min(o&&o.r||0,s,r),h=n+6,l=o&&o.anchorX,d=o&&o.anchorY||0,c=a(t,e,s,r,{r:n});if(!i(l)||l<s&&l>0&&d<r&&d>0)return c;if(t+l>s-h){if(d>e+h&&d<e+r-h)c.splice(3,1,["L",t+s,d-6],["L",t+s+6,d],["L",t+s,d+6],["L",t+s,e+r-n]);else if(l<s){let i=d<e+h,o=i?e:e+r;c.splice(i?2:5,0,["L",l,d],["L",t+s-n,o])}else c.splice(3,1,["L",t+s,r/2],["L",l,d],["L",t+s,r/2],["L",t+s,e+r-n])}else if(t+l<h){if(d>e+h&&d<e+r-h)c.splice(7,1,["L",t,d+6],["L",t-6,d],["L",t,d-6],["L",t,e+n]);else if(l>0){let i=d<e+h,s=i?e:e+r;c.splice(i?1:6,0,["L",l,d],["L",t+n,s])}else c.splice(7,1,["L",t,r/2],["L",l,d],["L",t,r/2],["L",t,e+n])}else d>r&&l<s-h?c.splice(5,1,["L",l+6,e+r],["L",l,e+r+6],["L",l-6,e+r],["L",t+n,e+r]):d<0&&l>h&&c.splice(1,1,["L",l-6,e],["L",l,e-6],["L",l+6,e],["L",s-n,e]);return c},circle:function(t,e,i,s){return r(t+i/2,e+s/2,i/2,s/2,{start:.5*Math.PI,end:2.5*Math.PI,open:!1})},diamond:function(t,e,i,s){return[["M",t+i/2,e],["L",t+i,e+s/2],["L",t+i/2,e+s],["L",t,e+s/2],["Z"]]},rect:o,roundedRect:a,square:o,triangle:function(t,e,i,s){return[["M",t+i/2,e],["L",t+i,e+s],["L",t,e+s],["Z"]]},"triangle-down":function(t,e,i,s){return[["M",t,e],["L",t+i,e],["L",t+i/2,e+s],["Z"]]}}}),i(e,"Core/Renderer/SVG/TextBuilder.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{doc:s,SVG_NS:r,win:o}=e,{attr:a,extend:n,fireEvent:h,isString:l,objectEach:d,pick:c}=i;return class{constructor(t){let e=t.styles;this.renderer=t.renderer,this.svgElement=t,this.width=t.textWidth,this.textLineHeight=e&&e.lineHeight,this.textOutline=e&&e.textOutline,this.ellipsis=!!(e&&"ellipsis"===e.textOverflow),this.noWrap=!!(e&&"nowrap"===e.whiteSpace)}buildSVG(){let e=this.svgElement,i=e.element,r=e.renderer,o=c(e.textStr,"").toString(),a=-1!==o.indexOf("<"),n=i.childNodes,h=!e.added&&r.box,d=[o,this.ellipsis,this.noWrap,this.textLineHeight,this.textOutline,e.getStyle("font-size"),this.width].join(",");if(d!==e.textCache){e.textCache=d,delete e.actualWidth;for(let t=n.length;t--;)i.removeChild(n[t]);if(a||this.ellipsis||this.width||e.textPath||-1!==o.indexOf(" ")&&(!this.noWrap||/<br.*?>/g.test(o))){if(""!==o){h&&h.appendChild(i);let s=new t(o);this.modifyTree(s.nodes),s.addToDOM(i),this.modifyDOM(),this.ellipsis&&-1!==(i.textContent||"").indexOf("â¦")&&e.attr("title",this.unescapeEntities(e.textStr||"",["<",">"])),h&&h.removeChild(i)}}else i.appendChild(s.createTextNode(this.unescapeEntities(o)));l(this.textOutline)&&e.applyTextOutline&&e.applyTextOutline(this.textOutline)}}modifyDOM(){let t;let e=this.svgElement,i=a(e.element,"x");for(e.firstLineMetrics=void 0;t=e.element.firstChild;)if(/^[\s\u200B]*$/.test(t.textContent||" "))e.element.removeChild(t);else break;[].forEach.call(e.element.querySelectorAll("tspan.highcharts-br"),(t,s)=>{t.nextSibling&&t.previousSibling&&(0===s&&1===t.previousSibling.nodeType&&(e.firstLineMetrics=e.renderer.fontMetrics(t.previousSibling)),a(t,{dy:this.getLineHeight(t.nextSibling),x:i}))});let n=this.width||0;if(!n)return;let h=(t,o)=>{let h=t.textContent||"",l=h.replace(/([^\^])-/g,"$1- ").split(" "),d=!this.noWrap&&(l.length>1||e.element.childNodes.length>1),c=this.getLineHeight(o),p=0,u=e.actualWidth;if(this.ellipsis)h&&this.truncate(t,h,void 0,0,Math.max(0,n-.8*c),(t,e)=>t.substring(0,e)+"â¦");else if(d){let h=[],d=[];for(;o.firstChild&&o.firstChild!==t;)d.push(o.firstChild),o.removeChild(o.firstChild);for(;l.length;)l.length&&!this.noWrap&&p>0&&(h.push(t.textContent||""),t.textContent=l.join(" ").replace(/- /g,"-")),this.truncate(t,void 0,l,0===p&&u||0,n,(t,e)=>l.slice(0,e).join(" ").replace(/- /g,"-")),u=e.actualWidth,p++;d.forEach(e=>{o.insertBefore(e,t)}),h.forEach(e=>{o.insertBefore(s.createTextNode(e),t);let n=s.createElementNS(r,"tspan");n.textContent="â",a(n,{dy:c,x:i}),o.insertBefore(n,t)})}},l=t=>
vendor: 4,615 bytes, line 24987
24987{[].slice.call(t.childNodes).forEach(i=>{i.nodeType===o.Node.TEXT_NODE?h(i,t):(-1!==i.className.baseVal.indexOf("highcharts-br")&&(e.actualWidth=0),l(i))})};l(e.element)}getLineHeight(t){let e=t.nodeType===o.Node.TEXT_NODE?t.parentElement:t;return this.textLineHeight?parseInt(this.textLineHeight.toString(),10):this.renderer.fontMetrics(e||this.svgElement.element).h}modifyTree(t){let e=(i,s)=>{let{attributes:r={},children:o,style:a={},tagName:h}=i,l=this.renderer.styledMode;if("b"===h||"strong"===h?l?r.class="highcharts-strong":a.fontWeight="bold":("i"===h||"em"===h)&&(l?r.class="highcharts-emphasized":a.fontStyle="italic"),a&&a.color&&(a.fill=a.color),"br"===h){r.class="highcharts-br",i.textContent="â";let e=t[s+1];e&&e.textContent&&(e.textContent=e.textContent.replace(/^ +/gm,""))}else"a"===h&&o&&o.some(t=>"#text"===t.tagName)&&(i.children=[{children:o,tagName:"tspan"}]);"#text"!==h&&"a"!==h&&(i.tagName="tspan"),n(i,{attributes:r,style:a}),o&&o.filter(t=>"#text"!==t.tagName).forEach(e)};t.forEach(e),h(this.svgElement,"afterModifyTree",{nodes:t})}truncate(t,e,i,s,r,o){let a,n;let h=this.svgElement,{rotation:l}=h,d=[],c=i?1:0,p=(e||i||"").length,u=p,g=function(e,r){let o=r||e,a=t.parentNode;if(a&&void 0===d[o]&&a.getSubStringLength)try{d[o]=s+a.getSubStringLength(0,i?o+1:o)}catch(t){}return d[o]};if(h.rotation=0,s+(n=g(t.textContent.length))>r){for(;c<=p;)u=Math.ceil((c+p)/2),i&&(a=o(i,u)),n=g(u,a&&a.length-1),c===p?c=p+1:n>r?p=u-1:c=u;0===p?t.textContent="":e&&p===e.length-1||(t.textContent=a||o(e||i,u))}i&&i.splice(0,u),h.actualWidth=n,h.rotation=l}unescapeEntities(t,e){return d(this.renderer.escapes,function(i,s){e&&-1!==e.indexOf(i)||(t=t.toString().replace(RegExp(i,"g"),s))}),t}}}),i(e,"Core/Renderer/SVG/SVGRenderer.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Renderer/SVG/SVGLabel.js"],e["Core/Renderer/SVG/Symbols.js"],e["Core/Renderer/SVG/TextBuilder.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h){let l;let{charts:d,deg2rad:c,doc:p,isFirefox:u,isMS:g,isWebKit:f,noop:m,SVG_NS:x,symbolSizes:y,win:b}=i,{addEvent:v,attr:S,createElement:k,css:C,defined:M,destroyObjectProperties:w,extend:T,isArray:A,isNumber:P,isObject:L,isString:O,merge:D,pick:E,pInt:I,replaceNested:j,uniqueKey:B}=h;class R{constructor(t,e,i,s,r,o,a){let n,h;let l=this.createElement("svg").attr({version:"1.1",class:"highcharts-root"}),d=l.element;a||l.css(this.getStyle(s||{})),t.appendChild(d),S(t,"dir","ltr"),-1===t.innerHTML.indexOf("xmlns")&&S(d,"xmlns",this.SVG_NS),this.box=d,this.boxWrapper=l,this.alignedObjects=[],this.url=this.getReferenceURL(),this.createElement("desc").add().element.appendChild(p.createTextNode("Created with Highcharts 11.4.0")),this.defs=this.createElement("defs").add(),this.allowHTML=o,this.forExport=r,this.styledMode=a,this.gradients={},this.cache={},this.cacheKeys=[],this.imgCount=0,this.rootFontSize=l.getStyle("font-size"),this.setSize(e,i,!1),u&&t.getBoundingClientRect&&((n=function(){C(t,{left:0,top:0}),h=t.getBoundingClientRect(),C(t,{left:Math.ceil(h.left)-h.left+"px",top:Math.ceil(h.top)-h.top+"px"})})(),this.unSubPixelFix=v(b,"resize",n))}definition(e){return new t([e]).addToDOM(this.defs.element)}getReferenceURL(){if((u||f)&&p.getElementsByTagName("base").length){if(!M(l)){let e=B(),i=new t([{tagName:"svg",attributes:{width:8,height:8},children:[{tagName:"defs",children:[{tagName:"clipPath",attributes:{id:e},children:[{tagName:"rect",attributes:{width:4,height:4}}]}]},{tagName:"rect",attributes:{id:"hitme",width:8,height:8,"clip-path":`url(#${e})`,fill:"rgba(0,0,0,0.001)"}}]}]).addToDOM(p.body);C(i,{position:"fixed",top:0,left:0,zIndex:9e5});let s=p.elementFromPoint(6,6);l="hitme"===(s&&s.id),p.body.removeChild(i)}if(l)return j(b.location.href.split("#")[0],[/<[^>]*>/g,""],[/([\('\)])/g,"\\$1"],[/ /g,"%20"])}return""}getStyle(t){return this.style=T({fontFamily:"Helvetica, Arial, sans-serif",fontSize:"1rem"},t),this.style}setStyle(t){this.boxWrapper.css(this.getStyle(t))}isHidden(){return!this.boxWrapper.getBBox().width}destroy(){let t=this.defs;return this.box=null,this.boxWrapper=this.boxWrapper.destroy(),w(this.gradients||{}),this.gradients=null,this.defs=t.destroy(),this.unSubPixelFix&&this.unSubPixelFix(),this.alignedObjects=null,null}createElement(t){return new this.Element(this,t)}getRadialAttr(t,e){return{cx:t[0]-t[2]/2+(e.cx||0)*t[2],cy:t[1]-t[2]/2+(e.cy||0)*t[2],r:(e.r||0)*t[2]}}shadowDefinition(t){let e=[`highcharts-drop-shadow-${this.chartIndex}`,...Object.keys(t).map(e=>`${e}-${t[e]}
24987`)].join("-").toLowerCase().replace(/[^a-z0-9\-]/g,""),i=D({color:"#000000",offsetX:1,offsetY:1,opacity:.15,width:5},t);return this.defs.element.querySelector(`#${e}`)||this.definition({tagName:"filter",attributes:{id:e,filterUnits:i.filterUnits},children:[{tagName:"feDropShadow",attributes:{dx:i.offsetX,dy:i.offsetY,"flood-color":i.color,"flood-opacity":Math.min(5*i.opacity,1),stdDeviation:i.width/2}}]}),e}buildText(t){new n(t).buildSVG()}getContrast(t){let i=e.parse(t).rgba.map(t=>{let e=t/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)}),s=.2126*i[0]+.7152*i[1]+.0722*i[2];return 1.05/(s+.05)>(s+.05)/.05?"#FFFFFF":"#000000"}button(e,i,s,r,o={},a,n,h,l,d){let c,p,u;let f=this.label(e,i,s,l,void 0,void 0,d,void 0,"button"),m=this.styledMode,x=o.states||{},y=0;o=D(o),delete o.states;let b=D({color:"#333333",cursor:"pointer",fontSize:"0.8em",fontWeight:"normal"},o.style);delete o.style;let S=t.filterUserAttributes(o);return f.attr(D({padding:8,r:2},S)),m||(S=D({fill:"#f7f7f7",stroke:"#cccccc","stroke-width":1},S),c=(a=D(S,{fill:"#e6e6e6"},t.filterUserAttributes(a||x.hover||{}))).style,delete a.style,p=(n=D(S,{fill:"#e6e9ff",style:{color:"#000000",fontWeight:"bold"}},t.filterUserAttributes(n||x.select||{}))).style,delete n.style,u=(h=D(S,{style:{color:"#cccccc"}},t.filterUserAttributes(h||x.disabled||{}))).style,delete h.style),v(f.element,g?"mouseover":"mouseenter",function(){3!==y&&f.setState(1)}),v(f.element,g?"mouseout":"mouseleave",function(){3!==y&&f.setState(y)}),f.setState=function(t){if(1!==t&&(f.state=y=t),f.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-"+["normal","hover","pressed","disabled"][t||0]),!m){f.attr([S,a,n,h][t||0]);let e=[b,c,p,u][t||0];L(e)&&f.css(e)}},!m&&(f.attr(S).css(T({cursor:"default"},b)),d&&f.text.css({pointerEvents:"none"})),f.on("touchstart",t=>t.stopPropagation()).on("click",function(t){3!==y&&r.call(f,t)})}crispLine(t,e,i="round"){let s=t[0],r=t[1];return M(s[1])&&s[1]===r[1]&&(s[1]=r[1]=Math[i](s[1])-e%2/2),M(s[2])&&s[2]===r[2]&&(s[2]=r[2]=Math[i](s[2])+e%2/2),t}path(t){let e=this.styledMode?{}:{fill:"none"};return A(t)?e.d=t:L(t)&&T(e,t),this.createElement("path").attr(e)}circle(t,e,i){let s=L(t)?t:void 0===t?{}:{x:t,y:e,r:i},r=this.createElement("circle");return r.xSetter=r.ySetter=function(t,e,i){i.setAttribute("c"+e,t)},r.attr(s)}arc(t,e,i,s,r,o){let a;L(t)?(e=(a=t).y,i=a.r,s=a.innerR,r=a.start,o=a.end,t=a.x):a={innerR:s,start:r,end:o};let n=this.symbol("arc",t,e,i,i,a);return n.r=i,n}rect(t,e,i,s,r,o){let a=L(t)?t:void 0===t?{}:{x:t,y:e,r,width:Math.max(i||0,0),height:Math.max(s||0,0)},n=this.createElement("rect");return this.styledMode||(void 0!==o&&(a["stroke-width"]=o,T(a,n.crisp(a))),a.fill="none"),n.rSetter=function(t,e,i){n.r=t,S(i,{rx:t,ry:t})},n.rGetter=function(){return n.r||0},n.attr(a)}roundedRect(t){return this.symbol("roundedRect").attr(t)}setSize(t,e,i){this.width=t,this.height=e,this.boxWrapper.animate({width:t,height:e},{step:function(){this.attr({viewBox:"0 0 "+this.attr("width")+" "+this.attr("height")})},duration:E(i,!0)?void 0:0}),this.alignElements()}g(t){let e=this.createElement("g");return t?e.attr({class:"highcharts-"+t}):e}image(t,e,i,s,r,o){let a={preserveAspectRatio:"none"};P(e)&&(a.x=e),P(i)&&(a.y=i),P(s)&&(a.width=s),P(r)&&(a.height=r);let n=this.createElement("image").attr(a),h=function(e){n.attr({href:t}),o.call(n,e)};if(o){n.attr({href:"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="});let e=new b.Image;v(e,"load",h),e.src=t,e.complete&&h({})}else n.attr({href:t});return n}symbol(t,e,i,s,r,o){let a,n,h,l;let c=this,u=/^url\((.*?)\)$/,g=u.test(t),f=!g&&(this.symbols[t]?t:"circle"),m=f&&this.symbols[f];if(m)"number"==typeof e&&(n=m.call(this.symbols,Math.round(e||0),Math.round(i||0),s||0,r||0,o)),a=this.path(n),c.styledMode||a.attr("fill","none"),T(a,{symbolName:f||void 0,x:e,y:i,width:s,height:r}),o&&T(a,o);else if(g){h=t.match(u)[1];let s=a=this.image(h);s.imgwidth=E(o&&o.width,y[h]&&y[h].width),s.imgheight=E(o&&o.height,y[h]&&y[h].height),l=t=>t.attr({width:t.width,height:t.height}),["width","height"].forEach(t=>{s[`${t}Setter`]=function(t,e){this[e]=t;let{alignByTranslate:i,element:s,width:r,height:a,imgwidth:n,imgheight:h}=this,l="width"===e?n:h,d=1;o&&"within"===o.backgroundSize&&r&&a&&n&&h?(d=Math.min(r/n,a/h),S(s,{width:Math.round(n*d),height:Math.round(h*d)})):s&&l&&s.setAttribute(e,l),!i&&n&&h&&this.translate(((r||0)-n*d)/2,((a||0)-h*d)/2)}}),M(e)&&s.attr({x:e,y:i}),s.isImg=!0,M(s.imgwidth)&&M(s.imgheight)?l(s):(s.attr({width:0,height:0}),k("img",{onload:function(){let t=d[c.chartIndex];0===this.width&&(C(this,{position:"absolute",top:"-999em"}),p.body.appendChild(this)),y[h]={width:this.width,height:this.height},s.imgwidth=this.width,s.imgheight=this.height,s.element&&l(s),this.parentNode&&this.parentNode.removeChild(this),c.imgCount--,c.imgCount||!t||t.hasLoaded||t.onload()},src:h}),this.imgCount++)}return a}clipRect(t,e,i,s){return this.rect(t,e,i,s,0)}text(t,e,i,s){let r={};if(s&&(this.allowHTML||!this.forExport))return this.html(t,e,i);r.x=Math.round(e||0),i&&(r.y=Math.round(i)),M(t)&&(r.text=t);let o=this.createElement("text").attr(r);return s&&(!this.forExport||this.allowHTML)||(o.xSetter=function(t,e,
24987i){let s=i.getElementsByTagName("tspan"),r=i.getAttribute(e);for(let i=0,o;i<s.length;i++)(o=s[i]).getAttribute(e)===r&&o.setAttribute(e,t);i.setAttribute(e,t)}),o}fontMetrics(t){let e=I(r.prototype.getStyle.call(t,"font-size")||0),i=e<24?e+3:Math.round(1.2*e),s=Math.round(.8*i);return{h:i,b:s,f:e}}rotCorr(t,e,i){let s=t;return e&&i&&(s=Math.max(s*Math.cos(e*c),4)),{x:-t/3*Math.sin(e*c),y:s}}pathToSegments(t){let e=[],i=[],s={A:8,C:7,H:2,L:3,M:3,Q:5,S:5,T:3,V:2};for(let r=0;r<t.length;r++)O(i[0])&&P(t[r])&&i.length===s[i[0].toUpperCase()]&&t.splice(r,0,i[0].replace("M","L").replace("m","l")),"string"==typeof t[r]&&(i.length&&e.push(i.slice(0)),i.length=0),i.push(t[r]);return e.push(i.slice(0)),e}label(t,e,i,s,r,a,n,h,l){return new o(this,t,e,i,s,r,a,n,h,l)}alignElements(){this.alignedObjects.forEach(t=>t.align())}}return T(R.prototype,{Element:r,SVG_NS:x,escapes:{"&":"&","<":"<",">":">","'":"'",'"':"""},symbols:a,draw:m}),s.registerRendererType("svg",R,!0),R}),i(e,"Core/Renderer/HTML/HTMLElement.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Globals.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{composed:r}=e,{attr:o,css:a,createElement:n,defined:h,extend:l,pInt:d,pushUnique:c}=s;function p(t,e,s){let r=this.div?.style||s.style;i.prototype[`${e}Setter`].call(this,t,e,s),r&&(r[e]=t)}let u=(t,e)=>{if(!t.div){let s=o(t.element,"class"),r=t.css,a=n("div",s?{className:s}:void 0,{position:"absolute",left:`${t.translateX||0}px`,top:`${t.translateY||0}px`,...t.styles,display:t.display,opacity:t.opacity,visibility:t.visibility},t.parentGroup?.div||e);t.classSetter=(t,e,i)=>{i.setAttribute("class",t),a.className=t},t.translateXSetter=t.translateYSetter=(e,i)=>{t[i]=e,a.style["translateX"===i?"left":"top"]=`${e}px`,t.doTransform=!0},t.opacitySetter=t.visibilitySetter=p,t.css=e=>(r.call(t,e),e.cursor&&(a.style.cursor=e.cursor),e.pointerEvents&&(a.style.pointerEvents=e.pointerEvents),t),t.on=function(){return i.prototype.on.apply({element:a,onEvents:t.onEvents},arguments),t},t.div=a}return t.div};class g extends i{static compose(t){c(r,this.compose)&&(t.prototype.html=function(t,e,i){return new g(this,"span").attr({text:t,x:Math.round(e),y:Math.round(i)})})}constructor(t,e){super(t,e),this.css({position:"absolute",...t.styledMode?{}:{fontFamily:t.style.fontFamily,fontSize:t.style.fontSize}}),this.element.style.whiteSpace="nowrap"}getSpanCorrection(t,e,i){this.xCorr=-t*i,this.yCorr=-e}css(t){let e;let{element:i}=this,s="SPAN"===i.tagName&&t&&"width"in t,r=s&&t.width;return s&&(delete t.width,this.textWidth=d(r)||void 0,e=!0),t?.textOverflow==="ellipsis"&&(t.whiteSpace="nowrap",t.overflow="hidden"),l(this.styles,t),a(i,t),e&&this.updateTransform(),this}htmlGetBBox(){let{element:t}=this;return{x:t.offsetLeft,y:t.offsetTop,width:t.offsetWidth,height:t.offsetHeight}}updateTransform(){if(!this.added){this.alignOnAdd=!0;return}let{element:t,renderer:e,rotation:i,rotationOriginX:s,rotationOriginY:r,styles:o,textAlign:n="left",textWidth:l,translateX:d=0,translateY:c=0,x:p=0,y:u=0}=this,g=o.whiteSpace;if(a(t,{marginLeft:`${d}px`,marginTop:`${c}px`}),"SPAN"===t.tagName){let o=[i,n,t.innerHTML,l,this.textAlign].join(","),d=-(this.parentGroup?.padding*1)||0,c,f=!1;if(l!==this.oldTextWidth){let e=this.textPxLength?this.textPxLength:(a(t,{width:"",whiteSpace:g||"nowrap"}),t.offsetWidth),s=l||0;(s>this.oldTextWidth||e>s)&&(/[ \-]/.test(t.textContent||t.innerText)||"ellipsis"===t.style.textOverflow)&&(a(t,{width:e>s||i?l+"px":"auto",display:"block",whiteSpace:g||"normal"}),this.oldTextWidth=l,f=!0)}this.hasBoxWidthChanged=f,o!==this.cTT&&(c=e.fontMetrics(t).b,h(i)&&(i!==(this.oldRotation||0)||n!==this.oldAlign)&&this.setSpanRotation(i,d,d),this.get
24987SpanCorrection(!h(i)&&this.textPxLength||t.offsetWidth,c,{left:0,center:.5,right:1}[n]));let{xCorr:m=0,yCorr:x=0}=this,y=(s??p)-m-p-d,b=(r??u)-x-u-d;a(t,{left:`${p+m}px`,top:`${u+x}px`,transformOrigin:`${y}px ${b}px`}),this.cTT=o,this.oldRotation=i,this.oldAlign=n}}setSpanRotation(t,e,i){a(this.element,{transform:`rotate(${t}deg)`,transformOrigin:`${e}% ${i}px`})}add(t){let e;let i=this.renderer.box.parentNode,s=[];if(this.parentGroup=t,t&&!(e=t.div)){let r=t;for(;r;)s.push(r),r=r.parentGroup;for(let t of s.reverse())e=u(t,i)}return(e||i).appendChild(this.element),this.added=!0,this.alignOnAdd&&this.updateTransform(),this}textSetter(e){e!==this.textStr&&(delete this.bBox,delete this.oldTextWidth,t.setElementHTML(this.element,e??""),this.textStr=e,this.doTransform=!0)}alignSetter(t){this.alignValue=this.textAlign=t,this.doTransform=!0}xSetter(t,e){this[e]=t,this.doTransform=!0}}let f=g.prototype;return f.visibilitySetter=f.opacitySetter=p,f.ySetter=f.rotationSetter=f.rotationOriginXSetter=f.rotationOriginYSetter=f.xSetter,g}),i(e,"Core/Axis/AxisDefaults.js",[],function(){var t,e;return(e=t||(t={})).xAxis={alignTicks:!0,allowDecimals:void 0,panningEnabled:!0,zIndex:2,zoomEnabled:!0,dateTimeLabelFormats:{millisecond:{main:"%H:%M:%S.%L",range:!1},second:{main:"%H:%M:%S",range:!1},minute:{main:"%H:%M",range:!1},hour:{main:"%H:%M",range:!1},day:{main:"%e %b"},week:{main:"%e %b"},month:{main:"%b '%y"},year:{main:"%Y"}},endOnTick:!1,gridLineDashStyle:"Solid",gridZIndex:1,labels:{autoRotationLimit:80,distance:15,enabled:!0,indentation:10,overflow:"justify",padding:5,reserveSpace:void 0,rotation:void 0,staggerLines:0,step:0,useHTML:!1,zIndex:7,style:{color:"#333333",cursor:"default",fontSize:"0.8em"}},maxPadding:.01,minorGridLineDashStyle:"Solid",minorTickLength:2,minorTickPosition:"outside",minorTicksPerMajor:5,minPadding:.01,offset:void 0,reversed:void 0,reversedStacks:!1,showEmpty:!0,showFirstLabel:!0,showLastLabel:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:"between",tickPosition:"outside",title:{align:"middle",useHTML:!1,x:0,y:0,style:{color:"#666666",fontSize:"0.8em"}},type:"linear",uniqueNames:!0,visible:!0,minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#333333",lineWidth:1,gridLineColor:"#e6e6e6",gridLineWidth:void 0,tickColor:"#333333"},e.yAxis={reversedStacks:!0,endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:void 0},startOnTick:!0,title:{text:"Values"},stackLabels:{animation:{},allowOverlap:!1,enabled:!1,crop:!0,overflow:"justify",formatter:function(){let{numberFormatter:t}=this.axis.chart;return t(this.total||0,-1)},style:{color:"#000000",fontSize:"0.7em",fontWeight:"bold",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0},t}),i(e,"Core/Foundation.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,isFunction:s,objectEach:r,removeEvent:o}=t;return(e||(e={})).registerEventOptions=function(t,e){t.eventOptions=t.eventOptions||{},r(e.events,function(e,r){t.eventOptions[r]!==e&&(t.eventOptions[r]&&(o(t,r,t.eventOptions[r]),delete t.eventOptions[r]),s(e)&&(t.eventOptions[r]=e,i(t,r,e,{order:0})))})},e}),i(e,"Core/Axis/Tick.js",[e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{deg2rad:s}=e,{clamp:r,correctFloat:o,defined:a,destroyObjectProperties:n,extend:h,fireEvent:l,isNumber:d,merge:c,objectEach:p,pick:u}=i;return class{constructor(t,e,i,s,r){this.isNew=!0,this.isNewLabel=!0,this.axis=t,this.pos=e,this.type=i||"",this.parameters=r||{},this.tickmarkOffset=this.parameters.tickmarkOffset,this.options=this.parameters.options,l(this,"init"),i||s||this.addLabel()}addLabel(){let e=this,i=e.axis,s=i.options,r=i.chart,n=i.categories,c=i.logarithmic,p=i.names,g=e.pos,f=u(e.options&&e.options.labels,s.labels),m=i.tickPositions,x=g===m[0],y=g===m[m.length-1],b=(!f.step||1===f.step)&&1===i.tickInterval,v=m.info,S=e.label,k,C,M,w=this.parameters.category||(n?u(n[g],p[g],g):g);c&&d(w)&&(w=o(c.lin2log(w))),i.dateTime&&(v?k=(C=r.time.resolveDTLFormat(s.dateTimeLabelFormats[!s.grid&&v.higherRanks[g]||v.unitName])).main:d(w)&&(k=i.dateTime.getXDateFormat(w,s.dateTimeLabelFormats||{}))),e.isFirst=x,e.isLast=y;let T={axis:i,chart:r,dateTimeLabelFormat:k,isFirst:x,isLast:y,pos:g,tick:e,tickPositionInfo:v,value:w};l(this,"labelFormat",T);let A=e=>f.formatter?f.formatter.call(e,e):f.format?(e.text=i.defaultLabelFormatter.call(e),t.format(f.format,e,r)):i.defaultLabelFormatter.call(e),P=A.call(T,T),L=C&&C.list;L?e.shortenLabel=function(){for(M=0;M<L.length;M++)if(h(T,{dateTimeLabelFormat:L[M]}),S.attr({text:A.call(T,T)}),S.getBBox().width<i.getSlotWidth(e)-2*f.padding)return;S.attr({text:""})}:e.shortenLabel=void 0,b&&i._addedPlotLB&&e.moveLabel(P,f),a(S)||e.movedLabel?S&&S.textStr!==P&&!b&&(!S.textWidth||f.style.width||S.styles.width||S.css({width:null}),S.attr({text:P}),S.textPxLength=S.getBBox().width):(e.label=S=e.createLabel(P,f),e.rotation=0)}createLabel(t,e,i){let s=this.axis,r=s.chart,o=a(t)&&e.enabled?r.renderer.text(t,i?.x,i?.y,e.useHTML).add(s.labelGroup):void 0;return o&&(r.styledMode||o.css(c(e.style)),o.textPxLength=o.getBBox().width),o}destroy(){n(this,this.axis)}
24987getPosition(t,e,i,s){let a=this.axis,n=a.chart,h=s&&n.oldChartHeight||n.chartHeight,d={x:t?o(a.translate(e+i,void 0,void 0,s)+a.transB):a.left+a.offset+(a.opposite?(s&&n.oldChartWidth||n.chartWidth)-a.right-a.left:0),y:t?h-a.bottom+a.offset-(a.opposite?a.height:0):o(h-a.translate(e+i,void 0,void 0,s)-a.transB)};return d.y=r(d.y,-1e5,1e5),l(this,"afterGetPosition",{pos:d}),d}getLabelPosition(t,e,i,r,o,n,h,d){let c,p;let g=this.axis,f=g.transA,m=g.isLinked&&g.linkedParent?g.linkedParent.reversed:g.reversed,x=g.staggerLines,y=g.tickRotCorr||{x:0,y:0},b=r||g.reserveSpaceDefault?0:-g.labelOffset*("center"===g.labelAlign?.5:1),v=o.distance,S={};return c=0===g.side?i.rotation?-v:-i.getBBox().height:2===g.side?y.y+v:Math.cos(i.rotation*s)*(y.y-i.getBBox(!1,0).height/2),a(o.y)&&(c=0===g.side&&g.horiz?o.y+c:o.y),t=t+u(o.x,[0,1,0,-1][g.side]*v)+b+y.x-(n&&r?n*f*(m?-1:1):0),e=e+c-(n&&!r?n*f*(m?1:-1):0),x&&(p=h/(d||1)%x,g.opposite&&(p=x-p-1),e+=g.labelOffset/x*p),S.x=t,S.y=Math.round(e),l(this,"afterGetLabelPosition",{pos:S,tickmarkOffset:n,index:h}),S}getLabelSize(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0}getMarkPath(t,e,i,s,r,o){return o.crispLine([["M",t,e],["L",t+(r?0:-i),e+(r?i:0)]],s)}handleOverflow(t){let e=this.axis,i=e.options.labels,r=t.x,o=e.chart.chartWidth,a=e.chart.spacing,n=u(e.labelLeft,Math.min(e.pos,a[3])),h=u(e.labelRight,Math.max(e.isRadial?0:e.pos+e.len,o-a[1])),l=this.label,d=this.rotation,c={left:0,center:.5,right:1}[e.labelAlign||l.attr("align")],p=l.getBBox().width,g=e.getSlotWidth(this),f={},m=g,x=1,y,b,v;d||"justify"!==i.overflow?d<0&&r-c*p<n?v=Math.round(r/Math.cos(d*s)-n):d>0&&r+c*p>h&&(v=Math.round((o-r)/Math.cos(d*s))):(y=r-c*p,b=r+(1-c)*p,y<n?m=t.x+m*(1-c)-n:b>h&&(m=h-t.x+m*c,x=-1),(m=Math.min(g,m))<g&&"center"===e.labelAlign&&(t.x+=x*(g-m-c*(g-Math.min(p,m)))),(p>m||e.autoRotation&&(l.styles||{}).width)&&(v=m)),v&&(this.shortenLabel?this.shortenLabel():(f.width=Math.floor(v)+"px",(i.style||{}).textOverflow||(f.textOverflow="ellipsis"),l.css(f)))}moveLabel(t,e){let i=this,s=i.label,r=i.axis,o=!1,a;s&&s.textStr===t?(i.movedLabel=s,o=!0,delete i.label):p(r.ticks,function(e){o||e.isNew||e===i||!e.label||e.label.textStr!==t||(i.movedLabel=e.label,o=!0,e.labelPos=i.movedLabel.xy,delete e.label)}),!o&&(i.labelPos||s)&&(a=i.labelPos||s.xy,i.movedLabel=i.createLabel(t,e,a),i.movedLabel&&i.movedLabel.attr({opacity:0}))}render(t,e,i){let s=this.axis,r=s.horiz,a=this.pos,n=u(this.tickmarkOffset,s.tickmarkOffset),h=this.getPosition(r,a,n,e),d=h.x,c=h.y,p=s.pos,g=p+s.len,f=r&&d===g||!r&&c===p?-1:1,m=r?d:c;!s.chart.polar&&this.isNew&&(o(m)<p||m>g)&&(i=0);let x=u(i,this.label&&this.label.newOpacity,1);i=u(i,1),this.isActive=!0,this.renderGridLine(e,i,f),this.renderMark(h,i,f),this.renderLabel(h,e,x,t),this.isNew=!1,l(this,"afterRender")}renderGridLine(t,e,i){let s=this.axis,r=s.options,o={},a=this.pos,n=this.type,h=u(this.tickmarkOffset,s.tickmarkOffset),l=s.chart.renderer,d=this.gridLine,c,p=r.gridLineWidth,g=r.gridLineColor,f=r.gridLineDashStyle;"minor"===this.type&&(p=r.minorGridLineWidth,g=r.minorGridLineColor,f=r.minorGridLineDashStyle),d||(s.chart.styledMode||(o.stroke=g,o["stroke-width"]=p||0,o.dashstyle=f),n||(o.zIndex=1),t&&(e=0),this.gridLine=d=l.path().attr(o).addClass("highcharts-"+(n?n+"-":"")+"grid-line").add(s.gridGroup)),d&&(c=s.getPlotLinePath({value:a+h,lineWidth:d.strokeWidth()*i,force:"pass",old:t,acrossPanes:!1}))&&d[t||this.isNew?"attr":"animate"]({d:c,opacity:e})}renderMark(t,e,i){let s=this.axis,r=s.options,o=s.chart.renderer,a=this.type,n=s.tickSize(a?a+"Tick":"tick"),h=t.x,l=t.y,d=u(r["minor"!==a?"tickWidth":"minorTickWidth"],!a&&s.isXAxis?1:0),c=r["minor"!==a?"tickColor":"minorTickColor"],p=this.mark,g=!p;n&&(s.opposite&&(n[0]=-n[0]),p||(this.mark=p=o.path().addClass("highcharts-"+(a?a+"-":"")+"tick").add(s.axisGroup),s.chart.styledMode||p.attr({stroke:c,"stroke-width":d})),p[g?"attr":"animate"]({d:this.getMarkPath(h,l,n[0],p.strokeWidth()*i,s.horiz,o),opacity:e}))}renderLabel(t,e,i,s){let r=this.axis,o=r.horiz,a=r.options,n=this.label,h=a.labels,l=h.step,c=u(this.tickmarkOffset,r.tickmarkOffset),p=t.x,g=t.y,f=!0;n&&d(p)&&(n.xy=t=this.getLabelPosition(p,g,n,o,h,c,s,l),(!this.isFirst||this.isLast||a.showFirstLabel)&&(!this.isLast||this.isFirst||a.showLastLabel)?!o||h.step||h.rotation||e||0===i||this.handleOverflow(t):f=!1,l&&s%l&&(f=!1),f&&d(t.y)?(t.opacity=i,n[this.isNewLabel?"attr":"animate"](t).show(!0),this.isNewLabel=!1):(n.hide(),this.isNewLabel=!0))}replaceMovedLabel(){let t=this.label,e=this.axis;t&&!this.isNew&&(t.animate({opacity:0}
24987,void 0,t.destroy),delete this.label),e.isDirty=!0,this.label=this.movedLabel,delete this.movedLabel}}}),i(e,"Core/Axis/Axis.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/AxisDefaults.js"],e["Core/Color/Color.js"],e["Core/Defaults.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Axis/Tick.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n){let{animObject:h}=t,{xAxis:l,yAxis:d}=e,{defaultOptions:c}=s,{registerEventOptions:p}=r,{deg2rad:u}=o,{arrayMax:g,arrayMin:f,clamp:m,correctFloat:x,defined:y,destroyObjectProperties:b,erase:v,error:S,extend:k,fireEvent:C,getClosestDistance:M,insertItem:w,isArray:T,isNumber:A,isString:P,merge:L,normalizeTickInterval:O,objectEach:D,pick:E,relativeLength:I,removeEvent:j,splat:B,syncTimeout:R}=n,z=(t,e)=>O(e,void 0,void 0,E(t.options.allowDecimals,e<.5||void 0!==t.tickAmount),!!t.tickAmount);k(c,{xAxis:l,yAxis:L(l,d)});class N{constructor(t,e,i){this.init(t,e,i)}init(t,e,i=this.coll){let s="xAxis"===i,r=this.isZAxis||(t.inverted?!s:s);this.chart=t,this.horiz=r,this.isXAxis=s,this.coll=i,C(this,"init",{userOptions:e}),this.opposite=E(e.opposite,this.opposite),this.side=E(e.side,this.side,r?this.opposite?0:2:this.opposite?1:3),this.setOptions(e);let o=this.options,a=o.labels,n=o.type;this.userOptions=e,this.minPixelPadding=0,this.reversed=E(o.reversed,this.reversed),this.visible=o.visible,this.zoomEnabled=o.zoomEnabled,this.hasNames="category"===n||!0===o.categories,this.categories=T(o.categories)&&o.categories||(this.hasNames?[]:void 0),this.names||(this.names=[],this.names.keys={}),this.plotLinesAndBandsGroups={},this.positiveValuesOnly=!!this.logarithmic,this.isLinked=y(o.linkedTo),this.ticks={},this.labelEdge=[],this.minorTicks={},this.plotLinesAndBands=[],this.alternateBands={},this.len=0,this.minRange=this.userMinRange=o.minRange||o.maxZoom,this.range=o.range,this.offset=o.offset||0,this.max=void 0,this.min=void 0;let h=E(o.crosshair,B(t.options.tooltip.crosshairs)[s?0:1]);this.crosshair=!0===h?{}:h,-1===t.axes.indexOf(this)&&(s?t.axes.splice(t.xAxis.length,0,this):t.axes.push(this),w(this,t[this.coll])),t.orderItems(this.coll),this.series=this.series||[],t.inverted&&!this.isZAxis&&s&&!y(this.reversed)&&(this.reversed=!0),this.labelRotation=A(a.rotation)?a.rotation:void 0,p(this,o),C(this,"afterInit")}setOptions(t){let e=this.horiz?{labels:{autoRotation:[-45]},margin:15}:{title:{rotation:90*this.side}};this.options=L(e,c[this.coll],t),C(this,"afterSetOptions",{userOptions:t})}defaultLabelFormatter(){let t=this.axis,{numberFormatter:e}=this.chart,i=A(this.value)?this.value:NaN,s=t.chart.time,r=t.categories,o=this.dateTimeLabelFormat,a=c.lang,n=a.numericSymbols,h=a.numericSymbolMagnitude||1e3,l=t.logarithmic?Math.abs(i):t.tickInterval,d=n&&n.length,p,u;if(r)u=`${this.value}`;else if(o)u=s.dateFormat(o,i);else if(d&&n&&l>=1e3)for(;d--&&void 0===u;)l>=(p=Math.pow(h,d+1))&&10*i%p==0&&null!==n[d]&&0!==i&&(u=e(i/p,-1)+n[d]);return void 0===u&&(u=Math.abs(i)>=1e4?e(i,-1):e(i,-1,void 0,"")),u}getSeriesExtremes(){let t;let e=this;C(this,"getSeriesExtremes",null,function(){e.hasVisibleSeries=!1,e.dataMin=e.dataMax=e.threshold=void 0,e.softThreshold=!e.isXAxis,e.series.forEach(i=>{if(i.reserveSpace()){let s=i.options,r,o=s.threshold,a,n;if(e.hasVisibleSeries=!0,e.positiveValuesOnly&&0>=(o||0)&&(o=void 0),e.isXAxis)(r=i.xData)&&r.length&&(r=e.logarithmic?r.filter(t=>t>0):r,a=(t=i.getXExtremes(r)).min,n=t.max,A(a)||a instanceof Date||(r=r.filter(A),a=(t=i.getXExtremes(r)).min,n=t.max),r.length&&(e.dataMin=Math.min(E(e.dataMin,a),a),e.dataMax=Math.max(E(e.dataMax,n),n)));else{let t=i.applyExtremes();A(t.dataMin)&&(a=t.dataMin,e.dataMin=Math.min(E(e.dataMin,a),a)),A(t.dataMax)&&(n=t.dataMax,e.dataMax=Math.max(E(e.dataMax,n),n)),y(o)&&(e.threshold=o),(!s.softThreshold||e.positiveValuesOnly)&&(e.softThreshold=!1)}}})}),C(this,"afterGetSeriesExtremes")}translate(t,e,i,s,r,o){let a=this.linkedParent||this,n=s&&a.old?a.old.min:a.min;if(!A(n))return NaN;let h=a.minPixelPadding,l=(a.isOrdinal||a.brokenAxis?.hasBreaks||a.logarithmic&&r)&&a.lin2val,d=1,c=0,p=s&&a.old?a.old.transA:a.transA,u=0;if(p||(p=a.transA),i&&(d*=-1,c=a.len),a.reversed&&(d*=-1,c-=d*(a.sector||a.len)),e)u=(t=t*d+c-h)/p+n,l&&(u=a.lin2val(u));else{l&&(t=a.val2lin(t));let e=d*(t-n)*p;u=(a.isRadial?e:x(e))+c+d*h+(A(o)?p*o:0)}return u}toPixels(t,e){return this.translate(t,!1,!this.horiz,void 0,!0)+(e?0:this.pos)}toValue(t,e){return this.translate(t-(e?0:this.pos),!0,!this.horiz,void 0,!0)}getPlotLinePath(t){let e=this,i=e.chart,s=e.left,r=e.top,o=t.old,a=t.value,n=t.lineWidth,h=o&&i.oldCh
24987artHeight||i.chartHeight,l=o&&i.oldChartWidth||i.chartWidth,d=e.transB,c=t.translatedValue,p=t.force,u,g,f,x,y;function b(t,e,i){return"pass"!==p&&(t<e||t>i)&&(p?t=m(t,e,i):y=!0),t}let v={value:a,lineWidth:n,old:o,force:p,acrossPanes:t.acrossPanes,translatedValue:c};return C(this,"getPlotLinePath",v,function(t){u=f=Math.round((c=m(c=E(c,e.translate(a,void 0,void 0,o)),-1e5,1e5))+d),g=x=Math.round(h-c-d),A(c)?e.horiz?(g=r,x=h-e.bottom+(i.scrollablePixelsY||0),u=f=b(u,s,s+e.width)):(u=s,f=l-e.right+(i.scrollablePixelsX||0),g=x=b(g,r,r+e.height)):(y=!0,p=!1),t.path=y&&!p?void 0:i.renderer.crispLine([["M",u,g],["L",f,x]],n||1)}),v.path}getLinearTickPositions(t,e,i){let s,r,o;let a=x(Math.floor(e/t)*t),n=x(Math.ceil(i/t)*t),h=[];if(x(a+t)===a&&(o=20),this.single)return[e];for(s=a;s<=n&&(h.push(s),(s=x(s+t,o))!==r);)r=s;return h}getMinorTickInterval(){let{minorTicks:t,minorTickInterval:e}=this.options;return!0===t?E(e,"auto"):!1!==t?e:void 0}getMinorTickPositions(){let t=this.options,e=this.tickPositions,i=this.minorTickInterval,s=this.pointRangePadding||0,r=(this.min||0)-s,o=(this.max||0)+s,a=o-r,n=[],h;if(a&&a/i<this.len/3){let s=this.logarithmic;if(s)this.paddedTicks.forEach(function(t,e,r){e&&n.push.apply(n,s.getLogTickPositions(i,r[e-1],r[e],!0))});else if(this.dateTime&&"auto"===this.getMinorTickInterval())n=n.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(i),r,o,t.startOfWeek));else for(h=r+(e[0]-r)%i;h<=o&&h!==n[0];h+=i)n.push(h)}return 0!==n.length&&this.trimTicks(n),n}adjustForMinRange(){let t=this.options,e=this.logarithmic,{max:i,min:s,minRange:r}=this,o,a,n,h;this.isXAxis&&void 0===r&&!e&&(r=y(t.min)||y(t.max)||y(t.floor)||y(t.ceiling)?null:Math.min(5*(M(this.series.map(t=>(t.xIncrement?t.xData?.slice(0,2):t.xData)||[]))||0),this.dataMax-this.dataMin)),A(i)&&A(s)&&A(r)&&i-s<r&&(a=this.dataMax-this.dataMin>=r,o=(r-i+s)/2,n=[s-o,E(t.min,s-o)],a&&(n[2]=e?e.log2lin(this.dataMin):this.dataMin),h=[(s=g(n))+r,E(t.max,s+r)],a&&(h[2]=e?e.log2lin(this.dataMax):this.dataMax),(i=f(h))-s<r&&(n[0]=i-r,n[1]=E(t.min,i-r),s=g(n))),this.minRange=r,this.min=s,this.max=i}getClosest(){let t,e;if(this.categories)e=1;else{let i=[];this.series.forEach(function(t){let s=t.closestPointRange;t.xData?.length===1?i.push(t.xData[0]):!t.noSharedTooltip&&y(s)&&t.reserveSpace()&&(e=y(e)?Math.min(e,s):s)}),i.length&&(i.sort((t,e)=>t-e),t=M([i]))}return t&&e?Math.min(t,e):t||e}nameToX(t){let e=T(this.options.categories),i=e?this.categories:this.names,s=t.options.x,r;return t.series.requireSorting=!1,y(s)||(s=this.options.uniqueNames&&i?e?i.indexOf(t.name):E(i.keys[t.name],-1):t.series.autoIncrement()),-1===s?!e&&i&&(r=i.length):r=s,void 0!==r?(this.names[r]=t.name,this.names.keys[t.name]=r):t.x&&(r=t.x),r}updateNames(){let t=this,e=this.names;e.length>0&&(Object.keys(e.keys).forEach(function(t){delete e.keys[t]}),e.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(e=>{e.xIncrement=null,(!e.points||e.isDirtyData)&&(t.max=Math.max(t.max,e.xData.length-1),e.processData(),e.generatePoints()),e.data.forEach(function(i,s){let r;i?.options&&void 0!==i.name&&void 0!==(r=t.nameToX(i))&&r!==i.x&&(i.x=r,e.xData[s]=r)})}))}setAxisTranslation(){let t=this,e=t.max-t.min,i=t.linkedParent,s=!!t.categories,r=t.isXAxis,o=t.axisPointRange||0,a,n=0,h=0,l,d=t.transA;(r||s||o)&&(a=t.getClosest(),i?(n=i.minPointOffset,h=i.pointRangePadding):t.series.forEach(function(e){let i=s?1:r?E(e.options.pointRange,a,0):t.axisPointRange||0,l=e.options.pointPlacement;if(o=Math.max(o,i),!t.single||s){let t=e.is("xrange")?!r:r;n=Math.max(n,t&&P(l)?0:i/2),h=Math.max(h,t&&"on"===l?0:i)}}),l=t.ordinal&&t.ordinal.slope&&a?t.ordinal.slope/a:1,t.minPointOffset=n*=l,t.pointRangePadding=h*=l,t.pointRange=Math.min(o,t.single&&s?1:e),r&&a&&(t.closestPointRange=a)),t.translationSlope=t.transA=d=t.staticScale||t.len/(e+h||1),t.transB=t.horiz?t.left:t.bottom,t.minPixelPadding=d*n,C(this,"afterSetAxisTranslation")}minFromRange(){let{max:t,min:e}=this;return A(t)&&A(e)&&t-e||void 0}setTickInterval(t){let{categories:e,chart:i,dataMax:s,dataMin:r,dateTime:o,isXAxis:a,logarithmic:n,options:h,softThreshold:l}=this,d=A(this.threshold)?this.threshold:void 0,c=this.minRange||0,{ceiling:p,floor:u,linkedTo:g,softMax:f,softMin:m}=h,b=A(g)&&i[this.coll]?.[g],v=h.tickPixelInterval,k=h.maxPadding,M=h.minPadding,w=0,T,P=A(h.tickInterval)&&h.tickInterval>=0?h.tickInterval:void 0,L,O,D,I;if(o||e||b||this.getTickAmount(),D=E(this.userMin,h.min),I=E(this.userMax,h.max),b?(this.linkedParent=b,T=b.getExtremes(),this.min=E(T.min,T.dataMin),this.max=E(T.max,T.dataMax),h.type!==b.options.type&&S(11,!0,i)):(l&&y(d)&&A(s)&&A(r)&&(r>=d?(L=d,M=0):s<=d&&(O=d,k=0)),this.min=E(D,L,r),this.max=E(I,O,s)),A(this.max)&&A(this.min)&&(n&&(this.positiveValuesOnly&&!t&&0>=Math.min(this.min,E(r,this.min))&&S(10,!0,i),this.min=x(n.log2lin(this.min),16),this.max=x(n.log2lin(this.max),16)),this.range&&A(r)&&(this.userMin=this.min=D=Math.max(r,this.minFromRange()||0),this.userMax=I=this.max,this.range=void 0)),C(this,"foundExtremes"),this.adjustForMinRange(),A(this.min)&&A(this.max)){if(!A(this.userMin)&&A(m)&&m<this.min&&(this.min=D=m),!A(this.userMax)&&A(f)&&f>this.max&&(this.max=I=f),e||this.axisPointRange||this.stacking?.usePercentage||b||!(w=this.max-this.min)||(!y(D)&&M&&(this.min-=w*M),y(I)||!k||(this.max+=w*k)),!A(this.userMin)&&A(u)&&(this.min=Math.max(this.min,u)),!A(this.userMax)&&A(p)&&(this.max=Math.min(this.max,p)),l&&A(r)&&A(s)){let t=d||0;!y(D)&&this.min<t&&r>=t?this.min=h.minRange?Math.min(t,this.max-c):t:!y(I)&&this.max>t&&s<=t&&(this.max=h.minRange?Math.max(t,this.min+c):t)}!i.polar&&this.min>this.max&&(y(h.min)?this.max=this.min:y(h.max)&&(this.min=this.max)),w=this.max-this.min}if(this.min!==this.max&&A(this.min)&&A(this.max)?b&&!P&&v===b.options.tickPixelInterval?this.tickInterval=P=b.tickInterval:this.tickInterval=E(P,this.tickAmount?w/Math.max(this.tickAmount-1,1):void 0,e?1:w*v/Math.max(this.len,v)):this.tickInterval=1,a&&!t){let t=this.min!==this.old?.min||this.max!==this.old?.max;
vendor: 4,585 bytes, line 24987
24987this.series.forEach(function(e){e.forceCrop=e.forceCropping?.(),e.processData(t)}),C(this,"postProcessData",{hasExtremesChanged:t})}this.setAxisTranslation(),C(this,"initialAxisTranslation"),this.pointRange&&!P&&(this.tickInterval=Math.max(this.pointRange,this.tickInterval));let j=E(h.minTickInterval,o&&!this.series.some(t=>t.noSharedTooltip)?this.closestPointRange:0);!P&&this.tickInterval<j&&(this.tickInterval=j),o||n||P||(this.tickInterval=z(this,this.tickInterval)),this.tickAmount||(this.tickInterval=this.unsquish()),this.setTickPositions()}setTickPositions(){let t=this.options,e=t.tickPositions,i=t.tickPositioner,s=this.getMinorTickInterval(),r=!this.isPanning,o=r&&t.startOnTick,a=r&&t.endOnTick,n=[],h;if(this.tickmarkOffset=this.categories&&"between"===t.tickmarkPlacement&&1===this.tickInterval?.5:0,this.minorTickInterval="auto"===s&&this.tickInterval?this.tickInterval/t.minorTicksPerMajor:s,this.single=this.min===this.max&&y(this.min)&&!this.tickAmount&&(this.min%1==0||!1!==t.allowDecimals),e)n=e.slice();else if(A(this.min)&&A(this.max)){if(!this.ordinal?.positions&&(this.max-this.min)/this.tickInterval>Math.max(2*this.len,200))n=[this.min,this.max],S(19,!1,this.chart);else if(this.dateTime)n=this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,t.units),this.min,this.max,t.startOfWeek,this.ordinal?.positions,this.closestPointRange,!0);else if(this.logarithmic)n=this.logarithmic.getLogTickPositions(this.tickInterval,this.min,this.max);else{let t=this.tickInterval,e=t;for(;e<=2*t;)if(n=this.getLinearTickPositions(this.tickInterval,this.min,this.max),this.tickAmount&&n.length>this.tickAmount)this.tickInterval=z(this,e*=1.1);else break}n.length>this.len&&(n=[n[0],n[n.length-1]])[0]===n[1]&&(n.length=1),i&&(this.tickPositions=n,(h=i.apply(this,[this.min,this.max]))&&(n=h))}this.tickPositions=n,this.paddedTicks=n.slice(0),this.trimTicks(n,o,a),!this.isLinked&&A(this.min)&&A(this.max)&&(this.single&&n.length<2&&!this.categories&&!this.series.some(t=>t.is("heatmap")&&"between"===t.options.pointPlacement)&&(this.min-=.5,this.max+=.5),e||h||this.adjustTickAmount()),C(this,"afterSetTickPositions")}trimTicks(t,e,i){let s=t[0],r=t[t.length-1],o=!this.isOrdinal&&this.minPointOffset||0;if(C(this,"trimTicks"),!this.isLinked){if(e&&s!==-1/0)this.min=s;else for(;this.min-o>t[0];)t.shift();if(i)this.max=r;else for(;this.max+o<t[t.length-1];)t.pop();0===t.length&&y(s)&&!this.options.tickPositions&&t.push((r+s)/2)}}alignToOthers(){let t;let e=this,i=e.chart,s=[this],r=e.options,o=i.options.chart,a="yAxis"===this.coll&&o.alignThresholds,n=[];if(e.thresholdAlignment=void 0,(!1!==o.alignTicks&&r.alignTicks||a)&&!1!==r.startOnTick&&!1!==r.endOnTick&&!e.logarithmic){let r=t=>{let{horiz:e,options:i}=t;return[e?i.left:i.top,i.width,i.height,i.pane].join(",")},o=r(this);i[this.coll].forEach(function(i){let{series:a}=i;a.length&&a.some(t=>t.visible)&&i!==e&&r(i)===o&&(t=!0,s.push(i))})}if(t&&a){s.forEach(t=>{let i=t.getThresholdAlignment(e);A(i)&&n.push(i)});let t=n.length>1?n.reduce((t,e)=>t+=e,0)/n.length:void 0;s.forEach(e=>{e.thresholdAlignment=t})}return t}getThresholdAlignment(t){if((!A(this.dataMin)||this!==t&&this.series.some(t=>t.isDirty||t.isDirtyData))&&this.getSeriesExtremes(),A(this.threshold)){let t=m((this.threshold-(this.dataMin||0))/((this.dataMax||0)-(this.dataMin||0)),0,1);return this.options.reversed&&(t=1-t),t}}getTickAmount(){let t=this.options,e=t.tickPixelInterval,i=t.tickAmount;y(t.tickInterval)||i||!(this.len<e)||this.isRadial||this.logarithmic||!t.startOnTick||!t.endOnTick||(i=2),!i&&this.alignToOthers()&&(i=Math.ceil(this.len/e)+1),i<4&&(this.finalTickAmt=i,i=5),this.tickAmount=i}adjustTickAmount(){let t=this,{finalTickAmt:e,max:i,min:s,options:r,tickPositions:o,tickAmount:a,thresholdAlignment:n}=t,h=o?.length,l=E(t.threshold,t.softThreshold?0:null),d,c,p=t.tickInterval,u,g=()=>o.push(x(o[o.length-1]+p)),f=()=>o.unshift(x(o[0]-p));if(A(n)&&(u=n<.5?Math.ceil(n*(a-1)):Math.floor(n*(a-1)),r.reversed&&(u=a-1-u)),t.hasData()&&A(s)&&A(i)){let n=()=>{t.transA*=(h-1)/(a-1),t.min=r.startOnTick?o[0]:Math.min(s,o[0]),t.max=r.endOnTick?o[o.length-1]:Math.max(i,o[o.length-1])};if(A(u)&&A(t.threshold)){for(;o[u]!==l||o.length!==a||o[0]>s||o[o.length-1]<i;){for(o.length=0,o.push(t.threshold);o.length<a;)void 0===o[u]||o[u]>t.threshold?f():g();if(p>8*t.tickInterval)break;p*=2}n()}else if(h<a){for(;o.length<a;)o.length%2||s===l?g():f();n()}if(y(e)){for(c=d=o.length;c--;)(3===e&&c%2==1||e<=2&&c>0&&c<d-1)&&o.splice(c,1);t.finalTickAmt=void 0}}}setScale(){let{coll:t,stacking:e}=this,i=!1,s=!1;
24987this.series.forEach(t=>{i=i||t.isDirtyData||t.isDirty,s=s||t.xAxis&&t.xAxis.isDirty||!1}),this.setAxisSize();let r=this.len!==(this.old&&this.old.len);r||i||s||this.isLinked||this.forceRedraw||this.userMin!==(this.old&&this.old.userMin)||this.userMax!==(this.old&&this.old.userMax)||this.alignToOthers()?(e&&"yAxis"===t&&e.buildStacks(),this.forceRedraw=!1,this.userMinRange||(this.minRange=void 0),this.getSeriesExtremes(),this.setTickInterval(),e&&"xAxis"===t&&e.buildStacks(),this.isDirty||(this.isDirty=r||this.min!==this.old?.min||this.max!==this.old?.max)):e&&e.cleanStacks(),i&&delete this.allExtremes,C(this,"afterSetScale")}setExtremes(t,e,i=!0,s,r){this.series.forEach(t=>{delete t.kdTree}),C(this,"setExtremes",r=k(r,{min:t,max:e}),t=>{this.userMin=t.min,this.userMax=t.max,this.eventArgs=t,i&&this.chart.redraw(s)})}setAxisSize(){let t=this.chart,e=this.options,i=e.offsets||[0,0,0,0],s=this.horiz,r=this.width=Math.round(I(E(e.width,t.plotWidth-i[3]+i[1]),t.plotWidth)),o=this.height=Math.round(I(E(e.height,t.plotHeight-i[0]+i[2]),t.plotHeight)),a=this.top=Math.round(I(E(e.top,t.plotTop+i[0]),t.plotHeight,t.plotTop)),n=this.left=Math.round(I(E(e.left,t.plotLeft+i[3]),t.plotWidth,t.plotLeft));this.bottom=t.chartHeight-o-a,this.right=t.chartWidth-r-n,this.len=Math.max(s?r:o,0),this.pos=s?n:a}getExtremes(){let t=this.logarithmic;return{min:t?x(t.lin2log(this.min)):this.min,max:t?x(t.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}}getThreshold(t){let e=this.logarithmic,i=e?e.lin2log(this.min):this.min,s=e?e.lin2log(this.max):this.max;return null===t||t===-1/0?t=i:t===1/0?t=s:i>t?t=i:s<t&&(t=s),this.translate(t,0,1,0,1)}autoLabelAlign(t){let e=(E(t,0)-90*this.side+720)%360,i={align:"center"};return C(this,"autoLabelAlign",i,function(t){e>15&&e<165?t.align="right":e>195&&e<345&&(t.align="left")}),i.align}tickSize(t){let e=this.options,i=E(e["tick"===t?"tickWidth":"minorTickWidth"],"tick"===t&&this.isXAxis&&!this.categories?1:0),s=e["tick"===t?"tickLength":"minorTickLength"],r;i&&s&&("inside"===e[t+"Position"]&&(s=-s),r=[s,i]);let o={tickSize:r};return C(this,"afterTickSize",o),o.tickSize}labelMetrics(){let t=this.chart.renderer,e=this.ticks,i=e[Object.keys(e)[0]]||{};return this.chart.renderer.fontMetrics(i.label||i.movedLabel||t.box)}unsquish(){let t=this.options.labels,e=this.horiz,i=this.tickInterval,s=this.len/(((this.categories?1:0)+this.max-this.min)/i),r=t.rotation,o=this.labelMetrics().h,a=Math.max(this.max-this.min,0),n=function(t){let e=t/(s||1);return(e=e>1?Math.ceil(e):1)*i>a&&t!==1/0&&s!==1/0&&a&&(e=Math.ceil(a/i)),x(e*i)},h=i,l,d=Number.MAX_VALUE,c;if(e){if(!t.staggerLines&&(A(r)?c=[r]:s<t.autoRotationLimit&&(c=t.autoRotation)),c){let t,e;for(let i of c)(i===r||i&&i>=-90&&i<=90)&&(e=(t=n(Math.abs(o/Math.sin(u*i))))+Math.abs(i/360))<d&&(d=e,l=i,h=t)}}else h=n(.75*o);return this.autoRotation=c,this.labelRotation=E(l,A(r)?r:0),t.step?i:h}getSlotWidth(t){let e=this.chart,i=this.horiz,s=this.options.labels,r=Math.max(this.tickPositions.length-(this.categories?0:1),1),o=e.margin[3];if(t&&A(t.slotWidth))return t.slotWidth;if(i&&s.step<2)return s.rotation?0:(this.staggerLines||1)*this.len/r;if(!i){let t=s.style.width;if(void 0!==t)return parseInt(String(t),10);if(o)return o-e.spacing[3]}return .33*e.chartWidth}renderUnsquish(){let t=this.chart,e=t.renderer,i=this.tickPositions,s=this.ticks,r=this.options.labels,o=r.style,a=this.horiz,n=this.getSlotWidth(),h=Math.max(1,Math.round(n-2*r.padding)),l={},d=this.labelMetrics(),c=o.textOverflow,p,u,g=0,f,m;if(P(r.rotation)||(l.rotation=r.rotation||0),i.forEach(function(t){let e=s[t];e.movedLabel&&e.replaceMovedLabel(),e&&e.label&&e.label.textPxLength>g&&(g=e.label.textPxLength)}),this.maxLabelLength=g,this.autoRotation)g>h&&g>d.h?l.rotation=this.labelRotation:this.labelRotation=0;else if(n&&(p=h,!c))for(u="clip",m=i.length;!a&&m--;)(f=s[i[m]].label)&&("ellipsis"===f.styles.textOverflow?f.css({textOverflow:"clip"}):f.textPxLength>n&&f.css({width:n+"px"}),f.getBBox().height>this.len/i.length-(d.h-d.f)&&(f.specificTextOverflow="ellipsis"));l.rotation&&(p=g>.5*t.chartHeight?.33*t.chartHeight:g,c||(u="ellipsis")),this.labelAlign=r.align||this.autoLabelAlign(this.labelRotation),this.labelAlign&&(l.align=this.labelAlign),i.forEac
24987h(function(t){let e=s[t],i=e&&e.label,r=o.width,a={};i&&(i.attr(l),e.shortenLabel?e.shortenLabel():p&&!r&&"nowrap"!==o.whiteSpace&&(p<i.textPxLength||"SPAN"===i.element.tagName)?(a.width=p+"px",c||(a.textOverflow=i.specificTextOverflow||u),i.css(a)):!i.styles.width||a.width||r||i.css({width:null}),delete i.specificTextOverflow,e.rotation=l.rotation)},this),this.tickRotCorr=e.rotCorr(d.b,this.labelRotation||0,0!==this.side)}hasData(){return this.series.some(function(t){return t.hasData()})||this.options.showEmpty&&y(this.min)&&y(this.max)}addTitle(t){let e;let i=this.chart.renderer,s=this.horiz,r=this.opposite,o=this.options.title,a=this.chart.styledMode;this.axisTitle||((e=o.textAlign)||(e=(s?{low:"left",middle:"center",high:"right"}:{low:r?"right":"left",middle:"center",high:r?"left":"right"})[o.align]),this.axisTitle=i.text(o.text||"",0,0,o.useHTML).attr({zIndex:7,rotation:o.rotation||0,align:e}).addClass("highcharts-axis-title"),a||this.axisTitle.css(L(o.style)),this.axisTitle.add(this.axisGroup),this.axisTitle.isNew=!0),a||o.style.width||this.isRadial||this.axisTitle.css({width:this.len+"px"}),this.axisTitle[t?"show":"hide"](t)}generateTick(t){let e=this.ticks;e[t]?e[t].addLabel():e[t]=new a(this,t)}createGroups(){let{axisParent:t,chart:e,coll:i,options:s}=this,r=e.renderer,o=(e,o,a)=>r.g(e).attr({zIndex:a}).addClass(`highcharts-${i.toLowerCase()}${o} `+(this.isRadial?`highcharts-radial-axis${o} `:"")+(s.className||"")).add(t);this.axisGroup||(this.gridGroup=o("grid","-grid",s.gridZIndex),this.axisGroup=o("axis","",s.zIndex),this.labelGroup=o("axis-labels","-labels",s.labels.zIndex))}getOffset(){let t=this,{chart:e,horiz:i,options:s,side:r,ticks:o,tickPositions:a,coll:n}=t,h=e.inverted&&!t.isZAxis?[1,0,3,2][r]:r,l=t.hasData(),d=s.title,c=s.labels,p=A(s.crossing),u=e.axisOffset,g=e.clipOffset,f=[-1,1,1,-1][r],m,x=0,b,v=0,S=0,k,M;if(t.showAxis=m=l||s.showEmpty,t.staggerLines=t.horiz&&c.staggerLines||void 0,t.createGroups(),l||t.isLinked?(a.forEach(function(e){t.generateTick(e)}),t.renderUnsquish(),t.reserveSpaceDefault=0===r||2===r||({1:"left",3:"right"})[r]===t.labelAlign,E(c.reserveSpace,!p&&null,"center"===t.labelAlign||null,t.reserveSpaceDefault)&&a.forEach(function(t){S=Math.max(o[t].getLabelSize(),S)}),t.staggerLines&&(S*=t.staggerLines),t.labelOffset=S*(t.opposite?-1:1)):D(o,function(t,e){t.destroy(),delete o[e]}),d?.text&&!1!==d.enabled&&(t.addTitle(m),m&&!p&&!1!==d.reserveSpace&&(t.titleOffset=x=t.axisTitle.getBBox()[i?"height":"width"],v=y(b=d.offset)?0:E(d.margin,i?5:10))),t.renderLine(),t.offset=f*E(s.offset,u[r]?u[r]+(s.margin||0):0),t.tickRotCorr=t.tickRotCorr||{x:0,y:0},M=0===r?-t.labelMetrics().h:2===r?t.tickRotCorr.y:0,k=Math.abs(S)+v,S&&(k-=M,k+=f*(i?E(c.y,t.tickRotCorr.y+f*c.distance):E(c.x,f*c.distance))),t.axisTitleMargin=E(b,k),t.getMaxLabelDimensions&&(t.maxLabelDimensions=t.getMaxLabelDimensions(o,a)),"colorAxis"!==n){let e=this.tickSize("tick");u[r]=Math.max(u[r],(t.axisTitleMargin||0)+x+f*t.offset,k,a&&a.length&&e?e[0]+f*t.offset:0);let i=!t.axisLine||s.offset?0:2*Math.floor(t.axisLine.strokeWidth()/2);g[h]=Math.max(g[h],i)}C(this,"afterGetOffset")}getLinePath(t){let e=this.chart,i=this.opposite,s=this.offset,r=this.horiz,o=this.left+(i?this.width:0)+s,a=e.chartHeight-this.bottom-(i?this.height:0)+s;return i&&(t*=-1),e.renderer.crispLine([["M",r?this.left:o,r?a:this.top],["L",r?e.chartWidth-this.right:o,r?a:e.chartHeight-this.bottom]],t)}renderLine(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup),this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,"stroke-width":this.options.lineWidth,zIndex:7}))}getTitlePosition(t){let e=this.horiz,i=this.left,s=this.top,r=this.len,o=this.options.title,a=e?i:s,n=this.opposite,h=this.offset,l=o.x,d=o.y,c=this.chart.renderer.fontMetrics(t),p=t?Math.max(t.getBBox(!1,0).height-c.h-1,0):0,u={low:a+(e?0:r),middle:a+r/2,high:a+(e?r:0)}[o.align],g=(e?s+this.height:i)+(e?1:-1)*(n?-1:1)*(this.axisTitleMargin||0)+[-p,p,c.f,-p][this.side],f={x:e?u+l:g+(n?this.width:0)+h+l,y:e?g+d-(n?this.height:0)+h:u+d};return C(this,"afterGetTitlePosition",{titlePosition:f}),f}renderMinorTick(t,e){let i=this.minorTicks;i[t]||(i[t]=new a(this,t,"minor")),e&&i[t].isNew&&i[t].render(null,!0),i[t].render(null,!1,1)}
24987renderTick(t,e,i){let s=this.isLinked,r=this.ticks;(!s||t>=this.min&&t<=this.max||this.grid&&this.grid.isColumn)&&(r[t]||(r[t]=new a(this,t)),i&&r[t].isNew&&r[t].render(e,!0,-1),r[t].render(e))}render(){let t,e;let i=this,s=i.chart,r=i.logarithmic,n=s.renderer,l=i.options,d=i.isLinked,c=i.tickPositions,p=i.axisTitle,u=i.ticks,g=i.minorTicks,f=i.alternateBands,m=l.stackLabels,x=l.alternateGridColor,y=l.crossing,b=i.tickmarkOffset,v=i.axisLine,S=i.showAxis,k=h(n.globalAnimation);if(i.labelEdge.length=0,i.overlap=!1,[u,g,f].forEach(function(t){D(t,function(t){t.isActive=!1})}),A(y)){let t=this.isXAxis?s.yAxis[0]:s.xAxis[0],e=[1,-1,-1,1][this.side];if(t){let s=t.toPixels(y,!0);i.horiz&&(s=t.len-s),i.offset=e*s}}if(i.hasData()||d){let n=i.chart.hasRendered&&i.old&&A(i.old.min);i.minorTickInterval&&!i.categories&&i.getMinorTickPositions().forEach(function(t){i.renderMinorTick(t,n)}),c.length&&(c.forEach(function(t,e){i.renderTick(t,e,n)}),b&&(0===i.min||i.single)&&(u[-1]||(u[-1]=new a(i,-1,null,!0)),u[-1].render(-1))),x&&c.forEach(function(a,n){e=void 0!==c[n+1]?c[n+1]+b:i.max-b,n%2==0&&a<i.max&&e<=i.max+(s.polar?-b:b)&&(f[a]||(f[a]=new o.PlotLineOrBand(i,{}
24987)),t=a+b,f[a].options={from:r?r.lin2log(t):t,to:r?r.lin2log(e):e,color:x,className:"highcharts-alternate-grid"},f[a].render(),f[a].isActive=!0)}),i._addedPlotLB||(i._addedPlotLB=!0,(l.plotLines||[]).concat(l.plotBands||[]).forEach(function(t){i.addPlotBandOrLine(t)}))}[u,g,f].forEach(function(t){let e=[],i=k.duration;D(t,function(t,i){t.isActive||(t.render(i,!1,0),t.isActive=!1,e.push(i))}),R(function(){let i=e.length;for(;i--;)t[e[i]]&&!t[e[i]].isActive&&(t[e[i]].destroy(),delete t[e[i]])},t!==f&&s.hasRendered&&i?i:0)}),v&&(v[v.isPlaced?"animate":"attr"]({d:this.getLinePath(v.strokeWidth())}),v.isPlaced=!0,v[S?"show":"hide"](S)),p&&S&&(p[p.isNew?"attr":"animate"](i.getTitlePosition(p)),p.isNew=!1),m&&m.enabled&&i.stacking&&i.stacking.renderStackTotals(),i.old={len:i.len,max:i.max,min:i.min,transA:i.transA,userMax:i.userMax,userMin:i.userMin},i.isDirty=!1,C(this,"afterRender")}redraw(){this.visible&&(this.render(),this.plotLinesAndBands.forEach(function(t){t.render()})),this.series.forEach(function(t){t.isDirty=!0})}getKeepProps(){return this.keepProps||N.keepProps}destroy(t){let e=this,i=e.plotLinesAndBands,s=this.eventOptions;if(C(this,"destroy",{keepEvents:t}),t||j(e),[e.ticks,e.minorTicks,e.alternateBands].forEach(function(t){b(t)}),i){let t=i.length;for(;t--;)i[t].destroy()}for(let t in["axisLine","axisTitle","axisGroup","gridGroup","labelGroup","cross","scrollbar"].forEach(function(t){e[t]&&(e[t]=e[t].destroy())}),e.plotLinesAndBandsGroups)e.plotLinesAndBandsGroups[t]=e.plotLinesAndBandsGroups[t].destroy();D(e,function(t,i){-1===e.getKeepProps().indexOf(i)&&delete e[i]}),this.eventOptions=s}drawCrosshair(t,e){let s=this.crosshair,r=E(s&&s.snap,!0),o=this.chart,a,n,h,l=this.cross,d;if(C(this,"drawCrosshair",{e:t,point:e}),t||(t=this.cross&&this.cross.e),s&&!1!==(y(e)||!r)){if(r?y(e)&&(n=E("colorAxis"!==this.coll?e.crosshairPos:null,this.isXAxis?e.plotX:this.len-e.plotY)):n=t&&(this.horiz?t.chartX-this.pos:this.len-t.chartY+this.pos),y(n)&&(d={value:e&&(this.isXAxis?e.x:E(e.stackY,e.y)),translatedValue:n},o.polar&&k(d,{isCrosshair:!0,chartX:t&&t.chartX,chartY:t&&t.chartY,point:e}),a=this.getPlotLinePath(d)||null),!y(a)){this.hideCrosshair();return}h=this.categories&&!this.isRadial,l||(this.cross=l=o.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-"+(h?"category ":"thin ")+(s.className||"")).attr({zIndex:E(s.zIndex,2)}).add(),!o.styledMode&&(l.attr({stroke:s.color||(h?i.parse("#ccd3ff").setOpacity(.25).get():"#cccccc"),"stroke-width":E(s.width,1)}).css({"pointer-events":"none"}),s.dashStyle&&l.attr({dashstyle:s.dashStyle}))),l.show().attr({d:a}),h&&!s.width&&l.attr({"stroke-width":this.transA}),this.cross.e=t}else this.hideCrosshair();C(this,"afterDrawCrosshair",{e:t,point:e})}hideCrosshair(){this.cross&&this.cross.hide(),C(this,"afterHideCrosshair")}update(t,e){let i=this.chart;t=L(this.userOptions,t),this.destroy(!0),this.init(i,t),i.isDirtyBox=!0,E(e,!0)&&i.redraw()}remove(t){let e=this.chart,i=this.coll,s=this.series,r=s.length;for(;r--;)s[r]&&s[r].remove(!1);v(e.axes,this),v(e[i]||[],this),e.orderItems(i),this.destroy(),e.isDirtyBox=!0,E(t,!0)&&e.redraw()}setTitle(t,e){this.update({title:t},e)}setCategories(t,e){this.update({categories:t},e)}}return N.keepProps=["coll","extKey","hcEvents","names","series","userMax","userMin"],N}),i(e,"Core/Axis/DateTimeAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,getMagnitude:s,normalizeTickInterval:r,timeUnits:o}=t;return function(t){function e(){return this.chart.time.getTimeTicks.apply(this.chart.time,arguments)}function a(){if("datetime"!==this.options.type){this.dateTime=void 0;return}this.dateTime||(this.dateTime=new n(this))}t.compose=function(t){return t.keepProps.includes("dateTime")||(t.keepProps.push("dateTime"),t.prototype.getTimeTicks=e,i(t,"afterSetOptions",a)),t};class n{constructor(t){this.axis=t}normalizeTimeTickInterval(t,e){let i=e||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]],a=i[i.length-1],n=o[a[0]],h=a[1],l;for(l=0;l<i.length&&(n=o[(a=i[l])[0]],h=a[1],!i[l+1]||!(t<=(n*h[h.length-1]+o[i[l+1][0]])/2));l++);n===o.year&&t<5*n&&(h=[1,2,5]);let d=r(t/n,h,"year"===a[0]?Math.max(s(t/n),1):1);return{unitRange:n,count:d,unitName:a[0]}}getXDateFormat(t,e){let{axis:i}=this,s=i.chart.time;return i.closestPointRange?s.getDateFormat(i.closestPointRange,t,i.options.startOfWeek,e)||s.resolveDTLFormat(e.year).main:s.resolveDTLFormat(e.day).main}}t.Additions=n}(e||(e={})),e}),i(e,"Core/Axis/LogarithmicAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{addEvent:i,normalizeTickInterval:s,pick:r}=t;return function(t){function e(t){let e=t.userOptions,i=this.logarithmic;"logarithmic"!==e.type?this.logarithmic=void 0:i||(i=this.logarithmic=new a(this))}function o(){let t=this.logarithmic;t&&(this.lin2val=function(e){return t.lin2log(e)},this.val2lin=function(e){return t.log2lin(e)})}t.compose=function(t){return t.keepProps.includes("logarithmic")||(t.keepProps.push("logarithmic"),i(t,"init",e),i(t,"afterInit",o)),t};class a{constructor(t){this.axis=t}getLogTickPositions(t,e,i,o){let a=this.axis,n=a.len,h=a.options,l=[];
24987if(o||(this.minorAutoInterval=void 0),t>=.5)t=Math.round(t),l=a.getLinearTickPositions(t,e,i);else if(t>=.08){let s,r,a,n,h,d,c;let p=Math.floor(e);for(s=t>.3?[1,2,4]:t>.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9],r=p;r<i+1&&!c;r++)for(a=0,n=s.length;a<n&&!c;a++)(h=this.log2lin(this.lin2log(r)*s[a]))>e&&(!o||d<=i)&&void 0!==d&&l.push(d),d>i&&(c=!0),d=h}else{let d=this.lin2log(e),c=this.lin2log(i),p=o?a.getMinorTickInterval():h.tickInterval,u=h.tickPixelInterval/(o?5:1),g=o?n/a.tickPositions.length:n;t=s(t=r("auto"===p?null:p,this.minorAutoInterval,(c-d)*u/(g||1))),l=a.getLinearTickPositions(t,d,c).map(this.log2lin),o||(this.minorAutoInterval=t/5)}return o||(a.tickInterval=t),l}lin2log(t){return Math.pow(10,t)}log2lin(t){return Math.log(t)/Math.LN10}}t.Additions=a}(e||(e={})),e}),i(e,"Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js",[e["Core/Utilities.js"]],function(t){var e;let{erase:i,extend:s,isNumber:r}=t;return function(t){let e;function o(t){return this.addPlotBandOrLine(t,"plotBands")}function a(t,i){let s=this.userOptions,r=new e(this,t);if(this.visible&&(r=r.render()),r){if(this._addedPlotLB||(this._addedPlotLB=!0,(s.plotLines||[]).concat(s.plotBands||[]).forEach(t=>{this.addPlotBandOrLine(t)})),i){let e=s[i]||[];e.push(t),s[i]=e}this.plotLinesAndBands.push(r)}return r}function n(t){return this.addPlotBandOrLine(t,"plotLines")}function h(t,e,i){i=i||this.options;let s=this.getPlotLinePath({value:e,force:!0,acrossPanes:i.acrossPanes}),o=[],a=this.horiz,n=!r(this.min)||!r(this.max)||t<this.min&&e<this.min||t>this.max&&e>this.max,h=this.getPlotLinePath({value:t,force:!0,acrossPanes:i.acrossPanes}),l,d=1,c;if(h&&s)for(n&&(c=h.toString()===s.toString(),d=0),l=0;l<h.length;l+=2){let t=h[l],e=h[l+1],i=s[l],r=s[l+1];("M"===t[0]||"L"===t[0])&&("M"===e[0]||"L"===e[0])&&("M"===i[0]||"L"===i[0])&&("M"===r[0]||"L"===r[0])&&(a&&i[1]===t[1]?(i[1]+=d,r[1]+=d):a||i[2]!==t[2]||(i[2]+=d,r[2]+=d),o.push(["M",t[1],t[2]],["L",e[1],e[2]],["L",r[1],r[2]],["L",i[1],i[2]],["Z"])),o.isFlat=c}return o}function l(t){this.removePlotBandOrLine(t)}function d(t){let e=this.plotLinesAndBands,s=this.options,r=this.userOptions;if(e){let o=e.length;for(;o--;)e[o].id===t&&e[o].destroy();[s.plotLines||[],r.plotLines||[],s.plotBands||[],r.plotBands||[]].forEach(function(e){for(o=e.length;o--;)(e[o]||{}).id===t&&i(e,e[o])})}}function c(t){this.removePlotBandOrLine(t)}t.compose=function(t,i){let r=i.prototype;return r.addPlotBand||(e=t,s(r,{addPlotBand:o,addPlotLine:n,addPlotBandOrLine:a,getPlotBandPath:h,removePlotBand:l,removePlotLine:c,removePlotBandOrLine:d})),i}}(e||(e={})),e}),i(e,"Core/Axis/PlotLineOrBand/PlotLineOrBand.js",[e["Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js"],e["Core/Utilities.js"]],function(t,e){let{arrayMax:i,arrayMin:s,defined:r,destroyObjectProperties:o,erase:a,fireEvent:n,merge:h,objectEach:l,pick:d}=e;class c{static compose(e){return t.compose(c,e)}constructor(t,e){this.axis=t,this.options=e,this.id=e.id}render(){n(this,"render");let{axis:t,options:e}=this,{horiz:i,logarithmic:s}=t,{color:o,events:a,zIndex:c=0}=e,p={},u=t.chart.renderer,g=e.to,f=e.from,m=e.value,x=e.borderWidth,y=e.label,{label:b,svgElem:v}=this,S=[],k,C=r(f)&&r(g),M=r(m),w=!v,T={class:"highcharts-plot-"+(C?"band ":"line ")+(e.className||"")},A=C?"bands":"lines";if(!t.chart.styledMode&&(M?(T.stroke=o||"#999999",T["stroke-width"]=d(e.width,1),e.dashStyle&&(T.dashstyle=e.dashStyle)):C&&(T.fill=o||"#e6e9ff",x&&(T.stroke=e.borderColor,T["stroke-width"]=x))),p.zIndex=c,A+="-"+c,(k=t.plotLinesAndBandsGroups[A])||(t.plotLinesAndBandsGroups[A]=k=u.g("plot-"+A).attr(p).add()),v||(this.svgElem=v=u.path().attr(T).add(k)),r(m))S=t.getPlotLinePath({value:s?.log2lin(m)??m,lineWidth:v.strokeWidth(),acrossPanes:e.acrossPanes});else{if(!(r(f)&&r(g)))return;S=t.getPlotBandPath(s?.log2lin(f)??f,s?.log2lin(g)??g,e)}return!this.eventsAdded&&a&&(l(a,(t,e)=>{v?.on(e,t=>{a[e].apply(this,[t])})}),this.eventsAdded=!0),(w||!v.d)&&S?.length?v.attr({d:S}):v&&(S?(v.show(),v.animate({d:S})):v.d&&(v.hide(),b&&(this.label=b=b.destroy()))),y&&(r(y.text)||r(y.formatter))&&S?.length&&t.width>0&&t.height>0&&!S.isFlat?(y=h({align:i&&C&&"center",x:i?!C&&4:10,verticalAlign:!i&&C&&"middle",y:i?C?16:10:C?6:-4,rotation:i&&!C&&90},y),this.renderLabel(y,S,C,c)):b&&b.hide(),this}renderLabel(t,e,r,o){let a=this.axis,n=a.chart.renderer,l=this.label;l||(this.label=l=n.text(this.getLabelText(t),0,0,t.useHTML).attr({align:t.textAlign||t.align,rotation:t.rotation,class:"highcharts-plot-"+(r?"band":"line")+"-label"+(t.className||""),zIndex:o}),a.chart.styledMode||l.css(h({fontSize:"0.8em",textOverflow:"ellipsis"},t.style)),l.add());let d=e.xBounds||[e[0][1],e[1][1],r?e[2][1]:e[0][1]],c=e.yBounds||[e[0][2],e[1][2],r?e[2][2]:e[0][2]],p=s(d),u=s(c);if(l.align(t,!1,{x:p,y:u,width:i(d)-p,height:i(c)-u}),!l.alignValue||"left"===l.alignValue){let e=t.clip?a.width:a.chart.chartWidth;l.css({width:(90===l.rotation?a.height-(l.alignAttr.y-a.top):e-(l.alignAttr.x-a.left))+"px"})}l.show(!0)}getLabelText(t){return r(t.formatter)?t.formatter.call(this):t.text}destroy(){a(this.axis.plotLinesAndBands,this),delete this.axis,o(this)}}return c}),i(e,"Core/Tooltip.js",[e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Utilities.js"]],function(t,e,
24987i,s,r){var o;let{format:a}=t,{composed:n,doc:h,isSafari:l}=e,{distribute:d}=i,{addEvent:c,clamp:p,css:u,discardElement:g,extend:f,fireEvent:m,isArray:x,isNumber:y,isString:b,merge:v,pick:S,pushUnique:k,splat:C,syncTimeout:M}=r;class w{constructor(t,e,i){this.allowShared=!0,this.crosshairs=[],this.distance=0,this.isHidden=!0,this.isSticky=!1,this.now={},this.options={},this.outside=!1,this.chart=t,this.init(t,e),this.pointer=i}bodyFormatter(t){return t.map(function(t){let e=t.series.tooltipOptions;return(e[(t.point.formatPrefix||"point")+"Formatter"]||t.point.tooltipFormatter).call(t.point,e[(t.point.formatPrefix||"point")+"Format"]||"")})}cleanSplit(t){this.chart.series.forEach(function(e){let i=e&&e.tt;i&&(!i.isActive||t?e.tt=i.destroy():i.isActive=!1)})}defaultFormatter(t){let e;let i=this.points||C(this);return(e=(e=[t.tooltipFooterHeaderFormatter(i[0])]).concat(t.bodyFormatter(i))).push(t.tooltipFooterHeaderFormatter(i[0],!0)),e}destroy(){this.label&&(this.label=this.label.destroy()),this.split&&(this.cleanSplit(!0),this.tt&&(this.tt=this.tt.destroy())),this.renderer&&(this.renderer=this.renderer.destroy(),g(this.container)),r.clearTimeout(this.hideTimer),r.clearTimeout(this.tooltipTimeout)}getAnchor(t,e){let i;let{chart:s,pointer:r}=this,o=s.inverted,a=s.plotTop,n=s.plotLeft;if((t=C(t))[0].series&&t[0].series.yAxis&&!t[0].series.yAxis.options.reversedStacks&&(t=t.slice().reverse()),this.followPointer&&e)void 0===e.chartX&&(e=r.normalize(e)),i=[e.chartX-n,e.chartY-a];else if(t[0].tooltipPos)i=t[0].tooltipPos;else{let s=0,r=0;t.forEach(function(t){let e=t.pos(!0);e&&(s+=e[0],r+=e[1])}),s/=t.length,r/=t.length,this.shared&&t.length>1&&e&&(o?s=e.chartX:r=e.chartY),i=[s-n,r-a]}return i.map(Math.round)}getClassName(t,e,i){let s=this.options,r=t.series,o=r.options;return[s.className,"highcharts-label",i&&"highcharts-tooltip-header",e?"highcharts-tooltip-box":"highcharts-tooltip",!i&&"highcharts-color-"+S(t.colorIndex,r.colorIndex),o&&o.className].filter(b).join(" ")}getLabel(){let t=this,i=this.chart.styledMode,r=this.options,o=this.split&&this.allowShared,a=this.container,n=this.chart.renderer;if(this.label){let t=!this.label.hasClass("highcharts-label");(!o&&t||o&&!t)&&this.destroy()}if(!this.label){if(this.outside){let t=this.chart.options.chart.style,i=s.getRendererType();this.container=a=e.doc.createElement("div"),a.className="highcharts-tooltip-container",u(a,{position:"absolute",top:"1px",pointerEvents:"none",zIndex:Math.max(this.options.style.zIndex||0,(t&&t.zIndex||0)+3)}),this.renderer=n=new i(a,0,0,t,void 0,void 0,n.styledMode)}if(o?this.label=n.g("tooltip"):(this.label=n.label("",0,0,r.shape,void 0,void 0,r.useHTML,void 0,"tooltip").attr({padding:r.padding,r:r.borderRadius}),i||this.label.attr({fill:r.backgroundColor,"stroke-width":r.borderWidth||0}).css(r.style).css({pointerEvents:r.style.pointerEvents||(this.shouldStickOnContact()?"auto":"none")})),t.outside){let e=this.label,{xSetter:i,ySetter:s}=e;e.xSetter=function(s){i.call(e,t.distance),a&&(a.style.left=s+"px")},e.ySetter=function(i){s.call(e,t.distance),a&&(a.style.top=i+"px")}}this.label.attr({zIndex:8}).shadow(r.shadow).add()}return a&&!a.parentElement&&e.doc.body.appendChild(a),this.label}getPlayingField(){let{body:t,documentElement:e}=h,{chart:i,distance:s,outside:r}=this;return{width:r?Math.max(t.scrollWidth,e.scrollWidth,t.offsetWidth,e.offsetWidth,e.clientWidth)-2*s:i.chartWidth,height:r?Math.max(t.scrollHeight,e.scrollHeight,t.offsetHeight,e.offsetHeight,e.clientHeight):i.chartHeight}}getPosition(t,e,i){let{distance:s,chart:r,outside:o,pointer:a}=this,{inverted:n,plotLeft:h,plotTop:l,polar:d}=r,{plotX:c=0,plotY:p=0}=i,u={},g=n&&i.h||0,{height:f,width:m}=this.getPlayingField(),x=a.getChartPosition(),y=t=>t*x.scaleX,b=t=>t*x.scaleY,v=i=>{let a="x"===i;return[i,a?m:f,a?t:e].concat(o?[a?y(t):b(e),a?x.left-s+y(c+h):x.top-s+b(p+l),0,a?m:f]:[a?t:e,a?c+h:p+l,a?h:l,a?h+r.plotWidth:l+r.plotHeight])},k=v("y"),C=v("x"),M,w=!!i.negative;!d&&r.hoverSeries?.yAxis?.reversed&&(w=!w);let T=!this.followPointer&&S(i.ttBelow,!d&&!n===w),A=function(t,e,i,r,a,n,h){let l=o?"y"===t?b(s):y(s):s,d=(i-r)/2,c=r<a-s,p=a+s+r<e,f=a-l-i+d,m=a+l-d;if(T&&p)u[t]=m;else if(!T&&c)u[t]=f;else if(c)u[t]=Math.min(h-r,f-g<0?f:f-g);else{if(!p)return!1;u[t]=Math.max(n,m+g+i>e?m:m+g)}}
24987,P=function(t,e,i,r,o){if(o<s||o>e-s)return!1;o<i/2?u[t]=1:o>e-r/2?u[t]=e-r-2:u[t]=o-i/2},L=function(t){[k,C]=[C,k],M=t},O=()=>{!1!==A.apply(0,k)?!1!==P.apply(0,C)||M||(L(!0),O()):M?u.x=u.y=0:(L(!0),O())};return(n&&!d||this.len>1)&&L(),O(),u}hide(t){let e=this;r.clearTimeout(this.hideTimer),t=S(t,this.options.hideDelay),this.isHidden||(this.hideTimer=M(function(){let i=e.getLabel();e.getLabel().animate({opacity:0},{duration:t?150:t,complete:()=>{i.hide(),e.container&&e.container.remove()}}),e.isHidden=!0},t))}init(t,e){this.chart=t,this.options=e,this.crosshairs=[],this.now={x:0,y:0},this.isHidden=!0,this.split=e.split&&!t.inverted&&!t.polar,this.shared=e.shared||this.split,this.outside=S(e.outside,!!(t.scrollablePixelsX||t.scrollablePixelsY))}shouldStickOnContact(t){return!!(!this.followPointer&&this.options.stickOnContact&&(!t||this.pointer.inClass(t.target,"highcharts-tooltip")))}move(t,e,i,s){let o=this,a=o.now,n=!1!==o.options.animation&&!o.isHidden&&(Math.abs(t-a.x)>1||Math.abs(e-a.y)>1),h=o.followPointer||o.len>1;f(a,{x:n?(2*a.x+t)/3:t,y:n?(a.y+e)/2:e,anchorX:h?void 0:n?(2*a.anchorX+i)/3:i,anchorY:h?void 0:n?(a.anchorY+s)/2:s}),o.getLabel().attr(a),o.drawTracker(),n&&(r.clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){o&&o.move(t,e,i,s)},32))}refresh(t,e){let{chart:i,options:s,pointer:o,shared:n}=this,h=C(t),l=h[0],d=[],c=s.format,p=s.formatter||this.defaultFormatter,u=i.styledMode,g={};if(!s.enabled||!l.series)return;r.clearTimeout(this.hideTimer),this.allowShared=!(!x(t)&&t.series&&t.series.noSharedTooltip),this.followPointer=!this.split&&l.series.tooltipOptions.followPointer;let f=this.getAnchor(t,e),y=f[0],v=f[1];n&&this.allowShared?(o.applyInactiveState(h),h.forEach(function(t){t.setState("hover"),d.push(t.getLabelConfig())}),(g=l.getLabelConfig()).points=d):g=l.getLabelConfig(),this.len=d.length;let k=b(c)?a(c,g,i):p.call(g,this),M=l.series;if(this.distance=S(M.tooltipOptions.distance,16),!1===k)this.hide();else{if(this.split&&this.allowShared)this.renderSplit(k,h);else{let t=y,r=v;if(e&&o.isDirectTouch&&(t=e.chartX-i.plotLeft,r=e.chartY-i.plotTop),i.polar||!1===M.options.clip||h.some(e=>o.isDirectTouch||e.series.shouldShowTooltip(t,r))){let t=this.getLabel();(!s.style.width||u)&&t.css({width:(this.outside?this.getPlayingField():i.spacingBox).width+"px"}),t.attr({text:k&&k.join?k.join(""):k}),t.addClass(this.getClassName(l),!0),u||t.attr({stroke:s.borderColor||l.color||M.color||"#666666"}),this.updatePosition({plotX:y,plotY:v,negative:l.negative,ttBelow:l.ttBelow,h:f[2]||0})}else{this.hide();return}}this.isHidden&&this.label&&this.label.attr({opacity:1}).show(),this.isHidden=!1}m(this,"refresh")}renderSplit(t,e){let i=this,{chart:s,chart:{chartWidth:r,chartHeight:o,plotHeight:a,plotLeft:n,plotTop:c,scrollablePixelsY:u=0,scrollablePixelsX:g,styledMode:m},distance:x,options:y,options:{positioner:v},pointer:k}=i,{scrollLeft:C=0,scrollTop:M=0}=s.scrollablePlotArea?.scrollingContainer||{},w=i.outside&&"number"!=typeof g?h.documentElement.getBoundingClientRect():{left:C,right:C+r,top:M,bottom:M+o},T=i.getLabel(),A=this.renderer||s.renderer,P=!!(s.xAxis[0]&&s.xAxis[0].opposite),{left:L,top:O}=k.getChartPosition(),D=c+M,E=0,I=a-u;function j(t,e,s,r,o=!0){let a,n;return s?(a=P?0:I,n=p(t-r/2,w.left,w.right-r-(i.outside?L:0))):(a=e-D,n=p(n=o?t-r-x:t+x,o?n:w.left,w.right)),{x:n,y:a}}b(t)&&(t=[!1,t]);let B=t.slice(0,e.length+1).reduce(function(t,s,r){if(!1!==s&&""!==s){let o=e[r-1]||{isHeader:!0,plotX:e[0].plotX,plotY:a,series:{}},h=o.isHeader,l=h?i:o.series,d=l.tt=function(t,e,s){let r=t,{isHeader:o,series:a}=e;if(!r){let t={padding:y.padding,r:y.borderRadius};m||(t.fill=y.backgroundColor,t["stroke-width"]=y.borderWidth??1),r=A.label("",0,0,y[o?"headerShape":"shape"],void 0,void 0,y.useHTML).addClass(i.getClassName(e,!0,o)).attr(t).add(T)}return r.isActive=!0,r.attr({text:s}),m||r.css(y.style).attr({stroke:y.borderColor||e.color||a.color||"#333333"}),r}(l.tt,o,s.toString()),u=d.getBBox(),g=u.width+d.strokeWidth();h&&(E=u.height,I+=E,P&&(D-=E));let{anchorX:f,anchorY:b}=function(t){let e,i;let{isHeader:s,plotX:r=0,plotY:o=0,series:h}=t;if(s)e=Math.max(n+r,n),i=c+a/2;else{let{xAxis:t,yAxis:s}=h;e=t.pos+p(r,-x,t.len+x),h.shouldShowTooltip(0,s.pos-c+o,{ignoreX:!0})&&(i=s.pos+o)}
24987return{anchorX:e=p(e,w.left-x,w.right+x),anchorY:i}}(o);if("number"==typeof b){let e=u.height+1,s=v?v.call(i,g,e,o):j(f,b,h,g);t.push({align:v?0:void 0,anchorX:f,anchorY:b,boxWidth:g,point:o,rank:S(s.rank,h?1:0),size:e,target:s.y,tt:d,x:s.x})}else d.isActive=!1}return t},[]);!v&&B.some(t=>{let{outside:e}=i,s=(e?L:0)+t.anchorX;return s<w.left&&s+t.boxWidth<w.right||s<L-w.left+t.boxWidth&&w.right-s>s})&&(B=B.map(t=>{let{x:e,y:i}=j(t.anchorX,t.anchorY,t.point.isHeader,t.boxWidth,!1);return f(t,{target:i,x:e})})),i.cleanSplit(),d(B,I);let R={left:L,right:L};B.forEach(function(t){let{x:e,boxWidth:s,isHeader:r}=t;!r&&(i.outside&&L+e<R.left&&(R.left=L+e),!r&&i.outside&&R.left+s>R.right&&(R.right=L+e))}),B.forEach(function(t){let{x:e,anchorX:s,anchorY:r,pos:o,point:{isHeader:a}}=t,n={visibility:void 0===o?"hidden":"inherit",x:e,y:(o||0)+D,anchorX:s,anchorY:r};if(i.outside&&e<s){let t=L-R.left;t>0&&(a||(n.x=e+t,n.anchorX=s+t),a&&(n.x=(R.right-R.left)/2,n.anchorX=s+t))}t.tt.attr(n)});let{container:z,outside:N,renderer:W}=i;if(N&&z&&W){let{width:t,height:e,x:i,y:s}=T.getBBox();W.setSize(t+i,e+s,!1),z.style.left=R.left+"px",z.style.top=O+"px"}l&&T.attr({opacity:1===T.opacity?.999:1})}drawTracker(){if(!this.shouldStickOnContact()){this.tracker&&(this.tracker=this.tracker.destroy());return}let t=this.chart,e=this.label,i=this.shared?t.hoverPoints:t.hoverPoint;if(!e||!i)return;let s={x:0,y:0,width:0,height:0},r=this.getAnchor(i),o=e.getBBox();r[0]+=t.plotLeft-(e.translateX||0),r[1]+=t.plotTop-(e.translateY||0),s.x=Math.min(0,r[0]),s.y=Math.min(0,r[1]),s.width=r[0]<0?Math.max(Math.abs(r[0]),o.width-r[0]):Math.max(Math.abs(r[0]),o.width),s.height=r[1]<0?Math.max(Math.abs(r[1]),o.height-Math.abs(r[1])):Math.max(Math.abs(r[1]),o.height),this.tracker?this.tracker.attr(s):(this.tracker=e.renderer.rect(s).addClass("highcharts-tracker").add(e),t.styledMode||this.tracker.attr({fill:"rgba(0,0,0,0)"}))}styledModeFormat(t){return t.replace('style="font-size: 0.8em"','class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g,'class="highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}"')}tooltipFooterHeaderFormatter(t,e){let i=t.series,s=i.tooltipOptions,r=i.xAxis,o=r&&r.dateTime,n={isFooter:e,labelConfig:t},h=s.xDateFormat,l=s[e?"footerFormat":"headerFormat"];return m(this,"headerFormatter",n,function(e){o&&!h&&y(t.key)&&(h=o.getXDateFormat(t.key,s.dateTimeLabelFormats)),o&&h&&(t.point&&t.point.tooltipDateKeys||["key"]).forEac
24987h(function(t){l=l.replace("{point."+t+"}","{point."+t+":"+h+"}")}),i.chart.styledMode&&(l=this.styledModeFormat(l)),e.text=a(l,{point:t,series:i},this.chart)}),n.text}update(t){this.destroy(),this.init(this.chart,v(!0,this.options,t))}updatePosition(t){let{chart:e,container:i,distance:s,options:r,pointer:o,renderer:a}=this,{height:n=0,width:h=0}=this.getLabel(),{left:l,top:d,scaleX:c,scaleY:p}=o.getChartPosition(),g=(r.positioner||this.getPosition).call(this,h,n,t),f=(t.plotX||0)+e.plotLeft,m=(t.plotY||0)+e.plotTop,x;a&&i&&(r.positioner&&(g.x+=l-s,g.y+=d-s),x=(r.borderWidth||0)+2*s+2,a.setSize(h+x,n+x,!1),(1!==c||1!==p)&&(u(i,{transform:`scale(${c}, ${p})`}),f*=c,m*=p),f+=l-g.x,m+=d-g.y),this.move(Math.round(g.x),Math.round(g.y||0),f,m)}}return(o=w||(w={})).compose=function(t){k(n,"Core.Tooltip")&&c(t,"afterInit",function(){let t=this.chart;t.options.tooltip&&(t.tooltip=new o(t,t.options.tooltip,this))})},w}),i(e,"Core/Series/Point.js",[e["Core/Renderer/HTML/AST.js"],e["Core/Animation/AnimationUtilities.js"],e["Core/Defaults.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){let{animObject:o}=e,{defaultOptions:a}=i,{format:n}=s,{addEvent:h,erase:l,extend:d,fireEvent:c,getNestedProperty:p,isArray:u,isFunction:g,isNumber:f,isObject:m,pick:x,syncTimeout:y,removeEvent:b,uniqueKey:v}=r;class S{animateBeforeDestroy(){let t=this,e={x:t.startXPos,opacity:0},i=t.getGraphicalProps();i.singular.forEach(function(i){t[i]=t[i].animate("dataLabel"===i?{x:t[i].startXPos,y:t[i].startYPos,opacity:0}:e)}),i.plural.forEach(function(e){t[e].forEach(function(e){e.element&&e.animate(d({x:t.startXPos},e.startYPos?{x:e.startXPos,y:e.startYPos}:{}))})})}applyOptions(t,e){let i=this.series,s=i.options.pointValKey||i.pointValKey;return d(this,t=S.prototype.optionsToObject.call(this,t)),this.options=this.options?d(this.options,t):t,t.group&&delete this.group,t.dataLabels&&delete this.dataLabels,s&&(this.y=S.prototype.getNestedProperty.call(this,s)),this.selected&&(this.state="select"),"name"in this&&void 0===e&&i.xAxis&&i.xAxis.hasNames&&(this.x=i.xAxis.nameToX(this)),void 0===this.x&&i?void 0===e?this.x=i.autoIncrement():this.x=e:f(t.x)&&i.options.relativeXValue&&(this.x=i.autoIncrement(t.x)),this.isNull=this.isValid&&!this.isValid(),this.formatPrefix=this.isNull?"null":"point",this}destroy(){if(!this.destroyed){let t=this,e=t.series,i=e.chart,s=e.options.dataSorting,r=i.hoverPoints,a=o(t.series.chart.renderer.globalAnimation),n=()=>{for(let e in(t.graphic||t.graphics||t.dataLabel||t.dataLabels)&&(b(t),t.destroyElements()),t)delete t[e]};t.legendItem&&i.legend.destroyItem(t),r&&(t.setState(),l(r,t),r.length||(i.hoverPoints=null)),t===i.hoverPoint&&t.onMouseOut(),s&&s.enabled?(this.animateBeforeDestroy(),y(n,a.duration)):n(),i.pointCount--}this.destroyed=!0}destroyElements(t){let e=this,i=e.getGraphicalProps(t);i.singular.forEach(function(t){e[t]=e[t].destroy()}),i.plural.forEach(function(t){e[t].forEach(function(t){t&&t.element&&t.destroy()}),delete e[t]})}firePointEvent(t,e,i){let s=this,r=this.series.options;s.manageEvent(t),"click"===t&&r.allowPointSelect&&(i=function(t){!s.destroyed&&s.select&&s.select(null,t.ctrlKey||t.metaKey||t.shiftKey)}),c(s,t,e,i)}getClassName(){return"highcharts-point"+(this.selected?" highcharts-point-select":"")+(this.negative?" highcharts-negative":"")+(this.isNull?" highcharts-null-point":"")+(void 0!==this.colorIndex?" highcharts-color-"+this.colorIndex:"")+(this.options.className?" "+this.options.className:"")+(this.zone&&this.zone.className?" "+this.zone.className.replace("highcharts-negative",""):"")}getGraphicalProps(t){let e,i;let s=this,r=[],o={singular:[],plural:[]};for((t=t||{graphic:1,dataLabel:1}).graphic&&r.push("graphic","connector"),t.dataLabel&&r.push("dataLabel","dataLabelPath","dataLabelUpper"),i=r.length;i--;)s[e=r[i]]&&o.singular.push(e);return["graphic","dataLabel"].forEach(function(e){let i=e+"s";t[e]&&s[i]&&o.plural.push(i)}),o}getLabelConfig(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}}getNestedProperty(t){return t?0===t.indexOf("custom.")?p(t,this.options):this[t]:void 0}getZone(){let t=this.series,e=t.zones,i=t.zoneAxis||"y",s,r=0;for(s=e[0];this[i]>=s.value;)s=e[++r];return this.nonZonedColor||(this.nonZonedColor=this.color),s&&s.color&&!this.options.color?this.color=s.color:this.color=this.nonZonedColor,s}hasNewShapeType(){return(this.graphic&&(this.graphic.symbolName||this.graphic.element.nodeName))!==this.shapeType}constructor(t,e,i){this.formatPrefix="point",this.visible=!0,this.series=t,this.applyOptions(e,i),this.id??(this.id=v()),this.resolveColor(),t.chart.pointCount++,c(this,"afterInit")}isValid(){return(f(this.x)||this.x instanceof Date)&&f(this.y)}optionsToObject(t){let e=this.series,i=e.options.keys,s=i||e.pointArrayMap||["y"],r=s.length,o={},a,n=0,h=0;if(f(t)||null===t)o[s[0]]=t;else if(u(t))for(!i&&t.length>r&&("string"==(a=typeof t[0])?o.name=t[0]:"number"===a&&(o.x=t[0]),n++);h<r;)i&&void 0===t[n]||(s[h].indexOf(".")>0?S.prototype.setNestedProperty(o,t[n],s[h]):o[s[h]]=t[n]),n++,h++;else"object"==typeof t&&(o=t,t.dataLabels&&(e.hasDataLabels=()=>!0),t.marker&&(e._hasPointMarkers=!0));return o}pos(t,e=this.plotY){if(!this.destroyed){let{plotX:i,series:s}=this,{chart:r,xAxis:o,yAxis:a}=s,n=0,h=0;if(f(i)&&f(e))return t&&(n=o?o.pos:r.plotLeft,h=a?a.pos:r.plotTop),r.inverted&&o&&a?[a.len-e+h,o.len-i+n]:[i+n,e+h]}}resolveColor(){let t=this.series,e=t.chart.options.chart,i=t.chart.styledMode,s,r,o=e.colorCount,a;delete this.nonZonedColor,t.options.colorByPoint?(i||(s=(r=t.options.colors||t.chart.options.colors)[t.colorCounter],o=r.length),a=t.colorCounter,t.colorCounter++,t.colorCounter===o&&(t.colorCounter=0)):(i||(s=t.color),a=t.colorIndex),this.colorIndex=x(this.options.colorIndex,a),this.color=x(this.options.color,s)}setNestedProperty(t,e,i){return i.split(".").reduce(function(t,i,s,r){let o=r.length-1===s;return t[i]=o?e:m(t[i],!0)?t[i]:{},t[i]},t),t}shouldDraw(){return!this.isNull}tooltipFormatter(t){let e=this.series,i=e.tooltipOptions,s=x(i.valueDecimals,""),r=i.valuePrefix||"",o=i.valueSuffix||"";return e.chart.styledMode&&(t=e.chart.tooltip.styledModeFormat(t)),(e.pointArrayMap||["y"]).forEac
24987h(function(e){e="{point."+e,(r||o)&&(t=t.replace(RegExp(e+"}","g"),r+e+"}"+o)),t=t.replace(RegExp(e+"}","g"),e+":,."+s+"f}")}),n(t,{point:this,series:this.series},e.chart)}update(t,e,i,s){let r;let o=this,a=o.series,n=o.graphic,h=a.chart,l=a.options;function d(){o.applyOptions(t);let s=n&&o.hasMockGraphic,d=null===o.y?!s:s;n&&d&&(o.graphic=n.destroy(),delete o.hasMockGraphic),m(t,!0)&&(n&&n.element&&t&&t.marker&&void 0!==t.marker.symbol&&(o.graphic=n.destroy()),t?.dataLabels&&o.dataLabel&&(o.dataLabel=o.dataLabel.destroy())),r=o.index,a.updateParallelArrays(o,r),l.data[r]=m(l.data[r],!0)||m(t,!0)?o.options:x(t,l.data[r]),a.isDirty=a.isDirtyData=!0,!a.fixedBox&&a.hasCartesianSeries&&(h.isDirtyBox=!0),"point"===l.legendType&&(h.isDirtyLegend=!0),e&&h.redraw(i)}e=x(e,!0),!1===s?d():o.firePointEvent("update",{options:t},d)}remove(t,e){this.series.removePoint(this.series.data.indexOf(this),t,e)}select(t,e){let i=this,s=i.series,r=s.chart;t=x(t,!i.selected),this.selectedStaging=t,i.firePointEvent(t?"select":"unselect",{accumulate:e},function(){i.selected=i.options.selected=t,s.options.data[s.data.indexOf(i)]=i.options,i.setState(t&&"select"),e||r.getSelectedPoints().forEac
24987h(function(t){let e=t.series;t.selected&&t!==i&&(t.selected=t.options.selected=!1,e.options.data[e.data.indexOf(t)]=t.options,t.setState(r.hoverPoints&&e.options.inactiveOtherPoints?"inactive":""),t.firePointEvent("unselect"))})}),delete this.selectedStaging}onMouseOver(t){let{inverted:e,pointer:i}=this.series.chart;i&&(t=t?i.normalize(t):i.getChartCoordinatesFromPoint(this,e),i.runPointActions(t,this))}onMouseOut(){let t=this.series.chart;this.firePointEvent("mouseOut"),this.series.options.inactiveOtherPoints||(t.hoverPoints||[]).forEach(function(t){t.setState()}),t.hoverPoints=t.hoverPoint=null}manageEvent(t){let e=this.series.options.point||{},i=e.events?.[t];g(i)&&(!this.hcEvents?.[t]||this.hcEvents?.[t]?.map(t=>t.fn).indexOf(i)===-1)?(h(this,t,i),this.hasImportedEvents=!0):this.hasImportedEvents&&!i&&this.hcEvents?.[t]&&(b(this,t),delete this.hcEvents[t],Object.keys(this.hcEvents)||(this.hasImportedEvents=!1))}setState(e,i){let s=this.series,r=this.state,o=s.options.states[e||"normal"]||{},n=a.plotOptions[s.type].marker&&s.options.marker,h=n&&!1===n.enabled,l=n&&n.states&&n.states[e||"normal"]||{},p=!1===l.enabled,u=this.marker||{},g=s.chart,m=n&&s.markerAttribs,y=s.halo,b,v,S,k=s.stateMarkerGraphic,C;if((e=e||"")===this.state&&!i||this.selected&&"select"!==e||!1===o.enabled||e&&(p||h&&!1===l.enabled)||e&&u.states&&u.states[e]&&!1===u.states[e].enabled)return;if(this.state=e,m&&(b=s.markerAttribs(this,e)),this.graphic&&!this.hasMockGraphic){if(r&&this.graphic.removeClass("highcharts-point-"+r),e&&this.graphic.addClass("highcharts-point-"+e),!g.styledMode){v=s.pointAttribs(this,e),S=x(g.options.chart.animation,o.animation);let t=v.opacity;s.options.inactiveOtherPoints&&f(t)&&(this.dataLabels||[]).forEach(function(e){e&&!e.hasClass("highcharts-data-label-hidden")&&(e.animate({opacity:t},S),e.connector&&e.connector.animate({opacity:t},S))}),this.graphic.animate(v,S)}b&&this.graphic.animate(b,x(g.options.chart.animation,l.animation,n.animation)),k&&k.hide()}else e&&l&&(C=u.symbol||s.symbol,k&&k.currentSymbol!==C&&(k=k.destroy()),b&&(k?k[i?"animate":"attr"]({x:b.x,y:b.y}):C&&(s.stateMarkerGraphic=k=g.renderer.symbol(C,b.x,b.y,b.width,b.height).add(s.markerGroup),k.currentSymbol=C)),!g.styledMode&&k&&"inactive"!==this.state&&k.attr(s.pointAttribs(this,e))),k&&(k[e&&this.isInside?"show":"hide"](),k.element.point=this,k.addClass(this.getClassName(),!0));let M=o.halo,w=this.graphic||k,T=w&&w.visibility||"inherit";M&&M.size&&w&&"hidden"!==T&&!this.isCluster?(y||(s.halo=y=g.renderer.path().add(w.parentGroup)),y.show()[i?"animate":"attr"]({d:this.haloPath(M.size)}),y.attr({class:"highcharts-halo highcharts-color-"+x(this.colorIndex,s.colorIndex)+(this.className?" "+this.className:""),visibility:T,zIndex:-1}),y.point=this,g.styledMode||y.attr(d({fill:this.color||s.color,"fill-opacity":M.opacity},t.filterUserAttributes(M.attributes||{})))):y&&y.point&&y.point.haloPath&&y.animate({d:y.point.haloPath(0)},null,y.hide),c(this,"afterSetState",{state:e})}haloPath(t){let e=this.pos();return e?this.series.chart.renderer.symbols.circle(Math.floor(e[0])-t,e[1]-t,2*t,2*t):[]}}return S}),i(e,"Core/Pointer.js",[e["Core/Color/Color.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{parse:r}=t,{charts:o,composed:a}=e,{addEvent:n,attr:h,css:l,extend:d,find:c,fireEvent:p,isNumber:u,isObject:g,objectEach:f,offset:m,pick:x,pushUnique:y,splat:b}=i;class v{applyInactiveState(t){let e=[],i;(t||[]).forEach(function(t){i=t.series,e.push(i),i.linkedParent&&e.push(i.linkedParent),i.linkedSeries&&(e=e.concat(i.linkedSeries)),i.navigatorSeries&&e.push(i.navigatorSeries)}),this.chart.series.forEach(function(t){-1===e.indexOf(t)?t.setState("inactive",!0):t.options.inactiveOtherPoints&&t.setAllPointsToState("inactive")})}destroy(){let t=this;this.eventsToUnbind.forEach(t=>t()),this.eventsToUnbind=[],!e.chartCount&&(v.unbindDocumentMouseUp&&(v.unbindDocumentMouseUp=v.unbindDocumentMouseUp()),v.unbindDocumentTouchEnd&&(v.unbindDocumentTouchEnd=v.unbindDocumentTouchEnd())),clearInterval(t.tooltipTimeout),f(t,function(e,i){t[i]=void 0})}getSelectionMarkerAttrs(t,e){let i={args:{chartX:t,chartY:e},attrs:{},shapeType:"rect"};return p(this,"getSelectionMarkerAttrs",i,i=>{let s;let{chart:r,zoomHor:o,zoomVert:a}
vendor: 4,219 bytes, line 24987
24987=this,{mouseDownX:n=0,mouseDownY:h=0}=r,l=i.attrs;l.x=r.plotLeft,l.y=r.plotTop,l.width=o?1:r.plotWidth,l.height=a?1:r.plotHeight,o&&(s=t-n,l.width=Math.max(1,Math.abs(s)),l.x=(s>0?0:s)+n),a&&(s=e-h,l.height=Math.max(1,Math.abs(s)),l.y=(s>0?0:s)+h)}),i}drag(t){let{chart:e}=this,{mouseDownX:i=0,mouseDownY:s=0}=e,{panning:o,panKey:a,selectionMarkerFill:n}=e.options.chart,h=e.plotLeft,l=e.plotTop,d=e.plotWidth,c=e.plotHeight,p=g(o)?o.enabled:o,u=a&&t[`${a}Key`],f=t.chartX,m=t.chartY,x,y=this.selectionMarker;if((!y||!y.touch)&&(f<h?f=h:f>h+d&&(f=h+d),m<l?m=l:m>l+c&&(m=l+c),this.hasDragged=Math.sqrt(Math.pow(i-f,2)+Math.pow(s-m,2)),this.hasDragged>10)){x=e.isInsidePlot(i-h,s-l,{visiblePlotOnly:!0});let{shapeType:a,attrs:d}=this.getSelectionMarkerAttrs(f,m);(e.hasCartesianSeries||e.mapView)&&this.hasZoom&&x&&!u&&!y&&(this.selectionMarker=y=e.renderer[a](),y.attr({class:"highcharts-selection-marker",zIndex:7}).add(),e.styledMode||y.attr({fill:n||r("#334eff").setOpacity(.25).get()})),y&&y.attr(d),x&&!y&&p&&e.pan(t,o)}}dragStart(t){let e=this.chart;e.mouseIsDown=t.type,e.cancelClick=!1,e.mouseDownX=t.chartX,e.mouseDownY=t.chartY}getSelectionBox(t){let e={args:{marker:t},result:t.getBBox()};return p(this,"getSelectionBox",e),e.result}drop(t){let e;let{chart:i,selectionMarker:s}=this;for(let t of i.axes)t.isPanning&&(t.isPanning=!1,(t.options.startOnTick||t.options.endOnTick||t.series.some(t=>t.boosted))&&(t.forceRedraw=!0,t.setExtremes(t.userMin,t.userMax,!1),e=!0));if(e&&i.redraw(),s&&t){if(this.hasDragged){let e=this.getSelectionBox(s);i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&("xAxis"===t.coll&&this.zoomX||"yAxis"===t.coll&&this.zoomY)),selection:{originalEvent:t,xAxis:[],yAxis:[],...e},from:e})}u(i.index)&&(this.selectionMarker=s.destroy())}i&&u(i.index)&&(l(i.container,{cursor:i._cursor}),i.cancelClick=this.hasDragged>10,i.mouseIsDown=!1,this.hasDragged=0,this.pinchDown=[])}findNearestKDPoint(t,e,i){let s;return t.forEach(function(t){let r=!(t.noSharedTooltip&&e)&&0>t.options.findNearestPointBy.indexOf("y"),o=t.searchPoint(i,r);g(o,!0)&&o.series&&(!g(s,!0)||function(t,i){let s=t.distX-i.distX,r=t.dist-i.dist,o=i.series.group?.zIndex-t.series.group?.zIndex;return 0!==s&&e?s:0!==r?r:0!==o?o:t.series.index>i.series.index?-1:1}(s,o)>0)&&(s=o)}),s}getChartCoordinatesFromPoint(t,e){let{xAxis:i,yAxis:s}=t.series,r=t.shapeArgs;if(i&&s){let o=t.clientX??t.plotX??0,a=t.plotY||0;return t.isNode&&r&&u(r.x)&&u(r.y)&&(o=r.x,a=r.y),e?{chartX:s.len+s.pos-a,chartY:i.len+i.pos-o}:{chartX:o+i.pos,chartY:a+s.pos}}if(r&&r.x&&r.y)return{chartX:r.x,chartY:r.y}}getChartPosition(){if(this.chartPosition)return this.chartPosition;let{container:t}=this.chart,e=m(t);this.chartPosition={left:e.left,top:e.top,scaleX:1,scaleY:1};let{offsetHeight:i,offsetWidth:s}=t;return s>2&&i>2&&(this.chartPosition.scaleX=e.width/s,this.chartPosition.scaleY=e.height/i),this.chartPosition}getCoordinates(t){let e={xAxis:[],yAxis:[]};for(let i of this.chart.axes)e[i.isXAxis?"xAxis":"yAxis"].push({axis:i,value:i.toValue(t[i.horiz?"chartX":"chartY"])});return e}getHoverData(t,e,i,s,r,o){let a=[],n=function(t){return t.visible&&!(!r&&t.directTouch)&&x(t.options.enableMouseTracking,!0)},h=e,l,d={chartX:o?o.chartX:void 0,chartY:o?o.chartY:void 0,shared:r};p(this,"beforeGetHoverData",d),l=h&&!h.stickyTracking?[h]:i.filter(t=>t.stickyTracking&&(d.filter||n)(t));let u=s&&t||!o?t:this.findNearestKDPoint(l,r,o);return h=u&&u.series,u&&(r&&!h.noSharedTooltip?(l=i.filter(function(t){return d.filter?d.filter(t):n(t)&&!t.noSharedTooltip})).forEach(function(t){let e=c(t.points,function(t){return t.x===u.x&&!t.isNull});g(e)&&(t.boosted&&t.boost&&(e=t.boost.getPoint(e)),a.push(e))}):a.push(u)),p(this,"afterGetHoverData",d={hoverPoint:u}),{hoverPoint:d.hoverPoint,hoverSeries:h,hoverPoints:a}}getPointFromEvent(t){let e=t.target,i;for(;e&&!i;)i=e.point,e=e.parentNode;return i}onTrackerMouseOut(t){let e=this.chart,i=t.relatedTarget,s=e.hoverSeries;this.isDirectTouch=!1,!s||!i||s.stickyTracking||this.inClass(i,"highcharts-tooltip")||this.inClass(i,"highcharts-series-"+s.index)&&this.inClass(i,"highcharts-tracker")||s.onMouseOut()}inClass(t,e){let i=t,s;for(;i;){if(s=h(i,"class")){if(-1!==s.indexOf(e))return!0;
vendor: 4,408 bytes, line 24987
24987if(-1!==s.indexOf("highcharts-container"))return!1}i=i.parentElement}}constructor(t,e){this.hasDragged=0,this.eventsToUnbind=[],this.options=e,this.chart=t,this.runChartClick=!!e.chart.events?.click,this.pinchDown=[],this.setDOMEvents(),p(this,"afterInit")}normalize(t,e){let i=t.touches,s=i?i.length?i.item(0):x(i.changedTouches,t.changedTouches)[0]:t;e||(e=this.getChartPosition());let r=s.pageX-e.left,o=s.pageY-e.top;return d(t,{chartX:Math.round(r/=e.scaleX),chartY:Math.round(o/=e.scaleY)})}onContainerClick(t){let e=this.chart,i=e.hoverPoint,s=this.normalize(t),r=e.plotLeft,o=e.plotTop;!e.cancelClick&&(i&&this.inClass(s.target,"highcharts-tracker")?(p(i.series,"click",d(s,{point:i})),e.hoverPoint&&i.firePointEvent("click",s)):(d(s,this.getCoordinates(s)),e.isInsidePlot(s.chartX-r,s.chartY-o,{visiblePlotOnly:!0})&&p(e,"click",s)))}onContainerMouseDown(t){let i=(1&(t.buttons||t.button))==1;t=this.normalize(t),e.isFirefox&&0!==t.button&&this.onContainerMouseMove(t),(void 0===t.button||i)&&(this.zoomOption(t),i&&t.preventDefault?.(),this.dragStart(t))}onContainerMouseLeave(t){let{pointer:e}=o[x(v.hoverChartIndex,-1)]||{};t=this.normalize(t),this.onContainerMouseMove(t),e&&t.relatedTarget&&!this.inClass(t.relatedTarget,"highcharts-tooltip")&&(e.reset(),e.chartPosition=void 0)}onContainerMouseEnter(){delete this.chartPosition}onContainerMouseMove(t){let e=this.chart,i=e.tooltip,s=this.normalize(t);this.setHoverChartIndex(t),("mousedown"===e.mouseIsDown||this.touchSelect(s))&&this.drag(s),!e.openMenu&&(this.inClass(s.target,"highcharts-tracker")||e.isInsidePlot(s.chartX-e.plotLeft,s.chartY-e.plotTop,{visiblePlotOnly:!0}))&&!(i&&i.shouldStickOnContact(s))&&(this.inClass(s.target,"highcharts-no-tooltip")?this.reset(!1,0):this.runPointActions(s))}onDocumentTouchEnd(t){this.onDocumentMouseUp(t)}onContainerTouchMove(t){this.touchSelect(t)?this.onContainerMouseMove(t):this.touch(t)}onContainerTouchStart(t){this.touchSelect(t)?this.onContainerMouseDown(t):(this.zoomOption(t),this.touch(t,!0))}onDocumentMouseMove(t){let e=this.chart,i=e.tooltip,s=this.chartPosition,r=this.normalize(t,s);!s||e.isInsidePlot(r.chartX-e.plotLeft,r.chartY-e.plotTop,{visiblePlotOnly:!0})||i&&i.shouldStickOnContact(r)||this.inClass(r.target,"highcharts-tracker")||this.reset()}onDocumentMouseUp(t){o[x(v.hoverChartIndex,-1)]?.pointer?.drop(t)}pinch(t){let e=this,{chart:i,hasZoom:s,lastTouches:r}=e,o=[].map.call(t.touches||[],t=>e.normalize(t)),a=o.length,n=1===a&&(e.inClass(t.target,"highcharts-tracker")&&i.runTrackerClick||e.runChartClick),h=i.tooltip,l=1===a&&x(h?.options.followTouchMove,!0);a>1?e.initiated=!0:l&&(e.initiated=!1),s&&e.initiated&&!n&&!1!==t.cancelable&&t.preventDefault(),"touchstart"===t.type?(e.pinchDown=o,e.res=!0):l?this.runPointActions(e.normalize(t)):r&&(p(i,"touchpan",{originalEvent:t,touches:o},()=>{let e=t=>{let e=t[0],i=t[1]||e;return{x:e.chartX,y:e.chartY,width:i.chartX-e.chartX,height:i.chartY-e.chartY}};i.transform({axes:i.axes.filter(t=>t.zoomEnabled&&(this.zoomHor&&t.horiz||this.zoomVert&&!t.horiz)),to:e(o),from:e(r),trigger:t.type})}),e.res&&(e.res=!1,this.reset(!1,0))),e.lastTouches=o}reset(t,e){let i=this.chart,s=i.hoverSeries,r=i.hoverPoint,o=i.hoverPoints,a=i.tooltip,n=a&&a.shared?o:r;t&&n&&b(n).forEach(function(e){e.series.isCartesian&&void 0===e.plotX&&(t=!1)}),t?a&&n&&b(n).length&&(a.refresh(n),a.shared&&o?o.forEach(function(t){t.setState(t.state,!0),t.series.isCartesian&&(t.series.xAxis.crosshair&&t.series.xAxis.drawCrosshair(null,t),t.series.yAxis.crosshair&&t.series.yAxis.drawCrosshair(null,t))}):r&&(r.setState(r.state,!0),i.axes.forEach(function(t){t.crosshair&&r.series[t.coll]===t&&t.drawCrosshair(null,r)}))):(r&&r.onMouseOut(),o&&o.forEach(function(t){t.setState()}),s&&s.onMouseOut(),a&&a.hide(e),this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove()),i.axes.forEach(function(t){t.hideCrosshair()}),i.hoverPoints=i.hoverPoint=void 0)}runPointActions(t,e,i){let s=this.chart,r=s.series,a=s.tooltip&&s.tooltip.options.enabled?s.tooltip:void 0,h=!!a&&a.shared,l=e||s.hoverPoint,d=l&&l.series||s.hoverSeries,p=(!t||"touchmove"!==t.type)&&(!!e||d&&d.directTouch&&this.isDirectTouch),u=this.getHoverData(l,d,r,p,h,t);l=u.hoverPoint,d=u.hoverSeries;let g=u.hoverPoints,f=d&&d.tooltipOptions.followPointer&&!d.tooltipOptions.split,m=h&&d&&!d.noSharedTooltip;if(l&&(i||l!==s.hoverPoint||a&&a.isHidden)){if((s.hoverPoints||[]).forEac
24987h(function(t){-1===g.indexOf(t)&&t.setState()}),s.hoverSeries!==d&&d.onMouseOver(),this.applyInactiveState(g),(g||[]).forEach(function(t){t.setState("hover")}),s.hoverPoint&&s.hoverPoint.firePointEvent("mouseOut"),!l.series)return;s.hoverPoints=g,s.hoverPoint=l,l.firePointEvent("mouseOver",void 0,()=>{a&&l&&a.refresh(m?g:l,t)})}else if(f&&a&&!a.isHidden){let e=a.getAnchor([{}],t);s.isInsidePlot(e[0],e[1],{visiblePlotOnly:!0})&&a.updatePosition({plotX:e[0],plotY:e[1]})}this.unDocMouseMove||(this.unDocMouseMove=n(s.container.ownerDocument,"mousemove",t=>o[v.hoverChartIndex??-1]?.pointer?.onDocumentMouseMove(t)),this.eventsToUnbind.push(this.unDocMouseMove)),s.axes.forEach(function(e){let i;let r=x((e.crosshair||{}).snap,!0);!r||(i=s.hoverPoint)&&i.series[e.coll]===e||(i=c(g,t=>t.series&&t.series[e.coll]===e)),i||!r?e.drawCrosshair(t,i):e.hideCrosshair()})}setDOMEvents(){let t=this.chart.container,e=t.ownerDocument;t.onmousedown=this.onContainerMouseDown.bind(this),t.onmousemove=this.onContainerMouseMove.bind(this),t.onclick=this.onContainerClick.bind(this),this.eventsToUnbind.push(n(t,"mouseenter",this.onContainerMouseEnter.bind(this)),n(t,"mouseleave",this.onContainerMouseLeave.bind(this))),v.unbindDocumentMouseUp||(v.unbindDocumentMouseUp=n(e,"mouseup",this.onDocumentMouseUp.bind(this)));let i=this.chart.renderTo.parentElement;for(;i&&"BODY"!==i.tagName;)this.eventsToUnbind.push(n(i,"scroll",()=>{delete this.chartPosition})),i=i.parentElement;this.eventsToUnbind.push(n(t,"touchstart",this.onContainerTouchStart.bind(this),{passive:!1}),n(t,"touchmove",this.onContainerTouchMove.bind(this),{passive:!1})),v.unbindDocumentTouchEnd||(v.unbindDocumentTouchEnd=n(e,"touchend",this.onDocumentTouchEnd.bind(this),{passive:!1}))}setHoverChartIndex(t){let i=this.chart,s=e.charts[x(v.hoverChartIndex,-1)];s&&s!==i&&s.pointer?.onContainerMouseLeave(t||{relatedTarget:i.container}),s&&s.mouseIsDown||(v.hoverChartIndex=i.index)}touch(t,e){let i;let{chart:s,pinchDown:r=[]}=this;this.setHoverChartIndex(),1===t.touches.length?(t=this.normalize(t),s.isInsidePlot(t.chartX-s.plotLeft,t.chartY-s.plotTop,{visiblePlotOnly:!0})&&!s.openMenu?(e&&this.runPointActions(t),"touchmove"===t.type&&(i=!!r[0]&&Math.pow(r[0].chartX-t.chartX,2)+Math.pow(r[0].chartY-t.chartY,2)>=16),x(i,!0)&&this.pinch(t)):e&&this.reset()):2===t.touches.length&&this.pinch(t)}touchSelect(t){return!!(this.chart.zooming.singleTouch&&t.touches&&1===t.touches.length)}zoomOption(t){let e=this.chart,i=e.inverted,s=e.zooming.type||"",r,o;/touch/.test(t.type)&&(s=x(e.zooming.pinchType,s)),this.zoomX=r=/x/.test(s),this.zoomY=o=/y/.test(s),this.zoomHor=r&&!i||o&&i,this.zoomVert=o&&!i||r&&i,this.hasZoom=r||o}}return(s=v||(v={})).compose=function(t){y(a,"Core.Pointer")&&n(t,"beforeRender",function(){this.pointer=new s(this,this.options)})},v}),i(e,"Core/Legend/Legend.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Globals.js"],e["Core/Series/Point.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o){var a;let{animObject:n,setAnimation:h}=t,{format:l}=e,{composed:d,marginNames:c}=i,{distribute:p}=r,{addEvent:u,createElement:g,css:f,defined:m,discardElement:x,find:y,fireEvent:b,isNumber:v,merge:S,pick:k,pushUnique:C,relativeLength:M,stableSort:w,syncTimeout:T}=o;class A{constructor(t,e){this.allItems=[],this.initialItemY=0,this.itemHeight=0,this.itemMarginBottom=0,this.itemMarginTop=0,this.itemX=0,this.itemY=0,this.lastItemY=0,this.lastLineHeight=0,this.legendHeight=0,this.legendWidth=0,this.maxItemWidth=0,this.maxLegendWidth=0,this.offsetWidth=0,this.padding=0,this.pages=[],this.symbolHeight=0,this.symbolWidth=0,this.titleHeight=0,this.totalItemWidth=0,this.widthOption=0,this.chart=t,this.setOptions(e),e.enabled&&(this.render(),u(this.chart,"endResize",function(){this.legend.positionCheckboxes()})),u(this.chart,"render",()=>{this.options.enabled&&this.proximate&&(this.proximatePositions(),this.positionItems())})}setOptions(t){let e=k(t.padding,8);this.options=t,this.chart.styledMode||(this.itemStyle=t.itemStyle,this.itemHiddenStyle=S(this.itemStyle,t.itemHiddenStyle)),this.itemMarginTop=t.
24987itemMarginTop,this.itemMarginBottom=t.itemMarginBottom,this.padding=e,this.initialItemY=e-5,this.symbolWidth=k(t.symbolWidth,16),this.pages=[],this.proximate="proximate"===t.layout&&!this.chart.inverted,this.baseline=void 0}update(t,e){let i=this.chart;this.setOptions(S(!0,this.options,t)),this.destroy(),i.isDirtyLegend=i.isDirtyBox=!0,k(e,!0)&&i.redraw(),b(this,"afterUpdate",{redraw:e})}colorizeItem(t,e){let{area:i,group:s,label:r,line:o,symbol:a}=t.legendItem||{};if(s?.[e?"removeClass":"addClass"]("highcharts-legend-item-hidden"),!this.chart.styledMode){let{itemHiddenStyle:s={}}=this,n=s.color,{fillColor:h,fillOpacity:l,lineColor:d,marker:c}=t.options,p=t=>(!e&&(t.fill&&(t.fill=n),t.stroke&&(t.stroke=n)),t);r?.css(S(e?this.itemStyle:s)),o?.attr(p({stroke:d||t.color})),a&&a.attr(p(c&&a.isMarker?t.pointAttribs():{fill:t.color})),i?.attr(p({fill:h||t.color,"fill-opacity":h?1:l??.75}))}b(this,"afterColorizeItem",{item:t,visible:e})}positionItems(){this.allItems.forEach(this.positionItem,this),this.chart.isResizing||this.positionCheckboxes()}positionItem(t){let{group:e,x:i=0,y:s=0}=t.legendItem||{},r=this.options,o=r.symbolPadding,a=!r.rtl,n=t.checkbox;if(e&&e.element){let r={translateX:a?i:this.legendWidth-i-2*o-4,translateY:s};e[m(e.translateY)?"animate":"attr"](r,void 0,()=>{b(this,"afterPositionItem",{item:t})})}n&&(n.x=i,n.y=s)}destroyItem(t){let e=t.checkbox,i=t.legendItem||{};for(let t of["group","label","line","symbol"])i[t]&&(i[t]=i[t].destroy());e&&x(e),t.legendItem=void 0}destroy(){for(let t of this.getAllItems())this.destroyItem(t);for(let t of["clipRect","up","down","pager","nav","box","title","group"])this[t]&&(this[t]=this[t].destroy());this.display=null}positionCheckboxes(){let t;let e=this.group&&this.group.alignAttr,i=this.clipHeight||this.legendHeight,s=this.titleHeight;e&&(t=e.translateY,this.allItems.forEach(function(r){let o;let a=r.checkbox;a&&(o=t+s+a.y+(this.scrollOffset||0)+3,f(a,{left:e.translateX+r.checkboxOffset+a.x-20+"px",top:o+"px",display:this.proximate||o>t-6&&o<t+i-6?"":"none"}))},this))}renderTitle(){let t=this.options,e=this.padding,i=t.title,s,r=0;i.text&&(this.title||(this.title=this.chart.renderer.label(i.text,e-3,e-4,void 0,void 0,void 0,t.useHTML,void 0,"legend-title").attr({zIndex:1}),this.chart.styledMode||this.title.css(i.style),this.title.add(this.group)),i.width||this.title.css({width:this.maxLegendWidth+"px"}),r=(s=this.title.getBBox()).height,this.offsetWidth=s.width,this.contentGroup.attr({translateY:r})),this.titleHeight=r}setText(t){let e=this.options;t.legendItem.label.attr({text:e.labelFormat?l(e.labelFormat,t,this.chart):e.labelFormatter.call(t)})}renderItem(t){let e=t.legendItem=t.legendItem||{},i=this.chart,s=i.renderer,r=this.options,o="horizontal"===r.layout,a=this.symbolWidth,n=r.symbolPadding||0,h=this.itemStyle,l=this.itemHiddenStyle,d=o?k(r.itemDistance,20):0,c=!r.rtl,p=!t.series,u=!p&&t.series.drawLegendSymbol?t.series:t,g=u.options,f=!!this.createCheckboxForItem&&g&&g.showCheckbox,m=r.useHTML,x=t.options.className,y=e.label,b=a+n+d+(f?20:0);!y&&(e.group=s.g("legend-item").addClass("highcharts-"+u.type+"-series highcharts-color-"+t.colorIndex+(x?" "+x:"")+(p?" highcharts-series-"+t.index:"")).attr({zIndex:1}).add(this.scrollGroup),e.label=y=s.text("",c?a+n:-n,this.baseline||0,m),i.styledMode||y.css(S(t.visible?h:l)),y.attr({align:c?"left":"right",zIndex:2}).add(e.group),!this.baseline&&(this.fontMetrics=s.fontMetrics(y),this.baseline=this.fontMetrics.f+3+this.itemMarginTop,y.attr("y",this.baseline),this.symbolHeight=k(r.symbolHeight,this.fontMetrics.f),r.squareSymbol&&(this.symbolWidth=k(r.symbolWidth,Math.max(this.symbolHeight,16)),b=this.symbolWidth+n+d+(f?20:0),c&&y.attr("x",this.symbolWidth+n))),u.drawLegendSymbol(this,t),this.setItemEvents&&this.setItemEvents(t,y,m)),f&&!t.checkbox&&this.createCheckboxForItem&&this.createCheckboxForItem(t),this.colorizeItem(t,t.visible),(i.styledMode||!h.width)&&y.css({width:(r.itemWidth||this.widthOption||i.spacingBox.width)-b+"px"}),this.setText(t);let v=y.getBBox(),C=this.fontMetrics&&this.fontMetrics.h||0;t.itemWidth=t.checkboxOffset=r.itemWidth||e.labelWidth||v.width+b,this.maxItemWidth=Math.max(this.maxItemWidth,t.itemWidth),this.totalItemWidth+=t.itemWidth,this.itemHeight=t.itemHeight=Math.round(e.labelHeight||(v.height>1.5*C?v.height:C))}layoutItem(t){let e=this.options,i=this.padding,s="horizontal"===e.layout,r=t.itemHeight,o=this.itemMarginBottom,a=this.itemMarginTop,n=s?k(e.itemDistance,20):0,h=this.maxLegendWidth,l=e.alignColumns&&this.totalItemWidth>h?this.maxItemWidth:t.itemWidth,d=t.legendItem||{};s&&this.itemX-i+l>h&&(this.itemX=i,this.lastLineHeight&&(this.itemY+=a+this.lastLineHeight+o),this.lastLineHeight=0),this.lastItemY=a+this.itemY+o,this.lastLineHeight=Math.max(r,this.lastLineHeight),d.x=this.itemX,d.y=this.itemY,s?this.itemX+=l:(this.itemY+=a+r+o,this.lastLineHeight=r),this.offsetWidth=this.widthOption||Math.max((s?this.itemX-i-(t.checkbox?0:n):l)+i,this.offsetWidth)}getAllItems(){let t=[];
vendor: 6,231 bytes, line 24987
24987return this.chart.series.forEach(function(e){let i=e&&e.options;e&&k(i.showInLegend,!m(i.linkedTo)&&void 0,!0)&&(t=t.concat((e.legendItem||{}).labels||("point"===i.legendType?e.data:e)))}),b(this,"afterGetAllItems",{allItems:t}),t}getAlignment(){let t=this.options;return this.proximate?t.align.charAt(0)+"tv":t.floating?"":t.align.charAt(0)+t.verticalAlign.charAt(0)+t.layout.charAt(0)}adjustMargins(t,e){let i=this.chart,s=this.options,r=this.getAlignment();r&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEach(function(o,a){o.test(r)&&!m(t[a])&&(i[c[a]]=Math.max(i[c[a]],i.legend[(a+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][a]*s[a%2?"x":"y"]+k(s.margin,12)+e[a]+(i.titleOffset[a]||0)))})}proximatePositions(){let t;let e=this.chart,i=[],s="left"===this.options.align;for(let r of(this.allItems.forEach(function(t){let r,o,a=s,n,h;t.yAxis&&(t.xAxis.options.reversed&&(a=!a),t.points&&(r=y(a?t.points:t.points.slice(0).reverse(),function(t){return v(t.plotY)})),o=this.itemMarginTop+t.legendItem.label.getBBox().height+this.itemMarginBottom,h=t.yAxis.top-e.plotTop,n=t.visible?(r?r.plotY:t.yAxis.height)+(h-.3*o):h+t.yAxis.height,i.push({target:n,size:o,item:t}))},this),p(i,e.plotHeight)))t=r.item.legendItem||{},v(r.pos)&&(t.y=e.plotTop-e.spacing[0]+r.pos)}render(){let t=this.chart,e=t.renderer,i=this.options,s=this.padding,r=this.getAllItems(),o,a,n,h=this.group,l,d=this.box;this.itemX=s,this.itemY=this.initialItemY,this.offsetWidth=0,this.lastItemY=0,this.widthOption=M(i.width,t.spacingBox.width-s),l=t.spacingBox.width-2*s-i.x,["rm","lm"].indexOf(this.getAlignment().substring(0,2))>-1&&(l/=2),this.maxLegendWidth=this.widthOption||l,h||(this.group=h=e.g("legend").addClass(i.className||"").attr({zIndex:7}).add(),this.contentGroup=e.g().attr({zIndex:1}).add(h),this.scrollGroup=e.g().add(this.contentGroup)),this.renderTitle(),w(r,(t,e)=>(t.options&&t.options.legendIndex||0)-(e.options&&e.options.legendIndex||0)),i.reversed&&r.reverse(),this.allItems=r,this.display=o=!!r.length,this.lastLineHeight=0,this.maxItemWidth=0,this.totalItemWidth=0,this.itemHeight=0,r.forEach(this.renderItem,this),r.forEach(this.layoutItem,this),a=(this.widthOption||this.offsetWidth)+s,n=this.lastItemY+this.lastLineHeight+this.titleHeight,n=this.handleOverflow(n)+s,d||(this.box=d=e.rect().addClass("highcharts-legend-box").attr({r:i.borderRadius}).add(h)),t.styledMode||d.attr({stroke:i.borderColor,"stroke-width":i.borderWidth||0,fill:i.backgroundColor||"none"}).shadow(i.shadow),a>0&&n>0&&d[d.placed?"animate":"attr"](d.crisp.call({},{x:0,y:0,width:a,height:n},d.strokeWidth())),h[o?"show":"hide"](),t.styledMode&&"none"===h.getStyle("display")&&(a=n=0),this.legendWidth=a,this.legendHeight=n,o&&this.align(),this.proximate||this.positionItems(),b(this,"afterRender")}align(t=this.chart.spacingBox){let e=this.chart,i=this.options,s=t.y;/(lth|ct|rth)/.test(this.getAlignment())&&e.titleOffset[0]>0?s+=e.titleOffset[0]:/(lbh|cb|rbh)/.test(this.getAlignment())&&e.titleOffset[2]>0&&(s-=e.titleOffset[2]),s!==t.y&&(t=S(t,{y:s})),e.hasRendered||(this.group.placed=!1),this.group.align(S(i,{width:this.legendWidth,height:this.legendHeight,verticalAlign:this.proximate?"top":i.verticalAlign}),!0,t)}handleOverflow(t){let e=this,i=this.chart,s=i.renderer,r=this.options,o=r.y,a="top"===r.verticalAlign,n=this.padding,h=r.maxHeight,l=r.navigation,d=k(l.animation,!0),c=l.arrowSize||12,p=this.pages,u=this.allItems,g=function(t){"number"==typeof t?S.attr({height:t}):S&&(e.clipRect=S.destroy(),e.contentGroup.clip()),e.contentGroup.div&&(e.contentGroup.div.style.clip=t?"rect("+n+"px,9999px,"+(n+t)+"px,0)":"auto")},f=function(t){return e[t]=s.circle(0,0,1.3*c).translate(c/2,c/2).add(v),i.styledMode||e[t].attr("fill","rgba(0,0,0,0.0001)"),e[t]},m,x,y,b=i.spacingBox.height+(a?-o:o)-n,v=this.nav,S=this.clipRect;return"horizontal"!==r.layout||"middle"===r.verticalAlign||r.floating||(b/=2),h&&(b=Math.min(b,h)),p.length=0,t&&b>0&&t>b&&!1!==l.enabled?(this.clipHeight=m=Math.max(b-20-this.titleHeight-n,0),this.currentPage=k(this.currentPage,1),this.fullHeight=t,u.forEach((t,e)=>{let i=(y=t.legendItem||{}).y||0,s=Math.round(y.label.getBBox().height),r=p.length;(!r||i-p[r-1]>m&&(x||i)!==p[r-1])&&(p.push(x||i),r++),y.pageIx=r-1,x&&((u[e-1].legendItem||{}).pageIx=r-1),e===u.length-1&&i+s-p[r-1]>m&&i>p[r-1]&&(p.push(i),y.pageIx=r),i!==x&&(x=i)}),S||(S=e.clipRect=s.clipRect(0,n-2,9999,0),e.contentGroup.clip(S)),g(m),v||(this.nav=v=s.g().attr({zIndex:1}).add(this.group),this.up=s.symbol("triangle",0,0,c,c).add(v),f("upTracker").on("click",function(){e.scroll(-1,d)}),this.pager=s.text("",15,10).addClass("highcharts-legend-navigation"),!i.styledMode&&l.style&&this.pager.css(l.style),this.pager.add(v),this.down=s.symbol("triangle-down",0,0,c,c).add(v),f("downTracker").on("click",function(){e.scroll(1,d)})),e.scroll(0),t=b):v&&(g(),this.nav=v.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0),t}scroll(t,e){let i=this.chart,s=this.pages,r=s.length,o=this.clipHeight,a=this.options.navigation,l=this.pager,d=this.padding,c=this.currentPage+t;c>r&&(c=r),c>0&&(void 0!==e&&h(e,i),this.nav.attr({translateX:d,translateY:o+this.padding+7+this.titleHeight,visibility:"inherit"}),[this.up,this.upTracker].forEach(function(t){t.attr({class:1===c?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})}),l.attr({text:c+"/"+r}),[this.down,this.downTracker].forEach(function(t){t.attr({x:18+this.pager.getBBox().width,class:c===r?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})},this),i.styledMode||(this.up.attr({fill:1===c?a.inactiveColor:a.activeColor}),this.upTracker.css({cursor:1===c?"default":"pointer"}),this.down.attr({fill:c===r?a.inactiveColor:a.activeColor}),this.downTracker.css({cursor:c===r?"default":"pointer"})),this.scrollOffset=-s[c-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=c,this.positionCheckboxes(),T(()=>{b(this,"afterScroll",{currentPage:c})},n(k(e,i.renderer.globalAnimation,!0)).duration))}setItemEvents(t,e,i){let r=this,o=t.legendItem||{},a=r.chart.renderer.boxWrapper,n=t instanceof s,h="highcharts-legend-"+(n?"point":"series")+"-active",l=r.chart.styledMode,d=i?[e,o.symbol]:[o.group],c=e=>
24987{r.allItems.forEach(i=>{t!==i&&[i].concat(i.linkedSeries||[]).forEach(t=>{t.setState(e,!n)})})};for(let i of d)i&&i.on("mouseover",function(){t.visible&&c("inactive"),t.setState("hover"),t.visible&&a.addClass(h),l||e.css(r.options.itemHoverStyle)}).on("mouseout",function(){r.chart.styledMode||e.css(S(t.visible?r.itemStyle:r.itemHiddenStyle)),c(""),a.removeClass(h),t.setState()}).on("click",function(e){let i="legendItemClick",s=function(){t.setVisible&&t.setVisible(),c(t.visible?"inactive":"")};a.removeClass(h),e={browserEvent:e},t.firePointEvent?t.firePointEvent(i,e,s):b(t,i,e,s)})}createCheckboxForItem(t){t.checkbox=g("input",{type:"checkbox",className:"highcharts-legend-checkbox",checked:t.selected,defaultChecked:t.selected},this.options.itemCheckboxStyle,this.chart.container),u(t.checkbox,"click",function(e){let i=e.target;b(t.series||t,"checkboxClick",{checked:i.checked,item:t},function(){t.select()})})}}return(a=A||(A={})).compose=function(t){C(d,"Core.Legend")&&u(t,"beforeMargins",function(){this.legend=new a(this,this.options.legend)})},A}),i(e,"Core/Legend/LegendSymbol.js",[e["Core/Utilities.js"]],function(t){var e;let{extend:i,merge:s,pick:r}=t;return function(t){function e(t,e,o){let a=this.legendItem=this.legendItem||{},{chart:n,options:h}=this,{baseline:l=0,symbolWidth:d,symbolHeight:c}=t,p=this.symbol||"circle",u=c/2,g=n.renderer,f=a.group,m=l-Math.round(c*(o?.4:.3)),x={},y,b=h.marker,v=0;if(n.styledMode||(x["stroke-width"]=Math.min(h.lineWidth||0,24),h.dashStyle?x.dashstyle=h.dashStyle:"square"===h.linecap||(x["stroke-linecap"]="round")),a.line=g.path().addClass("highcharts-graph").attr(x).add(f),o&&(a.area=g.path().addClass("highcharts-area").add(f)),x["stroke-linecap"]&&(v=Math.min(a.line.strokeWidth(),d)/2),d){let t=[["M",v,m],["L",d-v,m]];a.line.attr({d:t}),a.area?.attr({d:[...t,["L",d-v,l],["L",v,l]]})}if(b&&!1!==b.enabled&&d){let t=Math.min(r(b.radius,u),u);0===p.indexOf("url")&&(b=s(b,{width:c,height:c}),t=0),a.symbol=y=g.symbol(p,d/2-t,m-t,2*t,2*t,i({context:"legend"},b)).addClass("highcharts-point").add(f),y.isMarker=!0}}t.areaMarker=function(t,i){e.call(this,t,i,!0)},t.lineMarker=e,t.rectangle=function(t,e){let i=e.legendItem||{},s=t.options,o=t.symbolHeight,a=s.squareSymbol,n=a?o:t.symbolWidth;i.symbol=this.chart.renderer.rect(a?(t.symbolWidth-o)/2:0,t.baseline-o+1,n,o,r(t.options.symbolRadius,o/2)).addClass("highcharts-point").attr({zIndex:3}).add(i.group)}}(e||(e={})),e}),i(e,"Core/Series/SeriesDefaults.js",[],function(){return{lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1e3},enableMouseTracking:!0,events:{},marker:{enabledThreshold:2,lineColor:"#ffffff",lineWidth:0,radius:4,states:{normal:{animation:!0},hover:{animation:{duration:150},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:"#cccccc",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:"center",borderWidth:0,defer:!0,formatter:function(){let{numberFormatter:t}=this.series.chart;return"number"!=typeof this.y?"":t(this.y,-1)},padding:5,style:{fontSize:"0.7em",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0},cropThreshold:300,opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:150},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:150},opacity:.2}},stickyTracking:!0,turboThreshold:1e3,findNearestPointBy:"x"}}),i(e,"Core/Series/SeriesRegistry.js",[e["Core/Globals.js"],e["Core/Defaults.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,i,s){var r;let{defaultOptions:o}=e,{extend:a,extendClass:n,merge:h}=s;return function(e){function s(t,s){let r=o.plotOptions||{},a=s.defaultOptions,n=s.prototype;return n.type=t,n.pointClass||(n.pointClass=i),!e.seriesTypes[t]&&(a&&(r[t]=a),e.seriesTypes[t]=s,!0)}e.seriesTypes=t.seriesTypes,e.registerSeriesType=s,e.seriesType=function(t,r,l,d,c){let p=o.plotOptions||{};if(r=r||"",p[t]=h(p[r],l),delete e.seriesTypes[t],s(t,n(e.seriesTypes[r]||function(){},d)),e.seriesTypes[t].prototype.type=t,c){class s extends i{}a(s.prototype,c),e.seriesTypes[t].prototype.pointClass=s}return e.seriesTypes[t]}}(r||(r={})),r}
24987),i(e,"Core/Series/Series.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Defaults.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Series/Point.js"],e["Core/Series/SeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h,l){let{animObject:d,setAnimation:c}=t,{defaultOptions:p}=e,{registerEventOptions:u}=i,{svg:g,win:f}=s,{seriesTypes:m}=n,{arrayMax:x,arrayMin:y,clamp:b,correctFloat:v,defined:S,destroyObjectProperties:k,diffObjects:C,erase:M,error:w,extend:T,find:A,fireEvent:P,getClosestDistance:L,getNestedProperty:O,insertItem:D,isArray:E,isNumber:I,isString:j,merge:B,objectEach:R,pick:z,removeEvent:N,splat:W,syncTimeout:G}=l;class H{constructor(){this.zoneAxis="y"}init(t,e){let i;P(this,"init",{options:e});let s=this,r=t.series;this.eventsToUnbind=[],s.chart=t,s.options=s.setOptions(e);let o=s.options,a=!1!==o.visible;s.linkedSeries=[],s.bindAxes(),T(s,{name:o.name,state:"",visible:a,selected:!0===o.selected}),u(this,o);let n=o.events;(n&&n.click||o.point&&o.point.events&&o.point.events.click||o.allowPointSelect)&&(t.runTrackerClick=!0),s.getColor(),s.getSymbol(),s.parallelArrays.forEach(function(t){s[t+"Data"]||(s[t+"Data"]=[])}),s.isCartesian&&(t.hasCartesianSeries=!0),r.length&&(i=r[r.length-1]),s._i=z(i&&i._i,-1)+1,s.opacity=s.options.opacity,t.orderItems("series",D(this,r)),o.dataSorting&&o.dataSorting.enabled?s.setDataSortingOptions():s.points||s.data||s.setData(o.data,!1),P(this,"afterInit")}is(t){return m[t]&&this instanceof m[t]}bindAxes(){let t;let e=this,i=e.options,s=e.chart;P(this,"bindAxes",null,function(){(e.axisTypes||[]).forEach(function(r){s[r].forEach(function(s){t=s.options,
24987(z(i[r],0)===s.index||void 0!==i[r]&&i[r]===t.id)&&(D(e,s.series),e[r]=s,s.isDirty=!0)}),e[r]||e.optionalAxis===r||w(18,!0,s)})}),P(this,"afterBindAxes")}updateParallelArrays(t,e,i){let s=t.series,r=I(e)?function(i){let r="y"===i&&s.toYData?s.toYData(t):t[i];s[i+"Data"][e]=r}:function(t){Array.prototype[e].apply(s[t+"Data"],i)};s.parallelArrays.forEach(r)}hasData(){return this.visible&&void 0!==this.dataMax&&void 0!==this.dataMin||this.visible&&this.yData&&this.yData.length>0}hasMarkerChanged(t,e){let i=t.marker,s=e.marker||{};return i&&(s.enabled&&!i.enabled||s.symbol!==i.symbol||s.height!==i.height||s.width!==i.width)}autoIncrement(t){let e=this.options,i=e.pointIntervalUnit,s=e.relativeXValue,r=this.chart.time,o=this.xIncrement,a,n;return(o=z(o,e.pointStart,0),this.pointInterval=n=z(this.pointInterval,e.pointInterval,1),s&&I(t)&&(n*=t),i&&(a=new r.Date(o),"day"===i?r.set("Date",a,r.get("Date",a)+n):"month"===i?r.set("Month",a,r.get("Month",a)+n):"year"===i&&r.set("FullYear",a,r.get("FullYear",a)+n),n=a.getTime()-o),s&&I(t))?o+n:(this.xIncrement=o+n,o)}setDataSortingOptions(){let t=this.options;T(this,{requireSorting:!1,sorted:!1,enabledDataSorting:!0,allowDG:!1}),S(t.pointRange)||(t.pointRange=1)}setOptions(t){let e;let i=this.chart,s=i.options.plotOptions,r=i.userOptions||{},o=B(t),a=i.styledMode,n={plotOptions:s,userOptions:o};P(this,"setOptions",n);let h=n.plotOptions[this.type],l=r.plotOptions||{},d=l.series||{},c=p.plotOptions[this.type]||{},u=l[this.type]||{};this.userOptions=n.userOptions;let g=B(h,s.series,u,o);this.tooltipOptions=B(p.tooltip,p.plotOptions.series?.tooltip,c?.tooltip,i.userOptions.tooltip,l.series?.tooltip,u.tooltip,o.tooltip),this.stickyTracking=z(o.stickyTracking,u.stickyTracking,d.stickyTracking,!!this.tooltipOptions.shared&&!this.noSharedTooltip||g.stickyTracking),null===h.marker&&delete g.marker,this.zoneAxis=g.zoneAxis||"y";let f=this.zones=(g.zones||[]).map(t=>({...t}));return(g.negativeColor||g.negativeFillColor)&&!g.zones&&(e={value:g[this.zoneAxis+"Threshold"]||g.threshold||0,className:"highcharts-negative"},a||(e.color=g.negativeColor,e.fillColor=g.negativeFillColor),f.push(e)),f.length&&S(f[f.length-1].value)&&f.push(a?{}:{color:this.color,fillColor:this.fillColor}),P(this,"afterSetOptions",{options:g}),g}getName(){return z(this.options.name,"Series "+(this.index+1))}getCyclic(t,e,i){let s,r;let o=this.chart,a=`${t}Index`,n=`${t}Counter`,h=i?.length||o.options.chart.colorCount;!e&&(S(r=z("color"===t?this.options.colorIndex:void 0,this[a]))?s=r:(o.series.length||(o[n]=0),s=o[n]%h,o[n]+=1),i&&(e=i[s])),void 0!==s&&(this[a]=s),this[t]=e}getColor(){this.chart.styledMode?this.getCyclic("color"):this.options.colorByPoint?this.color="#cccccc":this.getCyclic("color",this.options.color||p.plotOptions[this.type].color,this.chart.options.colors)}getPointsCollection(){return(this.hasGroupedData?this.points:this.data)||[]}getSymbol(){let t=this.options.marker;this.getCyclic("symbol",t.symbol,this.chart.options.symbols)}findPointIndex(t,e){let i,s,r;let a=t.id,n=t.x,h=this.points,l=this.options.dataSorting;if(a){let t=this.chart.get(a);t instanceof o&&(i=t)}else if(this.linkedParent||this.enabledDataSorting||this.options.relativeXValue){let e=e=>!e.touched&&e.index===t.index;if(l&&l.matchByName?e=e=>!e.touched&&e.name===t.name:this.options.relativeXValue&&(e=e=>!e.touched&&e.options.x===t.x),!(i=A(h,e)))return}return i&&void 0!==(r=i&&i.index)&&(s=!0),void 0===r&&I(n)&&(r=this.xData.indexOf(n,e)),-1!==r&&void 0!==r&&this.cropped&&(r=r>=this.cropStart?r-this.cropStart:r),!s&&I(r)&&h[r]&&h[r].touched&&(r=void 0),r}updateData(t,e){let i=this.options,s=i.dataSorting,r=this.points,o=[],a=this.requireSorting,n=t.length===r.length,h,l,d,c,p=!0;if(this.xIncrement=null,t.forEach(function(t,e){let l;let d=S(t)&&this.pointClass.prototype.optionsToObject.call({series:this},t)||{},p=d.x;d.id||I(p)?(-1===(l=this.findPointIndex(d,c))||void 0===l?o.push(t):r[l]&&t!==i.data[l]?(r[l].update(t,!1,null,!1),r[l].touched=!0,a&&(c=l+1)):r[l]&&(r[l].touched=!0),(!n||e!==l||s&&s.enabled||this.hasDerivedData)&&(h=!0)):o.push(t)},this),h)for(l=r.length;l--;)(d=r[l])&&!d.touched&&d.remove&&d.remove(!1,e);else!n||s&&s.enabled?p=!1:(t.forEach(function(t,e){t===r[e].y||r[e].destroyed||r[e].update(t,!1,null,!1)}),o.length=0);return r.forEach(function(t){t&&(t.touched=!1)}
24987),!!p&&(o.forEach(function(t){this.addPoint(t,!1,null,null,!1)},this),null===this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=x(this.xData),this.autoIncrement()),!0)}setData(t,e=!0,i,s){let r=this,o=r.points,a=o&&o.length||0,n=r.options,h=r.chart,l=n.dataSorting,d=r.xAxis,c=n.turboThreshold,p=this.xData,u=this.yData,g=r.pointArrayMap,f=g&&g.length,m=n.keys,x,y,b,v=0,S=1,k=null,C;h.options.chart.allowMutatingData||(n.data&&delete r.options.data,r.userOptions.data&&delete r.userOptions.data,C=B(!0,t));let M=(t=C||t||[]).length;if(l&&l.enabled&&(t=this.sortData(t)),h.options.chart.allowMutatingData&&!1!==s&&M&&a&&!r.cropped&&!r.hasGroupedData&&r.visible&&!r.boosted&&(b=this.updateData(t,i)),!b){if(r.xIncrement=null,r.colorCounter=0,this.parallelArrays.forEach(function(t){r[t+"Data"].length=0}),c&&M>c){if(I(k=r.getFirstValidPoint(t)))for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x];else if(E(k)){if(f){if(k.length===f)for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x];else for(x=0;x<M;x++)y=t[x],p[x]=y[0],u[x]=y.slice(1,f+1)}else if(m&&(v=m.indexOf("x"),S=m.indexOf("y"),v=v>=0?v:0,S=S>=0?S:1),1===k.length&&(S=0),v===S)for(x=0;x<M;x++)p[x]=this.autoIncrement(),u[x]=t[x][S];else for(x=0;x<M;x++)y=t[x],p[x]=y[v],u[x]=y[S]}else w(12,!1,h)}else for(x=0;x<M;x++)y={series:r},r.pointClass.prototype.applyOptions.apply(y,[t[x]]),r.updateParallelArrays(y,x);for(u&&j(u[0])&&w(14,!0,h),r.data=[],r.options.data=r.userOptions.data=t,x=a;x--;)o[x]?.destroy();d&&(d.minRange=d.userMinRange),r.isDirty=h.isDirtyBox=!0,r.isDirtyData=!!o,i=!1}"point"===n.legendType&&(this.processData(),this.generatePoints()),e&&h.redraw(i)}sortData(t){let e=this,i=e.options.dataSorting.sortKey||"y",s=function(t,e){return S(e)&&t.pointClass.prototype.optionsToObject.call({series:t},e)||{}};return t.forEach(function(i,r){t[r]=s(e,i),t[r].index=r},this),t.concat().sort((t,e)=>{let s=O(i,t),r=O(i,e);return r<s?-1:r>s?1:0}).forEach(function(t,e){t.x=e},this),e.linkedSeries&&e.linkedSeries.forEach(function(e){let i=e.options,r=i.data;i.dataSorting&&i.dataSorting.enabled||!r||(r.forEach(function(i,o){r[o]=s(e,i),t[o]&&(r[o].x=t[o].x,r[o].index=o)}),e.setData(r,!1))}),t}getProcessedData(t){let e=this,i=e.xAxis,s=e.options,r=s.cropThreshold,o=t||e.getExtremesFromAll||s.getExtremesFromAll,a=i?.logarithmic,n=e.isCartesian,h,l,d=0,c,p,u,g=e.xData,f=e.yData,m=!1,x=g.length;i&&(p=(c=i.getExtremes()).min,u=c.max,m=!!(i.categories&&!i.names.length)),n&&e.sorted&&!o&&(!r||x>r||e.forceCrop)&&(g[x-1]<p||g[0]>u?(g=[],f=[]):e.yData&&(g[0]<p||g[x-1]>u)&&(g=(h=this.cropData(e.xData,e.yData,p,u)).xData,f=h.yData,d=h.start,l=!0));let y=L([a?g.map(a.log2lin):g],()=>e.requireSorting&&!m&&w(15,!1,e.chart));return{xData:g,yData:f,cropped:l,cropStart:d,closestPointRange:y}}processData(t){let e=this.xAxis;if(this.isCartesian&&!this.isDirty&&!e.isDirty&&!this.yAxis.isDirty&&!t)return!1;let i=this.getProcessedData();this.cropped=i.cropped,this.cropStart=i.cropStart,this.processedXData=i.xData,this.processedYData=i.yData,this.closestPointRange=this.basePointRange=i.closestPointRange,P(this,"afterProcessData")}cropData(t,e,i,s){let r=t.length,o,a,n=0,h=r;for(o=0;o<r;o++)if(t[o]>=i){n=Math.max(0,o-1);break}for(a=o;a<r;a++)if(t[a]>s){h=a+1;break}return{xData:t.slice(n,h),yData:e.slice(n,h),start:n,end:h}}generatePoints(){let t=this.options,e=this.processedData||t.data,i=this.processedXData,s=this.processedYData,r=this.pointClass,o=i.length,a=this.cropStart||0,n=this.hasGroupedData,h=t.keys,l=[],d=t.dataGrouping&&t.dataGrouping.groupAll?a:0,c,p,u,g,f=this.data;if(!f&&!n){let t=[];t.length=e.length,f=this.data=t}for(h&&n&&(this.options.keys=!1),g=0;g<o;g++)p=a+g,n?((u=new r(this,[i[g]].concat(W(s[g])))).dataGroup=this.groupMap[d+g],u.dataGroup.options&&(u.options=u.dataGroup.options,T(u,u.dataGroup.options),delete u.dataLabels)):(u=f[p])||void 0===e[p]||(f[p]=u=new r(this,e[p],i[g])),u&&(u.index=n?d+g:p,l[g]=u);if(this.options.keys=h,f&&(o!==(c=f.length)||n))for(g=0;g<c;g++)g!==a||n||(g+=o),f[g]&&(f[g].destroyElements(),f[g].plotX=void 0);this.data=f,this.points=l,P(this,"afterGeneratePoints")}getXExtremes(t){return{min:y(t),max:x(t)}}getExtremes(t,e){let i=this.xAxis,s=this.yAxis,r=this.processedXData||this.xData,o=[],a=this.requireSorting&&!this.is("column")?1:0,n=!!s&&s.positiveValuesOnly,h,l,d,c,p,u,g,f=0,m=0,b=0,v=(t=t||this.stackedYData||this.processedYData||[]).length;for(i&&(f=(h=i.getExtremes()).min,m=h.max),u=0;u<v;u++)if(c=r[u],l=(I(p=t[u])||E(p))&&((I(p)?p>0:p.length)||!n),d=e||this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||!i||(r[u+
24987a]||c)>=f&&(r[u-a]||c)<=m,l&&d){if(g=p.length)for(;g--;)I(p[g])&&(o[b++]=p[g]);else o[b++]=p}let S={activeYData:o,dataMin:y(o),dataMax:x(o)};return P(this,"afterGetExtremes",{dataExtremes:S}),S}applyExtremes(){let t=this.getExtremes();return this.dataMin=t.dataMin,this.dataMax=t.dataMax,t}getFirstValidPoint(t){let e=t.length,i=0,s=null;for(;null===s&&i<e;)s=t[i],i++;return s}translate(){this.processedXData||this.processData(),this.generatePoints();let t=this.options,e=t.stacking,i=this.xAxis,s=i.categories,r=this.enabledDataSorting,o=this.yAxis,a=this.points,n=a.length,h=this.pointPlacementToXValue(),l=!!h,d=t.threshold,c=t.startFromThreshold?d:0,p,u,g,f,m=Number.MAX_VALUE;function x(t){return b(t,-1e5,1e5)}for(p=0;p<n;p++){let t;let n=a[p],y=n.x,b,k,C=n.y,M=n.low,w=e&&o.stacking?.stacks[(this.negStacks&&C<(c?0:d)?"-":"")+this.stackKey];u=i.translate(y,!1,!1,!1,!0,h),n.plotX=I(u)?v(x(u)):void 0,e&&this.visible&&w&&w[y]&&(f=this.getStackIndicator(f,y,this.index),!n.isNull&&f.key&&(k=(b=w[y]).points[f.key]),b&&E(k)&&(M=k[0],C=k[1],M===c&&f.key===w[y].base&&(M=z(I(d)?d:o.min)),o.positiveValuesOnly&&S(M)&&M<=0&&(M=void 0),n.total=n.stackTotal=z(b.total),n.percentage=S(n.y)&&b.total?n.y/b.total*100:void 0,n.stackY=C,this.irregularWidths||b.setOffset(this.pointXOffset||0,this.barW||0,void 0,void 0,void 0,this.xAxis))),n.yBottom=S(M)?x(o.translate(M,!1,!0,!1,!0)):void 0,this.dataModify&&(C=this.dataModify.modifyValue(C,p)),I(C)&&void 0!==n.plotX&&(t=I(t=o.translate(C,!1,!0,!1,!0))?x(t):void 0),n.plotY=t,n.isInside=this.isPointInside(n),n.clientX=l?v(i.translate(y,!1,!1,!1,!0,h)):u,n.negative=(n.y||0)<(d||0),n.category=z(s&&s[n.x],n.x),n.isNull||!1===n.visible||(void 0!==g&&(m=Math.min(m,Math.abs(u-g))),g=u),n.zone=this.zones.length?n.getZone():void 0,!n.graphic&&this.group&&r&&(n.isNew=!0)}this.closestPointRangePx=m,P(this,"afterTranslate")}getValidPoints(t,e,i){let s=this.chart;return(t||this.points||[]).filter(function(t){let{plotX:r,plotY:o}=t;return!!((i||!t.isNull&&I(o))&&(!e||s.isInsidePlot(r,o,{inverted:s.inverted})))&&!1!==t.visible})}getClipBox(){let{chart:t,xAxis:e,yAxis:i}=this,{x:s,y:r,width:o,height:a}=B(t.clipBox);return e&&e.len!==t.plotSizeX&&(o=e.len),i&&i.len!==t.plotSizeY&&(a=i.len),t.inverted&&!this.invertible&&([o,a]=[a,o]),{x:s,y:r,width:o,height:a}}getSharedClipKey(){return this.sharedClipKey=(this.options.xAxis||0)+","+(this.options.yAxis||0),this.sharedClipKey}setClip(){let{chart:t,group:e,markerGroup:i}=this,s=t.sharedClips,r=t.renderer,o=this.getClipBox(),a=this.getSharedClipKey(),n=s[a];n?n.animate(o):s[a]=n=r.clipRect(o),e&&e.clip(!1===this.options.clip?void 0:n),i&&i.clip()}animate(t){let{chart:e,group:i,markerGroup:s}=this,r=e.inverted,o=d(this.options.animation),a=[this.getSharedClipKey(),o.duration,o.easing,o.defer].join(","),n=e.sharedClips[a],h=e.sharedCl
24987ips[a+"m"];if(t&&i){let t=this.getClipBox();if(n)n.attr("height",t.height);else{t.width=0,r&&(t.x=e.plotHeight),n=e.renderer.clipRect(t),e.sharedClips[a]=n;let i={x:-99,y:-99,width:r?e.plotWidth+199:99,height:r?99:e.plotHeight+199};h=e.renderer.clipRect(i),e.sharedClips[a+"m"]=h}i.clip(n),s?.clip(h)}else if(n&&!n.hasClass("highcharts-animating")){let t=this.getClipBox(),i=o.step;(s?.element.childNodes.length||e.series.length>1)&&(o.step=function(t,e){i&&i.apply(e,arguments),"width"===e.prop&&h?.element&&h.attr(r?"height":"width",t+99)}),n.addClass("highcharts-animating").animate(t,o)}}afterAnimate(){this.setClip(),R(this.chart.sharedClips,(t,e,i)=>{t&&!this.chart.container.querySelector(`[clip-path="url(#${t.id})"]`)&&(t.destroy(),delete i[e])}),this.finishedAnimating=!0,P(this,"afterAnimate")}drawPoints(t=this.points){let e,i,s,r,o,a,n;let h=this.chart,l=h.styledMode,{colorAxis:d,options:c}=this,p=c.marker,u=this[this.specialGroup||"markerGroup"],g=this.xAxis,f=z(p.enabled,!g||!!g.isRadial||null,this.closestPointRangePx>=p.enabledThreshold*p.radius);if(!1!==p.enabled||this._hasPointMarkers)for(e=0;e<t.length;e++)if(r=(s=(i=t[e]).graphic)?"animate":"attr",o=i.marker||{},a=!!i.marker,(f&&void 0===o.enabled||o.enabled)&&!i.isNull&&!1!==i.visible){let t=z(o.symbol,this.symbol,"rect");n=this.markerAttribs(i,i.selected&&"select"),this.enabledDataSorting&&(i.startXPos=g.reversed?-(n.width||0):g.width);let e=!1!==i.isInside;if(!s&&e&&((n.width||0)>0||i.hasImage)&&(i.graphic=s=h.renderer.symbol(t,n.x,n.y,n.width,n.height,a?o:p).add(u),this.enabledDataSorting&&h.hasRendered&&(s.attr({x:i.startXPos}),r="animate")),s&&"animate"===r&&s[e?"show":"hide"](e).animate(n),s){let t=this.pointAttribs(i,l||!i.selected?void 0:"select");l?d&&s.css({fill:t.fill}):s[r](t)}s&&s.addClass(i.getClassName(),!0)}else s&&(i.graphic=s.destroy())}markerAttribs(t,e){let i=this.options,s=i.marker,r=t.marker||{},o=r.symbol||s.symbol,a={},n,h,l=z(r.radius,s&&s.radius);e&&(n=s.states[e],l=z((h=r.states&&r.states[e])&&h.radius,n&&n.radius,l&&l+(n&&n.radiusPlus||0))),t.hasImage=o&&0===o.indexOf("url"),t.hasImage&&(l=0);let d=t.pos();return I(l)&&d&&(a.x=d[0]-l,a.y=d[1]-l,i.crisp&&(a.x=Math.floor(a.x))),l&&(a.width=a.height=2*l),a}pointAttribs(t,e){let i=this.options.marker,s=t&&t.options,r=s&&s.marker||{},o=s&&s.color,a=t&&t.color,n=t&&t.zone&&t.zone.color,h,l,d=this.color,c,p,u=z(r.lineWidth,i.lineWidth),g=1;return d=o||n||a||d,c=r.fillColor||i.fillColor||d,p=r.lineColor||i.lineColor||d,e=e||"normal",h=i.states[e]||{},u=z((l=r.states&&r.states[e]||{}).lineWidth,h.lineWidth,u+z(l.lineWidthPlus,h.lineWidthPlus,0)),c=l.fillColor||h.fillColor||c,{stroke:p=l.lineColor||h.lineColor||p,"stroke-width":u,fill:c,opacity:g=z(l.opacity,h.opacity,g)}}destroy(t){let e,i,s;
vendor: 5,829 bytes, line 24987
24987let r=this,o=r.chart,a=/AppleWebKit\/533/.test(f.navigator.userAgent),n=r.data||[];for(P(r,"destroy",{keepEventsForUpdate:t}),this.removeEvents(t),(r.axisTypes||[]).forEach(function(t){(s=r[t])&&s.series&&(M(s.series,r),s.isDirty=s.forceRedraw=!0)}),r.legendItem&&r.chart.legend.destroyItem(r),e=n.length;e--;)(i=n[e])&&i.destroy&&i.destroy();for(let t of r.zones)k(t,void 0,!0);l.clearTimeout(r.animationTimeout),R(r,function(t,e){t instanceof h&&!t.survive&&t[a&&"group"===e?"hide":"destroy"]()}),o.hoverSeries===r&&(o.hoverSeries=void 0),M(o.series,r),o.orderItems("series"),R(r,function(e,i){t&&"hcEvents"===i||delete r[i]})}applyZones(){let{area:t,chart:e,graph:i,zones:s,points:r,xAxis:o,yAxis:a,zoneAxis:n}=this,{inverted:h,renderer:l}=e,d=this[`${n}Axis`],{isXAxis:c,len:p=0}=d||{},u=(i?.strokeWidth()||0)/2+1,g=(t,e=0,i=0)=>{h&&(i=p-i);let{translated:s=0,lineClip:r}=t,o=i-s;r?.push(["L",e,Math.abs(o)<u?i-u*(o<=0?-1:1):s])};if(s.length&&(i||t)&&d&&I(d.min)){let e=d.getExtremes().max,u=t=>{t.forEach((e,i)=>{("M"===e[0]||"L"===e[0])&&(t[i]=[e[0],c?p-e[1]:e[1],c?e[2]:p-e[2]])})};if(s.forEach(t=>{t.lineClip=[],t.translated=b(d.toPixels(z(t.value,e),!0)||0,0,p)}),i&&!this.showLine&&i.hide(),t&&t.hide(),"y"===n&&r.length<o.len)for(let t of r){let{plotX:e,plotY:i,zone:r}=t,o=r&&s[s.indexOf(r)-1];r&&g(r,e,i),o&&g(o,e,i)}let f=[],m=d.toPixels(d.getExtremes().min,!0);s.forEach(e=>{let s=e.lineClip||[],r=Math.round(e.translated||0);o.reversed&&s.reverse();let{clip:n,simpleClip:d}=e,p=0,g=0,x=o.len,y=a.len;c?(p=r,x=m):(g=r,y=m);let b=[["M",p,g],["L",x,g],["L",x,y],["L",p,y],["Z"]],v=[b[0],...s,b[1],b[2],...f,b[3],b[4]];f=s.reverse(),m=r,h&&(u(v),t&&u(b)),n?(n.animate({d:v}),d?.animate({d:b})):(n=e.clip=l.path(v),t&&(d=e.simpleClip=l.path(b))),i&&e.graph?.clip(n),t&&e.area?.clip(d)})}else this.visible&&(i&&i.show(),t&&t.show())}plotGroup(t,e,i,s,r){let o=this[t],a=!o,n={visibility:i,zIndex:s||.1};return S(this.opacity)&&!this.chart.styledMode&&"inactive"!==this.state&&(n.opacity=this.opacity),o||(this[t]=o=this.chart.renderer.g().add(r)),o.addClass("highcharts-"+e+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(S(this.colorIndex)?"highcharts-color-"+this.colorIndex+" ":"")+(this.options.className||"")+(o.hasClass("highcharts-tracker")?" highcharts-tracker":""),!0),o.attr(n)[a?"attr":"animate"](this.getPlotBox(e)),o}getPlotBox(t){let e=this.xAxis,i=this.yAxis,s=this.chart,r=s.inverted&&!s.polar&&e&&this.invertible&&"series"===t;return s.inverted&&(e=i,i=this.xAxis),{translateX:e?e.left:s.plotLeft,translateY:i?i.top:s.plotTop,rotation:r?90:0,rotationOriginX:r?(e.len-i.len)/2:0,rotationOriginY:r?(e.len+i.len)/2:0,scaleX:r?-1:1,scaleY:1}}removeEvents(t){let{eventsToUnbind:e}=this;t||N(this),e.length&&(e.forEach(t=>{t()}),e.length=0)}render(){let t=this,{chart:e,options:i,hasRendered:s}=t,r=d(i.animation),o=t.visible?"inherit":"hidden",a=i.zIndex,n=e.seriesGroup,h=t.finishedAnimating?0:r.duration;P(this,"render"),t.plotGroup("group","series",o,a,n),t.markerGroup=t.plotGroup("markerGroup","markers",o,a,n),!1!==i.clip&&t.setClip(),h&&t.animate?.(!0),t.drawGraph&&(t.drawGraph(),t.applyZones()),t.visible&&t.drawPoints(),t.drawDataLabels?.(),t.redrawPoints?.(),i.enableMouseTracking&&t.drawTracker?.(),h&&t.animate?.(),s||(h&&r.defer&&(h+=r.defer),t.animationTimeout=G(()=>{t.afterAnimate()},h||0)),t.isDirty=!1,t.hasRendered=!0,P(t,"afterRender")}redraw(){let t=this.isDirty||this.isDirtyData;this.translate(),this.render(),t&&delete this.kdTree}reserveSpace(){return this.visible||!this.chart.options.chart.ignoreHiddenSeries}searchPoint(t,e){let{xAxis:i,yAxis:s}=this,r=this.chart.inverted;return this.searchKDTree({clientX:r?i.len-t.chartY+i.pos:t.chartX-i.pos,plotY:r?s.len-t.chartX+s.pos:t.chartY-s.pos},e,t)}buildKDTree(t){this.buildingKdTree=!0;let e=this,i=e.options.findNearestPointBy.indexOf("y")>-1?2:1;delete e.kdTree,G(function(){e.kdTree=function t(i,s,r){let o,a;let n=i?.length;if(n)return o=e.kdAxisArray[s%r],i.sort((t,e)=>(t[o]||0)-(e[o]||0)),{point:i[a=Math.floor(n/2)],left:t(i.slice(0,a),s+1,r),right:t(i.slice(a+1),s+1,r)}}(e.getValidPoints(void 0,!e.directTouch),i,i),e.buildingKdTree=!1},e.options.kdNow||t?.type==="touchstart"?0:1)}searchKDTree(t,e,i){let s=this,[r,o]=this.kdAxisArray,a=e?"distX":"dist",n=(s.options.findNearestPointBy||"").indexOf("y")>-1?2:1,h=!!s.isBubble;if(this.kdTree||this.buildingKdTree||this.buildKDTree(i),this.kdTree)return function t(e,i,n,l){let d=i.point,c=s.kdAxisArray[n%l],p,u,g=d;!function(t,e){let i=t[r],s=e[r],a=S(i)&&S(s)?i-s:null,n=t[o],l=e[o],d=S(n)&&S(l)?n-l:0,c=h&&e.marker?.radius||0;e.dist=Math.sqrt((a&&a*a||0)+d*d)-c,e.distX=S(a)?Math.abs(a)-c:Number.MAX_VALUE}(e,d);let f=(e[c]||0)-(d[c]||0)+(h&&d.marker?.radius||0),m=f<0?"left":"right",x=f<0?"right":"left";return i[m]&&(g=(p=t(e,i[m],n+1,l))[a]<g[a]?p:d),i[x]&&Math.sqrt(f*f)<g[a]&&(g=(u=t(e,i[x],n+1,l))[a]<g[a]?u:g),g}(t,this.kdTree,n,n)}pointPlacementToXValue(){let{options:t,xAxis:e}=this,i=t.pointPlacement;return"between"===i&&(i=e.reversed?-.5:.5),I(i)?i*(t.pointRange||e.pointRange):0}isPointInside(t){let{chart:e,xAxis:i,yAxis:s}=this,{plotX:r=-1,plotY:o=-1}=t;return o>=0&&o<=(s?s.len:e.plotHeight)&&r>=0&&r<=(i?i.len:e.plotWidth)}drawTracker(){let t=this,e=t.options,i=e.trackByArea,s=[].concat((i?t.areaPath:t.graphPath)||[]),r=t.chart,o=r.pointer,a=r.renderer,n=r.options.tooltip?.snap||0,h=()=>{e.enableMouseTracking&&r.hoverSeries!==t&&t.onMouseOver()},l="rgba(192,192,192,"+(g?1e-4:.002)+")",d=t.tracker;d?d.attr({d:s}):t.graph&&(t.tracker=d=a.path(s).attr({visibility:t.visible?"inherit":"hidden",zIndex:2}).addClass(i?"highcharts-tracker-area":"highcharts-tracker-line").add(t.group),r.styledMode||d.attr({"stroke-linecap":"round","stroke-linejoin":"round",stroke:l,fill:i?l:"none","stroke-width":t.graph.strokeWidth()+(i?0:2*n)}
24987),[t.tracker,t.markerGroup,t.dataLabelsGroup].forEach(t=>{t&&(t.addClass("highcharts-tracker").on("mouseover",h).on("mouseout",t=>{o?.onTrackerMouseOut(t)}),e.cursor&&!r.styledMode&&t.css({cursor:e.cursor}),t.on("touchstart",h))})),P(this,"afterDrawTracker")}addPoint(t,e,i,s,r){let o,a;let n=this.options,h=this.data,l=this.chart,d=this.xAxis,c=d&&d.hasNames&&d.names,p=n.data,u=this.xData;e=z(e,!0);let g={series:this};this.pointClass.prototype.applyOptions.apply(g,[t]);let f=g.x;if(a=u.length,this.requireSorting&&f<u[a-1])for(o=!0;a&&u[a-1]>f;)a--;this.updateParallelArrays(g,"splice",[a,0,0]),this.updateParallelArrays(g,a),c&&g.name&&(c[f]=g.name),p.splice(a,0,t),(o||this.processedData)&&(this.data.splice(a,0,null),this.processData()),"point"===n.legendType&&this.generatePoints(),i&&(h[0]&&h[0].remove?h[0].remove(!1):(h.shift(),this.updateParallelArrays(g,"shift"),p.shift())),!1!==r&&P(this,"addPoint",{point:g}),this.isDirty=!0,this.isDirtyData=!0,e&&l.redraw(s)}removePoint(t,e,i){let s=this,r=s.data,o=r[t],a=s.points,n=s.chart,h=function(){a&&a.length===r.length&&a.splice(t,1),r.splice(t,1),s.options.data.splice(t,1),s.updateParallelArrays(o||{series:s},"splice",[t,1]),o&&o.destroy(),s.isDirty=!0,s.isDirtyData=!0,e&&n.redraw()};c(i,n),e=z(e,!0),o?o.firePointEvent("remove",null,h):h()}remove(t,e,i,s){let r=this,o=r.chart;function a(){r.destroy(s),o.isDirtyLegend=o.isDirtyBox=!0,o.linkSeries(s),z(t,!0)&&o.redraw(e)}!1!==i?P(r,"remove",null,a):a()}update(t,e){P(this,"update",{options:t=C(t,this.userOptions)});let i=this,s=i.chart,r=i.userOptions,o=i.initialType||i.type,a=s.options.plotOptions,n=m[o].prototype,h=i.finishedAnimating&&{animation:!1},l={},d,c,p=["colorIndex","eventOptions","navigatorSeries","symbolIndex","baseSeries"],u=t.type||r.type||s.options.chart.type,g=!(this.hasDerivedData||u&&u!==this.type||void 0!==t.pointStart||void 0!==t.pointInterval||void 0!==t.relativeXValue||t.joinBy||t.mapData||["dataGrouping","pointStart","pointInterval","pointIntervalUnit","keys"].some(t=>i.hasOptionChanged(t)));u=u||o,g&&(p.push("data","isDirtyData","isDirtyCanvas","points","processedData","processedXData","processedYData","xIncrement","cropped","_hasPointMarkers","hasDataLabels","nodes","layout","level","mapMap","mapData","minY","maxY","minX","maxX","transformGroups"),!1!==t.visible&&p.push("area","graph"),i.parallelArrays.forEach(function(t){p.push(t+"Data")}),t.data&&(t.dataSorting&&T(i.options.dataSorting,t.dataSorting),this.setData(t.data,!1))),t=B(r,{index:void 0===r.index?i.index:r.index,pointStart:a?.series?.pointStart??r.pointStart??i.xData?.[0]},!g&&{data:i.options.data},t,h),g&&t.data&&(t.data=i.options.data),(p=["group","markerGroup","dataLabelsGroup","transformGroup"].concat(p)).forEach(function(t){p[t]=i[t],delete i[t]});let f=!1;if(m[u]){if(f=u!==i.type,i.remove(!1,!1,!1,!0),f){if(s.propFromSeries(),Object.setPrototypeOf)Object.setPrototypeOf(i,m[u].prototype);else{let t=Object.hasOwnProperty.call(i,"hcEvents")&&i.hcEvents;for(c in n)i[c]=void 0;T(i,m[u].prototype),t?i.hcEvents=t:delete i.hcEvents}}}else w(17,!0,s,{missingModuleFor:u});if(p.forEach(function(t){i[t]=p[t]}),i.init(s,t),g&&this.points)for(let t of(!1===(d=i.options).visible?(l.graphic=1,l.dataLabel=1):(this.hasMarkerChanged(d,r)&&(l.graphic=1),i.hasDataLabels?.()||(l.dataLabel=1)),this.points))t&&t.series&&(t.resolveColor(),Object.keys(l).length&&t.destroyElements(l),!1===d.showInLegend&&t.legendItem&&s.legend.destroyItem(t));i.initialType=o,s.linkSeries(),s.setSortedData(),f&&i.linkedSeries.length&&(i.isDirtyData=!0),P(this,"afterUpdate"),z(e,!0)&&s.redraw(!!g&&void 0)}setName(t){this.name=this.options.name=this.userOptions.name=t,this.chart.isDirtyLegend=!0}hasOptionChanged(t){let e=this.chart,i=this.options[t],s=e.options.plotOptions,r=this.userOptions[t],o=z(s?.[this.type]?.[t],s?.series?.[t]);return r&&!S(o)?i!==r:i!==z(o,i)}onMouseOver(){let t=this.chart,e=t.hoverSeries,i=t.pointer;i?.setHoverChartIndex(),e&&e!==this&&e.onMouseOut(),this.options.events.mouseOver&&P(this,"mouseOver"),this.setState("hover"),t.hoverSeries=this}onMouseOut(){let t=this.options,e=this.chart,i=e.tooltip,s=e.hoverPoint;
24987e.hoverSeries=null,s&&s.onMouseOut(),this&&t.events.mouseOut&&P(this,"mouseOut"),i&&!this.stickyTracking&&(!i.shared||this.noSharedTooltip)&&i.hide(),e.series.forEach(function(t){t.setState("",!0)})}setState(t,e){let i=this,s=i.options,r=i.graph,o=s.inactiveOtherPoints,a=s.states,n=z(a[t||"normal"]&&a[t||"normal"].animation,i.chart.options.chart.animation),h=s.lineWidth,l=s.opacity;if(t=t||"",i.state!==t&&([i.group,i.markerGroup,i.dataLabelsGroup].forEach(function(e){e&&(i.state&&e.removeClass("highcharts-series-"+i.state),t&&e.addClass("highcharts-series-"+t))}),i.state=t,!i.chart.styledMode)){if(a[t]&&!1===a[t].enabled)return;if(t&&(h=a[t].lineWidth||h+(a[t].lineWidthPlus||0),l=z(a[t].opacity,l)),r&&!r.dashstyle&&I(h))for(let t of[r,...this.zones.map(t=>t.graph)])t?.animate({"stroke-width":h},n);o||[i.group,i.markerGroup,i.dataLabelsGroup,i.labelBySeries].forEach(function(t){t&&t.animate({opacity:l},n)})}e&&o&&i.points&&i.setAllPointsToState(t||void 0)}setAllPointsToState(t){this.points.forEach(function(e){e.setState&&e.setState(t)})}setVisible(t,e){let i=this,s=i.chart,r=s.options.chart.ignoreHiddenSeries,o=i.visible;i.visible=t=i.options.visible=i.userOptions.visible=void 0===t?!o:t;let a=t?"show":"hide";["group","dataLabelsGroup","markerGroup","tracker","tt"].forEach(t=>{i[t]?.[a]()}),(s.hoverSeries===i||s.hoverPoint?.series===i)&&i.onMouseOut(),i.legendItem&&s.legend.colorizeItem(i,t),i.isDirty=!0,i.options.stacking&&s.series.forEach(t=>{t.options.stacking&&t.visible&&(t.isDirty=!0)}),i.linkedSeries.forEach(e=>{e.setVisible(t,!1)}),r&&(s.isDirtyBox=!0),P(i,a),!1!==e&&s.redraw()}show(){this.setVisible(!0)}hide(){this.setVisible(!1)}select(t){this.selected=t=this.options.selected=void 0===t?!this.selected:t,this.checkbox&&(this.checkbox.checked=t),P(this,t?"select":"unselect")}shouldShowTooltip(t,e,i={}){return i.series=this,i.visiblePlotOnly=!0,this.chart.isInsidePlot(t,e,i)}drawLegendSymbol(t,e){r[this.options.legendSymbol||"rectangle"]?.call(this,t,e)}}return H.defaultOptions=a,H.types=n.seriesTypes,H.registerType=n.registerSeriesType,T(H.prototype,{axisTypes:["xAxis","yAxis"],coll:"series",colorCounter:0,directTouch:!1,invertible:!0,isCartesian:!0,kdAxisArray:["clientX","plotY"],parallelArrays:["x","y"],pointClass:o,requireSorting:!0,sorted:!0}),n.series=H,H}),i(e,"Core/Chart/Chart.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/Axis.js"],e["Core/Defaults.js"],e["Core/Templating.js"],e["Core/Foundation.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Time.js"],e["Core/Utilities.js"],e["Core/Renderer/HTML/AST.js"],e["Core/Axis/Tick.js"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u){let{animate:g,animObject:f,setAnimation:m}=t,{defaultOptions:x,defaultTime:y}=i,{numberFormat:b}=s,{registerEventOptions:v}=r,{charts:S,doc:k,marginNames:C,svg:M,win:w}=o,{seriesTypes:T}=h,{addEvent:A,attr:P,createElement:L,css:O,defined:D,diffObjects:E,discardElement:I,erase:j,error:B,extend:R,find:z,fireEvent:N,getStyle:W,isArray:G,isNumber:H,isObject:X,isString:F,merge:Y,objectEach:U,pick:V,pInt:$,relativeLength:Z,removeEvent:_,splat:q,syncTimeout:K,uniqueKey:J}=c;class Q{static chart(t,e,i){return new Q(t,e,i)}constructor(t,e,i){this.sharedClips={};let s=[...arguments];(F(t)||t.nodeName)&&(this.renderTo=s.shift()),this.init(s[0],s[1])}setZoomOptions(){let t=this.options.chart,e=t.zooming;this.zooming={...e,type:V(t.zoomType,e.type),key:V(t.zoomKey,e.key),pinchType:V(t.pinchType,e.pinchType),singleTouch:V(t.zoomBySingleTouch,e.singleTouch,!1),resetButton:Y(e.resetButton,t.resetZoomButton)}}init(t,e){N(this,"init",{args:arguments},function(){let i=Y(x,t),s=i.chart;this.userOptions=R({},t),this.margin=[],this.spacing=[],this.labelCollectors=[],this.callback=e,this.isResizing=0,this.options=i,this.axes=[],this.series=[],this.time=t.time&&Object.keys(t.time).length?new d(t.time):o.time,this.numberFormatter=s.numberFormatter||b,this.styledMode=s.styledMode,this.hasCartesianSeries=s.showAxes,this.index=S.length,S.push(this),o.chartCount++,v(this,s),this.xAxis=[],this.yAxis=[],this.pointCount=this.colorCounter=this.symbolCounter=0,this.setZoomOptions(),N(this,"afterInit"),this.firstRen
24987der()})}initSeries(t){let e=this.options.chart,i=t.type||e.type,s=T[i];s||B(17,!0,this,{missingModuleFor:i});let r=new s;return"function"==typeof r.init&&r.init(this,t),r}setSortedData(){this.getSeriesOrderByLinks().forEach(function(t){t.points||t.data||!t.enabledDataSorting||t.setData(t.options.data,!1)})}getSeriesOrderByLinks(){return this.series.concat().sort(function(t,e){return t.linkedSeries.length||e.linkedSeries.length?e.linkedSeries.length-t.linkedSeries.length:0})}orderItems(t,e=0){let i=this[t],s=this.options[t]=q(this.options[t]).slice(),r=this.userOptions[t]=this.userOptions[t]?q(this.userOptions[t]).slice():[];if(this.hasRendered&&(s.splice(e),r.splice(e)),i)for(let t=e,o=i.length;t<o;++t){let e=i[t];e&&(e.index=t,e instanceof n&&(e.name=e.getName()),e.options.isInternal||(s[t]=e.options,r[t]=e.userOptions))}}isInsidePlot(t,e,i={}){let{inverted:s,plotBox:r,plotLeft:o,plotTop:a,scrollablePlotBox:n}=this,{scrollLeft:h=0,scrollTop:l=0}=i.visiblePlotOnly&&this.scrollablePlotArea?.scrollingContainer||{},d=i.series,c=i.visiblePlotOnly&&n||r,p=i.inverted?e:t,u=i.inverted?t:e,g={x:p,y:u,isInsidePlot:!0,options:i};if(!i.ignoreX){let t=d&&(s&&!this.polar?d.yAxis:d.xAxis)||{pos:o,len:1/0},e=i.paneCoordinates?t.pos+p:o+p;e>=Math.max(h+o,t.pos)&&e<=Math.min(h+o+c.width,t.pos+t.len)||(g.isInsidePlot=!1)}if(!i.ignoreY&&g.isInsidePlot){let t=!s&&i.axis&&!i.axis.isXAxis&&i.axis||d&&(s?d.xAxis:d.yAxis)||{pos:a,len:1/0},e=i.paneCoordinates?t.pos+u:a+u;e>=Math.max(l+a,t.pos)&&e<=Math.min(l+a+c.height,t.pos+t.len)||(g.isInsidePlot=!1)}return N(this,"afterIsInsidePlot",g),g.isInsidePlot}redraw(t){N(this,"beforeRedraw");let e=this.hasCartesianSeries?this.axes:this.colorAxis||[],i=this.series,s=this.pointer,r=this.legend,o=this.userOptions.legend,a=this.renderer,n=a.isHidden(),h=[],l,d,c,p=this.isDirtyBox,u=this.isDirtyLegend,g;for(a.rootFontSize=a.boxWrapper.getStyle("font-size"),this.setResponsive&&this.setResponsive(!1),m(!!this.hasRendered&&t,this),n&&this.temporaryDisplay(),this.layOutTitles(!1),c=i.length;c--;)if(((g=i[c]).options.stacking||g.options.centerInCategory)&&(d=!0,g.isDirty)){l=!0;break}if(l)for(c=i.length;c--;)(g=i[c]).options.stacking&&(g.isDirty=!0);i.forEach(function(t){t.isDirty&&("point"===t.options.legendType?("function"==typeof t.updateTotals&&t.updateTotals(),u=!0):o&&(o.labelFormatter||o.labelFormat)&&(u=!0)),t.isDirtyData&&N(t,"updatedData")}),u&&r&&r.options.enabled&&(r.render(),this.isDirtyLegend=!1),d&&this.getStacks(),e.forEach(function(t){t.updateNames(),t.setScale()}),this.getMargins(),e.forEach(function(t){t.isDirty&&(p=!0)}),e.forEach(function(t){let e=t.min+","+t.max;t.extKey!==e&&(t.extKey=e,h.push(function(){N(t,"afterSetExtremes",R(t.eventArgs,t.getExtremes())),delete t.eventArgs})),(p||d)&&t.redraw()}),p&&this.drawChartBox(),N(this,"predraw"),i.forEach(function(t){(p||t.isDirty)&&t.visible&&t.redraw(),t.isDirtyData=!1}),s&&s.reset(!0),a.draw(),N(this,"redraw"),N(this,"render"),n&&this.temporaryDisplay(!0),h.forEach(function(t){t.call()})}get(t){let e=this.series;function i(e){return e.id===t||e.options&&e.options.id===t}let s=z(this.axes,i)||z(this.series,i);for(let t=0;!s&&t<e.length;t++)s=z(e[t].points||[],i);return s}getAxes(){let t=this.userOptions;for(let i of(N(this,"getAxes"),["xAxis","yAxis"]))for(let s of t[i]=q(t[i]||{}))new e(this,s,i);N(this,"afterGetAxes")}getSelectedPoints(){return this.series.reduce((t,e)=>(e.getPointsCollection().forEach(e=>{V(e.selectedStaging,e.selected)&&t.push(e)}),t),[])}getSelectedSeries(){return this.series.filter(function(t){return t.selected})}setTitle(t,e,i){this.applyDescription("title",t),this.applyDescription("subtitle",e),this.applyDescription("caption",void 0),this.layOutTitles(i)}applyDescription(t,e){let i=this,s=this.options[t]=Y(this.options[t],e),r=this[t];r&&e&&(this[t]=r=r.destroy()),s&&!r&&((r=this.renderer.text(s.text,0,0,s.useHTML).attr({align:s.align,class:"highcharts-"+t,zIndex:s.zIndex||4}).add()).update=function(e,s){i.applyDescription(t,e),i.layOutTitles(s)},this.styledMode||r.css(R("title"===t?{fontSize:this.options.isStock?"1em":"1.2em"}:{},s.style)),this[t]=r)}layOutTitles(t=!0){let e=[0,0,0],i=this.renderer,s=this.spacingBox;["title","subtitle","caption"].forEach(function(t){let r=this[t],o=this.options[t],a=o.verticalAlign||"top",n="title"===t?"top"===a?-3:0:"top"===a?e[0]+2:0;if(r){r.css({width:(o.width||s.width+(o.widthAdjust||0))+"px"});let t=i.fontMetrics(r).b,h=Math.round(r.getBBox(o.useHTML).height);r.align(R({y:"bottom"===a?t:n+t,height:h},o),!1,"spacingBox"),o.floating||("top"===a?e[0]=Math.ceil(e[0]+h):"bottom"===a&&(e[2]=Math.ceil(e[2]+h)))}},this),e[0]&&"top"===(this.options.title.verticalAlign||"top")&&(e[0]+=this.options.title.margin),e[2]&&"bottom"===this.options.caption.verticalAlign&&(e[2]+=this.options.caption.margin);let r=!this.titleOffset||this.titleOffset.join(",")!==e.join(",");this.titleOffset=e,N(this,"afterLayOutTitles"),!this.isDirtyBox&&r&&(this.isDirtyBox=this.isDirtyLegend=r,this.hasRendered&&t&&this.isDirtyBox&&this.redraw())}getContainerBox(){return{width:W(this.renderTo,"width",!0)||0,height:W(this.renderTo,"height",!0)||0}}getChartSize(){let t=this.options.chart,e=t.width,i=t.height,s=this.getContainerBox();
24987this.chartWidth=Math.max(0,e||s.width||600),this.chartHeight=Math.max(0,Z(i,this.chartWidth)||(s.height>1?s.height:400)),this.containerBox=s}temporaryDisplay(t){let e=this.renderTo,i;if(t)for(;e&&e.style;)e.hcOrigStyle&&(O(e,e.hcOrigStyle),delete e.hcOrigStyle),e.hcOrigDetached&&(k.body.removeChild(e),e.hcOrigDetached=!1),e=e.parentNode;else for(;e&&e.style&&(k.body.contains(e)||e.parentNode||(e.hcOrigDetached=!0,k.body.appendChild(e)),("none"===W(e,"display",!1)||e.hcOricDetached)&&(e.hcOrigStyle={display:e.style.display,height:e.style.height,overflow:e.style.overflow},i={display:"block",overflow:"hidden"},e!==this.renderTo&&(i.height=0),O(e,i),e.offsetWidth||e.style.setProperty("display","block","important")),(e=e.parentNode)!==k.body););}setClassName(t){this.container.className="highcharts-container "+(t||"")}getContainer(){let t=this.options,e=t.chart,i="data-highcharts-chart",s=J(),r,o=this.renderTo;o||(this.renderTo=o=e.renderTo),F(o)&&(this.renderTo=o=k.getElementById(o)),o||B(13,!0,this);let n=$(P(o,i));H(n)&&S[n]&&S[n].hasRendered&&S[n].destroy(),P(o,i,this.index),o.innerHTML=p.emptyHTML,e.skipClone||o.offsetWidth||this.temporaryDisplay(),this.getChartSize();let h=this.chartHeight,d=this.chartWidth;O(o,{overflow:"hidden"}),this.styledMode||(r=R({position:"relative",overflow:"hidden",width:d+"px",height:h+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)",userSelect:"none","touch-action":"manipulation",outline:"none"},e.style||{}));let c=L("div",{id:s},r,o);this.container=c,this.getChartSize(),d===this.chartWidth||(d=this.chartWidth,this.styledMode||O(c,{width:V(e.style?.width,d+"px")})),this.containerBox=this.getContainerBox(),this._cursor=c.style.cursor;let u=e.renderer||!M?a.getRendererType(e.renderer):l;if(this.renderer=new u(c,d,h,void 0,e.forExport,t.exporting&&t.exporting.allowHTML,this.styledMode),m(void 0,this),this.setClassName(e.className),this.styledMode)for(let e in t.defs)this.renderer.definition(t.defs[e]);else this.renderer.setStyle(e.style);this.renderer.chartIndex=this.index,N(this,"afterGetContainer")}getMargins(t){let{spacing:e,margin:i,titleOffset:s}=this;this.resetMargins(),s[0]&&!D(i[0])&&(this.plotTop=Math.max(this.plotTop,s[0]+e[0])),s[2]&&!D(i[2])&&(this.marginBottom=Math.max(this.marginBottom,s[2]+e[2])),this.legend&&this.legend.display&&this.legend.adjustMargins(i,e),N(this,"getMargins"),t||this.getAxisMargins()}getAxisMargins(){let t=this,e=t.axisOffset=[0,0,0,0],i=t.colorAxis,s=t.margin,r=function(t){t.forEach(function(t){t.visible&&t.getOffset()})};t.hasCartesianSeries?r(t.axes):i&&i.length&&r(i),C.forEach(function(i,r){D(s[r])||(t[i]+=e[r])}),t.setChartSize()}getOptions(){return E(this.userOptions,x)}reflow(t){let e=this,i=e.containerBox,s=e.getContainerBox();delete e.pointer?.chartPosition,!e.isPrinting&&!e.isResizing&&i&&s.width&&((s.width!==i.width||s.height!==i.height)&&(c.clearTimeout(e.reflowTimeout),e.reflowTimeout=K(function(){e.container&&e.setSize(void 0,void 0,!1)},t?100:0)),e.containerBox=s)}setReflow(){let t=this,e=e=>{t.options?.chart.reflow&&t.hasLoaded&&t.reflow(e)};if("function"==typeof ResizeObserver)new ResizeObserver(e).observe(t.renderTo);else{let t=A(w,"resize",e);A(this,"destroy",t)}}setSize(t,e,i){let s=this,r=s.renderer;s.isResizing+=1,m(i,s);let o=r.globalAnimation;s.oldChartHeight=s.chartHeight,s.oldChartWidth=s.chartWidth,void 0!==t&&(s.options.chart.width=t),void 0!==e&&(s.options.chart.height=e),s.getChartSize();let{chartWidth:a,chartHeight:n,scrollablePixelsX:h=0,scrollablePixelsY:l=0}=s;(s.isDirtyBox||a!==s.oldChartWidth||n!==s.oldChartHeight)&&(s.styledMode||(o?g:O)(s.container,{width:`${a+h}px`,height:`${n+l}px`},o),s.setChartSize(!0),r.setSize(a,n,o),s.axes.forEach(function(t){t.isDirty=!0,t.setScale()}),s.isDirtyLegend=!0,s.isDirtyBox=!0,s.layOutTitles(),s.getMargins(),s.redraw(o),s.oldCh
24987artHeight=void 0,N(s,"resize"),setTimeout(()=>{s&&N(s,"endResize",void 0,()=>{s.isResizing-=1})},f(o).duration))}setChartSize(t){let e,i,s,r;let o=this.inverted,a=this.renderer,n=this.chartWidth,h=this.chartHeight,l=this.options.chart,d=this.spacing,c=this.clipOffset;this.plotLeft=e=Math.round(this.plotLeft),this.plotTop=i=Math.round(this.plotTop),this.plotWidth=s=Math.max(0,Math.round(n-e-this.marginRight)),this.plotHeight=r=Math.max(0,Math.round(h-i-this.marginBottom)),this.plotSizeX=o?r:s,this.plotSizeY=o?s:r,this.plotBorderWidth=l.plotBorderWidth||0,this.spacingBox=a.spacingBox={x:d[3],y:d[0],width:n-d[3]-d[1],height:h-d[0]-d[2]},this.plotBox=a.plotBox={x:e,y:i,width:s,height:r};let p=2*Math.floor(this.plotBorderWidth/2),u=Math.ceil(Math.max(p,c[3])/2),g=Math.ceil(Math.max(p,c[0])/2);this.clipBox={x:u,y:g,width:Math.floor(this.plotSizeX-Math.max(p,c[1])/2-u),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(p,c[2])/2-g))},t||(this.axes.forEach(function(t){t.setAxisSize(),t.setAxisTranslation()}),a.alignElements()),N(this,"afterSetChartSize",{skipAxes:t})}resetMargins(){N(this,"resetMargins");let t=this,e=t.options.chart;["margin","spacing"].forEach(function(i){let s=e[i],r=X(s)?s:[s,s,s,s];["Top","Right","Bottom","Left"].forEach(function(s,o){t[i][o]=V(e[i+s],r[o])})}),C.forEach(function(e,i){t[e]=V(t.margin[i],t.spacing[i])}),t.axisOffset=[0,0,0,0],t.clipOffset=[0,0,0,0]}drawChartBox(){let t=this.options.chart,e=this.renderer,i=this.chartWidth,s=this.chartHeight,r=this.styledMode,o=this.plotBGImage,a=t.backgroundColor,n=t.plotBackgroun
24987dColor,h=t.plotBackgroundImage,l=this.plotLeft,d=this.plotTop,c=this.plotWidth,p=this.plotHeight,u=this.plotBox,g=this.clipRect,f=this.clipBox,m=this.chartBackground,x=this.plotBackground,y=this.plotBorder,b,v,S,k="animate";m||(this.chartBackground=m=e.rect().addClass("highcharts-background").add(),k="attr"),r?b=v=m.strokeWidth():(v=(b=t.borderWidth||0)+(t.shadow?8:0),S={fill:a||"none"},(b||m["stroke-width"])&&(S.stroke=t.borderColor,S["stroke-width"]=b),m.attr(S).shadow(t.shadow)),m[k]({x:v/2,y:v/2,width:i-v-b%2,height:s-v-b%2,r:t.borderRadius}),k="animate",x||(k="attr",this.plotBackground=x=e.rect().addClass("highcharts-plot-background").add()),x[k](u),!r&&(x.attr({fill:n||"none"}).shadow(t.plotShadow),h&&(o?(h!==o.attr("href")&&o.attr("href",h),o.animate(u)):this.plotBGImage=e.image(h,l,d,c,p).add())),g?g.animate({width:f.width,height:f.height}):this.clipRect=e.clipRect(f),k="animate",y||(k="attr",this.plotBorder=y=e.rect().addClass("highcharts-plot-border").attr({zIndex:1}).add()),r||y.attr({stroke:t.plotBorderColor,"stroke-width":t.plotBorderWidth||0,fill:"none"}),y[k](y.crisp({x:l,y:d,width:c,height:p},-y.strokeWidth())),this.isDirtyBox=!1,N(this,"afterDrawChartBox")}propFromSeries(){let t,e,i;let s=this,r=s.options.chart,o=s.options.series;["inverted","angular","polar"].forEach(function(a){for(e=T[r.type],i=r[a]||e&&e.prototype[a],t=o&&o.length;!i&&t--;)(e=T[o[t].type])&&e.prototype[a]&&(i=!0);s[a]=i})}linkSeries(t){let e=this,i=e.series;i.forEach(function(t){t.linkedSeries.length=0}),i.forEach(function(t){let{linkedTo:i}=t.options;if(F(i)){let s;(s=":previous"===i?e.series[t.index-1]:e.get(i))&&s.linkedParent!==t&&(s.linkedSeries.push(t),t.linkedParent=s,s.enabledDataSorting&&t.setDataSortingOptions(),t.visible=V(t.options.visible,s.options.visible,t.visible))}}),N(this,"afterLinkSeries",{isUpdating:t})}renderSeries(){this.series.forEach(function(t){t.translate(),t.render()})}render(){let t=this.axes,e=this.colorAxis,i=this.renderer,s=this.options.chart.axisLayoutRuns||2,r=t=>{t.forEach(t=>{t.visible&&t.render()})},o=0,a=!0,n,h=0;for(let e of(this.setTitle(),N(this,"beforeMargins"),this.getStacks?.(),this.getMargins(!0),this.setChartSize(),t)){let{options:t}=e,{labels:i}=t;if(e.horiz&&e.visible&&i.enabled&&e.series.length&&"colorAxis"!==e.coll&&!this.polar){o=t.tickLength,e.createGroups();let s=new u(e,0,"",!0),r=s.createLabel("x",i);if(s.destroy(),r&&V(i.reserveSpace,!H(t.crossing))&&(o=r.getBBox().height+i.distance+Math.max(t.offset||0,0)),o){r?.destroy();break}}}for(this.plotHeight=Math.max(this.plotHeight-o,0);(a||n||s>1)&&h<s;){let e=this.plotWidth,i=this.plotHeight;for(let e of t)0===h?e.setScale():(e.horiz&&a||!e.horiz&&n)&&e.setTickInterval(!0);0===h?this.getAxisMargins():this.getMargins(),a=e/this.plotWidth>(h?1:1.1),n=i/this.plotHeight>(h?1:1.05),h++}this.drawChartBox(),this.hasCartesianSeries?r(t):e&&e.length&&r(e),this.seriesGroup||(this.seriesGroup=i.g("series-group").attr({zIndex:3}).shadow(this.options.chart.seriesGroupShadow).add()),this.renderSeries(),this.addCredits(),this.setResponsive&&this.setResponsive(),this.hasRendered=!0}addCredits(t){let e=this,i=Y(!0,this.options.credits,t);i.enabled&&!this.credits&&(this.credits=this.renderer.text(i.text+(this.mapCredits||""),0,0).addClass("highcharts-credits").on("click",function(){i.href&&(w.location.href=i.href)}).attr({align:i.position.align,zIndex:8}),e.styledMode||this.credits.css(i.style),this.credits.add().align(i.position),this.credits.update=function(t){e.credits=e.credits.destroy(),e.addCredits(t)})}destroy(){let t;let e=this,i=e.axes,s=e.series,r=e.container,a=r&&r.parentNode;for(N(e,"destroy"),e.renderer.forExport?j(S,e):S[e.index]=void 0,o.chartCount--,e.renderTo.removeAttribute("data-highcharts-chart"),_(e),t=i.length;t--;)i[t]=i[t].destroy();for(this.scroller&&this.scroller.destroy&&this.scroller.destroy(),t=s.length;t--;)s[t]=s[t].destroy();
24987["title","subtitle","chartBackground","plotBackground","plotBGImage","plotBorder","seriesGroup","clipRect","credits","pointer","rangeSelector","legend","resetZoomButton","tooltip","renderer"].forEach(function(t){let i=e[t];i&&i.destroy&&(e[t]=i.destroy())}),r&&(r.innerHTML=p.emptyHTML,_(r),a&&I(r)),U(e,function(t,i){delete e[i]})}firstRender(){let t=this,e=t.options;t.getContainer(),t.resetMargins(),t.setChartSize(),t.propFromSeries(),t.getAxes();let i=G(e.series)?e.series:[];e.series=[],i.forEach(function(e){t.initSeries(e)}),t.linkSeries(),t.setSortedData(),N(t,"beforeRender"),t.render(),t.pointer?.getChartPosition(),t.renderer.imgCount||t.hasLoaded||t.onload(),t.temporaryDisplay(!0)}onload(){this.callbacks.concat([this.callback]).forEach(function(t){t&&void 0!==this.index&&t.apply(this,[this])},this),N(this,"load"),N(this,"render"),D(this.index)&&this.setReflow(),this.warnIfA11yModuleNotLoaded(),this.hasLoaded=!0}warnIfA11yModuleNotLoaded(){let{options:t,title:e}=this;!t||this.accessibility||(this.renderer.boxWrapper.attr({role:"img","aria-label":(e&&e.element.textContent||"").replace(/</g,"<")}),t.accessibility&&!1===t.accessibility.enabled||B('Highcharts warning: Consider including the "accessibility.js" module to make your chart more usable for people with disabilities. Set the "accessibility.enabled" option to false to remove this warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.',!1,this))}addSeries(t,e,i){let s;let r=this;return t&&(e=V(e,!0),N(r,"addSeries",{options:t},function(){s=r.initSeries(t),r.isDirtyLegend=!0,r.linkSeries(),s.enabledDataSorting&&s.setData(t.data,!1),N(r,"afterAddSeries",{series:s}),e&&r.redraw(i)})),s}addAxis(t,e,i,s){return this.createAxis(e?"xAxis":"yAxis",{axis:t,redraw:i,animation:s})}addColorAxis(t,e,i){return this.createAxis("colorAxis",{axis:t,redraw:e,animation:i})}createAxis(t,i){let s=new e(this,i.axis,t);return V(i.redraw,!0)&&this.redraw(i.animation),s}showLoading(t){let e=this,i=e.options,s=i.loading,r=function(){o&&O(o,{left:e.plotLeft+"px",top:e.plotTop+"px",width:e.plotWidth+"px",height:e.plotHeight+"px"})},o=e.loadingDiv,a=e.loadingSpan;o||(e.loadingDiv=o=L("div",{className:"highcharts-loading highcharts-loading-hidden"},null,e.container)),a||(e.loadingSpan=a=L("span",{className:"highcharts-loading-inner"},null,o),A(e,"redraw",r)),o.className="highcharts-loading",p.setElementHTML(a,V(t,i.lang.loading,"")),e.styledMode||(O(o,R(s.style,{zIndex:10})),O(a,s.labelStyle),e.loadingShown||(O(o,{opacity:0,display:""}),g(o,{opacity:s.style.opacity||.5},{duration:s.showDuration||0}))),e.loadingShown=!0,r()}hideLoading(){let t=this.options,e=this.loadingDiv;e&&(e.className="highcharts-loading highcharts-loading-hidden",this.styledMode||g(e,{opacity:0},{duration:t.loading.hideDuration||100,complete:function(){O(e,{display:"none"})}})),this.loadingShown=!1}update(t,e,i,s){let r,o,a;let n=this,h={credits:"addCredits",title:"setTitle",subtitle:"setSubtitle",caption:"setCaption"},l=t.isResponsiveOptions,c=[];N(n,"update",{options:t}),l||n.setResponsive(!1,!0),t=E(t,n.options),n.userOptions=Y(n.userOptions,t);let p=t.chart;p&&(Y(!0,n.options.chart,p),this.setZoomOptions(),"className"in p&&n.setClassName(p.className),("inverted"in p||"polar"in p||"type"in p)&&(n.propFromSeries(),r=!0),"alignTicks"in p&&(r=!0),"events"in p&&v(this,p),U(p,function(t,e){-1!==n.propsRequireUpdateSeries.indexOf("chart."+e)&&(o=!0),-1!==n.propsRequireDirtyBox.indexOf(e)&&(n.isDirtyBox=!0),-1===n.propsRequireReflow.indexOf(e)||(n.isDirtyBox=!0,l||(a=!0))}),!n.styledMode&&p.style&&n.renderer.setStyle(n.options.chart.style||{})),!n.styledMode&&t.colors&&(this.options.colors=t.colors),t.time&&(this.time===y&&(this.time=new d(t.time)),Y(!0,n.options.time,t.time)),U(t,function(e,i){n[i]&&"function"==typeof n[i].update?n[i].update(e,!1):"function"==typeof n[h[i]]?n[h[i]](e):"colors"!==i&&-1===n.collectionsWithUpdate.indexOf(i)&&Y(!0,n.options[i],t[i]),"chart"!==i&&-1!==n.propsRequireUpdateSeries.indexOf(i)&&(o=!0)}),this.collectionsWithUpdate.forEach(function(e){t[e]&&(q(t[e]).forEach(function(t,s){let r;let o=D(t.id);o&&(r=n.get(t.id)),!r&&n[e]&&(r=n[e][V(t.index,s)])&&(o&&D(r.options.id)||r.options.isInternal)&&(r=void 0),r&&r.coll===e&&(r.update(t,!1),i&&(r.touched=!0)),!r&&i&&n.collectionsWithInit[e]&&(n.collectionsWithInit[e][0].apply(n,[t].concat(n.collectionsWithInit[e][1]||[]).concat([!1])).touched=!0)}),i&&n[e].forEach(function(t){t.touched||t.options.isInternal?delete t.touched:c.push(t)}))}
24987),c.forEach(function(t){t.chart&&t.remove&&t.remove(!1)}),r&&n.axes.forEach(function(t){t.update({},!1)}),o&&n.getSeriesOrderByLinks().forEach(function(t){t.chart&&t.update({},!1)},this);let u=p&&p.width,g=p&&(F(p.height)?Z(p.height,u||n.chartWidth):p.height);a||H(u)&&u!==n.chartWidth||H(g)&&g!==n.chartHeight?n.setSize(u,g,s):V(e,!0)&&n.redraw(s),N(n,"afterUpdate",{options:t,redraw:e,animation:s})}setSubtitle(t,e){this.applyDescription("subtitle",t),this.layOutTitles(e)}setCaption(t,e){this.applyDescription("caption",t),this.layOutTitles(e)}showResetZoom(){let t=this,e=x.lang,i=t.zooming.resetButton,s=i.theme,r="chart"===i.relativeTo||"spacingBox"===i.relativeTo?null:"plotBox";function o(){t.zoomOut()}N(this,"beforeShowResetZoom",null,function(){t.resetZoomButton=t.renderer.button(e.resetZoom,null,null,o,s).attr({align:i.position.align,title:e.resetZoomTitle}).addClass("highcharts-reset-zoom").add().align(i.position,!1,r)}),N(this,"afterShowResetZoom")}zoomOut(){N(this,"selection",{resetSelection:!0},()=>this.transform({reset:!0,trigger:"zoom"}))}pan(t,e){let i=this,s="object"==typeof e?e:{enabled:e,type:"x"},r=s.type,o=r&&i[({x:"xAxis",xy:"axes",y:"yAxis"})[r]].filter(t=>t.options.panningEnabled&&!t.options.isInternal),a=i.options.chart;a?.panning&&(a.panning=s),N(this,"pan",{originalEvent:t},()=>{i.transform({axes:o,event:t,to:{x:t.chartX-(i.mouseDownX||0),y:t.chartY-(i.mouseDownY||0)},trigger:"pan"}),O(i.container,{cursor:"move"})})}transform(t){let{axes:e=this.axes,event:i,from:s={},reset:r,selection:o,to:a={},trigger:n}=t,{inverted:h,resetZoomButton:l}=this,d=!1,c;for(let t of(this.hoverPoints?.forEach(t=>t.setState()),e)){let{horiz:e,len:l,minPointOffset:p=0,options:u,reversed:g}=t,f=e?"width":"height",m=e?"x":"y",x=a[f]||t.len,y=s[f]||t.len,b=10>Math.abs(x)?1:x/y,v=(s[m]||0)+y/2-t.pos,S=v-((a[m]??t.pos)+x/2-t.pos)/b,k=g&&!h||!g&&h?-1:1;if(!r&&(v<0||v>t.len))continue;let C=t.toValue(S,!0)+p*k,M=t.toValue(S+l/b,!0)-(p*k||0),w=t.allExtremes;if(C>M&&([C,M]=[M,C]),1===b&&!r&&"yAxis"===t.coll&&!w){for(let e of t.series){let t=e.getExtremes(e.getProcessedData(!0).yData,!0);w??(w={dataMin:Number.MAX_VALUE,dataMax:-Number.MAX_VALUE}),H(t.dataMin)&&H(t.dataMax)&&(w.dataMin=Math.min(t.dataMin,w.dataMin),w.dataMax=Math.max(t.dataMax,w.dataMax))}t.allExtremes=w}let{dataMin:T,dataMax:A,min:P,max:L}=R(t.getExtremes(),w||{}),O=T??u.min,E=A??u.max,I=M-C,j=t.categories?0:Math.min(I,E-O),B=O-j*(D(u.min)?0:u.minPadding),z=E+j*(D(u.max)?0:u.maxPadding),N=t.allowZoomOutside||1===b||"zoom"!==n&&b>1,W=Math.min(u.min??B,B,N?P:B),G=Math.max(u.max??z,z,N?L:z);(!t.isOrdinal||1!==b||r)&&(C<W&&(C=W,b>=1&&(M=C+I)),M>G&&(M=G,b>=1&&(C=M-I)),(r||t.series.length&&(C!==P||M!==L)&&C>=W&&M<=G)&&(o?o[t.coll].push({axis:t,min:C,max:M}):(t.isPanning="zoom"!==n,t.setExtremes(r?void 0:C,r?void 0:M,!1,!1,{move:S,trigger:n,scale:b}),!r&&(C>W||M<G)&&"mousewheel"!==n&&(c=!0)),d=!0),i&&(this[e?"mouseDownX":"mouseDownY"]=i[e?"chartX":"chartY"]))}return d&&(o?N(this,"selection",o,()=>{delete t.selection,t.trigger="zoom",this.transform(t)}):(c&&!l?this.showResetZoom():!c&&l&&(this.resetZoomButton=l.destroy()),this.redraw("zoom"===n&&(this.options.chart.animation??this.pointCount<100)))),d}}return R(Q.prototype,{callbacks:[],collectionsWithInit:{xAxis:[Q.prototype.addAxis,[!0]],yAxis:[Q.prototype.addAxis,[!1]],series:[Q.prototype.addSeries]},collectionsWithUpdate:["xAxis","yAxis","series"],propsRequireDirtyBox:["backgroundColor","borderColor","borderWidth","borderRadius","plotBackgroun
24987dColor","plotBackgroundImage","plotBorderColor","plotBorderWidth","plotShadow","shadow"],propsRequireReflow:["margin","marginTop","marginRight","marginBottom","marginLeft","spacing","spacingTop","spacingRight","spacingBottom","spacingLeft"],propsRequireUpdateSeries:["chart.inverted","chart.polar","chart.ignoreHiddenSeries","chart.type","colors","plotOptions","time","tooltip"]}),Q}),i(e,"Extensions/ScrollablePlotArea.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Globals.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){let{stop:r}=t,{composed:o}=e,{addEvent:a,createElement:n,css:h,defined:l,merge:d,pushUnique:c}=s;function p(){let t=this.scrollablePlotArea;(this.scrollablePixelsX||this.scrollablePixelsY)&&!t&&(this.scrollablePlotArea=t=new g(this)),t?.applyFixed()}function u(){this.chart.scrollablePlotArea&&(this.chart.scrollablePlotArea.isDirty=!0)}class g{static compose(t,e,i){c(o,this.compose)&&(a(t,"afterInit",u),a(e,"afterSetChartSize",t=>this.afterSetSize(t.target,t)),a(e,"render",p),a(i,"show",u))}static afterSetSize(t,e){let i,s,r;let{minWidth:o,minHeight:a}=t.options.chart.scrollablePlotArea||{},{clipBox:n,plotBox:h,inverted:c,renderer:p}=t;if(!p.forExport&&(o?(t.scrollablePixelsX=i=Math.max(0,o-t.chartWidth),i&&(t.scrollablePlotBox=d(t.plotBox),h.width=t.plotWidth+=i,n[c?"height":"width"]+=i,r=!0)):a&&(t.scrollablePixelsY=s=Math.max(0,a-t.chartHeight),l(s)&&(t.scrollablePlotBox=d(t.plotBox),h.height=t.plotHeight+=s,n[c?"width":"height"]+=s,r=!1)),l(r)&&!e.skipAxes))for(let e of t.axes)e.horiz===r&&(e.setAxisSize(),e.setAxisTranslation())}constructor(t){let e;let s=t.options.chart,r=i.getRendererType(),o=s.scrollablePlotArea||{},l=this.moveFixedElements.bind(this),d={WebkitOverflowScrolling:"touch",overflowX:"hidden",overflowY:"hidden"};t.scrollablePixelsX&&(d.overflowX="auto"),t.scrollablePixelsY&&(d.overflowY="auto"),this.chart=t;let c=this.parentDiv=n("div",{className:"highcharts-scrolling-parent"},{position:"relative"},t.renderTo),p=this.scrollingContainer=n("div",{className:"highcharts-scrolling"},d,c),u=this.innerContainer=n("div",{className:"highcharts-inner-container"},void 0,p),g=this.fixedDiv=n("div",{className:"highcharts-fixed"},{position:"absolute",overflow:"hidden",pointerEvents:"none",zIndex:(s.style?.zIndex||0)+2,top:0},void 0,!0),f=this.fixedRenderer=new r(g,t.chartWidth,t.chartHeight,s.style);this.mask=f.path().attr({fill:s.backgroundColor||"#fff","fill-opacity":o.opacity??.85,zIndex:-1}).addClass("highcharts-scrollable-mask").add(),p.parentNode.insertBefore(g,p),h(t.renderTo,{overflow:"visible"}),a(t,"afterShowResetZoom",l),a(t,"afterApplyDrilldown",l),a(t,"afterLayOutTitles",l),a(p,"scroll",()=>{let{pointer:i,hoverPoint:s}=t;i&&(delete i.chartPosition,s&&(e=s),i.runPointActions(void 0,e,!0))}),u.appendChild(t.container)}applyFixed(){let{chart:t,fixedRenderer:e,isDirty:i,scrollingContainer:s}=this,{axisOffset:o,chartWidth:a,chartHeight:n,container:d,plotHeight:c,plotLeft:p,plotTop:u,plotWidth:g,scrollablePixelsX:f=0,scrollablePixelsY:m=0}=t,{scrollPositionX:x=0,scrollPositionY:y=0}=t.options.chart.scrollablePlotArea||{},b=a+f,v=n+m;e.setSize(a,n),(i??!0)&&(this.isDirty=!1,this.moveFixedElements()),r(t.container),h(d,{width:`${b}px`,height:`${v}px`}),t.renderer.boxWrapper.attr({width:b,height:v,viewBox:[0,0,b,v].join(" ")}),t.chartBackground?.attr({width:b,height:v}),h(s,{width:`${a}px`,height:`${n}px`}),l(i)||(s.scrollLeft=f*x,s.scrollTop=m*y);let S=u-o[0]-1,k=p-o[3]-1,C=u+c+o[2]+1,M=p+g+o[1]+1,w=p+g-f,T=u+c-m,A=[["M",0,0]];f?A=[["M",0,S],["L",p-1,S],["L",p-1,C],["L",0,C],["Z"],["M",w,S],["L",a,S],["L",a,C],["L",w,C],["Z"]]:m&&(A=[["M",k,0],["L",k,u-1],["L",M,u-1],["L",M,0],["Z"],["M",k,T],["L",k,n],["L",M,n],["L",M,T],["Z"]]),"adjustHeight"!==t.redrawTrigger&&this.mask.attr({d:A})}moveFixedElements(){let t;let{container:e,inverted:i,scrollablePixelsX:s,scrollablePixelsY:r}=this.chart,o=this.fixedRenderer,a=[".highcharts-breadcrumbs-group",".highcharts-contextbutton",".highcharts-caption",".highcharts-credits",".highcharts-legend",".highcharts-legend-checkbox",".highcharts-navigator-series",".highcharts-navigator-xaxis",".highcharts-navigator-yaxis",".highcharts-navigator",".highcharts-reset-zoom",".highcharts-drillup-button",".highcharts-scrollbar",".highcharts-subtitle",".highcharts-title"];for(let n of(s&&!i?t=".highcharts-yaxis":s&&i?t=".highcharts-xaxis":r&&!i?t=".highcharts-xaxis":r&&i&&(t=".highcharts-yaxis"),t&&a.push(`${t}:not(.highcharts-radial-axis)`,`${t}-labels:not(.highcharts-radial-axis-labels)`),a))[].forEach.call(e.querySelectorAll(n),t=>
24987{(t.namespaceURI===o.SVG_NS?o.box:o.box.parentNode).appendChild(t),t.style.pointerEvents="auto"})}}return g}),i(e,"Core/Axis/Stacking/StackItem.js",[e["Core/Templating.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{format:s}=t,{series:r}=e,{destroyObjectProperties:o,fireEvent:a,isNumber:n,pick:h}=i;return class{constructor(t,e,i,s,r){let o=t.chart.inverted,a=t.reversed;this.axis=t;let n=this.isNegative=!!i!=!!a;this.options=e=e||{},this.x=s,this.total=null,this.cumulative=null,this.points={},this.hasValidPoints=!1,this.stack=r,this.leftCliff=0,this.rightCliff=0,this.alignOptions={align:e.align||(o?n?"left":"right":"center"),verticalAlign:e.verticalAlign||(o?"middle":n?"bottom":"top"),y:e.y,x:e.x},this.textAlign=e.textAlign||(o?n?"right":"left":"center")}destroy(){o(this,this.axis)}render(t){let e=this.axis.chart,i=this.options,r=i.format,o=r?s(r,this,e):i.formatter.call(this);if(this.label)this.label.attr({text:o,visibility:"hidden"});else{this.label=e.renderer.label(o,null,void 0,i.shape,void 0,void 0,i.useHTML,!1,"stack-labels");let s={r:i.borderRadius||0,text:o,padding:h(i.padding,5),visibility:"hidden"};e.styledMode||(s.fill=i.backgroundColor,s.stroke=i.borderColor,s["stroke-width"]=i.borderWidth,this.label.css(i.style||{})),this.label.attr(s),this.label.added||this.label.add(t)}this.label.labelrank=e.plotSizeY,a(this,"afterRender")}setOffset(t,e,i,s,o,l){let{alignOptions:d,axis:c,label:p,options:u,textAlign:g}=this,f=c.chart,m=this.getStackBox({xOffset:t,width:e,boxBottom:i,boxTop:s,defaultX:o,xAxis:l}),{verticalAlign:x}=d;if(p&&m){let t=p.getBBox(void 0,0),e=p.padding,i="justify"===h(u.overflow,"justify"),s;d.x=u.x||0,d.y=u.y||0;let{x:o,y:a}=this.adjustStackPosition({labelBox:t,verticalAlign:x,textAlign:g});m.x-=o,m.y-=a,p.align(d,!1,m),(s=f.isInsidePlot(p.alignAttr.x+d.x+o,p.alignAttr.y+d.y+a))||(i=!1),i&&r.prototype.justifyDataLabel.call(c,p,d,p.alignAttr,t,m),p.attr({x:p.alignAttr.x,y:p.alignAttr.y,rotation:u.rotation,rotationOriginX:t.width*({left:0,center:.5,right:1})[u.textAlign||"center"],rotationOriginY:t.height/2}),h(!i&&u.crop,!0)&&(s=n(p.x)&&n(p.y)&&f.isInsidePlot(p.x-e+(p.width||0),p.y)&&f.isInsidePlot(p.x+e,p.y)),p[s?"show":"hide"]()}a(this,"afterSetOffset",{xOffset:t,width:e})}adjustStackPosition({labelBox:t,verticalAlign:e,textAlign:i}){let s={bottom:0,middle:1,top:2,right:1,center:0,left:-1},r=s[e],o=s[i];return{x:t.width/2+t.width/2*o,y:t.height/2*r}}getStackBox(t){let e=this.axis,i=e.chart,{boxTop:s,defaultX:r,xOffset:o,width:a,boxBottom:l}=t,d=e.stacking.usePercentage?100:h(s,this.total,0),c=e.toPixels(d),p=t.xAxis||i.xAxis[0],u=h(r,p.translate(this.x))+o,g=Math.abs(c-e.toPixels(l||n(e.min)&&e.logarithmic&&e.logarithmic.lin2log(e.min)||0)),f=i.inverted,m=this.isNegative;return f?{x:(m?c:c-g)-i.plotLeft,y:p.height-u-a,width:g,height:a}:{x:u+p.transB-i.plotLeft,y:(m?c-g:c)-i.plotTop,width:a,height:g}}}}),i(e,"Core/Axis/Stacking/StackingAxis.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Axis/Axis.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){var o;let{getDeferredAnimation:a}=t,{series:{prototype:n}}=i,{addEvent:h,correctFloat:l,defined:d,destroyObjectProperties:c,fireEvent:p,isArray:u,isNumber:g,objectEach:f,pick:m}=r;function x(){let t=this.inverted;this.axes.forEach(t=>{t.stacking&&t.stacking.stacks&&t.hasVisibleSeries&&(t.stacking.oldStacks=t.stacking.stacks)}),this.series.forEach(e=>{let i=e.xAxis&&e.xAxis.options||{};e.options.stacking&&e.reserveSpace()&&(e.stackKey=[e.type,m(e.options.stack,""),t?i.top:i.left,t?i.height:i.width].join(","))})}function y(){let t=this.stacking;if(t){let e=t.stacks;f(e,(t,i)=>{c(t),delete e[i]}),t.stackTotalGroup?.destroy()}}function b(){this.stacking||(this.stacking=new w(this))}function v(t,e,i,s){return!d(t)||t.x!==e||s&&t.stackKey!==s?t={x:e,index:0,key:s,stackKey:s}:t.index++,t.key=[i,e,t.index].join(","),t}function S(){let t;let e=this,i=e.yAxis,s=e.stackKey||"",r=i.stacking.stacks,o=e.processedXData,a=e.options.stacking,n=e[a+"Stacker"];
24987n&&[s,"-"+s].forEach(i=>{let s=o.length,a,h,l;for(;s--;)a=o[s],t=e.getStackIndicator(t,a,e.index,i),h=r[i]?.[a],(l=h?.points[t.key||""])&&n.call(e,l,h,s)})}function k(t,e,i){let s=e.total?100/e.total:0;t[0]=l(t[0]*s),t[1]=l(t[1]*s),this.stackedYData[i]=t[1]}function C(t){(this.is("column")||this.is("columnrange"))&&(this.options.centerInCategory&&!this.options.stacking&&this.chart.series.length>1?n.setStackedPoints.call(this,t,"group"):t.stacking.resetStacks())}function M(t,e){let i,r,o,a,n,h,c,p,g;let f=e||this.options.stacking;if(!f||!this.reserveSpace()||(({group:"xAxis"})[f]||"yAxis")!==t.coll)return;let x=this.processedXData,y=this.processedYData,b=[],v=y.length,S=this.options,k=S.threshold||0,C=S.startFromThreshold?k:0,M=S.stack,w=e?`${this.type},${f}`:this.stackKey||"",T="-"+w,A=this.negStacks,P=t.stacking,L=P.stacks,O=P.oldStacks;for(P.stacksTouched+=1,c=0;c<v;c++){p=x[c],g=y[c],h=(i=this.getStackIndicator(i,p,this.index)).key||"",L[n=(r=A&&g<(C?0:k))?T:w]||(L[n]={}),L[n][p]||(O[n]?.[p]?(L[n][p]=O[n][p],L[n][p].total=null):L[n][p]=new s(t,t.options.stackLabels,!!r,p,M)),o=L[n][p],null!==g?(o.points[h]=o.points[this.index]=[m(o.cumulative,C)],d(o.cumulative)||(o.base=h),o.touched=P.stacksTouched,i.index>0&&!1===this.singleStacks&&(o.points[h][0]=o.points[this.index+","+p+",0"][0])):(delete o.points[h],delete o.points[this.index]);let e=o.total||0;"percent"===f?(a=r?w:T,e=A&&L[a]?.[p]?(a=L[a][p]).total=Math.max(a.total||0,e)+Math.abs(g)||0:l(e+(Math.abs(g)||0))):"group"===f?(u(g)&&(g=g[0]),null!==g&&e++):e=l(e+(g||0)),"group"===f?o.cumulative=(e||1)-1:o.cumulative=l(m(o.cumulative,C)+(g||0)),o.total=e,null!==g&&(o.points[h].push(o.cumulative),b[c]=o.cumulative,o.hasValidPoints=!0)}"percent"===f&&(P.usePercentage=!0),"group"!==f&&(this.stackedYData=b),P.oldStacks={}}class w{constructor(t){this.oldStacks={},this.stacks={},this.stacksTouched=0,this.axis=t}buildStacks(){let t,e;let i=this.axis,s=i.series,r="xAxis"===i.coll,o=i.options.reversedStacks,a=s.length;for(this.resetStacks(),this.usePercentage=!1,e=a;e--;)t=s[o?e:a-e-1],r&&t.setGroupedPoints(i),t.setStackedPoints(i);if(!r)for(e=0;e<a;e++)s[e].modifyStacks();p(i,"afterBuildStacks")}cleanStacks(){this.oldStacks&&(this.stacks=this.oldStacks,f(this.stacks,t=>{f(t,t=>{t.cumulative=t.total})}))}resetStacks(){f(this.stacks,t=>{f(t,(e,i)=>{g(e.touched)&&e.touched<this.stacksTouched?(e.destroy(),delete t[i]):(e.total=null,e.cumulative=null)})})}renderStackTotals(){let t=this.axis,e=t.chart,i=e.renderer,s=this.stacks,r=a(e,t.options.stackLabels?.animation||!1),o=this.stackTotalGroup=this.stackTotalGroup||i.g("stack-labels").attr({zIndex:6,opacity:0}).add();o.translate(e.plotLeft,e.plotTop),f(s,t=>{f(t,t=>{t.render(o)})}),o.animate({opacity:1},r)}}return(o||(o={})).compose=function(t,e,i){let s=e.prototype,r=i.prototype;s.getStacks||(h(t,"init",b),h(t,"destroy",y),s.getStacks=x,r.getStackIndicator=v,r.modifyStacks=S,r.percentStacker=k,r.setGroupedPoints=C,r.setStackedPoints=M)},o}),i(e,"Series/Line/LineSeries.js",[e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{defined:s,merge:r,isObject:o}=i;class a extends t{drawGraph(){let t=this.options,e=(this.gappedPath||this.getGraphPath).call(this),i=this.chart.styledMode;[this,...this.zones].forEach((s,a)=>{let n,h=s.graph,l=h?"animate":"attr",d=s.dashStyle||t.dashStyle;h?(h.endX=this.preventGraphAnimation?null:e.xMap,h.animate({d:e})):e.length&&(s.graph=h=this.chart.renderer.path(e).addClass("highcharts-graph"+(a?` highcharts-zone-graph-${a-1} `:" ")+(a&&s.className||"")).attr({zIndex:1}).add(this.group)),h&&!i&&(n={stroke:!a&&t.lineColor||s.color||this.color||"#cccccc","stroke-width":t.lineWidth||0,fill:this.fillGraph&&this.color||"none"},d?n.dashstyle=d:"square"!==t.linecap&&(n["stroke-linecap"]=n["stroke-linejoin"]="round"),h[l](n).shadow(a<2&&t.shadow&&r({filterUnits:"userSpaceOnUse"},o(t.shadow)?t.shadow:{}))),h&&(h.startX=e.xMap,h.isArea=e.isArea)})}getGraphPath(t,e,i){let r=this,o=r.options,a=[],n=[],h,l=o.step,d=(t=t||r.points).reversed;return d&&t.reverse(),(l=({right:1,center:2})[l]||l&&3)&&d&&(l=4-l),(t=this.getValidPoints(t,!1,!(o.connectNulls&&!e&&!i))).forEac
24987h(function(d,c){let p;let u=d.plotX,g=d.plotY,f=t[c-1],m=d.isNull||"number"!=typeof g;(d.leftCliff||f&&f.rightCliff)&&!i&&(h=!0),m&&!s(e)&&c>0?h=!o.connectNulls:m&&!e?h=!0:(0===c||h?p=[["M",d.plotX,d.plotY]]:r.getPointSpline?p=[r.getPointSpline(t,d,c)]:l?(p=1===l?[["L",f.plotX,g]]:2===l?[["L",(f.plotX+u)/2,f.plotY],["L",(f.plotX+u)/2,g]]:[["L",u,f.plotY]]).push(["L",u,g]):p=[["L",u,g]],n.push(d.x),l&&(n.push(d.x),2===l&&n.push(d.x)),a.push.apply(a,p),h=!1)}),a.xMap=n,r.graphPath=a,a}}return a.defaultOptions=r(t.defaultOptions,{legendSymbol:"lineMarker"}),e.registerSeriesType("line",a),a}),i(e,"Series/Area/AreaSeries.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{seriesTypes:{line:i}}=t,{extend:s,merge:r,objectEach:o,pick:a}=e;class n extends i{drawGraph(){this.areaPath=[],super.drawGraph.apply(this);let{areaPath:t,options:e}=this;[this,...this.zones].forEach((i,s)=>{let r={},o=i.fillColor||e.fillColor,a=i.area,n=a?"animate":"attr";a?(a.endX=this.preventGraphAnimation?null:t.xMap,a.animate({d:t})):(r.zIndex=0,(a=i.area=this.chart.renderer.path(t).addClass("highcharts-area"+(s?` highcharts-zone-area-${s-1} `:" ")+(s&&i.className||"")).add(this.group)).isArea=!0),this.chart.styledMode||(r.fill=o||i.color||this.color,r["fill-opacity"]=o?1:e.fillOpacity??.75,a.css({pointerEvents:this.stickyTracking?"none":"auto"})),a[n](r),a.startX=t.xMap,a.shiftUnit=e.step?2:1})}getGraphPath(t){let e,s,r;let o=i.prototype.getGraphPath,n=this.options,h=n.stacking,l=this.yAxis,d=[],c=[],p=this.index,u=l.stacking.stacks[this.stackKey],g=n.threshold,f=Math.round(l.getThreshold(n.threshold)),m=a(n.connectNulls,"percent"===h),x=function(i,s,r){let o=t[i],a=h&&u[o.x].points[p],n=o[r+"Null"]||0,m=o[r+"Cliff"]||0,x,y,b=!0;m||n?(x=(n?a[0]:a[1])+m,y=a[0]+m,b=!!n):!h&&t[s]&&t[s].isNull&&(x=y=g),void 0!==x&&(c.push({plotX:e,plotY:null===x?f:l.getThreshold(x),isNull:b,isCliff:!0}
24987),d.push({plotX:e,plotY:null===y?f:l.getThreshold(y),doCurve:!1}))};t=t||this.points,h&&(t=this.getStackPoints(t));for(let i=0,o=t.length;i<o;++i)h||(t[i].leftCliff=t[i].rightCliff=t[i].leftNull=t[i].rightNull=void 0),s=t[i].isNull,e=a(t[i].rectPlotX,t[i].plotX),r=h?a(t[i].yBottom,f):f,s&&!m||(m||x(i,i-1,"left"),s&&!h&&m||(c.push(t[i]),d.push({x:i,plotX:e,plotY:r})),m||x(i,i+1,"right"));let y=o.call(this,c,!0,!0);d.reversed=!0;let b=o.call(this,d,!0,!0),v=b[0];v&&"M"===v[0]&&(b[0]=["L",v[1],v[2]]);let S=y.concat(b);S.length&&S.push(["Z"]);let k=o.call(this,c,!1,m);return S.xMap=y.xMap,this.areaPath=S,k}getStackPoints(t){let e=this,i=[],s=[],r=this.xAxis,n=this.yAxis,h=n.stacking.stacks[this.stackKey],l={},d=n.series,c=d.length,p=n.options.reversedStacks?1:-1,u=d.indexOf(e);if(t=t||this.points,this.options.stacking){for(let e=0;e<t.length;e++)t[e].leftNull=t[e].rightNull=void 0,l[t[e].x]=t[e];o(h,function(t,e){null!==t.total&&s.push(e)}),s.sort(function(t,e){return t-e});let g=d.map(t=>t.visible);s.forEach(function(t,o){let f=0,m,x;if(l[t]&&!l[t].isNull)i.push(l[t]),[-1,1].forEach(function(i){let r=1===i?"rightNull":"leftNull",a=h[s[o+i]],n=0;if(a){let i=u;for(;i>=0&&i<c;){let s=d[i].index;!(m=a.points[s])&&(s===e.index?l[t][r]=!0:g[i]&&(x=h[t].points[s])&&(n-=x[1]-x[0])),i+=p}}l[t][1===i?"rightCliff":"leftCliff"]=n});else{let e=u;for(;e>=0&&e<c;){let i=d[e].index;if(m=h[t].points[i]){f=m[1];break}e+=p}f=a(f,0),f=n.translate(f,0,1,0,1),i.push({isNull:!0,plotX:r.translate(t,0,0,0,1),x:t,plotY:f,yBottom:f})}})}return i}}return n.defaultOptions=r(i.defaultOptions,{threshold:0,legendSymbol:"areaMarker"}),s(n.prototype,{singleStacks:!1}),t.registerSeriesType("area",n),n}),i(e,"Series/Spline/SplineSeries.js",[e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e){let{line:i}=t.seriesTypes,{merge:s,pick:r}=e;class o extends i{getPointSpline(t,e,i){let s,o,a,n;let h=e.plotX||0,l=e.plotY||0,d=t[i-1],c=t[i+1];function p(t){return t&&!t.isNull&&!1!==t.doCurve&&!e.isCliff}if(p(d)&&p(c)){let t=d.plotX||0,i=d.plotY||0,r=c.plotX||0,p=c.plotY||0,u=0;s=(1.5*h+t)/2.5,o=(1.5*l+i)/2.5,a=(1.5*h+r)/2.5,n=(1.5*l+p)/2.5,a!==s&&(u=(n-o)*(a-h)/(a-s)+l-n),o+=u,n+=u,o>i&&o>l?(o=Math.max(i,l),n=2*l-o):o<i&&o<l&&(o=Math.min(i,l),n=2*l-o),n>p&&n>l?(n=Math.max(p,l),o=2*l-n):n<p&&n<l&&(n=Math.min(p,l),o=2*l-n),e.rightContX=a,e.rightContY=n,e.controlPoints={low:[s,o],high:[a,n]}}let u=["C",r(d.rightContX,d.plotX,0),r(d.rightContY,d.plotY,0),r(s,h,0),r(o,l,0),h,l];return d.rightContX=d.rightContY=void 0,u}}return o.defaultOptions=s(i.defaultOptions),t.registerSeriesType("spline",o),o}),i(e,"Series/AreaSpline/AreaSplineSeries.js",[e["Series/Spline/SplineSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{area:s,area:{prototype:r}}=e.seriesTypes,{extend:o,merge:a}=i;class n extends t{}return n.defaultOptions=a(t.defaultOptions,s.defaultOptions),o(n.prototype,{getGraphPath:r.getGraphPath,getStackPoints:r.getStackPoints,drawGraph:r.drawGraph}),e.registerSeriesType("areaspline",n),n}),i(e,"Series/Column/ColumnSeriesDefaults.js",[],function(){return{borderRadius:3,centerInCategory:!1,groupPadding:.2,marker:null,pointPadding:.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{halo:!1,brightness:.1},select:{color:"#cccccc",borderColor:"#000000"}},dataLabels:{align:void 0,verticalAlign:void 0,y:void 0},startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0,borderColor:"#ffffff"}}),i(e,"Series/Column/ColumnSeries.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Color/Color.js"],e["Series/Column/ColumnSeriesDefaults.js"],e["Core/Globals.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a){let{animObject:n}=t,{parse:h}=e,{noop:l}=s,{clamp:d,defined:c,extend:p,fireEvent:u,isArray:g,isNumber:f,merge:m,pick:x,objectEach:y}=a;class b extends r{animate(t){let e,i;let s=this,r=this.yAxis,o=r.pos,a=s.options,h=this.chart.inverted,l={},c=h?"translateX":"translateY";t?(l.scaleY=.001,i=d(r.toPixels(a.threshold),o,o+r.len),h?l.translateX=i-r.len:l.translateY=i,s.clipBox&&s.setClip(),s.group.attr(l)):(e=Number(s.group.attr(c)),s.group.animate({scaleY:1},p(n(s.options.animation),{step:function(t,i){s.group&&(l[c]=e+i.pos*(o-e),s.group.attr(l))}})))}
24987init(t,e){super.init.apply(this,arguments);let i=this;(t=i.chart).hasRendered&&t.series.forEach(function(t){t.type===i.type&&(t.isDirty=!0)})}getColumnMetrics(){let t=this,e=t.options,i=t.xAxis,s=t.yAxis,r=i.options.reversedStacks,o=i.reversed&&!r||!i.reversed&&r,a={},n,h=0;!1===e.grouping?h=1:t.chart.series.forEach(function(e){let i;let r=e.yAxis,o=e.options;e.type===t.type&&e.reserveSpace()&&s.len===r.len&&s.pos===r.pos&&(o.stacking&&"group"!==o.stacking?(void 0===a[n=e.stackKey]&&(a[n]=h++),i=a[n]):!1!==o.grouping&&(i=h++),e.columnIndex=i)});let l=Math.min(Math.abs(i.transA)*(!i.brokenAxis?.hasBreaks&&i.ordinal?.slope||e.pointRange||i.closestPointRange||i.tickInterval||1),i.len),d=l*e.groupPadding,c=(l-2*d)/(h||1),p=Math.min(e.maxPointWidth||i.len,x(e.pointWidth,c*(1-2*e.pointPadding))),u=(t.columnIndex||0)+(o?1:0);return t.columnMetrics={width:p,offset:(c-p)/2+(d+u*c-l/2)*(o?-1:1),paddedWidth:c,columnCount:h},t.columnMetrics}crispCol(t,e,i,s){let r=this.borderWidth,o=-(r%2?.5:0),a=r%2?.5:1;this.options.crisp&&(i=Math.round(t+i)+o-(t=Math.round(t)+o));let n=Math.round(e+s)+a,h=.5>=Math.abs(e)&&n>.5;return s=n-(e=Math.round(e)+a),h&&s&&(e-=1,s+=1),{x:t,y:e,width:i,height:s}}adjustForMissingColumns(t,e,i,s){if(!i.isNull&&s.columnCount>1){let r=this.xAxis.series.filter(t=>t.visible).map(t=>t.index),o=0,a=0;y(this.xAxis.stacking?.stacks,t=>{if("number"==typeof i.x){let e=t[i.x.toString()];if(e&&g(e.points[this.index])){let t=Object.keys(e.points).filter(t=>!t.match(",")&&e.points[t]&&e.points[t].length>1).map(parseFloat).filter(t=>-1!==r.indexOf(t)).sort((t,e)=>e-t);o=t.indexOf(this.index),a=t.length}}}),o=this.xAxis.reversed?a-1-o:o;let n=(a-1)*s.paddedWidth+e;t=(i.plotX||0)+n/2-e-o*s.paddedWidth}return t}translate(){let t=this,e=t.chart,i=t.options,s=t.dense=t.closestPointRange*t.xAxis.transA<2,o=t.borderWidth=x(i.borderWidth,s?0:1),a=t.xAxis,n=t.yAxis,h=i.threshold,l=x(i.minPointLength,5),p=t.getColumnMetrics(),g=p.width,m=t.pointXOffset=p.offset,y=t.dataMin,b=t.dataMax,v=t.barW=Math.max(g,1+2*o),S=t.translatedThreshold=n.getThreshold(h);e.inverted&&(S-=.5),i.pointPadding&&(v=Math.ceil(v)),r.prototype.translate.apply(t),t.points.forEach(function(s){let r=x(s.yBottom,S),o=999+Math.abs(r),u=s.plotX||0,k=d(s.plotY,-o,n.len+o),C,M=Math.min(k,r),w=Math.max(k,r)-M,T=g,A=u+m,P=v;l&&Math.abs(w)<l&&(w=l,C=!n.reversed&&!s.negative||n.reversed&&s.negative,f(h)&&f(b)&&s.y===h&&b<=h&&(n.min||0)<h&&(y!==b||(n.max||0)<=h)&&(C=!C,s.negative=!s.negative),M=Math.abs(M-S)>l?r-l:S-(C?l:0)),c(s.options.pointWidth)&&(A-=Math.round(((T=P=Math.ceil(s.options.pointWidth))-g)/2)),i.centerInCategory&&!i.stacking&&(A=t.adjustForMissingColumns(A,T,s,p)),s.barX=A,s.pointWidth=T,s.tooltipPos=e.inverted?[d(n.len+n.pos-e.plotLeft-k,n.pos-e.plotLeft,n.len+n.pos-e.plotLeft),a.len+a.pos-e.plotTop-A-P/2,w]:[a.left-e.plotLeft+A+P/2,d(k+n.pos-e.plotTop,n.pos-e.plotTop,n.len+n.pos-e.plotTop),w],s.shapeType=t.pointClass.prototype.shapeType||"roundedRect",s.shapeArgs=t.crispCol(A,s.isNull?S:M,P,s.isNull?0:w)}),u(this,"afterColumnTranslate")}drawGraph(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")}pointAttribs(t,e){let i=this.options,s=this.pointAttrToOptions||{},r=s.stroke||"borderColor",o=s["stroke-width"]||"borderWidth",a,n,l,d=t&&t.color||this.color,c=t&&t[r]||i[r]||d,p=t&&t.options.dashStyle||i.dashStyle,u=t&&t[o]||i[o]||this[o]||0,g=x(t&&t.opacity,i.opacity,1);t&&this.zones.length&&(n=t.getZone(),d=t.options.color||n&&(n.color||t.nonZonedColor)||this.color,n&&(c=n.borderColor||c,p=n.dashStyle||p,u=n.borderWidth||u)),e&&t&&(l=(a=m(i.states[e],t.options.states&&t.options.states[e]||{})).brightness,d=a.color||void 0!==l&&h(d).brighten(a.brightness).get()||d,c=a[r]||c,u=a[o]||u,p=a.dashStyle||p,g=x(a.opacity,g));let f={fill:d,stroke:c,"stroke-width":u,opacity:g};return p&&(f.dashstyle=p),f}drawPoints(t=this.points){let e;let i=this,s=this.chart,r=i.options,o=s.renderer,a=r.animationLimit||250;t.forEach(function(t){let n=t.plotY,h=t.graphic,l=!!h,d=h&&s.pointCount<a?"animate":"attr";f(n)&&null!==t.y?(e=t.shapeArgs,h&&t.hasNewShapeType()&&(h=h.destroy()),i.enabledDataSorting&&(t.startXPos=i.xAxis.reversed?-(e&&e.width||0):i.xAxis.width),!h&&(t.graphic=h=o[t.shapeType](e).add(t.group||i.group),h&&i.enabledDataSorting&&s.hasRendered&&s.pointCount<a&&(h.attr({x:t.startXPos}),l=!0,d="animate")),h&&l&&h[d](m(e)),s.styledMode||h[d](i.pointAttribs(t,t.selected&&"select")).shadow(!1!==t.allowShadow&&r.shadow),h&&(h.addClass(t.getClassName(),!0),h.attr({visibility:t.visible?"inherit":"hidden"}))):h&&(t.graphic=h.destroy())})}drawTracker(t=this.points){let e;let i=this,s=i.chart,r=s.pointer,o=function(t){let e=r?.getPointFromEvent(t);r&&e&&i.options.enableMouseTracking&&(r.isDirectTouch=!0,e.onMouseOver(t))};t.forEach(function(t){e=g(t.dataLabels)?t.dataLabels:t.dataLabel?[t.dataLabel]:[],t.graphic&&(t.graphic.element.point=t),e.forEach(function(e){(e.div||e.element).point=t})}),i._hasTracking||(i.trackerGroups.forEach(function(t){i[t]&&(i[t].addClass("highcharts-tracker").on("mouseover",o).on("mouseout",function(t){r?.onTrackerMouseOut(t)}).on("touchstart",o),!s.styledMode&&i.options.cursor&&i[t].css({cursor:i.options.cursor}))}),i._hasTracking=!0),u(this,"afterDrawTracker")}remove(){let t=this,e=t.chart;
24987e.hasRendered&&e.series.forEach(function(e){e.type===t.type&&(e.isDirty=!0)}),r.prototype.remove.apply(t,arguments)}}return b.defaultOptions=m(r.defaultOptions,i),p(b.prototype,{directTouch:!0,getSymbol:l,negStacks:!0,trackerGroups:["group","dataLabelsGroup"]}),o.registerSeriesType("column",b),b}),i(e,"Core/Series/DataLabel.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Templating.js"],e["Core/Utilities.js"]],function(t,e,i){var s;let{getDeferredAnimation:r}=t,{format:o}=e,{defined:a,extend:n,fireEvent:h,isArray:l,isString:d,merge:c,objectEach:p,pick:u,pInt:g,splat:f}=i;return function(t){function e(){return v(this).some(t=>t?.enabled)}function i(t,e,i,s,r){let o=this.chart,h=this.isCartesian&&o.inverted,l=this.enabledDataSorting,d=t.plotX,p=t.plotY,g=i.rotation||0,f=a(d)&&a(p)&&o.isInsidePlot(d,Math.round(p),{inverted:h,paneCoordinates:!0,series:this}),m=0===g&&"justify"===u(i.overflow,l?"none":"justify"),x=this.visible&&!1!==t.visible&&a(d)&&(t.series.forceDL||l&&!m||f||u(i.inside,!!this.options.stacking)&&s&&o.isInsidePlot(d,h?s.x+1:s.y+s.height-1,{inverted:h,paneCoordinates:!0,series:this})),y=t.pos();if(x&&y){var b;let a=e.getBBox(),h=e.getBBox(void 0,0),d={right:1,center:.5}[i.align||0]||0,p={bottom:1,middle:.5}[i.verticalAlign||0]||0;if(s=n({x:y[0],y:Math.round(y[1]),width:0,height:0},s||{}),n(i,{width:a.width,height:a.height}),b=s,l&&this.xAxis&&!m&&this.setDataLabelStartPos(t,e,r,f,b),e.align(c(i,{width:h.width,height:h.height}),!1,s,!1),e.alignAttr.x+=d*(h.width-a.width),e.alignAttr.y+=p*(h.height-a.height),e[e.placed?"animate":"attr"]({x:e.alignAttr.x+(a.width-h.width)/2,y:e.alignAttr.y+(a.height-h.height)/2,rotationOriginX:(e.width||0)/2,rotationOriginY:(e.height||0)/2}),m&&s.height>=0)this.justifyDataLabel(e,i,e.alignAttr,a,s,r);else if(u(i.crop,!0)){let{x:t,y:i}=e.alignAttr;x=o.isInsidePlot(t,i,{paneCoordinates:!0,series:this})&&o.isInsidePlot(t+a.width-1,i+a.height-1,{paneCoordinates:!0,series:this})}i.shape&&!g&&e[r?"attr":"animate"]({anchorX:y[0],anchorY:y[1]})}r&&l&&(e.placed=!1),x||l&&!m?(e.show(),e.placed=!0):(e.hide(),e.placed=!1)}function s(){return this.plotGroup("dataLabelsGroup","data-labels",this.hasRendered?"inherit":"hidden",this.options.dataLabels.zIndex||6)}function m(t){let e=this.hasRendered||0,i=this.initDataLabelsGroup().attr({opacity:+e});return!e&&i&&(this.visible&&i.show(),this.options.animation?i.animate({opacity:1},t):i.attr({opacity:1})),i}function x(t){let e;t=t||this.points;let i=this,s=i.chart,n=i.options,l=s.renderer,{backgroundColor:c,plotBackgroun
24987dColor:m}=s.options.chart,x=l.getContrast(d(m)&&m||d(c)&&c||"#000000"),y=v(i),{animation:S,defer:k}=y[0],C=k?r(s,S,i):{defer:0,duration:0};h(this,"drawDataLabels"),i.hasDataLabels?.()&&(e=this.initDataLabels(C),t.forEach(t=>{let r=t.dataLabels||[];f(b(y,t.dlOptions||t.options?.dataLabels)).forEach((h,c)=>{let f=h.enabled&&(t.visible||t.dataLabelOnHidden)&&(!t.isNull||t.dataLabelOnNull)&&function(t,e){let i=e.filter;if(i){let e=i.operator,s=t[i.property],r=i.value;return">"===e&&s>r||"<"===e&&s<r||">="===e&&s>=r||"<="===e&&s<=r||"=="===e&&s==r||"==="===e&&s===r||"!="===e&&s!=r||"!=="===e&&s!==r}return!0}(t,h),{backgroundColor:m,borderColor:y,distance:b,style:v={}}=h,S,k,C,M,w={},T=r[c],A=!T,P;if(f&&(k=u(h[t.formatPrefix+"Format"],h.format),S=t.getLabelConfig(),C=a(k)?o(k,S,s):(h[t.formatPrefix+"Formatter"]||h.formatter).call(S,h),M=h.rotation,!s.styledMode&&(v.color=u(h.color,v.color,d(i.color)?i.color:void 0,"#000000"),"contrast"===v.color?("none"!==m&&(P=m),t.contrastColor=l.getContrast("auto"!==P&&P||t.color||i.color),v.color=P||!a(b)&&h.inside||0>g(b||0)||n.stacking?t.contrastColor:x):delete t.contrastColor,n.cursor&&(v.cursor=n.cursor)),w={r:h.borderRadius||0,rotation:M,padding:h.padding,zIndex:1},s.styledMode||(w.fill="auto"===m?t.color:m,w.stroke="auto"===y?t.color:y,w["stroke-width"]=h.borderWidth),p(w,(t,e)=>{void 0===t&&delete w[e]})),!T||f&&a(C)&&!!T.div==!!h.useHTML&&(T.rotation&&h.rotation||T.rotation===h.rotation)||(T=void 0,A=!0),f&&a(C)&&(T?w.text=C:(T=l.label(C,0,0,h.shape,void 0,void 0,h.useHTML,void 0,"data-label")).addClass(" highcharts-data-label-color-"+t.colorIndex+" "+(h.className||"")+(h.useHTML?" highcharts-tracker":"")),T)){T.options=h,T.attr(w),s.styledMode||T.css(v).shadow(h.shadow);let o=h[t.formatPrefix+"TextPath"]||h.textPath;o&&!h.useHTML&&(T.setTextPath(t.getDataLabelPath?.(T)||t.graphic,o),t.dataLabelPath&&!o.enabled&&(t.dataLabelPath=t.dataLabelPath.destroy())),T.added||T.add(e),i.alignDataLabel(t,T,h,void 0,A),T.isActive=!0,r[c]&&r[c]!==T&&r[c].destroy(),r[c]=T}});let h=r.length;for(;h--;)r[h]&&r[h].isActive?r[h].isActive=!1:(r[h]?.destroy(),r.splice(h,1));t.dataLabel=r[0],t.dataLabels=r})),h(this,"afterDrawDataLabels")}function y(t,e,i,s,r,o){let a=this.chart,n=e.align,h=e.verticalAlign,l=t.box?0:t.padding||0,{x:d=0,y:c=0}=e,p,u;return(p=(i.x||0)+l)<0&&("right"===n&&d>=0?(e.align="left",e.inside=!0):d-=p,u=!0),(p=(i.x||0)+s.width-l)>a.plotWidth&&("left"===n&&d<=0?(e.align="right",e.inside=!0):d+=a.plotWidth-p,u=!0),(p=i.y+l)<0&&("bottom"===h&&c>=0?(e.verticalAlign="top",e.inside=!0):c-=p,u=!0),(p=(i.y||0)+s.height-l)>a.plotHeight&&("top"===h&&c<=0?(e.verticalAlign="bottom",e.inside=!0):c+=a.plotHeight-p,u=!0),u&&(e.x=d,e.y=c,t.placed=!o,t.align(e,void 0,r)),u}function b(t,e){let i=[],s;if(l(t)&&!l(e))i=t.map(function(t){return c(t,e)});else if(l(e)&&!l(t))i=e.map(function(e){return c(t,e)});else if(l(t)||l(e)){if(l(t)&&l(e))for(s=Math.max(t.length,e.length);s--;)i[s]=c(t[s],e[s])}else i=c(t,e);return i}function v(t){let e=t.chart.options.plotOptions;return f(b(b(e?.series?.dataLabels,e?.[t.type]?.dataLabels),t.options.dataLabels))}function S(t,e,i,s,r){let o=this.chart,a=o.inverted,n=this.xAxis,h=n.reversed,l=((a?e.height:e.width)||0)/2,d=t.pointWidth,c=d?d/2:0;e.startXPos=a?r.x:h?-l-c:n.width-l+c,e.startYPos=a?h?this.yAxis.height-l+c:-l-c:r.y,s?"hidden"===e.visibility&&(e.show(),e.attr({opacity:0}).animate({opacity:1})):e.attr({opacity:1}).animate({opacity:0}
24987,void 0,e.hide),o.hasRendered&&(i&&e.attr({x:e.startXPos,y:e.startYPos}),e.placed=!0)}t.compose=function(t){let r=t.prototype;r.initDataLabels||(r.initDataLabels=m,r.initDataLabelsGroup=s,r.alignDataLabel=i,r.drawDataLabels=x,r.justifyDataLabel=y,r.setDataLabelStartPos=S,r.hasDataLabels=e)}}(s||(s={})),s}),i(e,"Series/Column/ColumnDataLabel.js",[e["Core/Series/DataLabel.js"],e["Core/Globals.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s){var r;let{composed:o}=e,{series:a}=i,{merge:n,pick:h,pushUnique:l}=s;return function(e){function i(t,e,i,s,r){let o=this.chart.inverted,l=t.series,d=(l.xAxis?l.xAxis.len:this.chart.plotSizeX)||0,c=(l.yAxis?l.yAxis.len:this.chart.plotSizeY)||0,p=t.dlBox||t.shapeArgs,u=h(t.below,t.plotY>h(this.translatedThreshold,c)),g=h(i.inside,!!this.options.stacking);if(p){if(s=n(p),!("allow"===i.overflow&&!1===i.crop)){s.y<0&&(s.height+=s.y,s.y=0);let t=s.y+s.height-c;t>0&&t<s.height&&(s.height-=t)}o&&(s={x:c-s.y-s.height,y:d-s.x-s.width,width:s.height,height:s.width}),g||(o?(s.x+=u?0:s.width,s.width=0):(s.y+=u?s.height:0,s.height=0))}i.align=h(i.align,!o||g?"center":u?"right":"left"),i.verticalAlign=h(i.verticalAlign,o||g?"middle":u?"top":"bottom"),a.prototype.alignDataLabel.call(this,t,e,i,s,r),i.inside&&t.contrastColor&&e.css({color:t.contrastColor})}e.compose=function(e){t.compose(a),l(o,"ColumnDataLabel")&&(e.prototype.alignDataLabel=i)}}(r||(r={})),r}),i(e,"Series/Bar/BarSeries.js",[e["Series/Column/ColumnSeries.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{extend:s,merge:r}=i;class o extends t{}return o.defaultOptions=r(t.defaultOptions,{}),s(o.prototype,{inverted:!0}),e.registerSeriesType("bar",o),o}),i(e,"Series/Scatter/ScatterSeriesDefaults.js",[],function(){return{lineWidth:0,findNearestPointBy:"xy",jitter:{x:0,y:0},marker:{enabled:!0},tooltip:{headerFormat:'<span style="color:{point.color}">â</span> <span style="font-size: 0.8em"> {series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}}}),i(e,"Series/Scatter/ScatterSeries.js",[e["Series/Scatter/ScatterSeriesDefaults.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i){let{column:s,line:r}=e.seriesTypes,{addEvent:o,extend:a,merge:n}=i;class h extends r{applyJitter(){let t=this,e=this.options.jitter,i=this.points.length;e&&this.points.forEach(function(s,r){["x","y"].forEach(function(o,a){let n,h="plot"+o.toUpperCase(),l,d,c;e[o]&&!s.isNull&&(n=t[o+"Axis"],c=e[o]*n.transA,n&&!n.isLog&&(l=Math.max(0,s[h]-c),d=Math.min(n.len,s[h]+c),s[h]=l+(d-l)*function(t){let e=1e4*Math.sin(t);return e-Math.floor(e)}(r+a*i),"x"===o&&(s.clientX=s.plotX)))})})}drawGraph(){this.options.lineWidth?super.drawGraph():this.graph&&(this.graph=this.graph.destroy())}}return h.defaultOptions=n(r.defaultOptions,t),a(h.prototype,{drawTracker:s.prototype.drawTracker,sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"]}),o(h,"afterTranslate",function(){this.applyJitter()}),e.registerSeriesType("scatter",h),h}),i(e,"Series/CenteredUtilities.js",[e["Core/Globals.js"],e["Core/Series/Series.js"],e["Core/Utilities.js"]],function(t,e,i){var s,r;let{deg2rad:o}=t,{fireEvent:a,isNumber:n,pick:h,relativeLength:l}=i;return(r=s||(s={})).getCenter=function(){let t=this.options,i=this.chart,s=2*(t.slicedOffset||0),r=i.plotWidth-2*s,o=i.plotHeight-2*s,d=t.center,c=Math.min(r,o),p=t.thickness,u,g=t.size,f=t.innerSize||0,m,x;"string"==typeof g&&(g=parseFloat(g)),"string"==typeof f&&(f=parseFloat(f));let y=[h(d[0],"50%"),h(d[1],"50%"),h(g&&g<0?void 0:t.size,"100%"),h(f&&f<0?void 0:t.innerSize||0,"0%")];for(!i.angular||this instanceof e||(y[3]=0),m=0;m<4;++m)x=y[m],u=m<2||2===m&&/%$/.test(x),y[m]=l(x,[r,o,c,y[2]][m])+(u?s:0);return y[3]>y[2]&&(y[3]=y[2]),n(p)&&2*p<y[2]&&p>0&&(y[3]=y[2]-2*p),a(this,"afterGetCenter",{positions:y}),y},r.getStartAndEndRadians=function(t,e){let i=n(t)?t:0,s=n(e)&&e>i&&e-i<360?e:i+360;return{start:o*(i+-90),end:o*(s+-90)}},s}),i(e,"Series/Pie/PiePoint.js",[e["Core/Animation/AnimationUtilities.js"],e["Core/Series/Point.js"],e["Core/Utilities.js"]],function(t,e,
24987i){let{setAnimation:s}=t,{addEvent:r,defined:o,extend:a,isNumber:n,pick:h,relativeLength:l}=i;class d extends e{getConnectorPath(t){let e=t.dataLabelPosition,i=t.options||{},s=i.connectorShape,r=this.connectorShapes[s]||s;return e&&r.call(this,{...e.computed,alignment:e.alignment},e.connectorPosition,i)||[]}getTranslate(){return this.sliced&&this.slicedTranslation||{translateX:0,translateY:0}}haloPath(t){let e=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(e.x,e.y,e.r+t,e.r+t,{innerR:e.r-1,start:e.start,end:e.end,borderRadius:e.borderRadius})}constructor(t,e,i){super(t,e,i),this.half=0,this.name??(this.name="Slice");let s=t=>{this.slice("select"===t.type)};r(this,"select",s),r(this,"unselect",s)}isValid(){return n(this.y)&&this.y>=0}setVisible(t,e=!0){t!==this.visible&&this.update({visible:t??!this.visible},e,void 0,!1)}slice(t,e,i){let r=this.series;s(i,r.chart),e=h(e,!0),this.sliced=this.options.sliced=t=o(t)?t:!this.sliced,r.options.data[r.data.indexOf(this)]=this.options,this.graphic&&this.graphic.animate(this.getTranslate())}}return a(d.prototype,{connectorShapes:{fixedOffset:function(t,e,i){let s=e.breakAt,r=e.touchingSliceAt,o=i.softConnector?["C",t.x+("left"===t.alignment?-5:5),t.y,2*s.x-r.x,2*s.y-r.y,s.x,s.y]:["L",s.x,s.y];return[["M",t.x,t.y],o,["L",r.x,r.y]]},straight:function(t,e){let i=e.touchingSliceAt;return[["M",t.x,t.y],["L",i.x,i.y]]},crookedLine:function(t,e,i){let{breakAt:s,touchingSliceAt:r}=e,{series:o}=this,[a,n,h]=o.center,d=h/2,{plotLeft:c,plotWidth:p}=o.chart,u="left"===t.alignment,{x:g,y:f}=t,m=s.x;if(i.crookDistance){let t=l(i.crookDistance,1);m=u?a+d+(p+c-a-d)*(1-t):c+(a-d)*t}else m=a+(n-f)*Math.tan((this.angle||0)-Math.PI/2);let x=[["M",g,f]];return(u?m<=g&&m>=s.x:m>=g&&m<=s.x)&&x.push(["L",m,f]),x.push(["L",s.x,s.y],["L",r.x,r.y]),x}}}),d}),i(e,"Series/Pie/PieSeriesDefaults.js",[],function(){return{borderRadius:3,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{connectorPadding:5,connectorShape:"crookedLine",crookDistance:void 0,distance:30,enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},softConnector:!0,x:0},fillColor:void 0,ignoreHiddenPoint:!0,inactiveOtherPoints:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,lineWidth:void 0,states:{hover:{brightness:.1}}}}),i(e,"Series/Pie/PieSeries.js",[e["Series/CenteredUtilities.js"],e["Series/Column/ColumnSeries.js"],e["Core/Globals.js"],e["Series/Pie/PiePoint.js"],e["Series/Pie/PieSeriesDefaults.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Renderer/SVG/Symbols.js"],e["Core/Utilities.js"]],function(t,e,i,s,r,o,a,n,h){let{getStartAndEndRadians:l}=t,{noop:d}=i,{clamp:c,extend:p,fireEvent:u,merge:g,pick:f}=h;class m extends o{animate(t){let e=this,i=e.points,s=e.startAngleRad;t||i.forEach(function(t){let i=t.graphic,r=t.shapeArgs;i&&r&&(i.attr({r:f(t.startR,e.center&&e.center[3]/2),start:s,end:s}),i.animate({r:r.r,start:r.start,end:r.end},e.options.animation))})}drawEmpty(){let t,e;let i=this.startAngleRad,s=this.endAngleRad,r=this.options;0===this.total&&this.center?(t=this.center[0],e=this.center[1],this.graph||(this.graph=this.chart.renderer.arc(t,e,this.center[1]/2,0,i,s).addClass("highcharts-empty-series").add(this.group)),this.graph.attr({d:n.arc(t,e,this.center[2]/2,0,{start:i,end:s,innerR:this.center[3]/2})}),this.chart.styledMode||this.graph.attr({"stroke-width":r.borderWidth,fill:r.fillColor||"none",stroke:r.color||"#cccccc"})):this.graph&&(this.graph=this.graph.destroy())}drawPoints(){let t=this.chart.renderer;this.points.forEach(function(e){e.graphic&&e.hasNewShapeType()&&(e.graphic=e.graphic.destroy()),e.graphic||(e.graphic=t[e.shapeType](e.shapeArgs).add(e.series.group),e.delayedRendering=!0)})}generatePoints(){super.generatePoints(),this.updateTotals()}getX(t,e,i,s){let r=this.center,o=this.radii?this.radii[i.index]||0:r[2]/2,a=s.dataLabelPosition,n=a?.distance||0,h=Math.asin(c((t-r[1])/(o+n),-1,1));return r[0]+Math.cos(h)*(o+n)*(e?-1:1)+(n>0?(e?-1:1)*(s.padding||0):0)}hasData(){return!!this.processedXData.length}redrawPoints(){let t,e,i,s;let r=this,o=r.chart;this.drawEmpty(),r.group&&!o.styledMode&&r.group.shadow(r.options.shadow),r.points.forEac
vendor: 3,064 bytes, line 24987
24987h(function(a){let n={};e=a.graphic,!a.isNull&&e?(s=a.shapeArgs,t=a.getTranslate(),o.styledMode||(i=r.pointAttribs(a,a.selected&&"select")),a.delayedRendering?(e.setRadialReference(r.center).attr(s).attr(t),o.styledMode||e.attr(i).attr({"stroke-linejoin":"round"}),a.delayedRendering=!1):(e.setRadialReference(r.center),o.styledMode||g(!0,n,i),g(!0,n,s,t),e.animate(n)),e.attr({visibility:a.visible?"inherit":"hidden"}),e.addClass(a.getClassName(),!0)):e&&(a.graphic=e.destroy())})}sortByAngle(t,e){t.sort(function(t,i){return void 0!==t.angle&&(i.angle-t.angle)*e})}translate(t){u(this,"translate"),this.generatePoints();let e=this.options,i=e.slicedOffset,s=l(e.startAngle,e.endAngle),r=this.startAngleRad=s.start,o=(this.endAngleRad=s.end)-r,a=this.points,n=e.ignoreHiddenPoint,h=a.length,d,c,p,g,f,m,x,y=0;for(t||(this.center=t=this.getCenter()),m=0;m<h;m++){x=a[m],d=r+y*o,x.isValid()&&(!n||x.visible)&&(y+=x.percentage/100),c=r+y*o;let e={x:t[0],y:t[1],r:t[2]/2,innerR:t[3]/2,start:Math.round(1e3*d)/1e3,end:Math.round(1e3*c)/1e3};x.shapeType="arc",x.shapeArgs=e,(p=(c+d)/2)>1.5*Math.PI?p-=2*Math.PI:p<-Math.PI/2&&(p+=2*Math.PI),x.slicedTranslation={translateX:Math.round(Math.cos(p)*i),translateY:Math.round(Math.sin(p)*i)},g=Math.cos(p)*t[2]/2,f=Math.sin(p)*t[2]/2,x.tooltipPos=[t[0]+.7*g,t[1]+.7*f],x.half=p<-Math.PI/2||p>Math.PI/2?1:0,x.angle=p}u(this,"afterTranslate")}updateTotals(){let t=this.points,e=t.length,i=this.options.ignoreHiddenPoint,s,r,o=0;for(s=0;s<e;s++)(r=t[s]).isValid()&&(!i||r.visible)&&(o+=r.y);for(s=0,this.total=o;s<e;s++)(r=t[s]).percentage=o>0&&(r.visible||!i)?r.y/o*100:0,r.total=o}}return m.defaultOptions=g(o.defaultOptions,r),p(m.prototype,{axisTypes:[],directTouch:!0,drawGraph:void 0,drawTracker:e.prototype.drawTracker,getCenter:t.getCenter,getSymbol:d,invertible:!1,isCartesian:!1,noSharedTooltip:!0,pointAttribs:e.prototype.pointAttribs,pointClass:s,requireSorting:!1,searchPoint:d,trackerGroups:["group","dataLabelsGroup"]}),a.registerSeriesType("pie",m),m}),i(e,"Series/Pie/PieDataLabel.js",[e["Core/Series/DataLabel.js"],e["Core/Globals.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Series/SeriesRegistry.js"],e["Core/Utilities.js"]],function(t,e,i,s,r){var o;let{composed:a,noop:n}=e,{distribute:h}=i,{series:l}=s,{arrayMax:d,clamp:c,defined:p,pick:u,pushUnique:g,relativeLength:f}=r;return function(e){let i={radialDistributionY:function(t,e){return(e.dataLabelPosition?.top||0)+t.distributeBox.pos},radialDistributionX:function(t,e,i,s,r){let o=r.dataLabelPosition;return t.getX(i<(o?.top||0)+2||i>(o?.bottom||0)-2?s:i,e.half,e,r)},justify:function(t,e,i,s){return s[0]+(t.half?-1:1)*(i+(e.dataLabelPosition?.distance||0))},alignToPlotEdges:function(t,e,i,s){let r=t.getBBox().width;return e?r+s:i-r-s},alignToConnectors:function(t,e,i,s){let r=0,o;return t.forEach(function(t){(o=t.dataLabel.getBBox().width)>r&&(r=o)}),e?r+s:i-r-s}};function s(t,e){let{center:i,options:s}=this,r=i[2]/2,o=t.angle||0,a=Math.cos(o),n=Math.sin(o),h=i[0]+a*r,l=i[1]+n*r,d=Math.min((s.slicedOffset||0)+(s.borderWidth||0),e/5);
vendor: 4,810 bytes, line 24987
24987return{natural:{x:h+a*e,y:l+n*e},computed:{},alignment:e<0?"center":t.half?"right":"left",connectorPosition:{breakAt:{x:h+a*d,y:l+n*d},touchingSliceAt:{x:h,y:l}},distance:e}}function r(){let t=this,e=t.points,i=t.chart,s=i.plotWidth,r=i.plotHeight,o=i.plotLeft,a=Math.round(i.chartWidth/3),n=t.center,c=n[2]/2,g=n[1],m=[[],[]],x=[0,0,0,0],y=t.dataLabelPositioners,b,v,S,k=0;t.visible&&t.hasDataLabels?.()&&(e.forEach(t=>{(t.dataLabels||[]).forEach(t=>{t.shortened&&(t.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),t.shortened=!1)})}),l.prototype.drawDataLabels.apply(t),e.forEach(t=>{(t.dataLabels||[]).forEach((e,i)=>{let s=n[2]/2,r=e.options,o=f(r?.distance||0,s);0===i&&m[t.half].push(t),!p(r?.style?.width)&&e.getBBox().width>a&&(e.css({width:Math.round(.7*a)+"px"}),e.shortened=!0),e.dataLabelPosition=this.getDataLabelPosition(t,o),k=Math.max(k,o)})}),m.forEach((e,a)=>{let l=e.length,d=[],f,m,b=0,C;l&&(t.sortByAngle(e,a-.5),k>0&&(f=Math.max(0,g-c-k),m=Math.min(g+c+k,i.plotHeight),e.forEach(t=>{(t.dataLabels||[]).forEach(e=>{let s=e.dataLabelPosition;s&&s.distance>0&&(s.top=Math.max(0,g-c-s.distance),s.bottom=Math.min(g+c+s.distance,i.plotHeight),b=e.getBBox().height||21,t.distributeBox={target:(e.dataLabelPosition?.natural.y||0)-s.top+b/2,size:b,rank:t.y},d.push(t.distributeBox))})}),h(d,C=m+b-f,C/5)),e.forEach(i=>{(i.dataLabels||[]).forEach(h=>{let l=h.options||{},g=i.distributeBox,f=h.dataLabelPosition,m=f?.natural.y||0,b=l.connectorPadding||0,k=0,C=m,M="inherit";if(f){if(d&&p(g)&&f.distance>0&&(void 0===g.pos?M="hidden":(S=g.size,C=y.radialDistributionY(i,h))),l.justify)k=y.justify(i,h,c,n);else switch(l.alignTo){case"connectors":k=y.alignToConnectors(e,a,s,o);break;case"plotEdges":k=y.alignToPlotEdges(h,a,s,o);break;default:k=y.radialDistributionX(t,i,C,m,h)}if(f.attribs={visibility:M,align:f.alignment},f.posAttribs={x:k+(l.x||0)+(({left:b,right:-b})[f.alignment]||0),y:C+(l.y||0)-h.getBBox().height/2},f.computed.x=k,f.computed.y=C,u(l.crop,!0)){let t;k-(v=h.getBBox().width)<b&&1===a?(t=Math.round(v-k+b),x[3]=Math.max(t,x[3])):k+v>s-b&&0===a&&(t=Math.round(k+v-s+b),x[1]=Math.max(t,x[1])),C-S/2<0?x[0]=Math.max(Math.round(-C+S/2),x[0]):C+S/2>r&&(x[2]=Math.max(Math.round(C+S/2-r),x[2])),f.sideOverflow=t}}})}))}),(0===d(x)||this.verifyDataLabelOverflow(x))&&(this.placeDataLabels(),this.points.forEach(e=>{(e.dataLabels||[]).forEach(s=>{let{connectorColor:r,connectorWidth:o=1}=s.options||{},a=s.dataLabelPosition;if(o){let n;b=s.connector,a&&a.distance>0?(n=!b,b||(s.connector=b=i.renderer.path().addClass("highcharts-data-label-connector highcharts-color-"+e.colorIndex+(e.className?" "+e.className:"")).add(t.dataLabelsGroup)),i.styledMode||b.attr({"stroke-width":o,stroke:r||e.color||"#666666"}),b[n?"attr":"animate"]({d:e.getConnectorPath(s)}),b.attr({visibility:a.attribs?.visibility})):b&&(s.connector=b.destroy())}})})))}function o(){this.points.forEach(t=>{(t.dataLabels||[]).forEach(t=>{let e=t.dataLabelPosition;e?(e.sideOverflow&&(t.css({width:Math.max(t.getBBox().width-e.sideOverflow,0)+"px",textOverflow:(t.options?.style||{}).textOverflow||"ellipsis"}),t.shortened=!0),t.attr(e.attribs),t[t.moved?"animate":"attr"](e.posAttribs),t.moved=!0):t&&t.attr({y:-9999})}),delete t.distributeBox},this)}function m(t){let e=this.center,i=this.options,s=i.center,r=i.minSize||80,o=r,a=null!==i.size;return!a&&(null!==s[0]?o=Math.max(e[2]-Math.max(t[1],t[3]),r):(o=Math.max(e[2]-t[1]-t[3],r),e[0]+=(t[3]-t[1])/2),null!==s[1]?o=c(o,r,e[2]-Math.max(t[0],t[2])):(o=c(o,r,e[2]-t[0]-t[2]),e[1]+=(t[0]-t[2])/2),o<e[2]?(e[2]=o,e[3]=Math.min(i.thickness?Math.max(0,o-2*i.thickness):Math.max(0,f(i.innerSize||0,o)),o),this.translate(e),this.drawDataLabels&&this.drawDataLabels()):a=!0),a}e.compose=function(e){if(t.compose(l),g(a,"PieDataLabel")){let t=e.prototype;t.dataLabelPositioners=i,t.alignDataLabel=n,t.drawDataLabels=r,t.getDataLabelPosition=s,t.placeDataLabels=o,t.verifyDataLabelOverflow=m}}}(o||(o={})),o}),i(e,"Extensions/OverlappingDataLabels.js",[e["Core/Utilities.js"]],function(t){let{addEvent:e,fireEvent:i,objectEach:s,pick:r}=t;function o(t){let e=t.length,s=(t,e)=>!(e.x>=t.x+t.width||e.x+e.width<=t.x||e.y>=t.y+t.height||e.y+e.height<=t.y),r,o,n,h,l,d=!1;for(let i=0;i<e;i++)(r=t[i])&&(r.oldOpacity=r.opacity,r.newOpacity=1,r.absoluteBox=function(t){if(t&&(!t.alignAttr||t.placed)){let e=t.box?0:t.padding||0,i=t.alignAttr||{x:t.attr("x"),y:t.attr("y")},s=t.getBBox();return t.width=s.width,t.height=s.height,{x:i.x+(t.parentGroup?.translateX||0)+e,y:i.y+(t.parentGroup?.translateY||0)+e,width:(t.width||0)-2*e,height:(t.height||0)-2*e}}}(r));t.sort((t,e)=>(e.labelrank||0)-(t.labelrank||0));for(let i=0;i<e;++i){h=(o=t[i])&&o.absoluteBox;for(let r=i+1;r<e;++r)l=(n=t[r])&&n.absoluteBox,h&&l&&o!==n&&0!==o.newOpacity&&0!==n.newOpacity&&"hidden"
24987!==o.visibility&&"hidden"!==n.visibility&&s(h,l)&&((o.labelrank<n.labelrank?o:n).newOpacity=0)}for(let e of t)a(e,this)&&(d=!0);d&&i(this,"afterHideAllOverlappingLabels")}function a(t,e){let s,r,o=!1;return t&&(r=t.newOpacity,t.oldOpacity!==r&&(t.hasClass("highcharts-data-label")?(t[r?"removeClass":"addClass"]("highcharts-data-label-hidden"),s=function(){e.styledMode||t.css({pointerEvents:r?"auto":"none"})},o=!0,t[t.isOld?"animate":"attr"]({opacity:r},void 0,s),i(e,"afterHideOverlappingLabel")):t.attr({opacity:r})),t.isOld=!0),o}function n(){let t=this,e=[];for(let i of t.labelCollectors||[])e=e.concat(i());for(let i of t.yAxis||[])i.stacking&&i.options.stackLabels&&!i.options.stackLabels.allowOverlap&&s(i.stacking.stacks,t=>{s(t,t=>{t.label&&e.push(t.label)})});for(let i of t.series||[])if(i.visible&&i.hasDataLabels?.()){let s=i=>{for(let s of i)s.visible&&(s.dataLabels||[]).forEach(i=>{let o=i.options||{};i.labelrank=r(o.labelrank,s.labelrank,s.shapeArgs?.height),o.allowOverlap??Number(o.distance)>0?(i.oldOpacity=i.opacity,i.newOpacity=1,a(i,t)):e.push(i)})};s(i.nodes||[]),s(i.points)}this.hideOverlappingLabels(e)}return{compose:function(t){let i=t.prototype;i.hideOverlappingLabels||(i.hideOverlappingLabels=o,e(t,"render",n))}}}
vendor: 3,847 bytes, line 24987
24987),i(e,"Extensions/BorderRadius.js",[e["Core/Defaults.js"],e["Core/Globals.js"],e["Core/Utilities.js"]],function(t,e,i){let{defaultOptions:s}=t,{noop:r}=e,{addEvent:o,extend:a,isObject:n,merge:h,relativeLength:l}=i,d={radius:0,scope:"stack",where:void 0},c=r,p=r;function u(t,e,i,s,r={}){let o=c(t,e,i,s,r),{innerR:a=0,r:n=i,start:h=0,end:d=0}=r;if(r.open||!r.borderRadius)return o;let p=d-h,u=Math.sin(p/2),g=Math.max(Math.min(l(r.borderRadius||0,n-a),(n-a)/2,n*u/(1+u)),0),f=Math.min(g,p/Math.PI*2*a),m=o.length-1;for(;m--;)!function(t,e,i){let s,r,o;let a=t[e],n=t[e+1];if("Z"===n[0]&&(n=t[0]),("M"===a[0]||"L"===a[0])&&"A"===n[0]?(s=a,r=n,o=!0):"A"===a[0]&&("M"===n[0]||"L"===n[0])&&(s=n,r=a),s&&r&&r.params){let a=r[1],n=r[5],h=r.params,{start:l,end:d,cx:c,cy:p}=h,u=n?a-i:a+i,g=u?Math.asin(i/u):0,f=n?g:-g,m=Math.cos(g)*u;o?(h.start=l+f,s[1]=c+m*Math.cos(l),s[2]=p+m*Math.sin(l),t.splice(e+1,0,["A",i,i,0,0,1,c+a*Math.cos(h.start),p+a*Math.sin(h.start)])):(h.end=d-f,r[6]=c+a*Math.cos(h.end),r[7]=p+a*Math.sin(h.end),t.splice(e+1,0,["A",i,i,0,0,1,c+m*Math.cos(d),p+m*Math.sin(d)])),r[4]=Math.abs(h.end-h.start)<Math.PI?0:1}}(o,m,m>1?f:g);return o}function g(){if(this.options.borderRadius&&!(this.chart.is3d&&this.chart.is3d())){let{options:t,yAxis:e}=this,i="percent"===t.stacking,r=s.plotOptions?.[this.type]?.borderRadius,o=f(t.borderRadius,n(r)?r:{}),h=e.options.reversed;for(let s of this.points){let{shapeArgs:r}=s;if("roundedRect"===s.shapeType&&r){let{width:n=0,height:d=0,y:c=0}=r,p=c,u=d;if("stack"===o.scope&&s.stackTotal){let r=e.translate(i?100:s.stackTotal,!1,!0,!1,!0),o=e.translate(t.threshold||0,!1,!0,!1,!0),a=this.crispCol(0,Math.min(r,o),0,Math.abs(r-o));p=a.y,u=a.height}let g=(s.negative?-1:1)*(h?-1:1)==-1,f=o.where;!f&&this.is("waterfall")&&Math.abs((s.yBottom||0)-(this.translatedThreshold||0))>this.borderWidth&&(f="all"),f||(f="end");let m=Math.min(l(o.radius,n),n/2,"all"===f?d/2:1/0)||0;"end"===f&&(g&&(p-=m),u+=m),a(r,{brBoxHeight:u,brBoxY:p,r:m})}}}}function f(t,e){return n(t)||(t={radius:t||0}),h(d,e,t)}function m(){let t=f(this.options.borderRadius);for(let e of this.points){let i=e.shapeArgs;i&&(i.borderRadius=l(t.radius,(i.r||0)-(i.innerR||0)))}}function x(t,e,i,s,r={}){let o=p(t,e,i,s,r),{r:a=0,brBoxHeight:n=s,brBoxY:h=e}=r,l=e-h,d=h+n-(e+s),c=l-a>-.1?0:a,u=d-a>-.1?0:a,g=Math.max(c&&l,0),f=Math.max(u&&d,0),m=[t+c,e],x=[t+i-c,e],y=[t+i,e+c],b=[t+i,e+s-u],v=[t+i-u,e+s],S=[t+u,e+s],k=[t,e+s-u],C=[t,e+c],M=(t,e)=>Math.sqrt(Math.pow(t,2)-Math.pow(e,2));if(g){let t=M(c,c-g);m[0]-=t,x[0]+=t,y[1]=C[1]=e+c-g}if(s<c-g){let r=M(c,c-g-s);y[0]=b[0]=t+i-c+r,v[0]=Math.min(y[0],v[0]),S[0]=Math.max(b[0],S[0]),k[0]=C[0]=t+c-r,y[1]=C[1]=e+s}if(f){let t=M(u,u-f);v[0]+=t,S[0]-=t,b[1]=k[1]=e+s-u+f}if(s<u-f){let r=M(u,u-f-s);y[0]=b[0]=t+i-u+r,x[0]=Math.min(y[0],x[0]),m[0]=Math.max(b[0],m[0]),k[0]=C[0]=t+u-r,b[1]=k[1]=e}return o.length=0,o.push(["M",...m],["L",...x],["A",c,c,0,0,1,...y],["L",...b],["A",u,u,0,0,1,...v],["L",...S],["A",u,u,0,0,1,...k],["L",...C],["A",c,c,0,0,1,...m],["Z"]),o}return{compose:function(t,e,i){let s=t.types.pie;if(!e.symbolCustomAttribs.includes("borderRadius")){let r=i.prototype.symbols;o(t,"afterColumnTranslate",g,{order:9}),o(s,"afterTranslate",m),e.symbolCustomAttribs.push("borderRadius","brBoxHeight","brBoxY"),c=r.arc,p=r.roundedRect,r.arc=u,r.roundedRect=x}},optionsToObject:f}}),i(e,"Core/Responsive.js",[e["Core/Utilities.js"]],function(t){var e;let{diffObjects:i,extend:s,find:r,merge:o,pick:a,uniqueKey:n}=t;return function(t){function e(t,e){let i=t.condition;(i.callback||function(){return this.chartWidth<=a(i.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=a(i.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=a(i.minWidth,0)&&this.chartHeight>=a(i.minHeight,0)}).call(this)&&e.push(t._id)}function h(t,e){let s=this.options.responsive,a=this.currentResponsive,h=[],l;
24987!e&&s&&s.rules&&s.rules.forEach(t=>{void 0===t._id&&(t._id=n()),this.matchResponsiveRule(t,h)},this);let d=o(...h.map(t=>r((s||{}).rules||[],e=>e._id===t)).map(t=>t&&t.chartOptions));d.isResponsiveOptions=!0,h=h.toString()||void 0;let c=a&&a.ruleIds;h!==c&&(a&&this.update(a.undoOptions,t,!0),h?((l=i(d,this.options,!0,this.collectionsWithUpdate)).isResponsiveOptions=!0,this.currentResponsive={ruleIds:h,mergedOptions:d,undoOptions:l},this.update(d,t,!0)):this.currentResponsive=void 0)}t.compose=function(t){let i=t.prototype;return i.matchResponsiveRule||s(i,{matchResponsiveRule:e,setResponsive:h}),t}}(e||(e={})),e}),i(e,"masters/highcharts.src.js",[e["Core/Globals.js"],e["Core/Utilities.js"],e["Core/Defaults.js"],e["Core/Animation/Fx.js"],e["Core/Animation/AnimationUtilities.js"],e["Core/Renderer/HTML/AST.js"],e["Core/Templating.js"],e["Core/Renderer/RendererRegistry.js"],e["Core/Renderer/RendererUtilities.js"],e["Core/Renderer/SVG/SVGElement.js"],e["Core/Renderer/SVG/SVGRenderer.js"],e["Core/Renderer/HTML/HTMLElement.js"],e["Core/Axis/Axis.js"],e["Core/Axis/DateTimeAxis.js"],e["Core/Axis/LogarithmicAxis.js"],e["Core/Axis/PlotLineOrBand/PlotLineOrBand.js"],e["Core/Axis/Tick.js"],e["Core/Tooltip.js"],e["Core/Series/Point.js"],e["Core/Pointer.js"],e["Core/Legend/Legend.js"],e["Core/Legend/LegendSymbol.js"],e["Core/Chart/Chart.js"],e["Extensions/ScrollablePlotArea.js"],e["Core/Axis/Stacking/StackingAxis.js"],e["Core/Axis/Stacking/StackItem.js"],e["Core/Series/Series.js"],e["Core/Series/SeriesRegistry.js"],e["Series/Column/ColumnDataLabel.js"],e["Series/Pie/PieDataLabel.js"],e["Core/Series/DataLabel.js"],e["Extensions/OverlappingDataLabels.js"],e["Extensions/
24987BorderRadius.js"],e["Core/Responsive.js"],e["Core/Color/Color.js"],e["Core/Time.js"]],function(t,e,i,s,r,o,a,n,h,l,d,c,p,u,g,f,m,x,y,b,v,S,k,C,M,w,T,A,P,L,O,D,E,I,j,B){return t.AST=o,t.Axis=p,t.Chart=k,t.Color=j,t.DataLabel=O,t.Fx=s,t.HTMLElement=c,t.Legend=v,t.LegendSymbol=S,t.OverlappingDataLabels=t.OverlappingDataLabels||D,t.PlotLineOrBand=f,t.Point=y,t.Pointer=b,t.RendererRegistry=n,t.Series=T,t.SeriesRegistry=A,t.StackItem=w,t.SVGElement=l,t.SVGRenderer=d,t.Templating=a,t.Tick=m,t.Time=B,t.Tooltip=x,t.animate=r.animate,t.animObject=r.animObject,t.chart=k.chart,t.color=j.parse,t.dateFormat=a.dateFormat,t.defaultOptions=i.defaultOptions,t.distribute=h.distribute,t.format=a.format,t.getDeferredAnimation=r.getDeferredAnimation,t.getOptions=i.getOptions,t.numberFormat=a.numberFormat,t.seriesType=A.seriesType,t.setAnimation=r.setAnimation,t.setOptions=i.setOptions,t.stop=r.stop,t.time=i.defaultTime,t.timers=s.timers,E.compose(t.Series,t.SVGElement,t.SVGRenderer),P.compose(t.Series.types.column),O.compose(t.Series),u.compose(t.Axis),c.compose(t.SVGRenderer),v.compose(t.Chart),g.compose(t.Axis),D.compose(t.Chart),L.compose(t.Series.types.pie),f.compose(t.Axis),b.compose(t.Chart),I.compose(t.Chart),C.compose(t.Axis,t.Chart,t.Series),M.compose(t.Axis,t.Chart,t.Series),x.compose(t.Pointer),e.extend(t,e),t}),e["masters/highcharts.src.js"]._modules=e,e["masters/highcharts.src.js"]}); 24988// HighChart library end here 24989//Jquery UI Start here 24990/*! jQuery UI - v1.13.2 - 2022-07-14 24991* http://jqueryui.com 24992* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js 24993* Copyright jQuery Foundation and other contributors; Licensed MIT */ 24994 24995( function( factory ) { 24996 "use strict"; 24997 24998 if ( typeof define === "function" && define.amd ) { 24999 25000 // AMD. Register as an anonymous module. 25001 define( [ "jquery" ], factory ); 25002 } else { 25003 25004 // Browser globals 25005 factory( jQuery ); 25006 } 25007} )( function( $ ) { 25008"use strict"; 25009 25010$.ui = $.ui || {}; 25011 25012var version = $.ui.version = "1.13.2"; 25013 25014 25015/*! 25016 * jQuery UI Widget 1.13.2 25017 * http://jqueryui.com 25018 * 25019 * Copyright jQuery Foundation and other contributors 25020 * Released under the MIT license. 25021 * http://jquery.org/license 25022 */ 25023 25024//>>label: Widget 25025//>>group: Core 25026//>>description: Provides a factory for creating stateful widgets with a common API. 25027//>>docs: http://api.jqueryui.com/jQuery.widget/ 25028//>>demos: http
vendor: 8,114 bytes, lines 25028-25319
25028://jqueryui.com/widget/ 25029 25030 25031var widgetUuid = 0; 25032var widgetHasOwnProperty = Array.prototype.hasOwnProperty; 25033var widgetSlice = Array.prototype.slice; 25034 25035$.cleanData = ( function( orig ) { 25036 return function( elems ) { 25037 var events, elem, i; 25038 for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { 25039 25040 // Only trigger remove when necessary to save time 25041 events = $._data( elem, "events" ); 25042 if ( events && events.remove ) { 25043 $( elem ).triggerHandler( "remove" ); 25044 } 25045 } 25046 orig( elems ); 25047 }; 25048} )( $.cleanData ); 25049 25050$.widget = function( name, base, prototype ) { 25051 var existingConstructor, constructor, basePrototype; 25052 25053 // ProxiedPrototype allows the provided prototype to remain unmodified 25054 // so that it can be used as a mixin for multiple widgets (#8876) 25055 var proxiedPrototype = {}; 25056 25057 var namespace = name.split( "." )[ 0 ]; 25058 name = name.split( "." )[ 1 ]; 25059 var fullName = namespace + "-" + name; 25060 25061 if ( !prototype ) { 25062 prototype = base; 25063 base = $.Widget; 25064 } 25065 25066 if ( Array.isArray( prototype ) ) { 25067 prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); 25068 } 25069 25070 // Create selector for plugin 25071 $.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) { 25072 return !!$.data( elem, fullName ); 25073 }; 25074 25075 $[ namespace ] = $[ namespace ] || {}; 25076 existingConstructor = $[ namespace ][ name ]; 25077 constructor = $[ namespace ][ name ] = function( options, element ) { 25078 25079 // Allow instantiation without "new" keyword 25080 if ( !this || !this._createWidget ) { 25081 return new constructor( options, element ); 25082 } 25083 25084 // Allow instantiation without initializing for simple inheritance 25085 // must use "new" keyword (the code above always passes args) 25086 if ( arguments.length ) { 25087 this._createWidget( options, element ); 25088 } 25089 }; 25090 25091 // Extend with the existing constructor to carry over any static properties 25092 $.extend( constructor, existingConstructor, { 25093 version: prototype.version, 25094 25095 // Copy the object used to create the prototype in case we need to 25096 // redefine the widget later 25097 _proto: $.extend( {}, prototype ), 25098 25099 // Track widgets that inherit from this widget in case this widget is 25100 // redefined after a widget inherits from it 25101 _childConstructors: [] 25102 } ); 25103 25104 basePrototype = new base(); 25105 25106 // We need to make the options hash a property directly on the new instance 25107 // otherwise we'll modify the options hash on the prototype that we're 25108 // inheriting from 25109 basePrototype.options = $.widget.extend( {}, basePrototype.options ); 25110 $.each( prototype, function( prop, value ) { 25111 if ( typeof value !== "function" ) { 25112 proxiedPrototype[ prop ] = value; 25113 return; 25114 } 25115 proxiedPrototype[ prop ] = ( function() { 25116 function _super() { 25117 return base.prototype[ prop ].apply( this, arguments ); 25118 } 25119 25120 function _superApply( args ) { 25121 return base.prototype[ prop ].apply( this, args ); 25122 } 25123 25124 return function() { 25125 var __super = this._super; 25126 var __superApply = this._superApply; 25127 var returnValue; 25128 25129 this._super = _super; 25130 this._superApply = _superApply; 25131 25132 returnValue = value.apply( this, arguments ); 25133 25134 this._super = __super; 25135 this._superApply = __superApply; 25136 25137 return returnValue; 25138 }; 25139 } )(); 25140 } ); 25141 constructor.prototype = $.widget.extend( basePrototype, { 25142 25143 // TODO: remove support for widgetEventPrefix 25144 // always use the name + a colon as the prefix, e.g., draggable:start 25145 // don't prefix for widgets that aren't DOM-based 25146 widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name 25147 }, proxiedPrototype, { 25148 constructor: constructor, 25149 namespace: namespace, 25150 widgetName: name, 25151 widgetFullName: fullName 25152 } ); 25153 25154 // If this widget is being redefined then we need to find all widgets that 25155 // are inheriting from it and redefine all of them so that they inherit from 25156 // the new version of this widget. We're essentially trying to replace one 25157 // level in the prototype chain. 25158 if ( existingConstructor ) { 25159 $.each( existingConstructor._childConstructors, function( i, child ) { 25160 var childPrototype = child.prototype; 25161 25162 // Redefine the child widget using the same prototype that was 25163 // originally used, but inherit from the new version of the base 25164 $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, 25165 child._proto ); 25166 } ); 25167 25168 // Remove the list of existing child constructors from the old constructor 25169 // so the old child constructors can be garbage collected 25170 delete existingConstructor._childConstructors; 25171 } else { 25172 base._childConstructors.push( constructor ); 25173 } 25174 25175 $.widget.bridge( name, constructor ); 25176 25177 return constructor; 25178}; 25179 25180$.widget.extend = function( target ) { 25181 var input = widgetSlice.call( arguments, 1 ); 25182 var inputIndex = 0; 25183 var inputLength = input.length; 25184 var key; 25185 var value; 25186 25187 for ( ; inputIndex < inputLength; inputIndex++ ) { 25188 for ( key in input[ inputIndex ] ) { 25189 value = input[ inputIndex ][ key ]; 25190 if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) { 25191 25192 // Clone objects 25193 if ( $.isPlainObject( value ) ) { 25194 target[ key ] = $.isPlainObject( target[ key ] ) ? 25195 $.widget.extend( {}, target[ key ], value ) : 25196 25197 // Don't extend strings, arrays, etc. with objects 25198 $.widget.extend( {}, value ); 25199 25200 // Copy everything else by reference 25201 } else { 25202 target[ key ] = value; 25203 } 25204 } 25205 } 25206 } 25207 return target; 25208}; 25209 25210$.widget.bridge = function( name, object ) { 25211 var fullName = object.prototype.widgetFullName || name; 25212 $.fn[ name ] = function( options ) { 25213 var isMethodCall = typeof options === "string"; 25214 var args = widgetSlice.call( arguments, 1 ); 25215 var returnValue = this; 25216 25217 if ( isMethodCall ) { 25218 25219 // If this is an empty collection, we need to have the instance method 25220 // return undefined instead of the jQuery instance 25221 if ( !this.length && options === "instance" ) { 25222 returnValue = undefined; 25223 } else { 25224 this.each( function() { 25225 var methodValue; 25226 var instance = $.data( this, fullName ); 25227 25228 if ( options === "instance" ) { 25229 returnValue = instance; 25230 return false; 25231 } 25232 25233 if ( !instance ) { 25234 return $.error( "cannot call methods on " + name + 25235 " prior to initialization; " + 25236 "attempted to call method '" + options + "'" ); 25237 } 25238 25239 if ( typeof instance[ options ] !== "function" || 25240 options.charAt( 0 ) === "_" ) { 25241 return $.error( "no such method '" + options + "' for " + name + 25242 " widget instance" ); 25243 } 25244 25245 methodValue = instance[ options ].apply( instance, args ); 25246 25247 if ( methodValue !== instance && methodValue !== undefined ) { 25248 returnValue = methodValue && methodValue.jquery ? 25249 returnValue.pushStack( methodValue.get() ) : 25250 methodValue; 25251 return false; 25252 } 25253 } ); 25254 } 25255 } else { 25256 25257 // Allow multiple hashes to be passed on init 25258 if ( args.length ) { 25259 options = $.widget.extend.apply( null, [ options ].concat( args ) ); 25260 } 25261 25262 this.each( function() { 25263 var instance = $.data( this, fullName ); 25264 if ( instance ) { 25265 instance.option( options || {} ); 25266 if ( instance._init ) { 25267 instance._init(); 25268 } 25269 } else { 25270 $.data( this, fullName, new object( options, this ) ); 25271 } 25272 } ); 25273 } 25274 25275 return returnValue; 25276 }; 25277}; 25278 25279$.Widget = function( /* options, element */ ) {}; 25280$.Widget._childConstructors = []; 25281 25282$.Widget.prototype = { 25283 widgetName: "widget", 25284 widgetEventPrefix: "", 25285 defaultElement: "<div>", 25286 25287 options: { 25288 classes: {}, 25289 disabled: false, 25290 25291 // Callbacks 25292 create: null 25293 }, 25294 25295 _createWidget: function( options, element ) { 25296 element = $( element || this.defaultElement || this )[ 0 ]; 25297 this.element = $( element ); 25298 this.uuid = widgetUuid++; 25299 this.eventNamespace = "." + this.widgetName + this.uuid; 25300 25301 this.bindings = $(); 25302 this.hoverable = $(); 25303 this.focusable = $(); 25304 this.classesElementLookup = {}; 25305 25306 if ( element !== this ) { 25307 $.data( element, this.widgetFullName, this ); 25308 this._on( true, this.element, { 25309 remove: function( event ) { 25310 if ( event.target === element ) { 25311 this.destroy(); 25312 } 25313 } 25314 } ); 25315 this.document = $( element.style ? 25316 25317 // Element within the document 25318 element.ownerDocument : 25319
vendor: 11,561 bytes, lines 25320-25758
25320 // Element is window or document 25321 element.document || element ); 25322 this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); 25323 } 25324 25325 this.options = $.widget.extend( {}, 25326 this.options, 25327 this._getCreateOptions(), 25328 options ); 25329 25330 this._create(); 25331 25332 if ( this.options.disabled ) { 25333 this._setOptionDisabled( this.options.disabled ); 25334 } 25335 25336 this._trigger( "create", null, this._getCreateEventData() ); 25337 this._init(); 25338 }, 25339 25340 _getCreateOptions: function() { 25341 return {}; 25342 }, 25343 25344 _getCreateEventData: $.noop, 25345 25346 _create: $.noop, 25347 25348 _init: $.noop, 25349 25350 destroy: function() { 25351 var that = this; 25352 25353 this._destroy(); 25354 $.each( this.classesElementLookup, function( key, value ) { 25355 that._removeClass( value, key ); 25356 } ); 25357 25358 // We can probably remove the unbind calls in 2.0 25359 // all event bindings should go through this._on() 25360 this.element 25361 .off( this.eventNamespace ) 25362 .removeData( this.widgetFullName ); 25363 this.widget() 25364 .off( this.eventNamespace ) 25365 .removeAttr( "aria-disabled" ); 25366 25367 // Clean up events and states 25368 this.bindings.off( this.eventNamespace ); 25369 }, 25370 25371 _destroy: $.noop, 25372 25373 widget: function() { 25374 return this.element; 25375 }, 25376 25377 option: function( key, value ) { 25378 var options = key; 25379 var parts; 25380 var curOption; 25381 var i; 25382 25383 if ( arguments.length === 0 ) { 25384 25385 // Don't return a reference to the internal hash 25386 return $.widget.extend( {}, this.options ); 25387 } 25388 25389 if ( typeof key === "string" ) { 25390 25391 // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } 25392 options = {}; 25393 parts = key.split( "." ); 25394 key = parts.shift(); 25395 if ( parts.length ) { 25396 curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); 25397 for ( i = 0; i < parts.length - 1; i++ ) { 25398 curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; 25399 curOption = curOption[ parts[ i ] ]; 25400 } 25401 key = parts.pop(); 25402 if ( arguments.length === 1 ) { 25403 return curOption[ key ] === undefined ? null : curOption[ key ]; 25404 } 25405 curOption[ key ] = value; 25406 } else { 25407 if ( arguments.length === 1 ) { 25408 return this.options[ key ] === undefined ? null : this.options[ key ]; 25409 } 25410 options[ key ] = value; 25411 } 25412 } 25413 25414 this._setOptions( options ); 25415 25416 return this; 25417 }, 25418 25419 _setOptions: function( options ) { 25420 var key; 25421 25422 for ( key in options ) { 25423 this._setOption( key, options[ key ] ); 25424 } 25425 25426 return this; 25427 }, 25428 25429 _setOption: function( key, value ) { 25430 if ( key === "classes" ) { 25431 this._setOptionClasses( value ); 25432 } 25433 25434 this.options[ key ] = value; 25435 25436 if ( key === "disabled" ) { 25437 this._setOptionDisabled( value ); 25438 } 25439 25440 return this; 25441 }, 25442 25443 _setOptionClasses: function( value ) { 25444 var classKey, elements, currentElements; 25445 25446 for ( classKey in value ) { 25447 currentElements = this.classesElementLookup[ classKey ]; 25448 if ( value[ classKey ] === this.options.classes[ classKey ] || 25449 !currentElements || 25450 !currentElements.length ) { 25451 continue; 25452 } 25453 25454 // We are doing this to create a new jQuery object because the _removeClass() call 25455 // on the next line is going to destroy the reference to the current elements being 25456 // tracked. We need to save a copy of this collection so that we can add the new classes 25457 // below. 25458 elements = $( currentElements.get() ); 25459 this._removeClass( currentElements, classKey ); 25460 25461 // We don't use _addClass() here, because that uses this.options.classes 25462 // for generating the string of classes. We want to use the value passed in from 25463 // _setOption(), this is the new value of the classes option which was passed to 25464 // _setOption(). We pass this value directly to _classes(). 25465 elements.addClass( this._classes( { 25466 element: elements, 25467 keys: classKey, 25468 classes: value, 25469 add: true 25470 } ) ); 25471 } 25472 }, 25473 25474 _setOptionDisabled: function( value ) { 25475 this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); 25476 25477 // If the widget is becoming disabled, then nothing is interactive 25478 if ( value ) { 25479 this._removeClass( this.hoverable, null, "ui-state-hover" ); 25480 this._removeClass( this.focusable, null, "ui-state-focus" ); 25481 } 25482 }, 25483 25484 enable: function() { 25485 return this._setOptions( { disabled: false } ); 25486 }, 25487 25488 disable: function() { 25489 return this._setOptions( { disabled: true } ); 25490 }, 25491 25492 _classes: function( options ) { 25493 var full = []; 25494 var that = this; 25495 25496 options = $.extend( { 25497 element: this.element, 25498 classes: this.options.classes || {} 25499 }, options ); 25500 25501 function bindRemoveEvent() { 25502 var nodesToBind = []; 25503 25504 options.element.each( function( _, element ) { 25505 var isTracked = $.map( that.classesElementLookup, function( elements ) { 25506 return elements; 25507 } ) 25508 .some( function( elements ) { 25509 return elements.is( element ); 25510 } ); 25511 25512 if ( !isTracked ) { 25513 nodesToBind.push( element ); 25514 } 25515 } ); 25516 25517 that._on( $( nodesToBind ), { 25518 remove: "_untrackClassesElement" 25519 } ); 25520 } 25521 25522 function processClassString( classes, checkOption ) { 25523 var current, i; 25524 for ( i = 0; i < classes.length; i++ ) { 25525 current = that.classesElementLookup[ classes[ i ] ] || $(); 25526 if ( options.add ) { 25527 bindRemoveEvent(); 25528 current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) ); 25529 } else { 25530 current = $( current.not( options.element ).get() ); 25531 } 25532 that.classesElementLookup[ classes[ i ] ] = current; 25533 full.push( classes[ i ] ); 25534 if ( checkOption && options.classes[ classes[ i ] ] ) { 25535 full.push( options.classes[ classes[ i ] ] ); 25536 } 25537 } 25538 } 25539 25540 if ( options.keys ) { 25541 processClassString( options.keys.match( /\S+/g ) || [], true ); 25542 } 25543 if ( options.extra ) { 25544 processClassString( options.extra.match( /\S+/g ) || [] ); 25545 } 25546 25547 return full.join( " " ); 25548 }, 25549 25550 _untrackClassesElement: function( event ) { 25551 var that = this; 25552 $.each( that.classesElementLookup, function( key, value ) { 25553 if ( $.inArray( event.target, value ) !== -1 ) { 25554 that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); 25555 } 25556 } ); 25557 25558 this._off( $( event.target ) ); 25559 }, 25560 25561 _removeClass: function( element, keys, extra ) { 25562 return this._toggleClass( element, keys, extra, false ); 25563 }, 25564 25565 _addClass: function( element, keys, extra ) { 25566 return this._toggleClass( element, keys, extra, true ); 25567 }, 25568 25569 _toggleClass: function( element, keys, extra, add ) { 25570 add = ( typeof add === "boolean" ) ? add : extra; 25571 var shift = ( typeof element === "string" || element === null ), 25572 options = { 25573 extra: shift ? keys : extra, 25574 keys: shift ? element : keys, 25575 element: shift ? this.element : element, 25576 add: add 25577 }; 25578 options.element.toggleClass( this._classes( options ), add ); 25579 return this; 25580 }, 25581 25582 _on: function( suppressDisabledCheck, element, handlers ) { 25583 var delegateElement; 25584 var instance = this; 25585 25586 // No suppressDisabledCheck flag, shuffle arguments 25587 if ( typeof suppressDisabledCheck !== "boolean" ) { 25588 handlers = element; 25589 element = suppressDisabledCheck; 25590 suppressDisabledCheck = false; 25591 } 25592 25593 // No element argument, shuffle and use this.element 25594 if ( !handlers ) { 25595 handlers = element; 25596 element = this.element; 25597 delegateElement = this.widget(); 25598 } else { 25599 element = delegateElement = $( element ); 25600 this.bindings = this.bindings.add( element ); 25601 } 25602 25603 $.each( handlers, function( event, handler ) { 25604 function handlerProxy() { 25605 25606 // Allow widgets to customize the disabled handling 25607 // - disabled as an array instead of boolean 25608 // - disabled class as method for disabling individual parts 25609 if ( !suppressDisabledCheck && 25610 ( instance.options.disabled === true || 25611 $( this ).hasClass( "ui-state-disabled" ) ) ) { 25612 return; 25613 } 25614 return ( typeof handler === "string" ? instance[ handler ] : handler ) 25615 .apply( instance, arguments ); 25616 } 25617 25618 // Copy the guid so direct unbinding works 25619 if ( typeof handler !== "string" ) { 25620 handlerProxy.guid = handler.guid = 25621 handler.guid || handlerProxy.guid || $.guid++; 25622 } 25623 25624 var match = event.match( /^([\w:-]*)\s*(.*)$/ ); 25625 var eventName = match[ 1 ] + instance.eventNamespace; 25626 var selector = match[ 2 ]; 25627 25628 if ( selector ) { 25629 delegateElement.on( eventName, selector, handlerProxy ); 25630 } else { 25631 element.on( eventName, handlerProxy ); 25632 } 25633 } ); 25634 }, 25635 25636 _off: function( element, eventName ) { 25637 eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + 25638 this.eventNamespace; 25639 element.off( eventName ); 25640 25641 // Clear the stack to avoid memory leaks (#10056) 25642 this.bindings = $( this.bindings.not( element ).get() ); 25643 this.focusable = $( this.focusable.not( element ).get() ); 25644 this.hoverable = $( this.hoverable.not( element ).get() ); 25645 }, 25646 25647 _delay: function( handler, delay ) { 25648 function handlerProxy() { 25649 return ( typeof handler === "string" ? instance[ handler ] : handler ) 25650 .apply( instance, arguments ); 25651 } 25652 var instance = this; 25653 return setTimeout( handlerProxy, delay || 0 ); 25654 }, 25655 25656 _hoverable: function( element ) { 25657 this.hoverable = this.hoverable.add( element ); 25658 this._on( element, { 25659 mouseenter: function( event ) { 25660 this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); 25661 }, 25662 mouseleave: function( event ) { 25663 this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); 25664 } 25665 } ); 25666 }, 25667 25668 _focusable: function( element ) { 25669 this.focusable = this.focusable.add( element ); 25670 this._on( element, { 25671 focusin: function( event ) { 25672 this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); 25673 }, 25674 focusout: function( event ) { 25675 this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); 25676 } 25677 } ); 25678 }, 25679 25680 _trigger: function( type, event, data ) { 25681 var prop, orig; 25682 var callback = this.options[ type ]; 25683 25684 data = data || {}; 25685 event = $.Event( event ); 25686 event.type = ( type === this.widgetEventPrefix ? 25687 type : 25688 this.widgetEventPrefix + type ).toLowerCase(); 25689 25690 // The original event may come from any element 25691 // so we need to reset the target on the new event 25692 event.target = this.element[ 0 ]; 25693 25694 // Copy original event properties over to the new event 25695 orig = event.originalEvent; 25696 if ( orig ) { 25697 for ( prop in orig ) { 25698 if ( !( prop in event ) ) { 25699 event[ prop ] = orig[ prop ]; 25700 } 25701 } 25702 } 25703 25704 this.element.trigger( event, data ); 25705 return !( typeof callback === "function" && 25706 callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || 25707 event.isDefaultPrevented() ); 25708 } 25709}; 25710 25711$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { 25712 $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { 25713 if ( typeof options === "string" ) { 25714 options = { effect: options }; 25715 } 25716 25717 var hasOptions; 25718 var effectName = !options ? 25719 method : 25720 options === true || typeof options === "number" ? 25721 defaultEffect : 25722 options.effect || defaultEffect; 25723 25724 options = options || {}; 25725 if ( typeof options === "number" ) { 25726 options = { duration: options }; 25727 } else if ( options === true ) { 25728 options = {}; 25729 } 25730 25731 hasOptions = !$.isEmptyObject( options ); 25732 options.complete = callback; 25733 25734 if ( options.delay ) { 25735 element.delay( options.delay ); 25736 } 25737 25738 if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { 25739 element[ method ]( options ); 25740 } else if ( effectName !== method && element[ effectName ] ) { 25741 element[ effectName ]( options.duration, options.easing, callback ); 25742 } else { 25743 element.queue( function( next ) { 25744 $( this )[ method ](); 25745 if ( callback ) { 25746 callback.call( element[ 0 ] ); 25747 } 25748 next(); 25749 } ); 25750 } 25751 }; 25752} ); 25753 25754var widget = $.widget; 25755 25756 25757/*! 25758 * jQuery UI Position 1.1
vendor: 3,858 bytes, lines 25758-25901
257583.2 25759 * http://jqueryui.com 25760 * 25761 * Copyright jQuery Foundation and other contributors 25762 * Released under the MIT license. 25763 * http://jquery.org/license 25764 * 25765 * http://api.jqueryui.com/position/ 25766 */ 25767 25768//>>label: Position 25769//>>group: Core 25770//>>description: Positions elements relative to other elements. 25771//>>docs: http://api.jqueryui.com/position/ 25772//>>demos: http://jqueryui.com/position/ 25773 25774 25775( function() { 25776var cachedScrollbarWidth, 25777 max = Math.max, 25778 abs = Math.abs, 25779 rhorizontal = /left|center|right/, 25780 rvertical = /top|center|bottom/, 25781 roffset = /[\+\-]\d+(\.[\d]+)?%?/, 25782 rposition = /^\w+/, 25783 rpercent = /%$/, 25784 _position = $.fn.position; 25785 25786function getOffsets( offsets, width, height ) { 25787 return [ 25788 parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), 25789 parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) 25790 ]; 25791} 25792 25793function parseCss( element, property ) { 25794 return parseInt( $.css( element, property ), 10 ) || 0; 25795} 25796 25797function isWindow( obj ) { 25798 return obj != null && obj === obj.window; 25799} 25800 25801function getDimensions( elem ) { 25802 var raw = elem[ 0 ]; 25803 if ( raw.nodeType === 9 ) { 25804 return { 25805 width: elem.width(), 25806 height: elem.height(), 25807 offset: { top: 0, left: 0 } 25808 }; 25809 } 25810 if ( isWindow( raw ) ) { 25811 return { 25812 width: elem.width(), 25813 height: elem.height(), 25814 offset: { top: elem.scrollTop(), left: elem.scrollLeft() } 25815 }; 25816 } 25817 if ( raw.preventDefault ) { 25818 return { 25819 width: 0, 25820 height: 0, 25821 offset: { top: raw.pageY, left: raw.pageX } 25822 }; 25823 } 25824 return { 25825 width: elem.outerWidth(), 25826 height: elem.outerHeight(), 25827 offset: elem.offset() 25828 }; 25829} 25830 25831$.position = { 25832 scrollbarWidth: function() { 25833 if ( cachedScrollbarWidth !== undefined ) { 25834 return cachedScrollbarWidth; 25835 } 25836 var w1, w2, 25837 div = $( "<div style=" + 25838 "'display:block;position:absolute;width:200px;height:200px;overflow:hidden;'>" + 25839 "<div style='height:300px;width:auto;'></div></div>" ), 25840 innerDiv = div.children()[ 0 ]; 25841 25842 $( "body" ).append( div ); 25843 w1 = innerDiv.offsetWidth; 25844 div.css( "overflow", "scroll" ); 25845 25846 w2 = innerDiv.offsetWidth; 25847 25848 if ( w1 === w2 ) { 25849 w2 = div[ 0 ].clientWidth; 25850 } 25851 25852 div.remove(); 25853 25854 return ( cachedScrollbarWidth = w1 - w2 ); 25855 }, 25856 getScrollInfo: function( within ) { 25857 var overflowX = within.isWindow || within.isDocument ? "" : 25858 within.element.css( "overflow-x" ), 25859 overflowY = within.isWindow || within.isDocument ? "" : 25860 within.element.css( "overflow-y" ), 25861 hasOverflowX = overflowX === "scroll" || 25862 ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), 25863 hasOverflowY = overflowY === "scroll" || 25864 ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); 25865 return { 25866 width: hasOverflowY ? $.position.scrollbarWidth() : 0, 25867 height: hasOverflowX ? $.position.scrollbarWidth() : 0 25868 }; 25869 }, 25870 getWithinInfo: function( element ) { 25871 var withinElement = $( element || window ), 25872 isElemWindow = isWindow( withinElement[ 0 ] ), 25873 isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, 25874 hasOffset = !isElemWindow && !isDocument; 25875 return { 25876 element: withinElement, 25877 isWindow: isElemWindow, 25878 isDocument: isDocument, 25879 offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, 25880 scrollLeft: withinElement.scrollLeft(), 25881 scrollTop: withinElement.scrollTop(), 25882 width: withinElement.outerWidth(), 25883 height: withinElement.outerHeight() 25884 }; 25885 } 25886}; 25887 25888$.fn.position = function( options ) { 25889 if ( !options || !options.of ) { 25890 return _position.apply( this, arguments ); 25891 } 25892 25893 // Make a copy, we don't want to modify arguments 25894 options = $.extend( {}, options ); 25895 25896 var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, 25897 25898 // Make sure string options are treated as CSS selectors 25899 target = typeof options.of === "string" ? 25900 $( document ).find( options.of ) : 25901 $( options.of ),
vendor: 10,992 bytes, lines 25902-26255
25902 25903 within = $.position.getWithinInfo( options.within ), 25904 scrollInfo = $.position.getScrollInfo( within ), 25905 collision = ( options.collision || "flip" ).split( " " ), 25906 offsets = {}; 25907 25908 dimensions = getDimensions( target ); 25909 if ( target[ 0 ].preventDefault ) { 25910 25911 // Force left top to allow flipping 25912 options.at = "left top"; 25913 } 25914 targetWidth = dimensions.width; 25915 targetHeight = dimensions.height; 25916 targetOffset = dimensions.offset; 25917 25918 // Clone to reuse original targetOffset later 25919 basePosition = $.extend( {}, targetOffset ); 25920 25921 // Force my and at to have valid horizontal and vertical positions 25922 // if a value is missing or invalid, it will be converted to center 25923 $.each( [ "my", "at" ], function() { 25924 var pos = ( options[ this ] || "" ).split( " " ), 25925 horizontalOffset, 25926 verticalOffset; 25927 25928 if ( pos.length === 1 ) { 25929 pos = rhorizontal.test( pos[ 0 ] ) ? 25930 pos.concat( [ "center" ] ) : 25931 rvertical.test( pos[ 0 ] ) ? 25932 [ "center" ].concat( pos ) : 25933 [ "center", "center" ]; 25934 } 25935 pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; 25936 pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; 25937 25938 // Calculate offsets 25939 horizontalOffset = roffset.exec( pos[ 0 ] ); 25940 verticalOffset = roffset.exec( pos[ 1 ] ); 25941 offsets[ this ] = [ 25942 horizontalOffset ? horizontalOffset[ 0 ] : 0, 25943 verticalOffset ? verticalOffset[ 0 ] : 0 25944 ]; 25945 25946 // Reduce to just the positions without the offsets 25947 options[ this ] = [ 25948 rposition.exec( pos[ 0 ] )[ 0 ], 25949 rposition.exec( pos[ 1 ] )[ 0 ] 25950 ]; 25951 } ); 25952 25953 // Normalize collision option 25954 if ( collision.length === 1 ) { 25955 collision[ 1 ] = collision[ 0 ]; 25956 } 25957 25958 if ( options.at[ 0 ] === "right" ) { 25959 basePosition.left += targetWidth; 25960 } else if ( options.at[ 0 ] === "center" ) { 25961 basePosition.left += targetWidth / 2; 25962 } 25963 25964 if ( options.at[ 1 ] === "bottom" ) { 25965 basePosition.top += targetHeight; 25966 } else if ( options.at[ 1 ] === "center" ) { 25967 basePosition.top += targetHeight / 2; 25968 } 25969 25970 atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); 25971 basePosition.left += atOffset[ 0 ]; 25972 basePosition.top += atOffset[ 1 ]; 25973 25974 return this.each( function() { 25975 var collisionPosition, using, 25976 elem = $( this ), 25977 elemWidth = elem.outerWidth(), 25978 elemHeight = elem.outerHeight(), 25979 marginLeft = parseCss( this, "marginLeft" ), 25980 marginTop = parseCss( this, "marginTop" ), 25981 collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + 25982 scrollInfo.width, 25983 collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + 25984 scrollInfo.height, 25985 position = $.extend( {}, basePosition ), 25986 myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); 25987 25988 if ( options.my[ 0 ] === "right" ) { 25989 position.left -= elemWidth; 25990 } else if ( options.my[ 0 ] === "center" ) { 25991 position.left -= elemWidth / 2; 25992 } 25993 25994 if ( options.my[ 1 ] === "bottom" ) { 25995 position.top -= elemHeight; 25996 } else if ( options.my[ 1 ] === "center" ) { 25997 position.top -= elemHeight / 2; 25998 } 25999 26000 position.left += myOffset[ 0 ]; 26001 position.top += myOffset[ 1 ]; 26002 26003 collisionPosition = { 26004 marginLeft: marginLeft, 26005 marginTop: marginTop 26006 }; 26007 26008 $.each( [ "left", "top" ], function( i, dir ) { 26009 if ( $.ui.position[ collision[ i ] ] ) { 26010 $.ui.position[ collision[ i ] ][ dir ]( position, { 26011 targetWidth: targetWidth, 26012 targetHeight: targetHeight, 26013 elemWidth: elemWidth, 26014 elemHeight: elemHeight, 26015 collisionPosition: collisionPosition, 26016 collisionWidth: collisionWidth, 26017 collisionHeight: collisionHeight, 26018 offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], 26019 my: options.my, 26020 at: options.at, 26021 within: within, 26022 elem: elem 26023 } ); 26024 } 26025 } ); 26026 26027 if ( options.using ) { 26028 26029 // Adds feedback as second argument to using callback, if present 26030 using = function( props ) { 26031 var left = targetOffset.left - position.left, 26032 right = left + targetWidth - elemWidth, 26033 top = targetOffset.top - position.top, 26034 bottom = top + targetHeight - elemHeight, 26035 feedback = { 26036 target: { 26037 element: target, 26038 left: targetOffset.left, 26039 top: targetOffset.top, 26040 width: targetWidth, 26041 height: targetHeight 26042 }, 26043 element: { 26044 element: elem, 26045 left: position.left, 26046 top: position.top, 26047 width: elemWidth, 26048 height: elemHeight 26049 }, 26050 horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", 26051 vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" 26052 }; 26053 if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { 26054 feedback.horizontal = "center"; 26055 } 26056 if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { 26057 feedback.vertical = "middle"; 26058 } 26059 if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { 26060 feedback.important = "horizontal"; 26061 } else { 26062 feedback.important = "vertical"; 26063 } 26064 options.using.call( this, props, feedback ); 26065 }; 26066 } 26067 26068 elem.offset( $.extend( position, { using: using } ) ); 26069 } ); 26070}; 26071 26072$.ui.position = { 26073 fit: { 26074 left: function( position, data ) { 26075 var within = data.within, 26076 withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, 26077 outerWidth = within.width, 26078 collisionPosLeft = position.left - data.collisionPosition.marginLeft, 26079 overLeft = withinOffset - collisionPosLeft, 26080 overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, 26081 newOverRight; 26082 26083 // Element is wider than within 26084 if ( data.collisionWidth > outerWidth ) { 26085 26086 // Element is initially over the left side of within 26087 if ( overLeft > 0 && overRight <= 0 ) { 26088 newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - 26089 withinOffset; 26090 position.left += overLeft - newOverRight; 26091 26092 // Element is initially over right side of within 26093 } else if ( overRight > 0 && overLeft <= 0 ) { 26094 position.left = withinOffset; 26095 26096 // Element is initially over both left and right sides of within 26097 } else { 26098 if ( overLeft > overRight ) { 26099 position.left = withinOffset + outerWidth - data.collisionWidth; 26100 } else { 26101 position.left = withinOffset; 26102 } 26103 } 26104 26105 // Too far left -> align with left edge 26106 } else if ( overLeft > 0 ) { 26107 position.left += overLeft; 26108 26109 // Too far right -> align with right edge 26110 } else if ( overRight > 0 ) { 26111 position.left -= overRight; 26112 26113 // Adjust based on position and margin 26114 } else { 26115 position.left = max( position.left - collisionPosLeft, position.left ); 26116 } 26117 }, 26118 top: function( position, data ) { 26119 var within = data.within, 26120 withinOffset = within.isWindow ? within.scrollTop : within.offset.top, 26121 outerHeight = data.within.height, 26122 collisionPosTop = position.top - data.collisionPosition.marginTop, 26123 overTop = withinOffset - collisionPosTop, 26124 overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, 26125 newOverBottom; 26126 26127 // Element is taller than within 26128 if ( data.collisionHeight > outerHeight ) { 26129 26130 // Element is initially over the top of within 26131 if ( overTop > 0 && overBottom <= 0 ) { 26132 newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - 26133 withinOffset; 26134 position.top += overTop - newOverBottom; 26135 26136 // Element is initially over bottom of within 26137 } else if ( overBottom > 0 && overTop <= 0 ) { 26138 position.top = withinOffset; 26139 26140 // Element is initially over both top and bottom of within 26141 } else { 26142 if ( overTop > overBottom ) { 26143 position.top = withinOffset + outerHeight - data.collisionHeight; 26144 } else { 26145 position.top = withinOffset; 26146 } 26147 } 26148 26149 // Too far up -> align with top 26150 } else if ( overTop > 0 ) { 26151 position.top += overTop; 26152 26153 // Too far down -> align with bottom edge 26154 } else if ( overBottom > 0 ) { 26155 position.top -= overBottom; 26156 26157 // Adjust based on position and margin 26158 } else { 26159 position.top = max( position.top - collisionPosTop, position.top ); 26160 } 26161 } 26162 }, 26163 flip: { 26164 left: function( position, data ) { 26165 var within = data.within, 26166 withinOffset = within.offset.left + within.scrollLeft, 26167 outerWidth = within.width, 26168 offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, 26169 collisionPosLeft = position.left - data.collisionPosition.marginLeft, 26170 overLeft = collisionPosLeft - offsetLeft, 26171 overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, 26172 myOffset = data.my[ 0 ] === "left" ? 26173 -data.elemWidth : 26174 data.my[ 0 ] === "right" ? 26175 data.elemWidth : 26176 0, 26177 atOffset = data.at[ 0 ] === "left" ? 26178 data.targetWidth : 26179 data.at[ 0 ] === "right" ? 26180 -data.targetWidth : 26181 0, 26182 offset = -2 * data.offset[ 0 ], 26183 newOverRight, 26184 newOverLeft; 26185 26186 if ( overLeft < 0 ) { 26187 newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - 26188 outerWidth - withinOffset; 26189 if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { 26190 position.left += myOffset + atOffset + offset; 26191 } 26192 } else if ( overRight > 0 ) { 26193 newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + 26194 atOffset + offset - offsetLeft; 26195 if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { 26196 position.left += myOffset + atOffset + offset; 26197 } 26198 } 26199 }, 26200 top: function( position, data ) { 26201 var within = data.within, 26202 withinOffset = within.offset.top + within.scrollTop, 26203 outerHeight = within.height, 26204 offsetTop = within.isWindow ? within.scrollTop : within.offset.top, 26205 collisionPosTop = position.top - data.collisionPosition.marginTop, 26206 overTop = collisionPosTop - offsetTop, 26207 overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, 26208 top = data.my[ 1 ] === "top", 26209 myOffset = top ? 26210 -data.elemHeight : 26211 data.my[ 1 ] === "bottom" ? 26212 data.elemHeight : 26213 0, 26214 atOffset = data.at[ 1 ] === "top" ? 26215 data.targetHeight : 26216 data.at[ 1 ] === "bottom" ? 26217 -data.targetHeight : 26218 0, 26219 offset = -2 * data.offset[ 1 ], 26220 newOverTop, 26221 newOverBottom; 26222 if ( overTop < 0 ) { 26223 newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - 26224 outerHeight - withinOffset; 26225 if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { 26226 position.top += myOffset + atOffset + offset; 26227 } 26228 } else if ( overBottom > 0 ) { 26229 newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + 26230 offset - offsetTop; 26231 if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { 26232 position.top += myOffset + atOffset + offset; 26233 } 26234 } 26235 } 26236 }, 26237 flipfit: { 26238 left: function() { 26239 $.ui.position.flip.left.apply( this, arguments ); 26240 $.ui.position.fit.left.apply( this, arguments ); 26241 }, 26242 top: function() { 26243 $.ui.position.flip.top.apply( this, arguments ); 26244 $.ui.position.fit.top.apply( this, arguments ); 26245 } 26246 } 26247}; 26248 26249} )(); 26250 26251var position = $.ui.position; 26252 26253 26254/*! 26255 * jQuery UI :data 1.1
262553.2 26256 * http://jqueryui.com 26257 * 26258 * Copyright jQuery Foundation and other contributors 26259 * Released under the MIT license. 26260 * http://jquery.org/license 26261 */ 26262 26263//>>label: :data Selector
vendor: 1,696 bytes, lines 26264-26332
26264//>>group: Core 26265//>>description: Selects elements which have data stored under the specified key. 26266//>>docs: http://api.jqueryui.com/data-selector/ 26267 26268 26269var data = $.extend( $.expr.pseudos, { 26270 data: $.expr.createPseudo ? 26271 $.expr.createPseudo( function( dataName ) { 26272 return function( elem ) { 26273 return !!$.data( elem, dataName ); 26274 }; 26275 } ) : 26276 26277 // Support: jQuery <1.8 26278 function( elem, i, match ) { 26279 return !!$.data( elem, match[ 3 ] ); 26280 } 26281} ); 26282 26283/*! 26284 * jQuery UI Disable Selection 1.13.2 26285 * http://jqueryui.com 26286 * 26287 * Copyright jQuery Foundation and other contributors 26288 * Released under the MIT license. 26289 * http://jquery.org/license 26290 */ 26291 26292//>>label: disableSelection 26293//>>group: Core 26294//>>description: Disable selection of text content within the set of matched elements. 26295//>>docs: http://api.jqueryui.com/disableSelection/ 26296 26297// This file is deprecated 26298 26299var disableSelection = $.fn.extend( { 26300 disableSelection: ( function() { 26301 var eventType = "onselectstart" in document.createElement( "div" ) ? 26302 "selectstart" : 26303 "mousedown"; 26304 26305 return function() { 26306 return this.on( eventType + ".ui-disableSelection", function( event ) { 26307 event.preventDefault(); 26308 } ); 26309 }; 26310 } )(), 26311 26312 enableSelection: function() { 26313 return this.off( ".ui-disableSelection" ); 26314 } 26315} ); 26316 26317 26318 26319// Create a local jQuery because jQuery Color relies on it and the 26320// global may not exist with AMD and a custom build (#10199). 26321// This module is a noop if used as a regular AMD module. 26322// eslint-disable-next-line no-unused-vars 26323var jQuery = $; 26324 26325 26326/*! 26327 * jQuery Color Animations v2.2.0 26328 * https://github.com/jquery/jquery-color 26329 * 26330 * Copyright OpenJS Foundation and other contributors 26331 * Released under the MIT license. 26332 * http
vendor: 16,926 bytes, lines 26332-27039
26332://jquery.org/license 26333 * 26334 * Date: Sun May 10 09:02:36 2020 +0200 26335 */ 26336 26337 26338 26339 var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " + 26340 "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", 26341 26342 class2type = {}, 26343 toString = class2type.toString, 26344 26345 // plusequals test for += 100 -= 100 26346 rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, 26347 26348 // a set of RE's that can match strings and generate color tuples. 26349 stringParsers = [ { 26350 re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, 26351 parse: function( execResult ) { 26352 return [ 26353 execResult[ 1 ], 26354 execResult[ 2 ], 26355 execResult[ 3 ], 26356 execResult[ 4 ] 26357 ]; 26358 } 26359 }, { 26360 re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, 26361 parse: function( execResult ) { 26362 return [ 26363 execResult[ 1 ] * 2.55, 26364 execResult[ 2 ] * 2.55, 26365 execResult[ 3 ] * 2.55, 26366 execResult[ 4 ] 26367 ]; 26368 } 26369 }, { 26370 26371 // this regex ignores A-F because it's compared against an already lowercased string 26372 re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/, 26373 parse: function( execResult ) { 26374 return [ 26375 parseInt( execResult[ 1 ], 16 ), 26376 parseInt( execResult[ 2 ], 16 ), 26377 parseInt( execResult[ 3 ], 16 ), 26378 execResult[ 4 ] ? 26379 ( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) : 26380 1 26381 ]; 26382 } 26383 }, { 26384 26385 // this regex ignores A-F because it's compared against an already lowercased string 26386 re: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/, 26387 parse: function( execResult ) { 26388 return [ 26389 parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), 26390 parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), 26391 parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ), 26392 execResult[ 4 ] ? 26393 ( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 ) 26394 .toFixed( 2 ) : 26395 1 26396 ]; 26397 } 26398 }, { 26399 re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, 26400 space: "hsla", 26401 parse: function( execResult ) { 26402 return [ 26403 execResult[ 1 ], 26404 execResult[ 2 ] / 100, 26405 execResult[ 3 ] / 100, 26406 execResult[ 4 ] 26407 ]; 26408 } 26409 } ], 26410 26411 // jQuery.Color( ) 26412 color = jQuery.Color = function( color, green, blue, alpha ) { 26413 return new jQuery.Color.fn.parse( color, green, blue, alpha ); 26414 }, 26415 spaces = { 26416 rgba: { 26417 props: { 26418 red: { 26419 idx: 0, 26420 type: "byte" 26421 }, 26422 green: { 26423 idx: 1, 26424 type: "byte" 26425 }, 26426 blue: { 26427 idx: 2, 26428 type: "byte" 26429 } 26430 } 26431 }, 26432 26433 hsla: { 26434 props: { 26435 hue: { 26436 idx: 0, 26437 type: "degrees" 26438 }, 26439 saturation: { 26440 idx: 1, 26441 type: "percent" 26442 }, 26443 lightness: { 26444 idx: 2, 26445 type: "percent" 26446 } 26447 } 26448 } 26449 }, 26450 propTypes = { 26451 "byte": { 26452 floor: true, 26453 max: 255 26454 }, 26455 "percent": { 26456 max: 1 26457 }, 26458 "degrees": { 26459 mod: 360, 26460 floor: true 26461 } 26462 }, 26463 support = color.support = {}, 26464 26465 // element for support tests 26466 supportElem = jQuery( "<p>" )[ 0 ], 26467 26468 // colors = jQuery.Color.names 26469 colors, 26470 26471 // local aliases of functions called often 26472 each = jQuery.each; 26473 26474// determine rgba support immediately 26475supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; 26476support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; 26477 26478// define cache name and alpha properties 26479// for rgba and hsla spaces 26480each( spaces, function( spaceName, space ) { 26481 space.cache = "_" + spaceName; 26482 space.props.alpha = { 26483 idx: 3, 26484 type: "percent", 26485 def: 1 26486 }; 26487} ); 26488 26489// Populate the class2type map 26490jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 26491 function( _i, name ) { 26492 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 26493 } ); 26494 26495function getType( obj ) { 26496 if ( obj == null ) { 26497 return obj + ""; 26498 } 26499 26500 return typeof obj === "object" ? 26501 class2type[ toString.call( obj ) ] || "object" : 26502 typeof obj; 26503} 26504 26505function clamp( value, prop, allowEmpty ) { 26506 var type = propTypes[ prop.type ] || {}; 26507 26508 if ( value == null ) { 26509 return ( allowEmpty || !prop.def ) ? null : prop.def; 26510 } 26511 26512 // ~~ is an short way of doing floor for positive numbers 26513 value = type.floor ? ~~value : parseFloat( value ); 26514 26515 // IE will pass in empty strings as value for alpha, 26516 // which will hit this case 26517 if ( isNaN( value ) ) { 26518 return prop.def; 26519 } 26520 26521 if ( type.mod ) { 26522 26523 // we add mod before modding to make sure that negatives values 26524 // get converted properly: -10 -> 350 26525 return ( value + type.mod ) % type.mod; 26526 } 26527 26528 // for now all property types without mod have min and max 26529 return Math.min( type.max, Math.max( 0, value ) ); 26530} 26531 26532function stringParse( string ) { 26533 var inst = color(), 26534 rgba = inst._rgba = []; 26535 26536 string = string.toLowerCase(); 26537 26538 each( stringParsers, function( _i, parser ) { 26539 var parsed, 26540 match = parser.re.exec( string ), 26541 values = match && parser.parse( match ), 26542 spaceName = parser.space || "rgba"; 26543 26544 if ( values ) { 26545 parsed = inst[ spaceName ]( values ); 26546 26547 // if this was an rgba parse the assignment might happen twice 26548 // oh well.... 26549 inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; 26550 rgba = inst._rgba = parsed._rgba; 26551 26552 // exit each( stringParsers ) here because we matched 26553 return false; 26554 } 26555 } ); 26556 26557 // Found a stringParser that handled it 26558 if ( rgba.length ) { 26559 26560 // if this came from a parsed string, force "transparent" when alpha is 0 26561 // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) 26562 if ( rgba.join() === "0,0,0,0" ) { 26563 jQuery.extend( rgba, colors.transparent ); 26564 } 26565 return inst; 26566 } 26567 26568 // named colors 26569 return colors[ string ]; 26570} 26571 26572color.fn = jQuery.extend( color.prototype, { 26573 parse: function( red, green, blue, alpha ) { 26574 if ( red === undefined ) { 26575 this._rgba = [ null, null, null, null ]; 26576 return this; 26577 } 26578 if ( red.jquery || red.nodeType ) { 26579 red = jQuery( red ).css( green ); 26580 green = undefined; 26581 } 26582 26583 var inst = this, 26584 type = getType( red ), 26585 rgba = this._rgba = []; 26586 26587 // more than 1 argument specified - assume ( red, green, blue, alpha ) 26588 if ( green !== undefined ) { 26589 red = [ red, green, blue, alpha ]; 26590 type = "array"; 26591 } 26592 26593 if ( type === "string" ) { 26594 return this.parse( stringParse( red ) || colors._default ); 26595 } 26596 26597 if ( type === "array" ) { 26598 each( spaces.rgba.props, function( _key, prop ) { 26599 rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); 26600 } ); 26601 return this; 26602 } 26603 26604 if ( type === "object" ) { 26605 if ( red instanceof color ) { 26606 each( spaces, function( _spaceName, space ) { 26607 if ( red[ space.cache ] ) { 26608 inst[ space.cache ] = red[ space.cache ].slice(); 26609 } 26610 } ); 26611 } else { 26612 each( spaces, function( _spaceName, space ) { 26613 var cache = space.cache; 26614 each( space.props, function( key, prop ) { 26615 26616 // if the cache doesn't exist, and we know how to convert 26617 if ( !inst[ cache ] && space.to ) { 26618 26619 // if the value was null, we don't need to copy it 26620 // if the key was alpha, we don't need to copy it either 26621 if ( key === "alpha" || red[ key ] == null ) { 26622 return; 26623 } 26624 inst[ cache ] = space.to( inst._rgba ); 26625 } 26626 26627 // this is the only case where we allow nulls for ALL properties. 26628 // call clamp with alwaysAllowEmpty 26629 inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); 26630 } ); 26631 26632 // everything defined but alpha? 26633 if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { 26634 26635 // use the default of 1 26636 if ( inst[ cache ][ 3 ] == null ) { 26637 inst[ cache ][ 3 ] = 1; 26638 } 26639 26640 if ( space.from ) { 26641 inst._rgba = space.from( inst[ cache ] ); 26642 } 26643 } 26644 } ); 26645 } 26646 return this; 26647 } 26648 }, 26649 is: function( compare ) { 26650 var is = color( compare ), 26651 same = true, 26652 inst = this; 26653 26654 each( spaces, function( _, space ) { 26655 var localCache, 26656 isCache = is[ space.cache ]; 26657 if ( isCache ) { 26658 localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; 26659 each( space.props, function( _, prop ) { 26660 if ( isCache[ prop.idx ] != null ) { 26661 same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); 26662 return same; 26663 } 26664 } ); 26665 } 26666 return same; 26667 } ); 26668 return same; 26669 }, 26670 _space: function() { 26671 var used = [], 26672 inst = this; 26673 each( spaces, function( spaceName, space ) { 26674 if ( inst[ space.cache ] ) { 26675 used.push( spaceName ); 26676 } 26677 } ); 26678 return used.pop(); 26679 }, 26680 transition: function( other, distance ) { 26681 var end = color( other ), 26682 spaceName = end._space(), 26683 space = spaces[ spaceName ], 26684 startColor = this.alpha() === 0 ? color( "transparent" ) : this, 26685 start = startColor[ space.cache ] || space.to( startColor._rgba ), 26686 result = start.slice(); 26687 26688 end = end[ space.cache ]; 26689 each( space.props, function( _key, prop ) { 26690 var index = prop.idx, 26691 startValue = start[ index ], 26692 endValue = end[ index ], 26693 type = propTypes[ prop.type ] || {}; 26694 26695 // if null, don't override start value 26696 if ( endValue === null ) { 26697 return; 26698 } 26699 26700 // if null - use end 26701 if ( startValue === null ) { 26702 result[ index ] = endValue; 26703 } else { 26704 if ( type.mod ) { 26705 if ( endValue - startValue > type.mod / 2 ) { 26706 startValue += type.mod; 26707 } else if ( startValue - endValue > type.mod / 2 ) { 26708 startValue -= type.mod; 26709 } 26710 } 26711 result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); 26712 } 26713 } ); 26714 return this[ spaceName ]( result ); 26715 }, 26716 blend: function( opaque ) { 26717 26718 // if we are already opaque - return ourself 26719 if ( this._rgba[ 3 ] === 1 ) { 26720 return this; 26721 } 26722 26723 var rgb = this._rgba.slice(), 26724 a = rgb.pop(), 26725 blend = color( opaque )._rgba; 26726 26727 return color( jQuery.map( rgb, function( v, i ) { 26728 return ( 1 - a ) * blend[ i ] + a * v; 26729 } ) ); 26730 }, 26731 toRgbaString: function() { 26732 var prefix = "rgba(", 26733 rgba = jQuery.map( this._rgba, function( v, i ) { 26734 if ( v != null ) { 26735 return v; 26736 } 26737 return i > 2 ? 1 : 0; 26738 } ); 26739 26740 if ( rgba[ 3 ] === 1 ) { 26741 rgba.pop(); 26742 prefix = "rgb("; 26743 } 26744 26745 return prefix + rgba.join() + ")"; 26746 }, 26747 toHslaString: function() { 26748 var prefix = "hsla(", 26749 hsla = jQuery.map( this.hsla(), function( v, i ) { 26750 if ( v == null ) { 26751 v = i > 2 ? 1 : 0; 26752 } 26753 26754 // catch 1 and 2 26755 if ( i && i < 3 ) { 26756 v = Math.round( v * 100 ) + "%"; 26757 } 26758 return v; 26759 } ); 26760 26761 if ( hsla[ 3 ] === 1 ) { 26762 hsla.pop(); 26763 prefix = "hsl("; 26764 } 26765 return prefix + hsla.join() + ")"; 26766 }, 26767 toHexString: function( includeAlpha ) { 26768 var rgba = this._rgba.slice(), 26769 alpha = rgba.pop(); 26770 26771 if ( includeAlpha ) { 26772 rgba.push( ~~( alpha * 255 ) ); 26773 } 26774 26775 return "#" + jQuery.map( rgba, function( v ) { 26776 26777 // default to 0 when nulls exist 26778 v = ( v || 0 ).toString( 16 ); 26779 return v.length === 1 ? "0" + v : v; 26780 } ).join( "" ); 26781 }, 26782 toString: function() { 26783 return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); 26784 } 26785} ); 26786color.fn.parse.prototype = color.fn; 26787 26788// hsla conversions adapted from: 26789// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 26790 26791function hue2rgb( p, q, h ) { 26792 h = ( h + 1 ) % 1; 26793 if ( h * 6 < 1 ) { 26794 return p + ( q - p ) * h * 6; 26795 } 26796 if ( h * 2 < 1 ) { 26797 return q; 26798 } 26799 if ( h * 3 < 2 ) { 26800 return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6; 26801 } 26802 return p; 26803} 26804 26805spaces.hsla.to = function( rgba ) { 26806 if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) { 26807 return [ null, null, null, rgba[ 3 ] ]; 26808 } 26809 var r = rgba[ 0 ] / 255, 26810 g = rgba[ 1 ] / 255, 26811 b = rgba[ 2 ] / 255, 26812 a = rgba[ 3 ], 26813 max = Math.max( r, g, b ), 26814 min = Math.min( r, g, b ), 26815 diff = max - min, 26816 add = max + min, 26817 l = add * 0.5, 26818 h, s; 26819 26820 if ( min === max ) { 26821 h = 0; 26822 } else if ( r === max ) { 26823 h = ( 60 * ( g - b ) / diff ) + 360; 26824 } else if ( g === max ) { 26825 h = ( 60 * ( b - r ) / diff ) + 120; 26826 } else { 26827 h = ( 60 * ( r - g ) / diff ) + 240; 26828 } 26829 26830 // chroma (diff) == 0 means greyscale which, by definition, saturation = 0% 26831 // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) 26832 if ( diff === 0 ) { 26833 s = 0; 26834 } else if ( l <= 0.5 ) { 26835 s = diff / add; 26836 } else { 26837 s = diff / ( 2 - add ); 26838 } 26839 return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ]; 26840}; 26841 26842spaces.hsla.from = function( hsla ) { 26843 if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) { 26844 return [ null, null, null, hsla[ 3 ] ]; 26845 } 26846 var h = hsla[ 0 ] / 360, 26847 s = hsla[ 1 ], 26848 l = hsla[ 2 ], 26849 a = hsla[ 3 ], 26850 q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s, 26851 p = 2 * l - q; 26852 26853 return [ 26854 Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ), 26855 Math.round( hue2rgb( p, q, h ) * 255 ), 26856 Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ), 26857 a 26858 ]; 26859}; 26860 26861 26862each( spaces, function( spaceName, space ) { 26863 var props = space.props, 26864 cache = space.cache, 26865 to = space.to, 26866 from = space.from; 26867 26868 // makes rgba() and hsla() 26869 color.fn[ spaceName ] = function( value ) { 26870 26871 // generate a cache for this space if it doesn't exist 26872 if ( to && !this[ cache ] ) { 26873 this[ cache ] = to( this._rgba ); 26874 } 26875 if ( value === undefined ) { 26876 return this[ cache ].slice(); 26877 } 26878 26879 var ret, 26880 type = getType( value ), 26881 arr = ( type === "array" || type === "object" ) ? value : arguments, 26882 local = this[ cache ].slice(); 26883 26884 each( props, function( key, prop ) { 26885 var val = arr[ type === "object" ? key : prop.idx ]; 26886 if ( val == null ) { 26887 val = local[ prop.idx ]; 26888 } 26889 local[ prop.idx ] = clamp( val, prop ); 26890 } ); 26891 26892 if ( from ) { 26893 ret = color( from( local ) ); 26894 ret[ cache ] = local; 26895 return ret; 26896 } else { 26897 return color( local ); 26898 } 26899 }; 26900 26901 // makes red() green() blue() alpha() hue() saturation() lightness() 26902 each( props, function( key, prop ) { 26903 26904 // alpha is included in more than one space 26905 if ( color.fn[ key ] ) { 26906 return; 26907 } 26908 color.fn[ key ] = function( value ) { 26909 var local, cur, match, fn, 26910 vtype = getType( value ); 26911 26912 if ( key === "alpha" ) { 26913 fn = this._hsla ? "hsla" : "rgba"; 26914 } else { 26915 fn = spaceName; 26916 } 26917 local = this[ fn ](); 26918 cur = local[ prop.idx ]; 26919 26920 if ( vtype === "undefined" ) { 26921 return cur; 26922 } 26923 26924 if ( vtype === "function" ) { 26925 value = value.call( this, cur ); 26926 vtype = getType( value ); 26927 } 26928 if ( value == null && prop.empty ) { 26929 return this; 26930 } 26931 if ( vtype === "string" ) { 26932 match = rplusequals.exec( value ); 26933 if ( match ) { 26934 value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 ); 26935 } 26936 } 26937 local[ prop.idx ] = value; 26938 return this[ fn ]( local ); 26939 }; 26940 } ); 26941} ); 26942 26943// add cssHook and .fx.step function for each named hook. 26944// accept a space separated string of properties 26945color.hook = function( hook ) { 26946 var hooks = hook.split( " " ); 26947 each( hooks, function( _i, hook ) { 26948 jQuery.cssHooks[ hook ] = { 26949 set: function( elem, value ) { 26950 var parsed, curElem, 26951 backgroundColor = ""; 26952 26953 if ( value !== "transparent" && ( getType( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) { 26954 value = color( parsed || value ); 26955 if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { 26956 curElem = hook === "backgroundColor" ? elem.parentNode : elem; 26957 while ( 26958 ( backgroundColor === "" || backgroundColor === "transparent" ) && 26959 curElem && curElem.style 26960 ) { 26961 try { 26962 backgroundColor = jQuery.css( curElem, "backgroundColor" ); 26963 curElem = curElem.parentNode; 26964 } catch ( e ) { 26965 } 26966 } 26967 26968 value = value.blend( backgroundColor && backgroundColor !== "transparent" ? 26969 backgroundColor : 26970 "_default" ); 26971 } 26972 26973 value = value.toRgbaString(); 26974 } 26975 try { 26976 elem.style[ hook ] = value; 26977 } catch ( e ) { 26978 26979 // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit' 26980 } 26981 } 26982 }; 26983 jQuery.fx.step[ hook ] = function( fx ) { 26984 if ( !fx.colorInit ) { 26985 fx.start = color( fx.elem, hook ); 26986 fx.end = color( fx.end ); 26987 fx.colorInit = true; 26988 } 26989 jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) ); 26990 }; 26991 } ); 26992 26993}; 26994 26995color.hook( stepHooks ); 26996 26997jQuery.cssHooks.borderColor = { 26998 expand: function( value ) { 26999 var expanded = {}; 27000 27001 each( [ "Top", "Right", "Bottom", "Left" ], function( _i, part ) { 27002 expanded[ "border" + part + "Color" ] = value; 27003 } ); 27004 return expanded; 27005 } 27006}; 27007 27008// Basic color names only. 27009// Usage of any of the other color names requires adding yourself or including 27010// jquery.color.svg-names.js. 27011colors = jQuery.Color.names = { 27012 27013 // 4.1. Basic color keywords 27014 aqua: "#00ffff", 27015 black: "#000000", 27016 blue: "#0000ff", 27017 fuchsia: "#ff00ff", 27018 gray: "#808080", 27019 green: "#008000", 27020 lime: "#00ff00", 27021 maroon: "#800000", 27022 navy: "#000080", 27023 olive: "#808000", 27024 purple: "#800080", 27025 red: "#ff0000", 27026 silver: "#c0c0c0", 27027 teal: "#008080", 27028 white: "#ffffff", 27029 yellow: "#ffff00", 27030 27031 // 4.2.3. "transparent" color keyword 27032 transparent: [ null, null, null, 0 ], 27033 27034 _default: "#ffffff" 27035}; 27036 27037 27038/*! 27039 * jQuery UI Effects 1.13.
270392 27040 * http://jqueryui.com 27041 * 27042 * Copyright jQuery Foundation and other contributors 27043 * Released under the MIT license. 27044 * http://jquery.org/license 27045 */ 27046 27047//>>label: Effects Core 27048//>>group: Effects 27049/* eslint-disable max-len */ 27050//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects. 27051/* eslint-enable max-len */ 27052//>>docs: http://api.jqueryui.com/category/effects-core/ 27053//>>demos: http
vendor: 9,484 bytes, lines 27053-27423
27053://jqueryui.com/effect/ 27054 27055 27056var dataSpace = "ui-effects-", 27057 dataSpaceStyle = "ui-effects-style", 27058 dataSpaceAnimated = "ui-effects-animated"; 27059 27060$.effects = { 27061 effect: {} 27062}; 27063 27064/******************************************************************************/ 27065/****************************** CLASS ANIMATIONS ******************************/ 27066/******************************************************************************/ 27067( function() { 27068 27069var classAnimationActions = [ "add", "remove", "toggle" ], 27070 shorthandStyles = { 27071 border: 1, 27072 borderBottom: 1, 27073 borderColor: 1, 27074 borderLeft: 1, 27075 borderRight: 1, 27076 borderTop: 1, 27077 borderWidth: 1, 27078 margin: 1, 27079 padding: 1 27080 }; 27081 27082$.each( 27083 [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], 27084 function( _, prop ) { 27085 $.fx.step[ prop ] = function( fx ) { 27086 if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { 27087 jQuery.style( fx.elem, prop, fx.end ); 27088 fx.setAttr = true; 27089 } 27090 }; 27091 } 27092); 27093 27094function camelCase( string ) { 27095 return string.replace( /-([\da-z])/gi, function( all, letter ) { 27096 return letter.toUpperCase(); 27097 } ); 27098} 27099 27100function getElementStyles( elem ) { 27101 var key, len, 27102 style = elem.ownerDocument.defaultView ? 27103 elem.ownerDocument.defaultView.getComputedStyle( elem, null ) : 27104 elem.currentStyle, 27105 styles = {}; 27106 27107 if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { 27108 len = style.length; 27109 while ( len-- ) { 27110 key = style[ len ]; 27111 if ( typeof style[ key ] === "string" ) { 27112 styles[ camelCase( key ) ] = style[ key ]; 27113 } 27114 } 27115 27116 // Support: Opera, IE <9 27117 } else { 27118 for ( key in style ) { 27119 if ( typeof style[ key ] === "string" ) { 27120 styles[ key ] = style[ key ]; 27121 } 27122 } 27123 } 27124 27125 return styles; 27126} 27127 27128function styleDifference( oldStyle, newStyle ) { 27129 var diff = {}, 27130 name, value; 27131 27132 for ( name in newStyle ) { 27133 value = newStyle[ name ]; 27134 if ( oldStyle[ name ] !== value ) { 27135 if ( !shorthandStyles[ name ] ) { 27136 if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { 27137 diff[ name ] = value; 27138 } 27139 } 27140 } 27141 } 27142 27143 return diff; 27144} 27145 27146// Support: jQuery <1.8 27147if ( !$.fn.addBack ) { 27148 $.fn.addBack = function( selector ) { 27149 return this.add( selector == null ? 27150 this.prevObject : this.prevObject.filter( selector ) 27151 ); 27152 }; 27153} 27154 27155$.effects.animateClass = function( value, duration, easing, callback ) { 27156 var o = $.speed( duration, easing, callback ); 27157 27158 return this.queue( function() { 27159 var animated = $( this ), 27160 baseClass = animated.attr( "class" ) || "", 27161 applyClassChange, 27162 allAnimations = o.children ? animated.find( "*" ).addBack() : animated; 27163 27164 // Map the animated objects to store the original styles. 27165 allAnimations = allAnimations.map( function() { 27166 var el = $( this ); 27167 return { 27168 el: el, 27169 start: getElementStyles( this ) 27170 }; 27171 } ); 27172 27173 // Apply class change 27174 applyClassChange = function() { 27175 $.each( classAnimationActions, function( i, action ) { 27176 if ( value[ action ] ) { 27177 animated[ action + "Class" ]( value[ action ] ); 27178 } 27179 } ); 27180 }; 27181 applyClassChange(); 27182 27183 // Map all animated objects again - calculate new styles and diff 27184 allAnimations = allAnimations.map( function() { 27185 this.end = getElementStyles( this.el[ 0 ] ); 27186 this.diff = styleDifference( this.start, this.end ); 27187 return this; 27188 } ); 27189 27190 // Apply original class 27191 animated.attr( "class", baseClass ); 27192 27193 // Map all animated objects again - this time collecting a promise 27194 allAnimations = allAnimations.map( function() { 27195 var styleInfo = this, 27196 dfd = $.Deferred(), 27197 opts = $.extend( {}, o, { 27198 queue: false, 27199 complete: function() { 27200 dfd.resolve( styleInfo ); 27201 } 27202 } ); 27203 27204 this.el.animate( this.diff, opts ); 27205 return dfd.promise(); 27206 } ); 27207 27208 // Once all animations have completed: 27209 $.when.apply( $, allAnimations.get() ).done( function() { 27210 27211 // Set the final class 27212 applyClassChange(); 27213 27214 // For each animated element, 27215 // clear all css properties that were animated 27216 $.each( arguments, function() { 27217 var el = this.el; 27218 $.each( this.diff, function( key ) { 27219 el.css( key, "" ); 27220 } ); 27221 } ); 27222 27223 // This is guarnteed to be there if you use jQuery.speed() 27224 // it also handles dequeuing the next anim... 27225 o.complete.call( animated[ 0 ] ); 27226 } ); 27227 } ); 27228}; 27229 27230$.fn.extend( { 27231 addClass: ( function( orig ) { 27232 return function( classNames, speed, easing, callback ) { 27233 return speed ? 27234 $.effects.animateClass.call( this, 27235 { add: classNames }, speed, easing, callback ) : 27236 orig.apply( this, arguments ); 27237 }; 27238 } )( $.fn.addClass ), 27239 27240 removeClass: ( function( orig ) { 27241 return function( classNames, speed, easing, callback ) { 27242 return arguments.length > 1 ? 27243 $.effects.animateClass.call( this, 27244 { remove: classNames }, speed, easing, callback ) : 27245 orig.apply( this, arguments ); 27246 }; 27247 } )( $.fn.removeClass ), 27248 27249 toggleClass: ( function( orig ) { 27250 return function( classNames, force, speed, easing, callback ) { 27251 if ( typeof force === "boolean" || force === undefined ) { 27252 if ( !speed ) { 27253 27254 // Without speed parameter 27255 return orig.apply( this, arguments ); 27256 } else { 27257 return $.effects.animateClass.call( this, 27258 ( force ? { add: classNames } : { remove: classNames } ), 27259 speed, easing, callback ); 27260 } 27261 } else { 27262 27263 // Without force parameter 27264 return $.effects.animateClass.call( this, 27265 { toggle: classNames }, force, speed, easing ); 27266 } 27267 }; 27268 } )( $.fn.toggleClass ), 27269 27270 switchClass: function( remove, add, speed, easing, callback ) { 27271 return $.effects.animateClass.call( this, { 27272 add: add, 27273 remove: remove 27274 }, speed, easing, callback ); 27275 } 27276} ); 27277 27278} )(); 27279 27280/******************************************************************************/ 27281/*********************************** EFFECTS **********************************/ 27282/******************************************************************************/ 27283 27284( function() { 27285 27286if ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) { 27287 $.expr.pseudos.animated = ( function( orig ) { 27288 return function( elem ) { 27289 return !!$( elem ).data( dataSpaceAnimated ) || orig( elem ); 27290 }; 27291 } )( $.expr.pseudos.animated ); 27292} 27293 27294if ( $.uiBackCompat !== false ) { 27295 $.extend( $.effects, { 27296 27297 // Saves a set of properties in a data storage 27298 save: function( element, set ) { 27299 var i = 0, length = set.length; 27300 for ( ; i < length; i++ ) { 27301 if ( set[ i ] !== null ) { 27302 element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); 27303 } 27304 } 27305 }, 27306 27307 // Restores a set of previously saved properties from a data storage 27308 restore: function( element, set ) { 27309 var val, i = 0, length = set.length; 27310 for ( ; i < length; i++ ) { 27311 if ( set[ i ] !== null ) { 27312 val = element.data( dataSpace + set[ i ] ); 27313 element.css( set[ i ], val ); 27314 } 27315 } 27316 }, 27317 27318 setMode: function( el, mode ) { 27319 if ( mode === "toggle" ) { 27320 mode = el.is( ":hidden" ) ? "show" : "hide"; 27321 } 27322 return mode; 27323 }, 27324 27325 // Wraps the element around a wrapper that copies position properties 27326 createWrapper: function( element ) { 27327 27328 // If the element is already wrapped, return it 27329 if ( element.parent().is( ".ui-effects-wrapper" ) ) { 27330 return element.parent(); 27331 } 27332 27333 // Wrap the element 27334 var props = { 27335 width: element.outerWidth( true ), 27336 height: element.outerHeight( true ), 27337 "float": element.css( "float" ) 27338 }, 27339 wrapper = $( "<div></div>" ) 27340 .addClass( "ui-effects-wrapper" ) 27341 .css( { 27342 fontSize: "100%", 27343 background: "transparent", 27344 border: "none", 27345 margin: 0, 27346 padding: 0 27347 } ), 27348 27349 // Store the size in case width/height are defined in % - Fixes #5245 27350 size = { 27351 width: element.width(), 27352 height: element.height() 27353 }, 27354 active = document.activeElement; 27355 27356 // Support: Firefox 27357 // Firefox incorrectly exposes anonymous content 27358 // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 27359 try { 27360 // eslint-disable-next-line no-unused-expressions 27361 active.id; 27362 } catch ( e ) { 27363 active = document.body; 27364 } 27365 27366 element.wrap( wrapper ); 27367 27368 // Fixes #7595 - Elements lose focus when wrapped. 27369 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 27370 $( active ).trigger( "focus" ); 27371 } 27372 27373 // Hotfix for jQuery 1.4 since some change in wrap() seems to actually 27374 // lose the reference to the wrapped element 27375 wrapper = element.parent(); 27376 27377 // Transfer positioning properties to the wrapper 27378 if ( element.css( "position" ) === "static" ) { 27379 wrapper.css( { position: "relative" } ); 27380 element.css( { position: "relative" } ); 27381 } else { 27382 $.extend( props, { 27383 position: element.css( "position" ), 27384 zIndex: element.css( "z-index" ) 27385 } ); 27386 $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) { 27387 props[ pos ] = element.css( pos ); 27388 if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { 27389 props[ pos ] = "auto"; 27390 } 27391 } ); 27392 element.css( { 27393 position: "relative", 27394 top: 0, 27395 left: 0, 27396 right: "auto", 27397 bottom: "auto" 27398 } ); 27399 } 27400 element.css( size ); 27401 27402 return wrapper.css( props ).show(); 27403 }, 27404 27405 removeWrapper: function( element ) { 27406 var active = document.activeElement; 27407 27408 if ( element.parent().is( ".ui-effects-wrapper" ) ) { 27409 element.parent().replaceWith( element ); 27410 27411 // Fixes #7595 - Elements lose focus when wrapped. 27412 if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { 27413 $( active ).trigger( "focus" ); 27414 } 27415 } 27416 27417 return element; 27418 } 27419 } ); 27420} 27421 27422$.extend( $.effects, { 27423 version: "1.13.
vendor: 2,055 bytes, lines 27423-27518
274232", 27424 27425 define: function( name, mode, effect ) { 27426 if ( !effect ) { 27427 effect = mode; 27428 mode = "effect"; 27429 } 27430 27431 $.effects.effect[ name ] = effect; 27432 $.effects.effect[ name ].mode = mode; 27433 27434 return effect; 27435 }, 27436 27437 scaledDimensions: function( element, percent, direction ) { 27438 if ( percent === 0 ) { 27439 return { 27440 height: 0, 27441 width: 0, 27442 outerHeight: 0, 27443 outerWidth: 0 27444 }; 27445 } 27446 27447 var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1, 27448 y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1; 27449 27450 return { 27451 height: element.height() * y, 27452 width: element.width() * x, 27453 outerHeight: element.outerHeight() * y, 27454 outerWidth: element.outerWidth() * x 27455 }; 27456 27457 }, 27458 27459 clipToBox: function( animation ) { 27460 return { 27461 width: animation.clip.right - animation.clip.left, 27462 height: animation.clip.bottom - animation.clip.top, 27463 left: animation.clip.left, 27464 top: animation.clip.top 27465 }; 27466 }, 27467 27468 // Injects recently queued functions to be first in line (after "inprogress") 27469 unshift: function( element, queueLength, count ) { 27470 var queue = element.queue(); 27471 27472 if ( queueLength > 1 ) { 27473 queue.splice.apply( queue, 27474 [ 1, 0 ].concat( queue.splice( queueLength, count ) ) ); 27475 } 27476 element.dequeue(); 27477 }, 27478 27479 saveStyle: function( element ) { 27480 element.data( dataSpaceStyle, element[ 0 ].style.cssText ); 27481 }, 27482 27483 restoreStyle: function( element ) { 27484 element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || ""; 27485 element.removeData( dataSpaceStyle ); 27486 }, 27487 27488 mode: function( element, mode ) { 27489 var hidden = element.is( ":hidden" ); 27490 27491 if ( mode === "toggle" ) { 27492 mode = hidden ? "show" : "hide"; 27493 } 27494 if ( hidden ? mode === "hide" : mode === "show" ) { 27495 mode = "none"; 27496 } 27497 return mode; 27498 }, 27499 27500 // Translates a [top,left] array into a baseline value 27501 getBaseline: function( origin, original ) { 27502 var y, x; 27503 27504 switch ( origin[ 0 ] ) { 27505 case "top": 27506 y = 0; 27507 break; 27508 case "middle": 27509 y = 0.5; 27510 break; 27511 case "bottom": 27512 y = 1; 27513 break; 27514 default: 27515 y = origin[ 0 ] / original.height; 27516 } 27517 27518 switch ( origin[ 1 ] ) {
27519 case "left": 27520 x = 0; 27521 break; 27522 case "center": 27523 x = 0.5; 27524 break; 27525 case "right": 27526 x = 1; 27527 break; 27528 default: 27529 x = origin[ 1 ] / original.width; 27530 } 27531 27532 return { 27533 x: x, 27534 y: y 27535 }; 27536 }, 27537 27538 // Creates a placeholder element so that the original element can be made absolute 27539 createPlaceholder: function( element ) { 27540 var placeholder, 27541 cssPosition = element.css( "position" ), 27542 position = element.position(); 27543 27544 // Lock in margins first to account for form elements, which 27545 // will change margin if you explicitly set height 27546 // see: http
vendor: 10,558 bytes, lines 27546-27940
27546://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380 27547 // Support: Safari 27548 element.css( { 27549 marginTop: element.css( "marginTop" ), 27550 marginBottom: element.css( "marginBottom" ), 27551 marginLeft: element.css( "marginLeft" ), 27552 marginRight: element.css( "marginRight" ) 27553 } ) 27554 .outerWidth( element.outerWidth() ) 27555 .outerHeight( element.outerHeight() ); 27556 27557 if ( /^(static|relative)/.test( cssPosition ) ) { 27558 cssPosition = "absolute"; 27559 27560 placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( { 27561 27562 // Convert inline to inline block to account for inline elements 27563 // that turn to inline block based on content (like img) 27564 display: /^(inline|ruby)/.test( element.css( "display" ) ) ? 27565 "inline-block" : 27566 "block", 27567 visibility: "hidden", 27568 27569 // Margins need to be set to account for margin collapse 27570 marginTop: element.css( "marginTop" ), 27571 marginBottom: element.css( "marginBottom" ), 27572 marginLeft: element.css( "marginLeft" ), 27573 marginRight: element.css( "marginRight" ), 27574 "float": element.css( "float" ) 27575 } ) 27576 .outerWidth( element.outerWidth() ) 27577 .outerHeight( element.outerHeight() ) 27578 .addClass( "ui-effects-placeholder" ); 27579 27580 element.data( dataSpace + "placeholder", placeholder ); 27581 } 27582 27583 element.css( { 27584 position: cssPosition, 27585 left: position.left, 27586 top: position.top 27587 } ); 27588 27589 return placeholder; 27590 }, 27591 27592 removePlaceholder: function( element ) { 27593 var dataKey = dataSpace + "placeholder", 27594 placeholder = element.data( dataKey ); 27595 27596 if ( placeholder ) { 27597 placeholder.remove(); 27598 element.removeData( dataKey ); 27599 } 27600 }, 27601 27602 // Removes a placeholder if it exists and restores 27603 // properties that were modified during placeholder creation 27604 cleanUp: function( element ) { 27605 $.effects.restoreStyle( element ); 27606 $.effects.removePlaceholder( element ); 27607 }, 27608 27609 setTransition: function( element, list, factor, value ) { 27610 value = value || {}; 27611 $.each( list, function( i, x ) { 27612 var unit = element.cssUnit( x ); 27613 if ( unit[ 0 ] > 0 ) { 27614 value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; 27615 } 27616 } ); 27617 return value; 27618 } 27619} ); 27620 27621// Return an effect options object for the given parameters: 27622function _normalizeArguments( effect, options, speed, callback ) { 27623 27624 // Allow passing all options as the first parameter 27625 if ( $.isPlainObject( effect ) ) { 27626 options = effect; 27627 effect = effect.effect; 27628 } 27629 27630 // Convert to an object 27631 effect = { effect: effect }; 27632 27633 // Catch (effect, null, ...) 27634 if ( options == null ) { 27635 options = {}; 27636 } 27637 27638 // Catch (effect, callback) 27639 if ( typeof options === "function" ) { 27640 callback = options; 27641 speed = null; 27642 options = {}; 27643 } 27644 27645 // Catch (effect, speed, ?) 27646 if ( typeof options === "number" || $.fx.speeds[ options ] ) { 27647 callback = speed; 27648 speed = options; 27649 options = {}; 27650 } 27651 27652 // Catch (effect, options, callback) 27653 if ( typeof speed === "function" ) { 27654 callback = speed; 27655 speed = null; 27656 } 27657 27658 // Add options to effect 27659 if ( options ) { 27660 $.extend( effect, options ); 27661 } 27662 27663 speed = speed || options.duration; 27664 effect.duration = $.fx.off ? 0 : 27665 typeof speed === "number" ? speed : 27666 speed in $.fx.speeds ? $.fx.speeds[ speed ] : 27667 $.fx.speeds._default; 27668 27669 effect.complete = callback || options.complete; 27670 27671 return effect; 27672} 27673 27674function standardAnimationOption( option ) { 27675 27676 // Valid standard speeds (nothing, number, named speed) 27677 if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { 27678 return true; 27679 } 27680 27681 // Invalid strings - treat as "normal" speed 27682 if ( typeof option === "string" && !$.effects.effect[ option ] ) { 27683 return true; 27684 } 27685 27686 // Complete callback 27687 if ( typeof option === "function" ) { 27688 return true; 27689 } 27690 27691 // Options hash (but not naming an effect) 27692 if ( typeof option === "object" && !option.effect ) { 27693 return true; 27694 } 27695 27696 // Didn't match any standard API 27697 return false; 27698} 27699 27700$.fn.extend( { 27701 effect: function( /* effect, options, speed, callback */ ) { 27702 var args = _normalizeArguments.apply( this, arguments ), 27703 effectMethod = $.effects.effect[ args.effect ], 27704 defaultMode = effectMethod.mode, 27705 queue = args.queue, 27706 queueName = queue || "fx", 27707 complete = args.complete, 27708 mode = args.mode, 27709 modes = [], 27710 prefilter = function( next ) { 27711 var el = $( this ), 27712 normalizedMode = $.effects.mode( el, mode ) || defaultMode; 27713 27714 // Sentinel for duck-punching the :animated pseudo-selector 27715 el.data( dataSpaceAnimated, true ); 27716 27717 // Save effect mode for later use, 27718 // we can't just call $.effects.mode again later, 27719 // as the .show() below destroys the initial state 27720 modes.push( normalizedMode ); 27721 27722 // See $.uiBackCompat inside of run() for removal of defaultMode in 1.14 27723 if ( defaultMode && ( normalizedMode === "show" || 27724 ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) { 27725 el.show(); 27726 } 27727 27728 if ( !defaultMode || normalizedMode !== "none" ) { 27729 $.effects.saveStyle( el ); 27730 } 27731 27732 if ( typeof next === "function" ) { 27733 next(); 27734 } 27735 }; 27736 27737 if ( $.fx.off || !effectMethod ) { 27738 27739 // Delegate to the original method (e.g., .show()) if possible 27740 if ( mode ) { 27741 return this[ mode ]( args.duration, complete ); 27742 } else { 27743 return this.each( function() { 27744 if ( complete ) { 27745 complete.call( this ); 27746 } 27747 } ); 27748 } 27749 } 27750 27751 function run( next ) { 27752 var elem = $( this ); 27753 27754 function cleanup() { 27755 elem.removeData( dataSpaceAnimated ); 27756 27757 $.effects.cleanUp( elem ); 27758 27759 if ( args.mode === "hide" ) { 27760 elem.hide(); 27761 } 27762 27763 done(); 27764 } 27765 27766 function done() { 27767 if ( typeof complete === "function" ) { 27768 complete.call( elem[ 0 ] ); 27769 } 27770 27771 if ( typeof next === "function" ) { 27772 next(); 27773 } 27774 } 27775 27776 // Override mode option on a per element basis, 27777 // as toggle can be either show or hide depending on element state 27778 args.mode = modes.shift(); 27779 27780 if ( $.uiBackCompat !== false && !defaultMode ) { 27781 if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { 27782 27783 // Call the core method to track "olddisplay" properly 27784 elem[ mode ](); 27785 done(); 27786 } else { 27787 effectMethod.call( elem[ 0 ], args, done ); 27788 } 27789 } else { 27790 if ( args.mode === "none" ) { 27791 27792 // Call the core method to track "olddisplay" properly 27793 elem[ mode ](); 27794 done(); 27795 } else { 27796 effectMethod.call( elem[ 0 ], args, cleanup ); 27797 } 27798 } 27799 } 27800 27801 // Run prefilter on all elements first to ensure that 27802 // any showing or hiding happens before placeholder creation, 27803 // which ensures that any layout changes are correctly captured. 27804 return queue === false ? 27805 this.each( prefilter ).each( run ) : 27806 this.queue( queueName, prefilter ).queue( queueName, run ); 27807 }, 27808 27809 show: ( function( orig ) { 27810 return function( option ) { 27811 if ( standardAnimationOption( option ) ) { 27812 return orig.apply( this, arguments ); 27813 } else { 27814 var args = _normalizeArguments.apply( this, arguments ); 27815 args.mode = "show"; 27816 return this.effect.call( this, args ); 27817 } 27818 }; 27819 } )( $.fn.show ), 27820 27821 hide: ( function( orig ) { 27822 return function( option ) { 27823 if ( standardAnimationOption( option ) ) { 27824 return orig.apply( this, arguments ); 27825 } else { 27826 var args = _normalizeArguments.apply( this, arguments ); 27827 args.mode = "hide"; 27828 return this.effect.call( this, args ); 27829 } 27830 }; 27831 } )( $.fn.hide ), 27832 27833 toggle: ( function( orig ) { 27834 return function( option ) { 27835 if ( standardAnimationOption( option ) || typeof option === "boolean" ) { 27836 return orig.apply( this, arguments ); 27837 } else { 27838 var args = _normalizeArguments.apply( this, arguments ); 27839 args.mode = "toggle"; 27840 return this.effect.call( this, args ); 27841 } 27842 }; 27843 } )( $.fn.toggle ), 27844 27845 cssUnit: function( key ) { 27846 var style = this.css( key ), 27847 val = []; 27848 27849 $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { 27850 if ( style.indexOf( unit ) > 0 ) { 27851 val = [ parseFloat( style ), unit ]; 27852 } 27853 } ); 27854 return val; 27855 }, 27856 27857 cssClip: function( clipObj ) { 27858 if ( clipObj ) { 27859 return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " + 27860 clipObj.bottom + "px " + clipObj.left + "px)" ); 27861 } 27862 return parseClip( this.css( "clip" ), this ); 27863 }, 27864 27865 transfer: function( options, done ) { 27866 var element = $( this ), 27867 target = $( options.to ), 27868 targetFixed = target.css( "position" ) === "fixed", 27869 body = $( "body" ), 27870 fixTop = targetFixed ? body.scrollTop() : 0, 27871 fixLeft = targetFixed ? body.scrollLeft() : 0, 27872 endPosition = target.offset(), 27873 animation = { 27874 top: endPosition.top - fixTop, 27875 left: endPosition.left - fixLeft, 27876 height: target.innerHeight(), 27877 width: target.innerWidth() 27878 }, 27879 startPosition = element.offset(), 27880 transfer = $( "<div class='ui-effects-transfer'></div>" ); 27881 27882 transfer 27883 .appendTo( "body" ) 27884 .addClass( options.className ) 27885 .css( { 27886 top: startPosition.top - fixTop, 27887 left: startPosition.left - fixLeft, 27888 height: element.innerHeight(), 27889 width: element.innerWidth(), 27890 position: targetFixed ? "fixed" : "absolute" 27891 } ) 27892 .animate( animation, options.duration, options.easing, function() { 27893 transfer.remove(); 27894 if ( typeof done === "function" ) { 27895 done(); 27896 } 27897 } ); 27898 } 27899} ); 27900 27901function parseClip( str, element ) { 27902 var outerWidth = element.outerWidth(), 27903 outerHeight = element.outerHeight(), 27904 clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/, 27905 values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ]; 27906 27907 return { 27908 top: parseFloat( values[ 1 ] ) || 0, 27909 right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ), 27910 bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ), 27911 left: parseFloat( values[ 4 ] ) || 0 27912 }; 27913} 27914 27915$.fx.step.clip = function( fx ) { 27916 if ( !fx.clipInit ) { 27917 fx.start = $( fx.elem ).cssClip(); 27918 if ( typeof fx.end === "string" ) { 27919 fx.end = parseClip( fx.end, fx.elem ); 27920 } 27921 fx.clipInit = true; 27922 } 27923 27924 $( fx.elem ).cssClip( { 27925 top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top, 27926 right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right, 27927 bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom, 27928 left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left 27929 } ); 27930}; 27931 27932} )(); 27933 27934/******************************************************************************/ 27935/*********************************** EASING ***********************************/ 27936/******************************************************************************/ 27937 27938( function() { 27939 27940// Based on easing equations from Robert Penner (http://
vendor: 24,998 bytes, lines 27940-28895
27940www.robertpenner.com/easing) 27941 27942var baseEasings = {}; 27943 27944$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { 27945 baseEasings[ name ] = function( p ) { 27946 return Math.pow( p, i + 2 ); 27947 }; 27948} ); 27949 27950$.extend( baseEasings, { 27951 Sine: function( p ) { 27952 return 1 - Math.cos( p * Math.PI / 2 ); 27953 }, 27954 Circ: function( p ) { 27955 return 1 - Math.sqrt( 1 - p * p ); 27956 }, 27957 Elastic: function( p ) { 27958 return p === 0 || p === 1 ? p : 27959 -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 ); 27960 }, 27961 Back: function( p ) { 27962 return p * p * ( 3 * p - 2 ); 27963 }, 27964 Bounce: function( p ) { 27965 var pow2, 27966 bounce = 4; 27967 27968 while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} 27969 return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); 27970 } 27971} ); 27972 27973$.each( baseEasings, function( name, easeIn ) { 27974 $.easing[ "easeIn" + name ] = easeIn; 27975 $.easing[ "easeOut" + name ] = function( p ) { 27976 return 1 - easeIn( 1 - p ); 27977 }; 27978 $.easing[ "easeInOut" + name ] = function( p ) { 27979 return p < 0.5 ? 27980 easeIn( p * 2 ) / 2 : 27981 1 - easeIn( p * -2 + 2 ) / 2; 27982 }; 27983} ); 27984 27985} )(); 27986 27987var effect = $.effects; 27988 27989 27990/*! 27991 * jQuery UI Effects Blind 1.13.2 27992 * http://jqueryui.com 27993 * 27994 * Copyright jQuery Foundation and other contributors 27995 * Released under the MIT license. 27996 * http://jquery.org/license 27997 */ 27998 27999//>>label: Blind Effect 28000//>>group: Effects 28001//>>description: Blinds the element. 28002//>>docs: http://api.jqueryui.com/blind-effect/ 28003//>>demos: http://jqueryui.com/effect/ 28004 28005 28006var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) { 28007 var map = { 28008 up: [ "bottom", "top" ], 28009 vertical: [ "bottom", "top" ], 28010 down: [ "top", "bottom" ], 28011 left: [ "right", "left" ], 28012 horizontal: [ "right", "left" ], 28013 right: [ "left", "right" ] 28014 }, 28015 element = $( this ), 28016 direction = options.direction || "up", 28017 start = element.cssClip(), 28018 animate = { clip: $.extend( {}, start ) }, 28019 placeholder = $.effects.createPlaceholder( element ); 28020 28021 animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ]; 28022 28023 if ( options.mode === "show" ) { 28024 element.cssClip( animate.clip ); 28025 if ( placeholder ) { 28026 placeholder.css( $.effects.clipToBox( animate ) ); 28027 } 28028 28029 animate.clip = start; 28030 } 28031 28032 if ( placeholder ) { 28033 placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing ); 28034 } 28035 28036 element.animate( animate, { 28037 queue: false, 28038 duration: options.duration, 28039 easing: options.easing, 28040 complete: done 28041 } ); 28042} ); 28043 28044 28045/*! 28046 * jQuery UI Effects Bounce 1.13.2 28047 * http://jqueryui.com 28048 * 28049 * Copyright jQuery Foundation and other contributors 28050 * Released under the MIT license. 28051 * http://jquery.org/license 28052 */ 28053 28054//>>label: Bounce Effect 28055//>>group: Effects 28056//>>description: Bounces an element horizontally or vertically n times. 28057//>>docs: http://api.jqueryui.com/bounce-effect/ 28058//>>demos: http://jqueryui.com/effect/ 28059 28060 28061var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) { 28062 var upAnim, downAnim, refValue, 28063 element = $( this ), 28064 28065 // Defaults: 28066 mode = options.mode, 28067 hide = mode === "hide", 28068 show = mode === "show", 28069 direction = options.direction || "up", 28070 distance = options.distance, 28071 times = options.times || 5, 28072 28073 // Number of internal animations 28074 anims = times * 2 + ( show || hide ? 1 : 0 ), 28075 speed = options.duration / anims, 28076 easing = options.easing, 28077 28078 // Utility: 28079 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 28080 motion = ( direction === "up" || direction === "left" ), 28081 i = 0, 28082 28083 queuelen = element.queue().length; 28084 28085 $.effects.createPlaceholder( element ); 28086 28087 refValue = element.css( ref ); 28088 28089 // Default distance for the BIGGEST bounce is the outer Distance / 3 28090 if ( !distance ) { 28091 distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; 28092 } 28093 28094 if ( show ) { 28095 downAnim = { opacity: 1 }; 28096 downAnim[ ref ] = refValue; 28097 28098 // If we are showing, force opacity 0 and set the initial position 28099 // then do the "first" animation 28100 element 28101 .css( "opacity", 0 ) 28102 .css( ref, motion ? -distance * 2 : distance * 2 ) 28103 .animate( downAnim, speed, easing ); 28104 } 28105 28106 // Start at the smallest distance if we are hiding 28107 if ( hide ) { 28108 distance = distance / Math.pow( 2, times - 1 ); 28109 } 28110 28111 downAnim = {}; 28112 downAnim[ ref ] = refValue; 28113 28114 // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here 28115 for ( ; i < times; i++ ) { 28116 upAnim = {}; 28117 upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; 28118 28119 element 28120 .animate( upAnim, speed, easing ) 28121 .animate( downAnim, speed, easing ); 28122 28123 distance = hide ? distance * 2 : distance / 2; 28124 } 28125 28126 // Last Bounce when Hiding 28127 if ( hide ) { 28128 upAnim = { opacity: 0 }; 28129 upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; 28130 28131 element.animate( upAnim, speed, easing ); 28132 } 28133 28134 element.queue( done ); 28135 28136 $.effects.unshift( element, queuelen, anims + 1 ); 28137} ); 28138 28139 28140/*! 28141 * jQuery UI Effects Clip 1.13.2 28142 * http://jqueryui.com 28143 * 28144 * Copyright jQuery Foundation and other contributors 28145 * Released under the MIT license. 28146 * http://jquery.org/license 28147 */ 28148 28149//>>label: Clip Effect 28150//>>group: Effects 28151//>>description: Clips the element on and off like an old TV. 28152//>>docs: http://api.jqueryui.com/clip-effect/ 28153//>>demos: http://jqueryui.com/effect/ 28154 28155 28156var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) { 28157 var start, 28158 animate = {}, 28159 element = $( this ), 28160 direction = options.direction || "vertical", 28161 both = direction === "both", 28162 horizontal = both || direction === "horizontal", 28163 vertical = both || direction === "vertical"; 28164 28165 start = element.cssClip(); 28166 animate.clip = { 28167 top: vertical ? ( start.bottom - start.top ) / 2 : start.top, 28168 right: horizontal ? ( start.right - start.left ) / 2 : start.right, 28169 bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom, 28170 left: horizontal ? ( start.right - start.left ) / 2 : start.left 28171 }; 28172 28173 $.effects.createPlaceholder( element ); 28174 28175 if ( options.mode === "show" ) { 28176 element.cssClip( animate.clip ); 28177 animate.clip = start; 28178 } 28179 28180 element.animate( animate, { 28181 queue: false, 28182 duration: options.duration, 28183 easing: options.easing, 28184 complete: done 28185 } ); 28186 28187} ); 28188 28189 28190/*! 28191 * jQuery UI Effects Drop 1.13.2 28192 * http://jqueryui.com 28193 * 28194 * Copyright jQuery Foundation and other contributors 28195 * Released under the MIT license. 28196 * http://jquery.org/license 28197 */ 28198 28199//>>label: Drop Effect 28200//>>group: Effects 28201//>>description: Moves an element in one direction and hides it at the same time. 28202//>>docs: http://api.jqueryui.com/drop-effect/ 28203//>>demos: http://jqueryui.com/effect/ 28204 28205 28206var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) { 28207 28208 var distance, 28209 element = $( this ), 28210 mode = options.mode, 28211 show = mode === "show", 28212 direction = options.direction || "left", 28213 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 28214 motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=", 28215 oppositeMotion = ( motion === "+=" ) ? "-=" : "+=", 28216 animation = { 28217 opacity: 0 28218 }; 28219 28220 $.effects.createPlaceholder( element ); 28221 28222 distance = options.distance || 28223 element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2; 28224 28225 animation[ ref ] = motion + distance; 28226 28227 if ( show ) { 28228 element.css( animation ); 28229 28230 animation[ ref ] = oppositeMotion + distance; 28231 animation.opacity = 1; 28232 } 28233 28234 // Animate 28235 element.animate( animation, { 28236 queue: false, 28237 duration: options.duration, 28238 easing: options.easing, 28239 complete: done 28240 } ); 28241} ); 28242 28243 28244/*! 28245 * jQuery UI Effects Explode 1.13.2 28246 * http://jqueryui.com 28247 * 28248 * Copyright jQuery Foundation and other contributors 28249 * Released under the MIT license. 28250 * http://jquery.org/license 28251 */ 28252 28253//>>label: Explode Effect 28254//>>group: Effects 28255/* eslint-disable max-len */ 28256//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. 28257/* eslint-enable max-len */ 28258//>>docs: http://api.jqueryui.com/explode-effect/ 28259//>>demos: http://jqueryui.com/effect/ 28260 28261 28262var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) { 28263 28264 var i, j, left, top, mx, my, 28265 rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3, 28266 cells = rows, 28267 element = $( this ), 28268 mode = options.mode, 28269 show = mode === "show", 28270 28271 // Show and then visibility:hidden the element before calculating offset 28272 offset = element.show().css( "visibility", "hidden" ).offset(), 28273 28274 // Width and height of a piece 28275 width = Math.ceil( element.outerWidth() / cells ), 28276 height = Math.ceil( element.outerHeight() / rows ), 28277 pieces = []; 28278 28279 // Children animate complete: 28280 function childComplete() { 28281 pieces.push( this ); 28282 if ( pieces.length === rows * cells ) { 28283 animComplete(); 28284 } 28285 } 28286 28287 // Clone the element for each row and cell. 28288 for ( i = 0; i < rows; i++ ) { // ===> 28289 top = offset.top + i * height; 28290 my = i - ( rows - 1 ) / 2; 28291 28292 for ( j = 0; j < cells; j++ ) { // ||| 28293 left = offset.left + j * width; 28294 mx = j - ( cells - 1 ) / 2; 28295 28296 // Create a clone of the now hidden main element that will be absolute positioned 28297 // within a wrapper div off the -left and -top equal to size of our pieces 28298 element 28299 .clone() 28300 .appendTo( "body" ) 28301 .wrap( "<div></div>" ) 28302 .css( { 28303 position: "absolute", 28304 visibility: "visible", 28305 left: -j * width, 28306 top: -i * height 28307 } ) 28308 28309 // Select the wrapper - make it overflow: hidden and absolute positioned based on 28310 // where the original was located +left and +top equal to the size of pieces 28311 .parent() 28312 .addClass( "ui-effects-explode" ) 28313 .css( { 28314 position: "absolute", 28315 overflow: "hidden", 28316 width: width, 28317 height: height, 28318 left: left + ( show ? mx * width : 0 ), 28319 top: top + ( show ? my * height : 0 ), 28320 opacity: show ? 0 : 1 28321 } ) 28322 .animate( { 28323 left: left + ( show ? 0 : mx * width ), 28324 top: top + ( show ? 0 : my * height ), 28325 opacity: show ? 1 : 0 28326 }, options.duration || 500, options.easing, childComplete ); 28327 } 28328 } 28329 28330 function animComplete() { 28331 element.css( { 28332 visibility: "visible" 28333 } ); 28334 $( pieces ).remove(); 28335 done(); 28336 } 28337} ); 28338 28339 28340/*! 28341 * jQuery UI Effects Fade 1.13.2 28342 * http://jqueryui.com 28343 * 28344 * Copyright jQuery Foundation and other contributors 28345 * Released under the MIT license. 28346 * http://jquery.org/license 28347 */ 28348 28349//>>label: Fade Effect 28350//>>group: Effects 28351//>>description: Fades the element. 28352//>>docs: http://api.jqueryui.com/fade-effect/ 28353//>>demos: http://jqueryui.com/effect/ 28354 28355 28356var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) { 28357 var show = options.mode === "show"; 28358 28359 $( this ) 28360 .css( "opacity", show ? 0 : 1 ) 28361 .animate( { 28362 opacity: show ? 1 : 0 28363 }, { 28364 queue: false, 28365 duration: options.duration, 28366 easing: options.easing, 28367 complete: done 28368 } ); 28369} ); 28370 28371 28372/*! 28373 * jQuery UI Effects Fold 1.13.2 28374 * http://jqueryui.com 28375 * 28376 * Copyright jQuery Foundation and other contributors 28377 * Released under the MIT license. 28378 * http://jquery.org/license 28379 */ 28380 28381//>>label: Fold Effect 28382//>>group: Effects 28383//>>description: Folds an element first horizontally and then vertically. 28384//>>docs: http://api.jqueryui.com/fold-effect/ 28385//>>demos: http://jqueryui.com/effect/ 28386 28387 28388var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) { 28389 28390 // Create element 28391 var element = $( this ), 28392 mode = options.mode, 28393 show = mode === "show", 28394 hide = mode === "hide", 28395 size = options.size || 15, 28396 percent = /([0-9]+)%/.exec( size ), 28397 horizFirst = !!options.horizFirst, 28398 ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ], 28399 duration = options.duration / 2, 28400 28401 placeholder = $.effects.createPlaceholder( element ), 28402 28403 start = element.cssClip(), 28404 animation1 = { clip: $.extend( {}, start ) }, 28405 animation2 = { clip: $.extend( {}, start ) }, 28406 28407 distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ], 28408 28409 queuelen = element.queue().length; 28410 28411 if ( percent ) { 28412 size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; 28413 } 28414 animation1.clip[ ref[ 0 ] ] = size; 28415 animation2.clip[ ref[ 0 ] ] = size; 28416 animation2.clip[ ref[ 1 ] ] = 0; 28417 28418 if ( show ) { 28419 element.cssClip( animation2.clip ); 28420 if ( placeholder ) { 28421 placeholder.css( $.effects.clipToBox( animation2 ) ); 28422 } 28423 28424 animation2.clip = start; 28425 } 28426 28427 // Animate 28428 element 28429 .queue( function( next ) { 28430 if ( placeholder ) { 28431 placeholder 28432 .animate( $.effects.clipToBox( animation1 ), duration, options.easing ) 28433 .animate( $.effects.clipToBox( animation2 ), duration, options.easing ); 28434 } 28435 28436 next(); 28437 } ) 28438 .animate( animation1, duration, options.easing ) 28439 .animate( animation2, duration, options.easing ) 28440 .queue( done ); 28441 28442 $.effects.unshift( element, queuelen, 4 ); 28443} ); 28444 28445 28446/*! 28447 * jQuery UI Effects Highlight 1.13.2 28448 * http://jqueryui.com 28449 * 28450 * Copyright jQuery Foundation and other contributors 28451 * Released under the MIT license. 28452 * http://jquery.org/license 28453 */ 28454 28455//>>label: Highlight Effect 28456//>>group: Effects 28457//>>description: Highlights the background of an element in a defined color for a custom duration. 28458//>>docs: http://api.jqueryui.com/highlight-effect/ 28459//>>demos: http://jqueryui.com/effect/ 28460 28461 28462var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) { 28463 var element = $( this ), 28464 animation = { 28465 backgroundColor: element.css( "backgroundColor" ) 28466 }; 28467 28468 if ( options.mode === "hide" ) { 28469 animation.opacity = 0; 28470 } 28471 28472 $.effects.saveStyle( element ); 28473 28474 element 28475 .css( { 28476 backgroundImage: "none", 28477 backgroundColor: options.color || "#ffff99" 28478 } ) 28479 .animate( animation, { 28480 queue: false, 28481 duration: options.duration, 28482 easing: options.easing, 28483 complete: done 28484 } ); 28485} ); 28486 28487 28488/*! 28489 * jQuery UI Effects Size 1.13.2 28490 * http://jqueryui.com 28491 * 28492 * Copyright jQuery Foundation and other contributors 28493 * Released under the MIT license. 28494 * http://jquery.org/license 28495 */ 28496 28497//>>label: Size Effect 28498//>>group: Effects 28499//>>description: Resize an element to a specified width and height. 28500//>>docs: http://api.jqueryui.com/size-effect/ 28501//>>demos: http://jqueryui.com/effect/ 28502 28503 28504var effectsEffectSize = $.effects.define( "size", function( options, done ) { 28505 28506 // Create element 28507 var baseline, factor, temp, 28508 element = $( this ), 28509 28510 // Copy for children 28511 cProps = [ "fontSize" ], 28512 vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], 28513 hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], 28514 28515 // Set options 28516 mode = options.mode, 28517 restore = mode !== "effect", 28518 scale = options.scale || "both", 28519 origin = options.origin || [ "middle", "center" ], 28520 position = element.css( "position" ), 28521 pos = element.position(), 28522 original = $.effects.scaledDimensions( element ), 28523 from = options.from || original, 28524 to = options.to || $.effects.scaledDimensions( element, 0 ); 28525 28526 $.effects.createPlaceholder( element ); 28527 28528 if ( mode === "show" ) { 28529 temp = from; 28530 from = to; 28531 to = temp; 28532 } 28533 28534 // Set scaling factor 28535 factor = { 28536 from: { 28537 y: from.height / original.height, 28538 x: from.width / original.width 28539 }, 28540 to: { 28541 y: to.height / original.height, 28542 x: to.width / original.width 28543 } 28544 }; 28545 28546 // Scale the css box 28547 if ( scale === "box" || scale === "both" ) { 28548 28549 // Vertical props scaling 28550 if ( factor.from.y !== factor.to.y ) { 28551 from = $.effects.setTransition( element, vProps, factor.from.y, from ); 28552 to = $.effects.setTransition( element, vProps, factor.to.y, to ); 28553 } 28554 28555 // Horizontal props scaling 28556 if ( factor.from.x !== factor.to.x ) { 28557 from = $.effects.setTransition( element, hProps, factor.from.x, from ); 28558 to = $.effects.setTransition( element, hProps, factor.to.x, to ); 28559 } 28560 } 28561 28562 // Scale the content 28563 if ( scale === "content" || scale === "both" ) { 28564 28565 // Vertical props scaling 28566 if ( factor.from.y !== factor.to.y ) { 28567 from = $.effects.setTransition( element, cProps, factor.from.y, from ); 28568 to = $.effects.setTransition( element, cProps, factor.to.y, to ); 28569 } 28570 } 28571 28572 // Adjust the position properties based on the provided origin points 28573 if ( origin ) { 28574 baseline = $.effects.getBaseline( origin, original ); 28575 from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top; 28576 from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left; 28577 to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top; 28578 to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left; 28579 } 28580 delete from.outerHeight; 28581 delete from.outerWidth; 28582 element.css( from ); 28583 28584 // Animate the children if desired 28585 if ( scale === "content" || scale === "both" ) { 28586 28587 vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps ); 28588 hProps = hProps.concat( [ "marginLeft", "marginRight" ] ); 28589 28590 // Only animate children with width attributes specified 28591 // TODO: is this right? should we include anything with css width specified as well 28592 element.find( "*[width]" ).each( function() { 28593 var child = $( this ), 28594 childOriginal = $.effects.scaledDimensions( child ), 28595 childFrom = { 28596 height: childOriginal.height * factor.from.y, 28597 width: childOriginal.width * factor.from.x, 28598 outerHeight: childOriginal.outerHeight * factor.from.y, 28599 outerWidth: childOriginal.outerWidth * factor.from.x 28600 }, 28601 childTo = { 28602 height: childOriginal.height * factor.to.y, 28603 width: childOriginal.width * factor.to.x, 28604 outerHeight: childOriginal.height * factor.to.y, 28605 outerWidth: childOriginal.width * factor.to.x 28606 }; 28607 28608 // Vertical props scaling 28609 if ( factor.from.y !== factor.to.y ) { 28610 childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom ); 28611 childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo ); 28612 } 28613 28614 // Horizontal props scaling 28615 if ( factor.from.x !== factor.to.x ) { 28616 childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom ); 28617 childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo ); 28618 } 28619 28620 if ( restore ) { 28621 $.effects.saveStyle( child ); 28622 } 28623 28624 // Animate children 28625 child.css( childFrom ); 28626 child.animate( childTo, options.duration, options.easing, function() { 28627 28628 // Restore children 28629 if ( restore ) { 28630 $.effects.restoreStyle( child ); 28631 } 28632 } ); 28633 } ); 28634 } 28635 28636 // Animate 28637 element.animate( to, { 28638 queue: false, 28639 duration: options.duration, 28640 easing: options.easing, 28641 complete: function() { 28642 28643 var offset = element.offset(); 28644 28645 if ( to.opacity === 0 ) { 28646 element.css( "opacity", from.opacity ); 28647 } 28648 28649 if ( !restore ) { 28650 element 28651 .css( "position", position === "static" ? "relative" : position ) 28652 .offset( offset ); 28653 28654 // Need to save style here so that automatic style restoration 28655 // doesn't restore to the original styles from before the animation. 28656 $.effects.saveStyle( element ); 28657 } 28658 28659 done(); 28660 } 28661 } ); 28662 28663} ); 28664 28665 28666/*! 28667 * jQuery UI Effects Scale 1.13.2 28668 * http://jqueryui.com 28669 * 28670 * Copyright jQuery Foundation and other contributors 28671 * Released under the MIT license. 28672 * http://jquery.org/license 28673 */ 28674 28675//>>label: Scale Effect 28676//>>group: Effects 28677//>>description: Grows or shrinks an element and its content. 28678//>>docs: http://api.jqueryui.com/scale-effect/ 28679//>>demos: http://jqueryui.com/effect/ 28680 28681 28682var effectsEffectScale = $.effects.define( "scale", function( options, done ) { 28683 28684 // Create element 28685 var el = $( this ), 28686 mode = options.mode, 28687 percent = parseInt( options.percent, 10 ) || 28688 ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ), 28689 28690 newOptions = $.extend( true, { 28691 from: $.effects.scaledDimensions( el ), 28692 to: $.effects.scaledDimensions( el, percent, options.direction || "both" ), 28693 origin: options.origin || [ "middle", "center" ] 28694 }, options ); 28695 28696 // Fade option to support puff 28697 if ( options.fade ) { 28698 newOptions.from.opacity = 1; 28699 newOptions.to.opacity = 0; 28700 } 28701 28702 $.effects.effect.size.call( this, newOptions, done ); 28703} ); 28704 28705 28706/*! 28707 * jQuery UI Effects Puff 1.13.2 28708 * http://jqueryui.com 28709 * 28710 * Copyright jQuery Foundation and other contributors 28711 * Released under the MIT license. 28712 * http://jquery.org/license 28713 */ 28714 28715//>>label: Puff Effect 28716//>>group: Effects 28717//>>description: Creates a puff effect by scaling the element up and hiding it at the same time. 28718//>>docs: http://api.jqueryui.com/puff-effect/ 28719//>>demos: http://jqueryui.com/effect/ 28720 28721 28722var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) { 28723 var newOptions = $.extend( true, {}, options, { 28724 fade: true, 28725 percent: parseInt( options.percent, 10 ) || 150 28726 } ); 28727 28728 $.effects.effect.scale.call( this, newOptions, done ); 28729} ); 28730 28731 28732/*! 28733 * jQuery UI Effects Pulsate 1.13.2 28734 * http://jqueryui.com 28735 * 28736 * Copyright jQuery Foundation and other contributors 28737 * Released under the MIT license. 28738 * http://jquery.org/license 28739 */ 28740 28741//>>label: Pulsate Effect 28742//>>group: Effects 28743//>>description: Pulsates an element n times by changing the opacity to zero and back. 28744//>>docs: http://api.jqueryui.com/pulsate-effect/ 28745//>>demos: http://jqueryui.com/effect/ 28746 28747 28748var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) { 28749 var element = $( this ), 28750 mode = options.mode, 28751 show = mode === "show", 28752 hide = mode === "hide", 28753 showhide = show || hide, 28754 28755 // Showing or hiding leaves off the "last" animation 28756 anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), 28757 duration = options.duration / anims, 28758 animateTo = 0, 28759 i = 1, 28760 queuelen = element.queue().length; 28761 28762 if ( show || !element.is( ":visible" ) ) { 28763 element.css( "opacity", 0 ).show(); 28764 animateTo = 1; 28765 } 28766 28767 // Anims - 1 opacity "toggles" 28768 for ( ; i < anims; i++ ) { 28769 element.animate( { opacity: animateTo }, duration, options.easing ); 28770 animateTo = 1 - animateTo; 28771 } 28772 28773 element.animate( { opacity: animateTo }, duration, options.easing ); 28774 28775 element.queue( done ); 28776 28777 $.effects.unshift( element, queuelen, anims + 1 ); 28778} ); 28779 28780 28781/*! 28782 * jQuery UI Effects Shake 1.13.2 28783 * http://jqueryui.com 28784 * 28785 * Copyright jQuery Foundation and other contributors 28786 * Released under the MIT license. 28787 * http://jquery.org/license 28788 */ 28789 28790//>>label: Shake Effect 28791//>>group: Effects 28792//>>description: Shakes an element horizontally or vertically n times. 28793//>>docs: http://api.jqueryui.com/shake-effect/ 28794//>>demos: http://jqueryui.com/effect/ 28795 28796 28797var effectsEffectShake = $.effects.define( "shake", function( options, done ) { 28798 28799 var i = 1, 28800 element = $( this ), 28801 direction = options.direction || "left", 28802 distance = options.distance || 20, 28803 times = options.times || 3, 28804 anims = times * 2 + 1, 28805 speed = Math.round( options.duration / anims ), 28806 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 28807 positiveMotion = ( direction === "up" || direction === "left" ), 28808 animation = {}, 28809 animation1 = {}, 28810 animation2 = {}, 28811 28812 queuelen = element.queue().length; 28813 28814 $.effects.createPlaceholder( element ); 28815 28816 // Animation 28817 animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; 28818 animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; 28819 animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; 28820 28821 // Animate 28822 element.animate( animation, speed, options.easing ); 28823 28824 // Shakes 28825 for ( ; i < times; i++ ) { 28826 element 28827 .animate( animation1, speed, options.easing ) 28828 .animate( animation2, speed, options.easing ); 28829 } 28830 28831 element 28832 .animate( animation1, speed, options.easing ) 28833 .animate( animation, speed / 2, options.easing ) 28834 .queue( done ); 28835 28836 $.effects.unshift( element, queuelen, anims + 1 ); 28837} ); 28838 28839 28840/*! 28841 * jQuery UI Effects Slide 1.13.2 28842 * http://jqueryui.com 28843 * 28844 * Copyright jQuery Foundation and other contributors 28845 * Released under the MIT license. 28846 * http://jquery.org/license 28847 */ 28848 28849//>>label: Slide Effect 28850//>>group: Effects 28851//>>description: Slides an element in and out of the viewport. 28852//>>docs: http://api.jqueryui.com/slide-effect/ 28853//>>demos: http://jqueryui.com/effect/ 28854 28855 28856var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) { 28857 var startClip, startRef, 28858 element = $( this ), 28859 map = { 28860 up: [ "bottom", "top" ], 28861 down: [ "top", "bottom" ], 28862 left: [ "right", "left" ], 28863 right: [ "left", "right" ] 28864 }, 28865 mode = options.mode, 28866 direction = options.direction || "left", 28867 ref = ( direction === "up" || direction === "down" ) ? "top" : "left", 28868 positiveMotion = ( direction === "up" || direction === "left" ), 28869 distance = options.distance || 28870 element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ), 28871 animation = {}; 28872 28873 $.effects.createPlaceholder( element ); 28874 28875 startClip = element.cssClip(); 28876 startRef = element.position()[ ref ]; 28877 28878 // Define hide animation 28879 animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef; 28880 animation.clip = element.cssClip(); 28881 animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ]; 28882 28883 // Reverse the animation if we're showing 28884 if ( mode === "show" ) { 28885 element.cssClip( animation.clip ); 28886 element.css( ref, animation[ ref ] ); 28887 animation.clip = startClip; 28888 animation[ ref ] = startRef; 28889 } 28890 28891 // Actually animate 28892 element.animate( animation, { 28893 queue: false, 28894 duration: options.duration, 28895 easing: options.easing,
vendor: 9,661 bytes, lines 28896-29278
28896 complete: done 28897 } ); 28898} ); 28899 28900 28901/*! 28902 * jQuery UI Effects Transfer 1.13.2 28903 * http://jqueryui.com 28904 * 28905 * Copyright jQuery Foundation and other contributors 28906 * Released under the MIT license. 28907 * http://jquery.org/license 28908 */ 28909 28910//>>label: Transfer Effect 28911//>>group: Effects 28912//>>description: Displays a transfer effect from one element to another. 28913//>>docs: http://api.jqueryui.com/transfer-effect/ 28914//>>demos: http://jqueryui.com/effect/ 28915 28916 28917var effect; 28918if ( $.uiBackCompat !== false ) { 28919 effect = $.effects.define( "transfer", function( options, done ) { 28920 $( this ).transfer( options, done ); 28921 } ); 28922} 28923var effectsEffectTransfer = effect; 28924 28925 28926/*! 28927 * jQuery UI Focusable 1.13.2 28928 * http://jqueryui.com 28929 * 28930 * Copyright jQuery Foundation and other contributors 28931 * Released under the MIT license. 28932 * http://jquery.org/license 28933 */ 28934 28935//>>label: :focusable Selector 28936//>>group: Core 28937//>>description: Selects elements which can be focused. 28938//>>docs: http://api.jqueryui.com/focusable-selector/ 28939 28940 28941// Selectors 28942$.ui.focusable = function( element, hasTabindex ) { 28943 var map, mapName, img, focusableIfVisible, fieldset, 28944 nodeName = element.nodeName.toLowerCase(); 28945 28946 if ( "area" === nodeName ) { 28947 map = element.parentNode; 28948 mapName = map.name; 28949 if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { 28950 return false; 28951 } 28952 img = $( "img[usemap='#" + mapName + "']" ); 28953 return img.length > 0 && img.is( ":visible" ); 28954 } 28955 28956 if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) { 28957 focusableIfVisible = !element.disabled; 28958 28959 if ( focusableIfVisible ) { 28960 28961 // Form controls within a disabled fieldset are disabled. 28962 // However, controls within the fieldset's legend do not get disabled. 28963 // Since controls generally aren't placed inside legends, we skip 28964 // this portion of the check. 28965 fieldset = $( element ).closest( "fieldset" )[ 0 ]; 28966 if ( fieldset ) { 28967 focusableIfVisible = !fieldset.disabled; 28968 } 28969 } 28970 } else if ( "a" === nodeName ) { 28971 focusableIfVisible = element.href || hasTabindex; 28972 } else { 28973 focusableIfVisible = hasTabindex; 28974 } 28975 28976 return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) ); 28977}; 28978 28979// Support: IE 8 only 28980// IE 8 doesn't resolve inherit to visible/hidden for computed values 28981function visible( element ) { 28982 var visibility = element.css( "visibility" ); 28983 while ( visibility === "inherit" ) { 28984 element = element.parent(); 28985 visibility = element.css( "visibility" ); 28986 } 28987 return visibility === "visible"; 28988} 28989 28990$.extend( $.expr.pseudos, { 28991 focusable: function( element ) { 28992 return $.ui.focusable( element, $.attr( element, "tabindex" ) != null ); 28993 } 28994} ); 28995 28996var focusable = $.ui.focusable; 28997 28998 28999 29000// Support: IE8 Only 29001// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop 29002// with a string, so we need to find the proper form. 29003var form = $.fn._form = function() { 29004 return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); 29005}; 29006 29007 29008/*! 29009 * jQuery UI Form Reset Mixin 1.13.2 29010 * http://jqueryui.com 29011 * 29012 * Copyright jQuery Foundation and other contributors 29013 * Released under the MIT license. 29014 * http://jquery.org/license 29015 */ 29016 29017//>>label: Form Reset Mixin 29018//>>group: Core 29019//>>description: Refresh input widgets when their form is reset 29020//>>docs: http://api.jqueryui.com/form-reset-mixin/ 29021 29022 29023var formResetMixin = $.ui.formResetMixin = { 29024 _formResetHandler: function() { 29025 var form = $( this ); 29026 29027 // Wait for the form reset to actually happen before refreshing 29028 setTimeout( function() { 29029 var instances = form.data( "ui-form-reset-instances" ); 29030 $.each( instances, function() { 29031 this.refresh(); 29032 } ); 29033 } ); 29034 }, 29035 29036 _bindFormResetHandler: function() { 29037 this.form = this.element._form(); 29038 if ( !this.form.length ) { 29039 return; 29040 } 29041 29042 var instances = this.form.data( "ui-form-reset-instances" ) || []; 29043 if ( !instances.length ) { 29044 29045 // We don't use _on() here because we use a single event handler per form 29046 this.form.on( "reset.ui-form-reset", this._formResetHandler ); 29047 } 29048 instances.push( this ); 29049 this.form.data( "ui-form-reset-instances", instances ); 29050 }, 29051 29052 _unbindFormResetHandler: function() { 29053 if ( !this.form.length ) { 29054 return; 29055 } 29056 29057 var instances = this.form.data( "ui-form-reset-instances" ); 29058 instances.splice( $.inArray( this, instances ), 1 ); 29059 if ( instances.length ) { 29060 this.form.data( "ui-form-reset-instances", instances ); 29061 } else { 29062 this.form 29063 .removeData( "ui-form-reset-instances" ) 29064 .off( "reset.ui-form-reset" ); 29065 } 29066 } 29067}; 29068 29069 29070/*! 29071 * jQuery UI Support for jQuery core 1.8.x and newer 1.13.2 29072 * http://jqueryui.com 29073 * 29074 * Copyright jQuery Foundation and other contributors 29075 * Released under the MIT license. 29076 * http://jquery.org/license 29077 * 29078 */ 29079 29080//>>label: jQuery 1.8+ Support 29081//>>group: Core 29082//>>description: Support version 1.8.x and newer of jQuery core 29083 29084 29085// Support: jQuery 1.9.x or older 29086// $.expr[ ":" ] is deprecated. 29087if ( !$.expr.pseudos ) { 29088 $.expr.pseudos = $.expr[ ":" ]; 29089} 29090 29091// Support: jQuery 1.11.x or older 29092// $.unique has been renamed to $.uniqueSort 29093if ( !$.uniqueSort ) { 29094 $.uniqueSort = $.unique; 29095} 29096 29097// Support: jQuery 2.2.x or older. 29098// This method has been defined in jQuery 3.0.0. 29099// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js 29100if ( !$.escapeSelector ) { 29101 29102 // CSS string/identifier serialization 29103 // https://drafts.csswg.org/cssom/#common-serializing-idioms 29104 var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 29105 29106 var fcssescape = function( ch, asCodePoint ) { 29107 if ( asCodePoint ) { 29108 29109 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 29110 if ( ch === "\0" ) { 29111 return "\uFFFD"; 29112 } 29113 29114 // Control characters and (dependent upon position) numbers get escaped as code points 29115 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 29116 } 29117 29118 // Other potentially-special ASCII characters get backslash-escaped 29119 return "\\" + ch; 29120 }; 29121 29122 $.escapeSelector = function( sel ) { 29123 return ( sel + "" ).replace( rcssescape, fcssescape ); 29124 }; 29125} 29126 29127// Support: jQuery 3.4.x or older 29128// These methods have been defined in jQuery 3.5.0. 29129if ( !$.fn.even || !$.fn.odd ) { 29130 $.fn.extend( { 29131 even: function() { 29132 return this.filter( function( i ) { 29133 return i % 2 === 0; 29134 } ); 29135 }, 29136 odd: function() { 29137 return this.filter( function( i ) { 29138 return i % 2 === 1; 29139 } ); 29140 } 29141 } ); 29142} 29143 29144; 29145/*! 29146 * jQuery UI Keycode 1.13.2 29147 * http://jqueryui.com 29148 * 29149 * Copyright jQuery Foundation and other contributors 29150 * Released under the MIT license. 29151 * http://jquery.org/license 29152 */ 29153 29154//>>label: Keycode 29155//>>group: Core 29156//>>description: Provide keycodes as keynames 29157//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ 29158 29159 29160var keycode = $.ui.keyCode = { 29161 BACKSPACE: 8, 29162 COMMA: 188, 29163 DELETE: 46, 29164 DOWN: 40, 29165 END: 35, 29166 ENTER: 13, 29167 ESCAPE: 27, 29168 HOME: 36, 29169 LEFT: 37, 29170 PAGE_DOWN: 34, 29171 PAGE_UP: 33, 29172 PERIOD: 190, 29173 RIGHT: 39, 29174 SPACE: 32, 29175 TAB: 9, 29176 UP: 38 29177}; 29178 29179 29180/*! 29181 * jQuery UI Labels 1.13.2 29182 * http://jqueryui.com 29183 * 29184 * Copyright jQuery Foundation and other contributors 29185 * Released under the MIT license. 29186 * http://jquery.org/license 29187 */ 29188 29189//>>label: labels 29190//>>group: Core 29191//>>description: Find all the labels associated with a given input 29192//>>docs: http://api.jqueryui.com/labels/ 29193 29194 29195var labels = $.fn.labels = function() { 29196 var ancestor, selector, id, labels, ancestors; 29197 29198 if ( !this.length ) { 29199 return this.pushStack( [] ); 29200 } 29201 29202 // Check control.labels first 29203 if ( this[ 0 ].labels && this[ 0 ].labels.length ) { 29204 return this.pushStack( this[ 0 ].labels ); 29205 } 29206 29207 // Support: IE <= 11, FF <= 37, Android <= 2.3 only 29208 // Above browsers do not support control.labels. Everything below is to support them 29209 // as well as document fragments. control.labels does not work on document fragments 29210 labels = this.eq( 0 ).parents( "label" ); 29211 29212 // Look for the label based on the id 29213 id = this.attr( "id" ); 29214 if ( id ) { 29215 29216 // We don't search against the document in case the element 29217 // is disconnected from the DOM 29218 ancestor = this.eq( 0 ).parents().last(); 29219 29220 // Get a full set of top level ancestors 29221 ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); 29222 29223 // Create a selector for the label based on the id 29224 selector = "label[for='" + $.escapeSelector( id ) + "']"; 29225 29226 labels = labels.add( ancestors.find( selector ).addBack( selector ) ); 29227 29228 } 29229 29230 // Return whatever we have found for labels 29231 return this.pushStack( labels ); 29232}; 29233 29234 29235/*! 29236 * jQuery UI Scroll Parent 1.13.2 29237 * http://jqueryui.com 29238 * 29239 * Copyright jQuery Foundation and other contributors 29240 * Released under the MIT license. 29241 * http://jquery.org/license 29242 */ 29243 29244//>>label: scrollParent 29245//>>group: Core 29246//>>description: Get the closest ancestor element that is scrollable. 29247//>>docs: http://api.jqueryui.com/scrollParent/ 29248 29249 29250var scrollParent = $.fn.scrollParent = function( includeHidden ) { 29251 var position = this.css( "position" ), 29252 excludeStaticParent = position === "absolute", 29253 overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, 29254 scrollParent = this.parents().filter( function() { 29255 var parent = $( this ); 29256 if ( excludeStaticParent && parent.css( "position" ) === "static" ) { 29257 return false; 29258 } 29259 return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + 29260 parent.css( "overflow-x" ) ); 29261 } ).eq( 0 ); 29262 29263 return position === "fixed" || !scrollParent.length ? 29264 $( this[ 0 ].ownerDocument || document ) : 29265 scrollParent; 29266}; 29267 29268 29269/*! 29270 * jQuery UI Tabbable 1.13.2 29271 * http://jqueryui.com 29272 * 29273 * Copyright jQuery Foundation and other contributors 29274 * Released under the MIT license. 29275 * http://jquery.org/license 29276 */ 29277 29278//>>label: :tabbable Selector
vendor: 1,775 bytes, lines 29279-29353
29279//>>group: Core 29280//>>description: Selects elements which can be tabbed to. 29281//>>docs: http://api.jqueryui.com/tabbable-selector/ 29282 29283 29284var tabbable = $.extend( $.expr.pseudos, { 29285 tabbable: function( element ) { 29286 var tabIndex = $.attr( element, "tabindex" ), 29287 hasTabindex = tabIndex != null; 29288 return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex ); 29289 } 29290} ); 29291 29292 29293/*! 29294 * jQuery UI Unique ID 1.13.2 29295 * http://jqueryui.com 29296 * 29297 * Copyright jQuery Foundation and other contributors 29298 * Released under the MIT license. 29299 * http://jquery.org/license 29300 */ 29301 29302//>>label: uniqueId 29303//>>group: Core 29304//>>description: Functions to generate and remove uniqueId's 29305//>>docs: http://api.jqueryui.com/uniqueId/ 29306 29307 29308var uniqueId = $.fn.extend( { 29309 uniqueId: ( function() { 29310 var uuid = 0; 29311 29312 return function() { 29313 return this.each( function() { 29314 if ( !this.id ) { 29315 this.id = "ui-id-" + ( ++uuid ); 29316 } 29317 } ); 29318 }; 29319 } )(), 29320 29321 removeUniqueId: function() { 29322 return this.each( function() { 29323 if ( /^ui-id-\d+$/.test( this.id ) ) { 29324 $( this ).removeAttr( "id" ); 29325 } 29326 } ); 29327 } 29328} ); 29329 29330 29331/*! 29332 * jQuery UI Accordion 1.13.2 29333 * http://jqueryui.com 29334 * 29335 * Copyright jQuery Foundation and other contributors 29336 * Released under the MIT license. 29337 * http://jquery.org/license 29338 */ 29339 29340//>>label: Accordion 29341//>>group: Widgets 29342/* eslint-disable max-len */ 29343//>>description: Displays collapsible content panels for presenting information in a limited amount of space. 29344/* eslint-enable max-len */ 29345//>>docs: http://api.jqueryui.com/accordion/ 29346//>>demos: http://jqueryui.com/accordion/ 29347//>>css.structure: ../../themes/base/core.css 29348//>>css.structure: ../../themes/base/accordion.css 29349//>>css.theme: ../../themes/base/theme.css 29350 29351 29352var widgetsAccordion = $.widget( "ui.accordion", { 29353 version: "1.13.2
vendor: 15,900 bytes, lines 29353-29964
29353", 29354 options: { 29355 active: 0, 29356 animate: {}, 29357 classes: { 29358 "ui-accordion-header": "ui-corner-top", 29359 "ui-accordion-header-collapsed": "ui-corner-all", 29360 "ui-accordion-content": "ui-corner-bottom" 29361 }, 29362 collapsible: false, 29363 event: "click", 29364 header: function( elem ) { 29365 return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() ); 29366 }, 29367 heightStyle: "auto", 29368 icons: { 29369 activeHeader: "ui-icon-triangle-1-s", 29370 header: "ui-icon-triangle-1-e" 29371 }, 29372 29373 // Callbacks 29374 activate: null, 29375 beforeActivate: null 29376 }, 29377 29378 hideProps: { 29379 borderTopWidth: "hide", 29380 borderBottomWidth: "hide", 29381 paddingTop: "hide", 29382 paddingBottom: "hide", 29383 height: "hide" 29384 }, 29385 29386 showProps: { 29387 borderTopWidth: "show", 29388 borderBottomWidth: "show", 29389 paddingTop: "show", 29390 paddingBottom: "show", 29391 height: "show" 29392 }, 29393 29394 _create: function() { 29395 var options = this.options; 29396 29397 this.prevShow = this.prevHide = $(); 29398 this._addClass( "ui-accordion", "ui-widget ui-helper-reset" ); 29399 this.element.attr( "role", "tablist" ); 29400 29401 // Don't allow collapsible: false and active: false / null 29402 if ( !options.collapsible && ( options.active === false || options.active == null ) ) { 29403 options.active = 0; 29404 } 29405 29406 this._processPanels(); 29407 29408 // handle negative values 29409 if ( options.active < 0 ) { 29410 options.active += this.headers.length; 29411 } 29412 this._refresh(); 29413 }, 29414 29415 _getCreateEventData: function() { 29416 return { 29417 header: this.active, 29418 panel: !this.active.length ? $() : this.active.next() 29419 }; 29420 }, 29421 29422 _createIcons: function() { 29423 var icon, children, 29424 icons = this.options.icons; 29425 29426 if ( icons ) { 29427 icon = $( "<span>" ); 29428 this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header ); 29429 icon.prependTo( this.headers ); 29430 children = this.active.children( ".ui-accordion-header-icon" ); 29431 this._removeClass( children, icons.header ) 29432 ._addClass( children, null, icons.activeHeader ) 29433 ._addClass( this.headers, "ui-accordion-icons" ); 29434 } 29435 }, 29436 29437 _destroyIcons: function() { 29438 this._removeClass( this.headers, "ui-accordion-icons" ); 29439 this.headers.children( ".ui-accordion-header-icon" ).remove(); 29440 }, 29441 29442 _destroy: function() { 29443 var contents; 29444 29445 // Clean up main element 29446 this.element.removeAttr( "role" ); 29447 29448 // Clean up headers 29449 this.headers 29450 .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" ) 29451 .removeUniqueId(); 29452 29453 this._destroyIcons(); 29454 29455 // Clean up content panels 29456 contents = this.headers.next() 29457 .css( "display", "" ) 29458 .removeAttr( "role aria-hidden aria-labelledby" ) 29459 .removeUniqueId(); 29460 29461 if ( this.options.heightStyle !== "content" ) { 29462 contents.css( "height", "" ); 29463 } 29464 }, 29465 29466 _setOption: function( key, value ) { 29467 if ( key === "active" ) { 29468 29469 // _activate() will handle invalid values and update this.options 29470 this._activate( value ); 29471 return; 29472 } 29473 29474 if ( key === "event" ) { 29475 if ( this.options.event ) { 29476 this._off( this.headers, this.options.event ); 29477 } 29478 this._setupEvents( value ); 29479 } 29480 29481 this._super( key, value ); 29482 29483 // Setting collapsible: false while collapsed; open first panel 29484 if ( key === "collapsible" && !value && this.options.active === false ) { 29485 this._activate( 0 ); 29486 } 29487 29488 if ( key === "icons" ) { 29489 this._destroyIcons(); 29490 if ( value ) { 29491 this._createIcons(); 29492 } 29493 } 29494 }, 29495 29496 _setOptionDisabled: function( value ) { 29497 this._super( value ); 29498 29499 this.element.attr( "aria-disabled", value ); 29500 29501 // Support: IE8 Only 29502 // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE 29503 // so we need to add the disabled class to the headers and panels 29504 this._toggleClass( null, "ui-state-disabled", !!value ); 29505 this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled", 29506 !!value ); 29507 }, 29508 29509 _keydown: function( event ) { 29510 if ( event.altKey || event.ctrlKey ) { 29511 return; 29512 } 29513 29514 var keyCode = $.ui.keyCode, 29515 length = this.headers.length, 29516 currentIndex = this.headers.index( event.target ), 29517 toFocus = false; 29518 29519 switch ( event.keyCode ) { 29520 case keyCode.RIGHT: 29521 case keyCode.DOWN: 29522 toFocus = this.headers[ ( currentIndex + 1 ) % length ]; 29523 break; 29524 case keyCode.LEFT: 29525 case keyCode.UP: 29526 toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; 29527 break; 29528 case keyCode.SPACE: 29529 case keyCode.ENTER: 29530 this._eventHandler( event ); 29531 break; 29532 case keyCode.HOME: 29533 toFocus = this.headers[ 0 ]; 29534 break; 29535 case keyCode.END: 29536 toFocus = this.headers[ length - 1 ]; 29537 break; 29538 } 29539 29540 if ( toFocus ) { 29541 $( event.target ).attr( "tabIndex", -1 ); 29542 $( toFocus ).attr( "tabIndex", 0 ); 29543 $( toFocus ).trigger( "focus" ); 29544 event.preventDefault(); 29545 } 29546 }, 29547 29548 _panelKeyDown: function( event ) { 29549 if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { 29550 $( event.currentTarget ).prev().trigger( "focus" ); 29551 } 29552 }, 29553 29554 refresh: function() { 29555 var options = this.options; 29556 this._processPanels(); 29557 29558 // Was collapsed or no panel 29559 if ( ( options.active === false && options.collapsible === true ) || 29560 !this.headers.length ) { 29561 options.active = false; 29562 this.active = $(); 29563 29564 // active false only when collapsible is true 29565 } else if ( options.active === false ) { 29566 this._activate( 0 ); 29567 29568 // was active, but active panel is gone 29569 } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { 29570 29571 // all remaining panel are disabled 29572 if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) { 29573 options.active = false; 29574 this.active = $(); 29575 29576 // activate previous panel 29577 } else { 29578 this._activate( Math.max( 0, options.active - 1 ) ); 29579 } 29580 29581 // was active, active panel still exists 29582 } else { 29583 29584 // make sure active index is correct 29585 options.active = this.headers.index( this.active ); 29586 } 29587 29588 this._destroyIcons(); 29589 29590 this._refresh(); 29591 }, 29592 29593 _processPanels: function() { 29594 var prevHeaders = this.headers, 29595 prevPanels = this.panels; 29596 29597 if ( typeof this.options.header === "function" ) { 29598 this.headers = this.options.header( this.element ); 29599 } else { 29600 this.headers = this.element.find( this.options.header ); 29601 } 29602 this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed", 29603 "ui-state-default" ); 29604 29605 this.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide(); 29606 this._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" ); 29607 29608 // Avoid memory leaks (#10056) 29609 if ( prevPanels ) { 29610 this._off( prevHeaders.not( this.headers ) ); 29611 this._off( prevPanels.not( this.panels ) ); 29612 } 29613 }, 29614 29615 _refresh: function() { 29616 var maxHeight, 29617 options = this.options, 29618 heightStyle = options.heightStyle, 29619 parent = this.element.parent(); 29620 29621 this.active = this._findActive( options.active ); 29622 this._addClass( this.active, "ui-accordion-header-active", "ui-state-active" ) 29623 ._removeClass( this.active, "ui-accordion-header-collapsed" ); 29624 this._addClass( this.active.next(), "ui-accordion-content-active" ); 29625 this.active.next().show(); 29626 29627 this.headers 29628 .attr( "role", "tab" ) 29629 .each( function() { 29630 var header = $( this ), 29631 headerId = header.uniqueId().attr( "id" ), 29632 panel = header.next(), 29633 panelId = panel.uniqueId().attr( "id" ); 29634 header.attr( "aria-controls", panelId ); 29635 panel.attr( "aria-labelledby", headerId ); 29636 } ) 29637 .next() 29638 .attr( "role", "tabpanel" ); 29639 29640 this.headers 29641 .not( this.active ) 29642 .attr( { 29643 "aria-selected": "false", 29644 "aria-expanded": "false", 29645 tabIndex: -1 29646 } ) 29647 .next() 29648 .attr( { 29649 "aria-hidden": "true" 29650 } ) 29651 .hide(); 29652 29653 // Make sure at least one header is in the tab order 29654 if ( !this.active.length ) { 29655 this.headers.eq( 0 ).attr( "tabIndex", 0 ); 29656 } else { 29657 this.active.attr( { 29658 "aria-selected": "true", 29659 "aria-expanded": "true", 29660 tabIndex: 0 29661 } ) 29662 .next() 29663 .attr( { 29664 "aria-hidden": "false" 29665 } ); 29666 } 29667 29668 this._createIcons(); 29669 29670 this._setupEvents( options.event ); 29671 29672 if ( heightStyle === "fill" ) { 29673 maxHeight = parent.height(); 29674 this.element.siblings( ":visible" ).each( function() { 29675 var elem = $( this ), 29676 position = elem.css( "position" ); 29677 29678 if ( position === "absolute" || position === "fixed" ) { 29679 return; 29680 } 29681 maxHeight -= elem.outerHeight( true ); 29682 } ); 29683 29684 this.headers.each( function() { 29685 maxHeight -= $( this ).outerHeight( true ); 29686 } ); 29687 29688 this.headers.next() 29689 .each( function() { 29690 $( this ).height( Math.max( 0, maxHeight - 29691 $( this ).innerHeight() + $( this ).height() ) ); 29692 } ) 29693 .css( "overflow", "auto" ); 29694 } else if ( heightStyle === "auto" ) { 29695 maxHeight = 0; 29696 this.headers.next() 29697 .each( function() { 29698 var isVisible = $( this ).is( ":visible" ); 29699 if ( !isVisible ) { 29700 $( this ).show(); 29701 } 29702 maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); 29703 if ( !isVisible ) { 29704 $( this ).hide(); 29705 } 29706 } ) 29707 .height( maxHeight ); 29708 } 29709 }, 29710 29711 _activate: function( index ) { 29712 var active = this._findActive( index )[ 0 ]; 29713 29714 // Trying to activate the already active panel 29715 if ( active === this.active[ 0 ] ) { 29716 return; 29717 } 29718 29719 // Trying to collapse, simulate a click on the currently active header 29720 active = active || this.active[ 0 ]; 29721 29722 this._eventHandler( { 29723 target: active, 29724 currentTarget: active, 29725 preventDefault: $.noop 29726 } ); 29727 }, 29728 29729 _findActive: function( selector ) { 29730 return typeof selector === "number" ? this.headers.eq( selector ) : $(); 29731 }, 29732 29733 _setupEvents: function( event ) { 29734 var events = { 29735 keydown: "_keydown" 29736 }; 29737 if ( event ) { 29738 $.each( event.split( " " ), function( index, eventName ) { 29739 events[ eventName ] = "_eventHandler"; 29740 } ); 29741 } 29742 29743 this._off( this.headers.add( this.headers.next() ) ); 29744 this._on( this.headers, events ); 29745 this._on( this.headers.next(), { keydown: "_panelKeyDown" } ); 29746 this._hoverable( this.headers ); 29747 this._focusable( this.headers ); 29748 }, 29749 29750 _eventHandler: function( event ) { 29751 var activeChildren, clickedChildren, 29752 options = this.options, 29753 active = this.active, 29754 clicked = $( event.currentTarget ), 29755 clickedIsActive = clicked[ 0 ] === active[ 0 ], 29756 collapsing = clickedIsActive && options.collapsible, 29757 toShow = collapsing ? $() : clicked.next(), 29758 toHide = active.next(), 29759 eventData = { 29760 oldHeader: active, 29761 oldPanel: toHide, 29762 newHeader: collapsing ? $() : clicked, 29763 newPanel: toShow 29764 }; 29765 29766 event.preventDefault(); 29767 29768 if ( 29769 29770 // click on active header, but not collapsible 29771 ( clickedIsActive && !options.collapsible ) || 29772 29773 // allow canceling activation 29774 ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { 29775 return; 29776 } 29777 29778 options.active = collapsing ? false : this.headers.index( clicked ); 29779 29780 // When the call to ._toggle() comes after the class changes 29781 // it causes a very odd bug in IE 8 (see #6720) 29782 this.active = clickedIsActive ? $() : clicked; 29783 this._toggle( eventData ); 29784 29785 // Switch classes 29786 // corner classes on the previously active header stay after the animation 29787 this._removeClass( active, "ui-accordion-header-active", "ui-state-active" ); 29788 if ( options.icons ) { 29789 activeChildren = active.children( ".ui-accordion-header-icon" ); 29790 this._removeClass( activeChildren, null, options.icons.activeHeader ) 29791 ._addClass( activeChildren, null, options.icons.header ); 29792 } 29793 29794 if ( !clickedIsActive ) { 29795 this._removeClass( clicked, "ui-accordion-header-collapsed" ) 29796 ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" ); 29797 if ( options.icons ) { 29798 clickedChildren = clicked.children( ".ui-accordion-header-icon" ); 29799 this._removeClass( clickedChildren, null, options.icons.header ) 29800 ._addClass( clickedChildren, null, options.icons.activeHeader ); 29801 } 29802 29803 this._addClass( clicked.next(), "ui-accordion-content-active" ); 29804 } 29805 }, 29806 29807 _toggle: function( data ) { 29808 var toShow = data.newPanel, 29809 toHide = this.prevShow.length ? this.prevShow : data.oldPanel; 29810 29811 // Handle activating a panel during the animation for another activation 29812 this.prevShow.add( this.prevHide ).stop( true, true ); 29813 this.prevShow = toShow; 29814 this.prevHide = toHide; 29815 29816 if ( this.options.animate ) { 29817 this._animate( toShow, toHide, data ); 29818 } else { 29819 toHide.hide(); 29820 toShow.show(); 29821 this._toggleComplete( data ); 29822 } 29823 29824 toHide.attr( { 29825 "aria-hidden": "true" 29826 } ); 29827 toHide.prev().attr( { 29828 "aria-selected": "false", 29829 "aria-expanded": "false" 29830 } ); 29831 29832 // if we're switching panels, remove the old header from the tab order 29833 // if we're opening from collapsed state, remove the previous header from the tab order 29834 // if we're collapsing, then keep the collapsing header in the tab order 29835 if ( toShow.length && toHide.length ) { 29836 toHide.prev().attr( { 29837 "tabIndex": -1, 29838 "aria-expanded": "false" 29839 } ); 29840 } else if ( toShow.length ) { 29841 this.headers.filter( function() { 29842 return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; 29843 } ) 29844 .attr( "tabIndex", -1 ); 29845 } 29846 29847 toShow 29848 .attr( "aria-hidden", "false" ) 29849 .prev() 29850 .attr( { 29851 "aria-selected": "true", 29852 "aria-expanded": "true", 29853 tabIndex: 0 29854 } ); 29855 }, 29856 29857 _animate: function( toShow, toHide, data ) { 29858 var total, easing, duration, 29859 that = this, 29860 adjust = 0, 29861 boxSizing = toShow.css( "box-sizing" ), 29862 down = toShow.length && 29863 ( !toHide.length || ( toShow.index() < toHide.index() ) ), 29864 animate = this.options.animate || {}, 29865 options = down && animate.down || animate, 29866 complete = function() { 29867 that._toggleComplete( data ); 29868 }; 29869 29870 if ( typeof options === "number" ) { 29871 duration = options; 29872 } 29873 if ( typeof options === "string" ) { 29874 easing = options; 29875 } 29876 29877 // fall back from options to animation in case of partial down settings 29878 easing = easing || options.easing || animate.easing; 29879 duration = duration || options.duration || animate.duration; 29880 29881 if ( !toHide.length ) { 29882 return toShow.animate( this.showProps, duration, easing, complete ); 29883 } 29884 if ( !toShow.length ) { 29885 return toHide.animate( this.hideProps, duration, easing, complete ); 29886 } 29887 29888 total = toShow.show().outerHeight(); 29889 toHide.animate( this.hideProps, { 29890 duration: duration, 29891 easing: easing, 29892 step: function( now, fx ) { 29893 fx.now = Math.round( now ); 29894 } 29895 } ); 29896 toShow 29897 .hide() 29898 .animate( this.showProps, { 29899 duration: duration, 29900 easing: easing, 29901 complete: complete, 29902 step: function( now, fx ) { 29903 fx.now = Math.round( now ); 29904 if ( fx.prop !== "height" ) { 29905 if ( boxSizing === "content-box" ) { 29906 adjust += fx.now; 29907 } 29908 } else if ( that.options.heightStyle !== "content" ) { 29909 fx.now = Math.round( total - toHide.outerHeight() - adjust ); 29910 adjust = 0; 29911 } 29912 } 29913 } ); 29914 }, 29915 29916 _toggleComplete: function( data ) { 29917 var toHide = data.oldPanel, 29918 prev = toHide.prev(); 29919 29920 this._removeClass( toHide, "ui-accordion-content-active" ); 29921 this._removeClass( prev, "ui-accordion-header-active" ) 29922 ._addClass( prev, "ui-accordion-header-collapsed" ); 29923 29924 // Work around for rendering bug in IE (#5421) 29925 if ( toHide.length ) { 29926 toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; 29927 } 29928 this._trigger( "activate", null, data ); 29929 } 29930} ); 29931 29932 29933 29934var safeActiveElement = $.ui.safeActiveElement = function( document ) { 29935 var activeElement; 29936 29937 // Support: IE 9 only 29938 // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe> 29939 try { 29940 activeElement = document.activeElement; 29941 } catch ( error ) { 29942 activeElement = document.body; 29943 } 29944 29945 // Support: IE 9 - 11 only 29946 // IE may return null instead of an element 29947 // Interestingly, this only seems to occur when NOT in an iframe 29948 if ( !activeElement ) { 29949 activeElement = document.body; 29950 } 29951 29952 // Support: IE 11 only 29953 // IE11 returns a seemingly empty object in some cases when accessing 29954 // document.activeElement from an <iframe> 29955 if ( !activeElement.nodeName ) { 29956 activeElement = document.body; 29957 } 29958 29959 return activeElement; 29960}; 29961 29962 29963/*! 29964 * jQuery UI Menu 1.13.
299642 29965 * http://jqueryui.com 29966 * 29967 * Copyright jQuery Foundation and other contributors 29968 * Released under the MIT license. 29969 * http://jquery.org/license 29970 */ 29971 29972//>>label: Menu 29973//>>group: Widgets 29974//>>description: Creates nestable menus. 29975//>>docs: http://api.jqueryui.com/menu/ 29976//>>demos: http://jqueryui.com/menu/ 29977//>>css.structure: ../../themes/base/core.css 29978//>>css.structure: ../../themes/base/menu.css 29979//>>css.theme: ../../themes/base/theme.css 29980 29981 29982var widgetsMenu = $.widget( "ui.menu", { 29983 version: "1.13.2
vendor: 5,724 bytes, lines 29983-30202
29983", 29984 defaultElement: "<ul>", 29985 delay: 300, 29986 options: { 29987 icons: { 29988 submenu: "ui-icon-caret-1-e" 29989 }, 29990 items: "> *", 29991 menus: "ul", 29992 position: { 29993 my: "left top", 29994 at: "right top" 29995 }, 29996 role: "menu", 29997 29998 // Callbacks 29999 blur: null, 30000 focus: null, 30001 select: null 30002 }, 30003 30004 _create: function() { 30005 this.activeMenu = this.element; 30006 30007 // Flag used to prevent firing of the click handler 30008 // as the event bubbles up through nested menus 30009 this.mouseHandled = false; 30010 this.lastMousePosition = { x: null, y: null }; 30011 this.element 30012 .uniqueId() 30013 .attr( { 30014 role: this.options.role, 30015 tabIndex: 0 30016 } ); 30017 30018 this._addClass( "ui-menu", "ui-widget ui-widget-content" ); 30019 this._on( { 30020 30021 // Prevent focus from sticking to links inside menu after clicking 30022 // them (focus should always stay on UL during navigation). 30023 "mousedown .ui-menu-item": function( event ) { 30024 event.preventDefault(); 30025 30026 this._activateItem( event ); 30027 }, 30028 "click .ui-menu-item": function( event ) { 30029 var target = $( event.target ); 30030 var active = $( $.ui.safeActiveElement( this.document[ 0 ] ) ); 30031 if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) { 30032 this.select( event ); 30033 30034 // Only set the mouseHandled flag if the event will bubble, see #9469. 30035 if ( !event.isPropagationStopped() ) { 30036 this.mouseHandled = true; 30037 } 30038 30039 // Open submenu on click 30040 if ( target.has( ".ui-menu" ).length ) { 30041 this.expand( event ); 30042 } else if ( !this.element.is( ":focus" ) && 30043 active.closest( ".ui-menu" ).length ) { 30044 30045 // Redirect focus to the menu 30046 this.element.trigger( "focus", [ true ] ); 30047 30048 // If the active item is on the top level, let it stay active. 30049 // Otherwise, blur the active item since it is no longer visible. 30050 if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) { 30051 clearTimeout( this.timer ); 30052 } 30053 } 30054 } 30055 }, 30056 "mouseenter .ui-menu-item": "_activateItem", 30057 "mousemove .ui-menu-item": "_activateItem", 30058 mouseleave: "collapseAll", 30059 "mouseleave .ui-menu": "collapseAll", 30060 focus: function( event, keepActiveItem ) { 30061 30062 // If there's already an active item, keep it active 30063 // If not, activate the first item 30064 var item = this.active || this._menuItems().first(); 30065 30066 if ( !keepActiveItem ) { 30067 this.focus( event, item ); 30068 } 30069 }, 30070 blur: function( event ) { 30071 this._delay( function() { 30072 var notContained = !$.contains( 30073 this.element[ 0 ], 30074 $.ui.safeActiveElement( this.document[ 0 ] ) 30075 ); 30076 if ( notContained ) { 30077 this.collapseAll( event ); 30078 } 30079 } ); 30080 }, 30081 keydown: "_keydown" 30082 } ); 30083 30084 this.refresh(); 30085 30086 // Clicks outside of a menu collapse any open menus 30087 this._on( this.document, { 30088 click: function( event ) { 30089 if ( this._closeOnDocumentClick( event ) ) { 30090 this.collapseAll( event, true ); 30091 } 30092 30093 // Reset the mouseHandled flag 30094 this.mouseHandled = false; 30095 } 30096 } ); 30097 }, 30098 30099 _activateItem: function( event ) { 30100 30101 // Ignore mouse events while typeahead is active, see #10458. 30102 // Prevents focusing the wrong item when typeahead causes a scroll while the mouse 30103 // is over an item in the menu 30104 if ( this.previousFilter ) { 30105 return; 30106 } 30107 30108 // If the mouse didn't actually move, but the page was scrolled, ignore the event (#9356) 30109 if ( event.clientX === this.lastMousePosition.x && 30110 event.clientY === this.lastMousePosition.y ) { 30111 return; 30112 } 30113 30114 this.lastMousePosition = { 30115 x: event.clientX, 30116 y: event.clientY 30117 }; 30118 30119 var actualTarget = $( event.target ).closest( ".ui-menu-item" ), 30120 target = $( event.currentTarget ); 30121 30122 // Ignore bubbled events on parent items, see #11641 30123 if ( actualTarget[ 0 ] !== target[ 0 ] ) { 30124 return; 30125 } 30126 30127 // If the item is already active, there's nothing to do 30128 if ( target.is( ".ui-state-active" ) ) { 30129 return; 30130 } 30131 30132 // Remove ui-state-active class from siblings of the newly focused menu item 30133 // to avoid a jump caused by adjacent elements both having a class with a border 30134 this._removeClass( target.siblings().children( ".ui-state-active" ), 30135 null, "ui-state-active" ); 30136 this.focus( event, target ); 30137 }, 30138 30139 _destroy: function() { 30140 var items = this.element.find( ".ui-menu-item" ) 30141 .removeAttr( "role aria-disabled" ), 30142 submenus = items.children( ".ui-menu-item-wrapper" ) 30143 .removeUniqueId() 30144 .removeAttr( "tabIndex role aria-haspopup" ); 30145 30146 // Destroy (sub)menus 30147 this.element 30148 .removeAttr( "aria-activedescendant" ) 30149 .find( ".ui-menu" ).addBack() 30150 .removeAttr( "role aria-labelledby aria-expanded aria-hidden aria-disabled " + 30151 "tabIndex" ) 30152 .removeUniqueId() 30153 .show(); 30154 30155 submenus.children().each( function() { 30156 var elem = $( this ); 30157 if ( elem.data( "ui-menu-submenu-caret" ) ) { 30158 elem.remove(); 30159 } 30160 } ); 30161 }, 30162 30163 _keydown: function( event ) { 30164 var match, prev, character, skip, 30165 preventDefault = true; 30166 30167 switch ( event.keyCode ) { 30168 case $.ui.keyCode.PAGE_UP: 30169 this.previousPage( event ); 30170 break; 30171 case $.ui.keyCode.PAGE_DOWN: 30172 this.nextPage( event ); 30173 break; 30174 case $.ui.keyCode.HOME: 30175 this._move( "first", "first", event ); 30176 break; 30177 case $.ui.keyCode.END: 30178 this._move( "last", "last", event ); 30179 break; 30180 case $.ui.keyCode.UP: 30181 this.previous( event ); 30182 break; 30183 case $.ui.keyCode.DOWN: 30184 this.next( event ); 30185 break; 30186 case $.ui.keyCode.LEFT: 30187 this.collapse( event ); 30188 break; 30189 case $.ui.keyCode.RIGHT: 30190 if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { 30191 this.expand( event ); 30192 } 30193 break; 30194 case $.ui.keyCode.ENTER: 30195 case $.ui.keyCode.SPACE: 30196 this._activate( event ); 30197 break; 30198 case $.ui.keyCode.ESCAPE: 30199 this.collapse( event ); 30200 break; 30201 default: 30202 preventDefault = false;
vendor: 6,930 bytes, lines 30203-30451
30203 prev = this.previousFilter || ""; 30204 skip = false; 30205 30206 // Support number pad values 30207 character = event.keyCode >= 96 && event.keyCode <= 105 ? 30208 ( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode ); 30209 30210 clearTimeout( this.filterTimer ); 30211 30212 if ( character === prev ) { 30213 skip = true; 30214 } else { 30215 character = prev + character; 30216 } 30217 30218 match = this._filterMenuItems( character ); 30219 match = skip && match.index( this.active.next() ) !== -1 ? 30220 this.active.nextAll( ".ui-menu-item" ) : 30221 match; 30222 30223 // If no matches on the current filter, reset to the last character pressed 30224 // to move down the menu to the first item that starts with that character 30225 if ( !match.length ) { 30226 character = String.fromCharCode( event.keyCode ); 30227 match = this._filterMenuItems( character ); 30228 } 30229 30230 if ( match.length ) { 30231 this.focus( event, match ); 30232 this.previousFilter = character; 30233 this.filterTimer = this._delay( function() { 30234 delete this.previousFilter; 30235 }, 1000 ); 30236 } else { 30237 delete this.previousFilter; 30238 } 30239 } 30240 30241 if ( preventDefault ) { 30242 event.preventDefault(); 30243 } 30244 }, 30245 30246 _activate: function( event ) { 30247 if ( this.active && !this.active.is( ".ui-state-disabled" ) ) { 30248 if ( this.active.children( "[aria-haspopup='true']" ).length ) { 30249 this.expand( event ); 30250 } else { 30251 this.select( event ); 30252 } 30253 } 30254 }, 30255 30256 refresh: function() { 30257 var menus, items, newSubmenus, newItems, newWrappers, 30258 that = this, 30259 icon = this.options.icons.submenu, 30260 submenus = this.element.find( this.options.menus ); 30261 30262 this._toggleClass( "ui-menu-icons", null, !!this.element.find( ".ui-icon" ).length ); 30263 30264 // Initialize nested menus 30265 newSubmenus = submenus.filter( ":not(.ui-menu)" ) 30266 .hide() 30267 .attr( { 30268 role: this.options.role, 30269 "aria-hidden": "true", 30270 "aria-expanded": "false" 30271 } ) 30272 .each( function() { 30273 var menu = $( this ), 30274 item = menu.prev(), 30275 submenuCaret = $( "<span>" ).data( "ui-menu-submenu-caret", true ); 30276 30277 that._addClass( submenuCaret, "ui-menu-icon", "ui-icon " + icon ); 30278 item 30279 .attr( "aria-haspopup", "true" ) 30280 .prepend( submenuCaret ); 30281 menu.attr( "aria-labelledby", item.attr( "id" ) ); 30282 } ); 30283 30284 this._addClass( newSubmenus, "ui-menu", "ui-widget ui-widget-content ui-front" ); 30285 30286 menus = submenus.add( this.element ); 30287 items = menus.find( this.options.items ); 30288 30289 // Initialize menu-items containing spaces and/or dashes only as dividers 30290 items.not( ".ui-menu-item" ).each( function() { 30291 var item = $( this ); 30292 if ( that._isDivider( item ) ) { 30293 that._addClass( item, "ui-menu-divider", "ui-widget-content" ); 30294 } 30295 } ); 30296 30297 // Don't refresh list items that are already adapted 30298 newItems = items.not( ".ui-menu-item, .ui-menu-divider" ); 30299 newWrappers = newItems.children() 30300 .not( ".ui-menu" ) 30301 .uniqueId() 30302 .attr( { 30303 tabIndex: -1, 30304 role: this._itemRole() 30305 } ); 30306 this._addClass( newItems, "ui-menu-item" ) 30307 ._addClass( newWrappers, "ui-menu-item-wrapper" ); 30308 30309 // Add aria-disabled attribute to any disabled menu item 30310 items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" ); 30311 30312 // If the active item has been removed, blur the menu 30313 if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { 30314 this.blur(); 30315 } 30316 }, 30317 30318 _itemRole: function() { 30319 return { 30320 menu: "menuitem", 30321 listbox: "option" 30322 }[ this.options.role ]; 30323 }, 30324 30325 _setOption: function( key, value ) { 30326 if ( key === "icons" ) { 30327 var icons = this.element.find( ".ui-menu-icon" ); 30328 this._removeClass( icons, null, this.options.icons.submenu ) 30329 ._addClass( icons, null, value.submenu ); 30330 } 30331 this._super( key, value ); 30332 }, 30333 30334 _setOptionDisabled: function( value ) { 30335 this._super( value ); 30336 30337 this.element.attr( "aria-disabled", String( value ) ); 30338 this._toggleClass( null, "ui-state-disabled", !!value ); 30339 }, 30340 30341 focus: function( event, item ) { 30342 var nested, focused, activeParent; 30343 this.blur( event, event && event.type === "focus" ); 30344 30345 this._scrollIntoView( item ); 30346 30347 this.active = item.first(); 30348 30349 focused = this.active.children( ".ui-menu-item-wrapper" ); 30350 this._addClass( focused, null, "ui-state-active" ); 30351 30352 // Only update aria-activedescendant if there's a role 30353 // otherwise we assume focus is managed elsewhere 30354 if ( this.options.role ) { 30355 this.element.attr( "aria-activedescendant", focused.attr( "id" ) ); 30356 } 30357 30358 // Highlight active parent menu item, if any 30359 activeParent = this.active 30360 .parent() 30361 .closest( ".ui-menu-item" ) 30362 .children( ".ui-menu-item-wrapper" ); 30363 this._addClass( activeParent, null, "ui-state-active" ); 30364 30365 if ( event && event.type === "keydown" ) { 30366 this._close(); 30367 } else { 30368 this.timer = this._delay( function() { 30369 this._close(); 30370 }, this.delay ); 30371 } 30372 30373 nested = item.children( ".ui-menu" ); 30374 if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) { 30375 this._startOpening( nested ); 30376 } 30377 this.activeMenu = item.parent(); 30378 30379 this._trigger( "focus", event, { item: item } ); 30380 }, 30381 30382 _scrollIntoView: function( item ) { 30383 var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; 30384 if ( this._hasScroll() ) { 30385 borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; 30386 paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; 30387 offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; 30388 scroll = this.activeMenu.scrollTop(); 30389 elementHeight = this.activeMenu.height(); 30390 itemHeight = item.outerHeight(); 30391 30392 if ( offset < 0 ) { 30393 this.activeMenu.scrollTop( scroll + offset ); 30394 } else if ( offset + itemHeight > elementHeight ) { 30395 this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); 30396 } 30397 } 30398 }, 30399 30400 blur: function( event, fromFocus ) { 30401 if ( !fromFocus ) { 30402 clearTimeout( this.timer ); 30403 } 30404 30405 if ( !this.active ) { 30406 return; 30407 } 30408 30409 this._removeClass( this.active.children( ".ui-menu-item-wrapper" ), 30410 null, "ui-state-active" ); 30411 30412 this._trigger( "blur", event, { item: this.active } ); 30413 this.active = null; 30414 }, 30415 30416 _startOpening: function( submenu ) { 30417 clearTimeout( this.timer ); 30418 30419 // Don't open if already open fixes a Firefox bug that caused a .5 pixel 30420 // shift in the submenu position when mousing over the caret icon 30421 if ( submenu.attr( "aria-hidden" ) !== "true" ) { 30422 return; 30423 } 30424 30425 this.timer = this._delay( function() { 30426 this._close(); 30427 this._open( submenu ); 30428 }, this.delay ); 30429 }, 30430 30431 _open: function( submenu ) { 30432 var position = $.extend( { 30433 of: this.active 30434 }, this.options.position ); 30435 30436 clearTimeout( this.timer ); 30437 this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) ) 30438 .hide() 30439 .attr( "aria-hidden", "true" ); 30440 30441 submenu 30442 .show() 30443 .removeAttr( "aria-hidden" ) 30444 .attr( "aria-expanded", "true" ) 30445 .position( position ); 30446 }, 30447 30448 collapseAll: function( event, all ) { 30449 clearTimeout( this.timer ); 30450 this.timer = this._delay( function() { 30451
vendor: 5,434 bytes, lines 30452-30655
30452 // If we were passed an event, look for the submenu that contains the event 30453 var currentMenu = all ? this.element : 30454 $( event && event.target ).closest( this.element.find( ".ui-menu" ) ); 30455 30456 // If we found no valid submenu ancestor, use the main menu to close all 30457 // sub menus anyway 30458 if ( !currentMenu.length ) { 30459 currentMenu = this.element; 30460 } 30461 30462 this._close( currentMenu ); 30463 30464 this.blur( event ); 30465 30466 // Work around active item staying active after menu is blurred 30467 this._removeClass( currentMenu.find( ".ui-state-active" ), null, "ui-state-active" ); 30468 30469 this.activeMenu = currentMenu; 30470 }, all ? 0 : this.delay ); 30471 }, 30472 30473 // With no arguments, closes the currently active menu - if nothing is active 30474 // it closes all menus. If passed an argument, it will search for menus BELOW 30475 _close: function( startMenu ) { 30476 if ( !startMenu ) { 30477 startMenu = this.active ? this.active.parent() : this.element; 30478 } 30479 30480 startMenu.find( ".ui-menu" ) 30481 .hide() 30482 .attr( "aria-hidden", "true" ) 30483 .attr( "aria-expanded", "false" ); 30484 }, 30485 30486 _closeOnDocumentClick: function( event ) { 30487 return !$( event.target ).closest( ".ui-menu" ).length; 30488 }, 30489 30490 _isDivider: function( item ) { 30491 30492 // Match hyphen, em dash, en dash 30493 return !/[^\-\u2014\u2013\s]/.test( item.text() ); 30494 }, 30495 30496 collapse: function( event ) { 30497 var newItem = this.active && 30498 this.active.parent().closest( ".ui-menu-item", this.element ); 30499 if ( newItem && newItem.length ) { 30500 this._close(); 30501 this.focus( event, newItem ); 30502 } 30503 }, 30504 30505 expand: function( event ) { 30506 var newItem = this.active && this._menuItems( this.active.children( ".ui-menu" ) ).first(); 30507 30508 if ( newItem && newItem.length ) { 30509 this._open( newItem.parent() ); 30510 30511 // Delay so Firefox will not hide activedescendant change in expanding submenu from AT 30512 this._delay( function() { 30513 this.focus( event, newItem ); 30514 } ); 30515 } 30516 }, 30517 30518 next: function( event ) { 30519 this._move( "next", "first", event ); 30520 }, 30521 30522 previous: function( event ) { 30523 this._move( "prev", "last", event ); 30524 }, 30525 30526 isFirstItem: function() { 30527 return this.active && !this.active.prevAll( ".ui-menu-item" ).length; 30528 }, 30529 30530 isLastItem: function() { 30531 return this.active && !this.active.nextAll( ".ui-menu-item" ).length; 30532 }, 30533 30534 _menuItems: function( menu ) { 30535 return ( menu || this.element ) 30536 .find( this.options.items ) 30537 .filter( ".ui-menu-item" ); 30538 }, 30539 30540 _move: function( direction, filter, event ) { 30541 var next; 30542 if ( this.active ) { 30543 if ( direction === "first" || direction === "last" ) { 30544 next = this.active 30545 [ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" ) 30546 .last(); 30547 } else { 30548 next = this.active 30549 [ direction + "All" ]( ".ui-menu-item" ) 30550 .first(); 30551 } 30552 } 30553 if ( !next || !next.length || !this.active ) { 30554 next = this._menuItems( this.activeMenu )[ filter ](); 30555 } 30556 30557 this.focus( event, next ); 30558 }, 30559 30560 nextPage: function( event ) { 30561 var item, base, height; 30562 30563 if ( !this.active ) { 30564 this.next( event ); 30565 return; 30566 } 30567 if ( this.isLastItem() ) { 30568 return; 30569 } 30570 if ( this._hasScroll() ) { 30571 base = this.active.offset().top; 30572 height = this.element.innerHeight(); 30573 30574 // jQuery 3.2 doesn't include scrollbars in innerHeight, add it back. 30575 if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) { 30576 height += this.element[ 0 ].offsetHeight - this.element.outerHeight(); 30577 } 30578 30579 this.active.nextAll( ".ui-menu-item" ).each( function() { 30580 item = $( this ); 30581 return item.offset().top - base - height < 0; 30582 } ); 30583 30584 this.focus( event, item ); 30585 } else { 30586 this.focus( event, this._menuItems( this.activeMenu ) 30587 [ !this.active ? "first" : "last" ]() ); 30588 } 30589 }, 30590 30591 previousPage: function( event ) { 30592 var item, base, height; 30593 if ( !this.active ) { 30594 this.next( event ); 30595 return; 30596 } 30597 if ( this.isFirstItem() ) { 30598 return; 30599 } 30600 if ( this._hasScroll() ) { 30601 base = this.active.offset().top; 30602 height = this.element.innerHeight(); 30603 30604 // jQuery 3.2 doesn't include scrollbars in innerHeight, add it back. 30605 if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) { 30606 height += this.element[ 0 ].offsetHeight - this.element.outerHeight(); 30607 } 30608 30609 this.active.prevAll( ".ui-menu-item" ).each( function() { 30610 item = $( this ); 30611 return item.offset().top - base + height > 0; 30612 } ); 30613 30614 this.focus( event, item ); 30615 } else { 30616 this.focus( event, this._menuItems( this.activeMenu ).first() ); 30617 } 30618 }, 30619 30620 _hasScroll: function() { 30621 return this.element.outerHeight() < this.element.prop( "scrollHeight" ); 30622 }, 30623 30624 select: function( event ) { 30625 30626 // TODO: It should never be possible to not have an active item at this 30627 // point, but the tests don't trigger mouseenter before click. 30628 this.active = this.active || $( event.target ).closest( ".ui-menu-item" ); 30629 var ui = { item: this.active }; 30630 if ( !this.active.has( ".ui-menu" ).length ) { 30631 this.collapseAll( event, true ); 30632 } 30633 this._trigger( "select", event, ui ); 30634 }, 30635 30636 _filterMenuItems: function( character ) { 30637 var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ), 30638 regex = new RegExp( "^" + escapedCharacter, "i" ); 30639 30640 return this.activeMenu 30641 .find( this.options.items ) 30642 30643 // Only match on items, not dividers or other content (#10571) 30644 .filter( ".ui-menu-item" ) 30645 .filter( function() { 30646 return regex.test( 30647 String.prototype.trim.call( 30648 $( this ).children( ".ui-menu-item-wrapper" ).text() ) ); 30649 } ); 30650 } 30651} ); 30652 30653 30654/*! 30655 * jQuery UI Autocomplete 1.13.
306552 30656 * http://jqueryui.com 30657 * 30658 * Copyright jQuery Foundation and other contributors 30659 * Released under the MIT license. 30660 * http://jquery.org/license 30661 */ 30662 30663//>>label: Autocomplete 30664//>>group: Widgets 30665//>>description: Lists suggested words as the user is typing. 30666//>>docs: http://api.jqueryui.com/autocomplete/ 30667//>>demos: http://jqueryui.com/autocomplete/ 30668//>>css.structure: ../../themes/base/core.css 30669//>>css.structure: ../../themes/base/autocomplete.css 30670//>>css.theme: ../../themes/base/theme.css 30671 30672 30673$.widget( "ui.autocomplete", { 30674 version: "1.13.2
vendor: 16,621 bytes, lines 30674-31311
30674", 30675 defaultElement: "<input>", 30676 options: { 30677 appendTo: null, 30678 autoFocus: false, 30679 delay: 300, 30680 minLength: 1, 30681 position: { 30682 my: "left top", 30683 at: "left bottom", 30684 collision: "none" 30685 }, 30686 source: null, 30687 30688 // Callbacks 30689 change: null, 30690 close: null, 30691 focus: null, 30692 open: null, 30693 response: null, 30694 search: null, 30695 select: null 30696 }, 30697 30698 requestIndex: 0, 30699 pending: 0, 30700 liveRegionTimer: null, 30701 30702 _create: function() { 30703 30704 // Some browsers only repeat keydown events, not keypress events, 30705 // so we use the suppressKeyPress flag to determine if we've already 30706 // handled the keydown event. #7269 30707 // Unfortunately the code for & in keypress is the same as the up arrow, 30708 // so we use the suppressKeyPressRepeat flag to avoid handling keypress 30709 // events when we know the keydown event was used to modify the 30710 // search term. #7799 30711 var suppressKeyPress, suppressKeyPressRepeat, suppressInput, 30712 nodeName = this.element[ 0 ].nodeName.toLowerCase(), 30713 isTextarea = nodeName === "textarea", 30714 isInput = nodeName === "input"; 30715 30716 // Textareas are always multi-line 30717 // Inputs are always single-line, even if inside a contentEditable element 30718 // IE also treats inputs as contentEditable 30719 // All other element types are determined by whether or not they're contentEditable 30720 this.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element ); 30721 30722 this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ]; 30723 this.isNewMenu = true; 30724 30725 this._addClass( "ui-autocomplete-input" ); 30726 this.element.attr( "autocomplete", "off" ); 30727 30728 this._on( this.element, { 30729 keydown: function( event ) { 30730 if ( this.element.prop( "readOnly" ) ) { 30731 suppressKeyPress = true; 30732 suppressInput = true; 30733 suppressKeyPressRepeat = true; 30734 return; 30735 } 30736 30737 suppressKeyPress = false; 30738 suppressInput = false; 30739 suppressKeyPressRepeat = false; 30740 var keyCode = $.ui.keyCode; 30741 switch ( event.keyCode ) { 30742 case keyCode.PAGE_UP: 30743 suppressKeyPress = true; 30744 this._move( "previousPage", event ); 30745 break; 30746 case keyCode.PAGE_DOWN: 30747 suppressKeyPress = true; 30748 this._move( "nextPage", event ); 30749 break; 30750 case keyCode.UP: 30751 suppressKeyPress = true; 30752 this._keyEvent( "previous", event ); 30753 break; 30754 case keyCode.DOWN: 30755 suppressKeyPress = true; 30756 this._keyEvent( "next", event ); 30757 break; 30758 case keyCode.ENTER: 30759 30760 // when menu is open and has focus 30761 if ( this.menu.active ) { 30762 30763 // #6055 - Opera still allows the keypress to occur 30764 // which causes forms to submit 30765 suppressKeyPress = true; 30766 event.preventDefault(); 30767 this.menu.select( event ); 30768 } 30769 break; 30770 case keyCode.TAB: 30771 if ( this.menu.active ) { 30772 this.menu.select( event ); 30773 } 30774 break; 30775 case keyCode.ESCAPE: 30776 if ( this.menu.element.is( ":visible" ) ) { 30777 if ( !this.isMultiLine ) { 30778 this._value( this.term ); 30779 } 30780 this.close( event ); 30781 30782 // Different browsers have different default behavior for escape 30783 // Single press can mean undo or clear 30784 // Double press in IE means clear the whole form 30785 event.preventDefault(); 30786 } 30787 break; 30788 default: 30789 suppressKeyPressRepeat = true; 30790 30791 // search timeout should be triggered before the input value is changed 30792 this._searchTimeout( event ); 30793 break; 30794 } 30795 }, 30796 keypress: function( event ) { 30797 if ( suppressKeyPress ) { 30798 suppressKeyPress = false; 30799 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { 30800 event.preventDefault(); 30801 } 30802 return; 30803 } 30804 if ( suppressKeyPressRepeat ) { 30805 return; 30806 } 30807 30808 // Replicate some key handlers to allow them to repeat in Firefox and Opera 30809 var keyCode = $.ui.keyCode; 30810 switch ( event.keyCode ) { 30811 case keyCode.PAGE_UP: 30812 this._move( "previousPage", event ); 30813 break; 30814 case keyCode.PAGE_DOWN: 30815 this._move( "nextPage", event ); 30816 break; 30817 case keyCode.UP: 30818 this._keyEvent( "previous", event ); 30819 break; 30820 case keyCode.DOWN: 30821 this._keyEvent( "next", event ); 30822 break; 30823 } 30824 }, 30825 input: function( event ) { 30826 if ( suppressInput ) { 30827 suppressInput = false; 30828 event.preventDefault(); 30829 return; 30830 } 30831 this._searchTimeout( event ); 30832 }, 30833 focus: function() { 30834 this.selectedItem = null; 30835 this.previous = this._value(); 30836 }, 30837 blur: function( event ) { 30838 clearTimeout( this.searching ); 30839 this.close( event ); 30840 this._change( event ); 30841 } 30842 } ); 30843 30844 this._initSource(); 30845 this.menu = $( "<ul>" ) 30846 .appendTo( this._appendTo() ) 30847 .menu( { 30848 30849 // disable ARIA support, the live region takes care of that 30850 role: null 30851 } ) 30852 .hide() 30853 30854 // Support: IE 11 only, Edge <= 14 30855 // For other browsers, we preventDefault() on the mousedown event 30856 // to keep the dropdown from taking focus from the input. This doesn't 30857 // work for IE/Edge, causing problems with selection and scrolling (#9638) 30858 // Happily, IE and Edge support an "unselectable" attribute that 30859 // prevents an element from receiving focus, exactly what we want here. 30860 .attr( { 30861 "unselectable": "on" 30862 } ) 30863 .menu( "instance" ); 30864 30865 this._addClass( this.menu.element, "ui-autocomplete", "ui-front" ); 30866 this._on( this.menu.element, { 30867 mousedown: function( event ) { 30868 30869 // Prevent moving focus out of the text field 30870 event.preventDefault(); 30871 }, 30872 menufocus: function( event, ui ) { 30873 var label, item; 30874 30875 // support: Firefox 30876 // Prevent accidental activation of menu items in Firefox (#7024 #9118) 30877 if ( this.isNewMenu ) { 30878 this.isNewMenu = false; 30879 if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) { 30880 this.menu.blur(); 30881 30882 this.document.one( "mousemove", function() { 30883 $( event.target ).trigger( event.originalEvent ); 30884 } ); 30885 30886 return; 30887 } 30888 } 30889 30890 item = ui.item.data( "ui-autocomplete-item" ); 30891 if ( false !== this._trigger( "focus", event, { item: item } ) ) { 30892 30893 // use value to match what will end up in the input, if it was a key event 30894 if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) { 30895 this._value( item.value ); 30896 } 30897 } 30898 30899 // Announce the value in the liveRegion 30900 label = ui.item.attr( "aria-label" ) || item.value; 30901 if ( label && String.prototype.trim.call( label ).length ) { 30902 clearTimeout( this.liveRegionTimer ); 30903 this.liveRegionTimer = this._delay( function() { 30904 this.liveRegion.html( $( "<div>" ).text( label ) ); 30905 }, 100 ); 30906 } 30907 }, 30908 menuselect: function( event, ui ) { 30909 var item = ui.item.data( "ui-autocomplete-item" ), 30910 previous = this.previous; 30911 30912 // Only trigger when focus was lost (click on menu) 30913 if ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) { 30914 this.element.trigger( "focus" ); 30915 this.previous = previous; 30916 30917 // #6109 - IE triggers two focus events and the second 30918 // is asynchronous, so we need to reset the previous 30919 // term synchronously and asynchronously :-( 30920 this._delay( function() { 30921 this.previous = previous; 30922 this.selectedItem = item; 30923 } ); 30924 } 30925 30926 if ( false !== this._trigger( "select", event, { item: item } ) ) { 30927 this._value( item.value ); 30928 } 30929 30930 // reset the term after the select event 30931 // this allows custom select handling to work properly 30932 this.term = this._value(); 30933 30934 this.close( event ); 30935 this.selectedItem = item; 30936 } 30937 } ); 30938 30939 this.liveRegion = $( "<div>", { 30940 role: "status", 30941 "aria-live": "assertive", 30942 "aria-relevant": "additions" 30943 } ) 30944 .appendTo( this.document[ 0 ].body ); 30945 30946 this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" ); 30947 30948 // Turning off autocomplete prevents the browser from remembering the 30949 // value when navigating through history, so we re-enable autocomplete 30950 // if the page is unloaded before the widget is destroyed. #7790 30951 this._on( this.window, { 30952 beforeunload: function() { 30953 this.element.removeAttr( "autocomplete" ); 30954 } 30955 } ); 30956 }, 30957 30958 _destroy: function() { 30959 clearTimeout( this.searching ); 30960 this.element.removeAttr( "autocomplete" ); 30961 this.menu.element.remove(); 30962 this.liveRegion.remove(); 30963 }, 30964 30965 _setOption: function( key, value ) { 30966 this._super( key, value ); 30967 if ( key === "source" ) { 30968 this._initSource(); 30969 } 30970 if ( key === "appendTo" ) { 30971 this.menu.element.appendTo( this._appendTo() ); 30972 } 30973 if ( key === "disabled" && value && this.xhr ) { 30974 this.xhr.abort(); 30975 } 30976 }, 30977 30978 _isEventTargetInWidget: function( event ) { 30979 var menuElement = this.menu.element[ 0 ]; 30980 30981 return event.target === this.element[ 0 ] || 30982 event.target === menuElement || 30983 $.contains( menuElement, event.target ); 30984 }, 30985 30986 _closeOnClickOutside: function( event ) { 30987 if ( !this._isEventTargetInWidget( event ) ) { 30988 this.close(); 30989 } 30990 }, 30991 30992 _appendTo: function() { 30993 var element = this.options.appendTo; 30994 30995 if ( element ) { 30996 element = element.jquery || element.nodeType ? 30997 $( element ) : 30998 this.document.find( element ).eq( 0 ); 30999 } 31000 31001 if ( !element || !element[ 0 ] ) { 31002 element = this.element.closest( ".ui-front, dialog" ); 31003 } 31004 31005 if ( !element.length ) { 31006 element = this.document[ 0 ].body; 31007 } 31008 31009 return element; 31010 }, 31011 31012 _initSource: function() { 31013 var array, url, 31014 that = this; 31015 if ( Array.isArray( this.options.source ) ) { 31016 array = this.options.source; 31017 this.source = function( request, response ) { 31018 response( $.ui.autocomplete.filter( array, request.term ) ); 31019 }; 31020 } else if ( typeof this.options.source === "string" ) { 31021 url = this.options.source; 31022 this.source = function( request, response ) { 31023 if ( that.xhr ) { 31024 that.xhr.abort(); 31025 } 31026 that.xhr = $.ajax( { 31027 url: url, 31028 data: request, 31029 dataType: "json", 31030 success: function( data ) { 31031 response( data ); 31032 }, 31033 error: function() { 31034 response( [] ); 31035 } 31036 } ); 31037 }; 31038 } else { 31039 this.source = this.options.source; 31040 } 31041 }, 31042 31043 _searchTimeout: function( event ) { 31044 clearTimeout( this.searching ); 31045 this.searching = this._delay( function() { 31046 31047 // Search if the value has changed, or if the user retypes the same value (see #7434) 31048 var equalValues = this.term === this._value(), 31049 menuVisible = this.menu.element.is( ":visible" ), 31050 modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; 31051 31052 if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) { 31053 this.selectedItem = null; 31054 this.search( null, event ); 31055 } 31056 }, this.options.delay ); 31057 }, 31058 31059 search: function( value, event ) { 31060 value = value != null ? value : this._value(); 31061 31062 // Always save the actual value, not the one passed as an argument 31063 this.term = this._value(); 31064 31065 if ( value.length < this.options.minLength ) { 31066 return this.close( event ); 31067 } 31068 31069 if ( this._trigger( "search", event ) === false ) { 31070 return; 31071 } 31072 31073 return this._search( value ); 31074 }, 31075 31076 _search: function( value ) { 31077 this.pending++; 31078 this._addClass( "ui-autocomplete-loading" ); 31079 this.cancelSearch = false; 31080 31081 this.source( { term: value }, this._response() ); 31082 }, 31083 31084 _response: function() { 31085 var index = ++this.requestIndex; 31086 31087 return function( content ) { 31088 if ( index === this.requestIndex ) { 31089 this.__response( content ); 31090 } 31091 31092 this.pending--; 31093 if ( !this.pending ) { 31094 this._removeClass( "ui-autocomplete-loading" ); 31095 } 31096 }.bind( this ); 31097 }, 31098 31099 __response: function( content ) { 31100 if ( content ) { 31101 content = this._normalize( content ); 31102 } 31103 this._trigger( "response", null, { content: content } ); 31104 if ( !this.options.disabled && content && content.length && !this.cancelSearch ) { 31105 this._suggest( content ); 31106 this._trigger( "open" ); 31107 } else { 31108 31109 // use ._close() instead of .close() so we don't cancel future searches 31110 this._close(); 31111 } 31112 }, 31113 31114 close: function( event ) { 31115 this.cancelSearch = true; 31116 this._close( event ); 31117 }, 31118 31119 _close: function( event ) { 31120 31121 // Remove the handler that closes the menu on outside clicks 31122 this._off( this.document, "mousedown" ); 31123 31124 if ( this.menu.element.is( ":visible" ) ) { 31125 this.menu.element.hide(); 31126 this.menu.blur(); 31127 this.isNewMenu = true; 31128 this._trigger( "close", event ); 31129 } 31130 }, 31131 31132 _change: function( event ) { 31133 if ( this.previous !== this._value() ) { 31134 this._trigger( "change", event, { item: this.selectedItem } ); 31135 } 31136 }, 31137 31138 _normalize: function( items ) { 31139 31140 // assume all items have the right format when the first item is complete 31141 if ( items.length && items[ 0 ].label && items[ 0 ].value ) { 31142 return items; 31143 } 31144 return $.map( items, function( item ) { 31145 if ( typeof item === "string" ) { 31146 return { 31147 label: item, 31148 value: item 31149 }; 31150 } 31151 return $.extend( {}, item, { 31152 label: item.label || item.value, 31153 value: item.value || item.label 31154 } ); 31155 } ); 31156 }, 31157 31158 _suggest: function( items ) { 31159 var ul = this.menu.element.empty(); 31160 this._renderMenu( ul, items ); 31161 this.isNewMenu = true; 31162 this.menu.refresh(); 31163 31164 // Size and position menu 31165 ul.show(); 31166 this._resizeMenu(); 31167 ul.position( $.extend( { 31168 of: this.element 31169 }, this.options.position ) ); 31170 31171 if ( this.options.autoFocus ) { 31172 this.menu.next(); 31173 } 31174 31175 // Listen for interactions outside of the widget (#6642) 31176 this._on( this.document, { 31177 mousedown: "_closeOnClickOutside" 31178 } ); 31179 }, 31180 31181 _resizeMenu: function() { 31182 var ul = this.menu.element; 31183 ul.outerWidth( Math.max( 31184 31185 // Firefox wraps long text (possibly a rounding bug) 31186 // so we add 1px to avoid the wrapping (#7513) 31187 ul.width( "" ).outerWidth() + 1, 31188 this.element.outerWidth() 31189 ) ); 31190 }, 31191 31192 _renderMenu: function( ul, items ) { 31193 var that = this; 31194 $.each( items, function( index, item ) { 31195 that._renderItemData( ul, item ); 31196 } ); 31197 }, 31198 31199 _renderItemData: function( ul, item ) { 31200 return this._renderItem( ul, item ).data( "ui-autocomplete-item", item ); 31201 }, 31202 31203 _renderItem: function( ul, item ) { 31204 return $( "<li>" ) 31205 .append( $( "<div>" ).text( item.label ) ) 31206 .appendTo( ul ); 31207 }, 31208 31209 _move: function( direction, event ) { 31210 if ( !this.menu.element.is( ":visible" ) ) { 31211 this.search( null, event ); 31212 return; 31213 } 31214 if ( this.menu.isFirstItem() && /^previous/.test( direction ) || 31215 this.menu.isLastItem() && /^next/.test( direction ) ) { 31216 31217 if ( !this.isMultiLine ) { 31218 this._value( this.term ); 31219 } 31220 31221 this.menu.blur(); 31222 return; 31223 } 31224 this.menu[ direction ]( event ); 31225 }, 31226 31227 widget: function() { 31228 return this.menu.element; 31229 }, 31230 31231 _value: function() { 31232 return this.valueMethod.apply( this.element, arguments ); 31233 }, 31234 31235 _keyEvent: function( keyEvent, event ) { 31236 if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) { 31237 this._move( keyEvent, event ); 31238 31239 // Prevents moving cursor to beginning/end of the text field in some browsers 31240 event.preventDefault(); 31241 } 31242 }, 31243 31244 // Support: Chrome <=50 31245 // We should be able to just use this.element.prop( "isContentEditable" ) 31246 // but hidden elements always report false in Chrome. 31247 // https://code.google.com/p/chromium/issues/detail?id=313082 31248 _isContentEditable: function( element ) { 31249 if ( !element.length ) { 31250 return false; 31251 } 31252 31253 var editable = element.prop( "contentEditable" ); 31254 31255 if ( editable === "inherit" ) { 31256 return this._isContentEditable( element.parent() ); 31257 } 31258 31259 return editable === "true"; 31260 } 31261} ); 31262 31263$.extend( $.ui.autocomplete, { 31264 escapeRegex: function( value ) { 31265 return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); 31266 }, 31267 filter: function( array, term ) { 31268 var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" ); 31269 return $.grep( array, function( value ) { 31270 return matcher.test( value.label || value.value || value ); 31271 } ); 31272 } 31273} ); 31274 31275// Live region extension, adding a `messages` option 31276// NOTE: This is an experimental API. We are still investigating 31277// a full solution for string manipulation and internationalization. 31278$.widget( "ui.autocomplete", $.ui.autocomplete, { 31279 options: { 31280 messages: { 31281 noResults: "No search results.", 31282 results: function( amount ) { 31283 return amount + ( amount > 1 ? " results are" : " result is" ) + 31284 " available, use up and down arrow keys to navigate."; 31285 } 31286 } 31287 }, 31288 31289 __response: function( content ) { 31290 var message; 31291 this._superApply( arguments ); 31292 if ( this.options.disabled || this.cancelSearch ) { 31293 return; 31294 } 31295 if ( content && content.length ) { 31296 message = this.options.messages.results( content.length ); 31297 } else { 31298 message = this.options.messages.noResults; 31299 } 31300 clearTimeout( this.liveRegionTimer ); 31301 this.liveRegionTimer = this._delay( function() { 31302 this.liveRegion.html( $( "<div>" ).text( message ) ); 31303 }, 100 ); 31304 } 31305} ); 31306 31307var widgetsAutocomplete = $.ui.autocomplete; 31308 31309 31310/*! 31311 * jQuery UI Controlgroup 1.13.
313112 31312 * http://jqueryui.com 31313 * 31314 * Copyright jQuery Foundation and other contributors 31315 * Released under the MIT license. 31316 * http://jquery.org/license 31317 */ 31318 31319//>>label: Controlgroup 31320//>>group: Widgets 31321//>>description: Visually groups form control widgets 31322//>>docs: http://api.jqueryui.com/controlgroup/ 31323//>>demos: http://jqueryui.com/controlgroup/ 31324//>>css.structure: ../../themes/base/core.css 31325//>>css.structure: ../../themes/base/controlgroup.css 31326//>>css.theme: ../../themes/base/theme.css 31327 31328 31329var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g; 31330 31331var widgetsControlgroup = $.widget( "ui.controlgroup", { 31332 version: "1.13.2
vendor: 7,736 bytes, lines 31332-31596
31332", 31333 defaultElement: "<div>", 31334 options: { 31335 direction: "horizontal", 31336 disabled: null, 31337 onlyVisible: true, 31338 items: { 31339 "button": "input[type=button], input[type=submit], input[type=reset], button, a", 31340 "controlgroupLabel": ".ui-controlgroup-label", 31341 "checkboxradio": "input[type='checkbox'], input[type='radio']", 31342 "selectmenu": "select", 31343 "spinner": ".ui-spinner-input" 31344 } 31345 }, 31346 31347 _create: function() { 31348 this._enhance(); 31349 }, 31350 31351 // To support the enhanced option in jQuery Mobile, we isolate DOM manipulation 31352 _enhance: function() { 31353 this.element.attr( "role", "toolbar" ); 31354 this.refresh(); 31355 }, 31356 31357 _destroy: function() { 31358 this._callChildMethod( "destroy" ); 31359 this.childWidgets.removeData( "ui-controlgroup-data" ); 31360 this.element.removeAttr( "role" ); 31361 if ( this.options.items.controlgroupLabel ) { 31362 this.element 31363 .find( this.options.items.controlgroupLabel ) 31364 .find( ".ui-controlgroup-label-contents" ) 31365 .contents().unwrap(); 31366 } 31367 }, 31368 31369 _initWidgets: function() { 31370 var that = this, 31371 childWidgets = []; 31372 31373 // First we iterate over each of the items options 31374 $.each( this.options.items, function( widget, selector ) { 31375 var labels; 31376 var options = {}; 31377 31378 // Make sure the widget has a selector set 31379 if ( !selector ) { 31380 return; 31381 } 31382 31383 if ( widget === "controlgroupLabel" ) { 31384 labels = that.element.find( selector ); 31385 labels.each( function() { 31386 var element = $( this ); 31387 31388 if ( element.children( ".ui-controlgroup-label-contents" ).length ) { 31389 return; 31390 } 31391 element.contents() 31392 .wrapAll( "<span class='ui-controlgroup-label-contents'></span>" ); 31393 } ); 31394 that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" ); 31395 childWidgets = childWidgets.concat( labels.get() ); 31396 return; 31397 } 31398 31399 // Make sure the widget actually exists 31400 if ( !$.fn[ widget ] ) { 31401 return; 31402 } 31403 31404 // We assume everything is in the middle to start because we can't determine 31405 // first / last elements until all enhancments are done. 31406 if ( that[ "_" + widget + "Options" ] ) { 31407 options = that[ "_" + widget + "Options" ]( "middle" ); 31408 } else { 31409 options = { classes: {} }; 31410 } 31411 31412 // Find instances of this widget inside controlgroup and init them 31413 that.element 31414 .find( selector ) 31415 .each( function() { 31416 var element = $( this ); 31417 var instance = element[ widget ]( "instance" ); 31418 31419 // We need to clone the default options for this type of widget to avoid 31420 // polluting the variable options which has a wider scope than a single widget. 31421 var instanceOptions = $.widget.extend( {}, options ); 31422 31423 // If the button is the child of a spinner ignore it 31424 // TODO: Find a more generic solution 31425 if ( widget === "button" && element.parent( ".ui-spinner" ).length ) { 31426 return; 31427 } 31428 31429 // Create the widget if it doesn't exist 31430 if ( !instance ) { 31431 instance = element[ widget ]()[ widget ]( "instance" ); 31432 } 31433 if ( instance ) { 31434 instanceOptions.classes = 31435 that._resolveClassesValues( instanceOptions.classes, instance ); 31436 } 31437 element[ widget ]( instanceOptions ); 31438 31439 // Store an instance of the controlgroup to be able to reference 31440 // from the outermost element for changing options and refresh 31441 var widgetElement = element[ widget ]( "widget" ); 31442 $.data( widgetElement[ 0 ], "ui-controlgroup-data", 31443 instance ? instance : element[ widget ]( "instance" ) ); 31444 31445 childWidgets.push( widgetElement[ 0 ] ); 31446 } ); 31447 } ); 31448 31449 this.childWidgets = $( $.uniqueSort( childWidgets ) ); 31450 this._addClass( this.childWidgets, "ui-controlgroup-item" ); 31451 }, 31452 31453 _callChildMethod: function( method ) { 31454 this.childWidgets.each( function() { 31455 var element = $( this ), 31456 data = element.data( "ui-controlgroup-data" ); 31457 if ( data && data[ method ] ) { 31458 data[ method ](); 31459 } 31460 } ); 31461 }, 31462 31463 _updateCornerClass: function( element, position ) { 31464 var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"; 31465 var add = this._buildSimpleOptions( position, "label" ).classes.label; 31466 31467 this._removeClass( element, null, remove ); 31468 this._addClass( element, null, add ); 31469 }, 31470 31471 _buildSimpleOptions: function( position, key ) { 31472 var direction = this.options.direction === "vertical"; 31473 var result = { 31474 classes: {} 31475 }; 31476 result.classes[ key ] = { 31477 "middle": "", 31478 "first": "ui-corner-" + ( direction ? "top" : "left" ), 31479 "last": "ui-corner-" + ( direction ? "bottom" : "right" ), 31480 "only": "ui-corner-all" 31481 }[ position ]; 31482 31483 return result; 31484 }, 31485 31486 _spinnerOptions: function( position ) { 31487 var options = this._buildSimpleOptions( position, "ui-spinner" ); 31488 31489 options.classes[ "ui-spinner-up" ] = ""; 31490 options.classes[ "ui-spinner-down" ] = ""; 31491 31492 return options; 31493 }, 31494 31495 _buttonOptions: function( position ) { 31496 return this._buildSimpleOptions( position, "ui-button" ); 31497 }, 31498 31499 _checkboxradioOptions: function( position ) { 31500 return this._buildSimpleOptions( position, "ui-checkboxradio-label" ); 31501 }, 31502 31503 _selectmenuOptions: function( position ) { 31504 var direction = this.options.direction === "vertical"; 31505 return { 31506 width: direction ? "auto" : false, 31507 classes: { 31508 middle: { 31509 "ui-selectmenu-button-open": "", 31510 "ui-selectmenu-button-closed": "" 31511 }, 31512 first: { 31513 "ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ), 31514 "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" ) 31515 }, 31516 last: { 31517 "ui-selectmenu-button-open": direction ? "" : "ui-corner-tr", 31518 "ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" ) 31519 }, 31520 only: { 31521 "ui-selectmenu-button-open": "ui-corner-top", 31522 "ui-selectmenu-button-closed": "ui-corner-all" 31523 } 31524 31525 }[ position ] 31526 }; 31527 }, 31528 31529 _resolveClassesValues: function( classes, instance ) { 31530 var result = {}; 31531 $.each( classes, function( key ) { 31532 var current = instance.options.classes[ key ] || ""; 31533 current = String.prototype.trim.call( current.replace( controlgroupCornerRegex, "" ) ); 31534 result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " ); 31535 } ); 31536 return result; 31537 }, 31538 31539 _setOption: function( key, value ) { 31540 if ( key === "direction" ) { 31541 this._removeClass( "ui-controlgroup-" + this.options.direction ); 31542 } 31543 31544 this._super( key, value ); 31545 if ( key === "disabled" ) { 31546 this._callChildMethod( value ? "disable" : "enable" ); 31547 return; 31548 } 31549 31550 this.refresh(); 31551 }, 31552 31553 refresh: function() { 31554 var children, 31555 that = this; 31556 31557 this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction ); 31558 31559 if ( this.options.direction === "horizontal" ) { 31560 this._addClass( null, "ui-helper-clearfix" ); 31561 } 31562 this._initWidgets(); 31563 31564 children = this.childWidgets; 31565 31566 // We filter here because we need to track all childWidgets not just the visible ones 31567 if ( this.options.onlyVisible ) { 31568 children = children.filter( ":visible" ); 31569 } 31570 31571 if ( children.length ) { 31572 31573 // We do this last because we need to make sure all enhancment is done 31574 // before determining first and last 31575 $.each( [ "first", "last" ], function( index, value ) { 31576 var instance = children[ value ]().data( "ui-controlgroup-data" ); 31577 31578 if ( instance && that[ "_" + instance.widgetName + "Options" ] ) { 31579 var options = that[ "_" + instance.widgetName + "Options" ]( 31580 children.length === 1 ? "only" : value 31581 ); 31582 options.classes = that._resolveClassesValues( options.classes, instance ); 31583 instance.element[ instance.widgetName ]( options ); 31584 } else { 31585 that._updateCornerClass( children[ value ](), value ); 31586 } 31587 } ); 31588 31589 // Finally call the refresh method on each of the child widgets. 31590 this._callChildMethod( "refresh" ); 31591 } 31592 } 31593} ); 31594 31595/*! 31596 * jQuery UI Checkboxradio 1.13.
vendor: 5,067 bytes, lines 31596-31779
315962 31597 * http://jqueryui.com 31598 * 31599 * Copyright jQuery Foundation and other contributors 31600 * Released under the MIT license. 31601 * http://jquery.org/license 31602 */ 31603 31604//>>label: Checkboxradio 31605//>>group: Widgets 31606//>>description: Enhances a form with multiple themeable checkboxes or radio buttons. 31607//>>docs: http://api.jqueryui.com/checkboxradio/ 31608//>>demos: http://jqueryui.com/checkboxradio/ 31609//>>css.structure: ../../themes/base/core.css 31610//>>css.structure: ../../themes/base/button.css 31611//>>css.structure: ../../themes/base/checkboxradio.css 31612//>>css.theme: ../../themes/base/theme.css 31613 31614 31615$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, { 31616 version: "1.13.2", 31617 options: { 31618 disabled: null, 31619 label: null, 31620 icon: true, 31621 classes: { 31622 "ui-checkboxradio-label": "ui-corner-all", 31623 "ui-checkboxradio-icon": "ui-corner-all" 31624 } 31625 }, 31626 31627 _getCreateOptions: function() { 31628 var disabled, labels, labelContents; 31629 var options = this._super() || {}; 31630 31631 // We read the type here, because it makes more sense to throw a element type error first, 31632 // rather then the error for lack of a label. Often if its the wrong type, it 31633 // won't have a label (e.g. calling on a div, btn, etc) 31634 this._readType(); 31635 31636 labels = this.element.labels(); 31637 31638 // If there are multiple labels, use the last one 31639 this.label = $( labels[ labels.length - 1 ] ); 31640 if ( !this.label.length ) { 31641 $.error( "No label found for checkboxradio widget" ); 31642 } 31643 31644 this.originalLabel = ""; 31645 31646 // We need to get the label text but this may also need to make sure it does not contain the 31647 // input itself. 31648 // The label contents could be text, html, or a mix. We wrap all elements 31649 // and read the wrapper's `innerHTML` to get a string representation of 31650 // the label, without the input as part of it. 31651 labelContents = this.label.contents().not( this.element[ 0 ] ); 31652 31653 if ( labelContents.length ) { 31654 this.originalLabel += labelContents 31655 .clone() 31656 .wrapAll( "<div></div>" ) 31657 .parent() 31658 .html(); 31659 } 31660 31661 // Set the label option if we found label text 31662 if ( this.originalLabel ) { 31663 options.label = this.originalLabel; 31664 } 31665 31666 disabled = this.element[ 0 ].disabled; 31667 if ( disabled != null ) { 31668 options.disabled = disabled; 31669 } 31670 return options; 31671 }, 31672 31673 _create: function() { 31674 var checked = this.element[ 0 ].checked; 31675 31676 this._bindFormResetHandler(); 31677 31678 if ( this.options.disabled == null ) { 31679 this.options.disabled = this.element[ 0 ].disabled; 31680 } 31681 31682 this._setOption( "disabled", this.options.disabled ); 31683 this._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" ); 31684 this._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" ); 31685 31686 if ( this.type === "radio" ) { 31687 this._addClass( this.label, "ui-checkboxradio-radio-label" ); 31688 } 31689 31690 if ( this.options.label && this.options.label !== this.originalLabel ) { 31691 this._updateLabel(); 31692 } else if ( this.originalLabel ) { 31693 this.options.label = this.originalLabel; 31694 } 31695 31696 this._enhance(); 31697 31698 if ( checked ) { 31699 this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" ); 31700 } 31701 31702 this._on( { 31703 change: "_toggleClasses", 31704 focus: function() { 31705 this._addClass( this.label, null, "ui-state-focus ui-visual-focus" ); 31706 }, 31707 blur: function() { 31708 this._removeClass( this.label, null, "ui-state-focus ui-visual-focus" ); 31709 } 31710 } ); 31711 }, 31712 31713 _readType: function() { 31714 var nodeName = this.element[ 0 ].nodeName.toLowerCase(); 31715 this.type = this.element[ 0 ].type; 31716 if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) { 31717 $.error( "Can't create checkboxradio on element.nodeName=" + nodeName + 31718 " and element.type=" + this.type ); 31719 } 31720 }, 31721 31722 // Support jQuery Mobile enhanced option 31723 _enhance: function() { 31724 this._updateIcon( this.element[ 0 ].checked ); 31725 }, 31726 31727 widget: function() { 31728 return this.label; 31729 }, 31730 31731 _getRadioGroup: function() { 31732 var group; 31733 var name = this.element[ 0 ].name; 31734 var nameSelector = "input[name='" + $.escapeSelector( name ) + "']"; 31735 31736 if ( !name ) { 31737 return $( [] ); 31738 } 31739 31740 if ( this.form.length ) { 31741 group = $( this.form[ 0 ].elements ).filter( nameSelector ); 31742 } else { 31743 31744 // Not inside a form, check all inputs that also are not inside a form 31745 group = $( nameSelector ).filter( function() { 31746 return $( this )._form().length === 0; 31747 } ); 31748 } 31749 31750 return group.not( this.element ); 31751 }, 31752 31753 _toggleClasses: function() { 31754 var checked = this.element[ 0 ].checked; 31755 this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked ); 31756 31757 if ( this.options.icon && this.type === "checkbox" ) { 31758 this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked ) 31759 ._toggleClass( this.icon, null, "ui-icon-blank", !checked ); 31760 } 31761 31762 if ( this.type === "radio" ) { 31763 this._getRadioGroup() 31764 .each( function() { 31765 var instance = $( this ).checkboxradio( "instance" ); 31766 31767 if ( instance ) { 31768 instance._removeClass( instance.label, 31769 "ui-checkboxradio-checked", "ui-state-active" ); 31770 } 31771 } ); 31772 } 31773 }, 31774 31775 _destroy: function() { 31776 this._unbindFormResetHandler(); 31777 31778 if ( this.icon ) { 31779 this.icon.remove();
vendor: 2,708 bytes, lines 31780-31886
31780 this.iconSpace.remove(); 31781 } 31782 }, 31783 31784 _setOption: function( key, value ) { 31785 31786 // We don't allow the value to be set to nothing 31787 if ( key === "label" && !value ) { 31788 return; 31789 } 31790 31791 this._super( key, value ); 31792 31793 if ( key === "disabled" ) { 31794 this._toggleClass( this.label, null, "ui-state-disabled", value ); 31795 this.element[ 0 ].disabled = value; 31796 31797 // Don't refresh when setting disabled 31798 return; 31799 } 31800 this.refresh(); 31801 }, 31802 31803 _updateIcon: function( checked ) { 31804 var toAdd = "ui-icon ui-icon-background "; 31805 31806 if ( this.options.icon ) { 31807 if ( !this.icon ) { 31808 this.icon = $( "<span>" ); 31809 this.iconSpace = $( "<span> </span>" ); 31810 this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" ); 31811 } 31812 31813 if ( this.type === "checkbox" ) { 31814 toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank"; 31815 this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" ); 31816 } else { 31817 toAdd += "ui-icon-blank"; 31818 } 31819 this._addClass( this.icon, "ui-checkboxradio-icon", toAdd ); 31820 if ( !checked ) { 31821 this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" ); 31822 } 31823 this.icon.prependTo( this.label ).after( this.iconSpace ); 31824 } else if ( this.icon !== undefined ) { 31825 this.icon.remove(); 31826 this.iconSpace.remove(); 31827 delete this.icon; 31828 } 31829 }, 31830 31831 _updateLabel: function() { 31832 31833 // Remove the contents of the label ( minus the icon, icon space, and input ) 31834 var contents = this.label.contents().not( this.element[ 0 ] ); 31835 if ( this.icon ) { 31836 contents = contents.not( this.icon[ 0 ] ); 31837 } 31838 if ( this.iconSpace ) { 31839 contents = contents.not( this.iconSpace[ 0 ] ); 31840 } 31841 contents.remove(); 31842 31843 this.label.append( this.options.label ); 31844 }, 31845 31846 refresh: function() { 31847 var checked = this.element[ 0 ].checked, 31848 isDisabled = this.element[ 0 ].disabled; 31849 31850 this._updateIcon( checked ); 31851 this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked ); 31852 if ( this.options.label !== null ) { 31853 this._updateLabel(); 31854 } 31855 31856 if ( isDisabled !== this.options.disabled ) { 31857 this._setOptions( { "disabled": isDisabled } ); 31858 } 31859 } 31860 31861} ] ); 31862 31863var widgetsCheckboxradio = $.ui.checkboxradio; 31864 31865 31866/*! 31867 * jQuery UI Button 1.13.2 31868 * http://jqueryui.com 31869 * 31870 * Copyright jQuery Foundation and other contributors 31871 * Released under the MIT license. 31872 * http://jquery.org/license 31873 */ 31874 31875//>>label: Button 31876//>>group: Widgets 31877//>>description: Enhances a form with themeable buttons. 31878//>>docs: http://api.jqueryui.com/button/ 31879//>>demos: http://jqueryui.com/button/ 31880//>>css.structure: ../../themes/base/core.css 31881//>>css.structure: ../../themes/base/button.css 31882//>>css.theme: ../../themes/base/theme.css 31883 31884 31885$.widget( "ui.button", { 31886 version: "1.13.2
vendor: 10,836 bytes, lines 31886-32293
31886", 31887 defaultElement: "<button>", 31888 options: { 31889 classes: { 31890 "ui-button": "ui-corner-all" 31891 }, 31892 disabled: null, 31893 icon: null, 31894 iconPosition: "beginning", 31895 label: null, 31896 showLabel: true 31897 }, 31898 31899 _getCreateOptions: function() { 31900 var disabled, 31901 31902 // This is to support cases like in jQuery Mobile where the base widget does have 31903 // an implementation of _getCreateOptions 31904 options = this._super() || {}; 31905 31906 this.isInput = this.element.is( "input" ); 31907 31908 disabled = this.element[ 0 ].disabled; 31909 if ( disabled != null ) { 31910 options.disabled = disabled; 31911 } 31912 31913 this.originalLabel = this.isInput ? this.element.val() : this.element.html(); 31914 if ( this.originalLabel ) { 31915 options.label = this.originalLabel; 31916 } 31917 31918 return options; 31919 }, 31920 31921 _create: function() { 31922 if ( !this.option.showLabel & !this.options.icon ) { 31923 this.options.showLabel = true; 31924 } 31925 31926 // We have to check the option again here even though we did in _getCreateOptions, 31927 // because null may have been passed on init which would override what was set in 31928 // _getCreateOptions 31929 if ( this.options.disabled == null ) { 31930 this.options.disabled = this.element[ 0 ].disabled || false; 31931 } 31932 31933 this.hasTitle = !!this.element.attr( "title" ); 31934 31935 // Check to see if the label needs to be set or if its already correct 31936 if ( this.options.label && this.options.label !== this.originalLabel ) { 31937 if ( this.isInput ) { 31938 this.element.val( this.options.label ); 31939 } else { 31940 this.element.html( this.options.label ); 31941 } 31942 } 31943 this._addClass( "ui-button", "ui-widget" ); 31944 this._setOption( "disabled", this.options.disabled ); 31945 this._enhance(); 31946 31947 if ( this.element.is( "a" ) ) { 31948 this._on( { 31949 "keyup": function( event ) { 31950 if ( event.keyCode === $.ui.keyCode.SPACE ) { 31951 event.preventDefault(); 31952 31953 // Support: PhantomJS <= 1.9, IE 8 Only 31954 // If a native click is available use it so we actually cause navigation 31955 // otherwise just trigger a click event 31956 if ( this.element[ 0 ].click ) { 31957 this.element[ 0 ].click(); 31958 } else { 31959 this.element.trigger( "click" ); 31960 } 31961 } 31962 } 31963 } ); 31964 } 31965 }, 31966 31967 _enhance: function() { 31968 if ( !this.element.is( "button" ) ) { 31969 this.element.attr( "role", "button" ); 31970 } 31971 31972 if ( this.options.icon ) { 31973 this._updateIcon( "icon", this.options.icon ); 31974 this._updateTooltip(); 31975 } 31976 }, 31977 31978 _updateTooltip: function() { 31979 this.title = this.element.attr( "title" ); 31980 31981 if ( !this.options.showLabel && !this.title ) { 31982 this.element.attr( "title", this.options.label ); 31983 } 31984 }, 31985 31986 _updateIcon: function( option, value ) { 31987 var icon = option !== "iconPosition", 31988 position = icon ? this.options.iconPosition : value, 31989 displayBlock = position === "top" || position === "bottom"; 31990 31991 // Create icon 31992 if ( !this.icon ) { 31993 this.icon = $( "<span>" ); 31994 31995 this._addClass( this.icon, "ui-button-icon", "ui-icon" ); 31996 31997 if ( !this.options.showLabel ) { 31998 this._addClass( "ui-button-icon-only" ); 31999 } 32000 } else if ( icon ) { 32001 32002 // If we are updating the icon remove the old icon class 32003 this._removeClass( this.icon, null, this.options.icon ); 32004 } 32005 32006 // If we are updating the icon add the new icon class 32007 if ( icon ) { 32008 this._addClass( this.icon, null, value ); 32009 } 32010 32011 this._attachIcon( position ); 32012 32013 // If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove 32014 // the iconSpace if there is one. 32015 if ( displayBlock ) { 32016 this._addClass( this.icon, null, "ui-widget-icon-block" ); 32017 if ( this.iconSpace ) { 32018 this.iconSpace.remove(); 32019 } 32020 } else { 32021 32022 // Position is beginning or end so remove the ui-widget-icon-block class and add the 32023 // space if it does not exist 32024 if ( !this.iconSpace ) { 32025 this.iconSpace = $( "<span> </span>" ); 32026 this._addClass( this.iconSpace, "ui-button-icon-space" ); 32027 } 32028 this._removeClass( this.icon, null, "ui-wiget-icon-block" ); 32029 this._attachIconSpace( position ); 32030 } 32031 }, 32032 32033 _destroy: function() { 32034 this.element.removeAttr( "role" ); 32035 32036 if ( this.icon ) { 32037 this.icon.remove(); 32038 } 32039 if ( this.iconSpace ) { 32040 this.iconSpace.remove(); 32041 } 32042 if ( !this.hasTitle ) { 32043 this.element.removeAttr( "title" ); 32044 } 32045 }, 32046 32047 _attachIconSpace: function( iconPosition ) { 32048 this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace ); 32049 }, 32050 32051 _attachIcon: function( iconPosition ) { 32052 this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon ); 32053 }, 32054 32055 _setOptions: function( options ) { 32056 var newShowLabel = options.showLabel === undefined ? 32057 this.options.showLabel : 32058 options.showLabel, 32059 newIcon = options.icon === undefined ? this.options.icon : options.icon; 32060 32061 if ( !newShowLabel && !newIcon ) { 32062 options.showLabel = true; 32063 } 32064 this._super( options ); 32065 }, 32066 32067 _setOption: function( key, value ) { 32068 if ( key === "icon" ) { 32069 if ( value ) { 32070 this._updateIcon( key, value ); 32071 } else if ( this.icon ) { 32072 this.icon.remove(); 32073 if ( this.iconSpace ) { 32074 this.iconSpace.remove(); 32075 } 32076 } 32077 } 32078 32079 if ( key === "iconPosition" ) { 32080 this._updateIcon( key, value ); 32081 } 32082 32083 // Make sure we can't end up with a button that has neither text nor icon 32084 if ( key === "showLabel" ) { 32085 this._toggleClass( "ui-button-icon-only", null, !value ); 32086 this._updateTooltip(); 32087 } 32088 32089 if ( key === "label" ) { 32090 if ( this.isInput ) { 32091 this.element.val( value ); 32092 } else { 32093 32094 // If there is an icon, append it, else nothing then append the value 32095 // this avoids removal of the icon when setting label text 32096 this.element.html( value ); 32097 if ( this.icon ) { 32098 this._attachIcon( this.options.iconPosition ); 32099 this._attachIconSpace( this.options.iconPosition ); 32100 } 32101 } 32102 } 32103 32104 this._super( key, value ); 32105 32106 if ( key === "disabled" ) { 32107 this._toggleClass( null, "ui-state-disabled", value ); 32108 this.element[ 0 ].disabled = value; 32109 if ( value ) { 32110 this.element.trigger( "blur" ); 32111 } 32112 } 32113 }, 32114 32115 refresh: function() { 32116 32117 // Make sure to only check disabled if its an element that supports this otherwise 32118 // check for the disabled class to determine state 32119 var isDisabled = this.element.is( "input, button" ) ? 32120 this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" ); 32121 32122 if ( isDisabled !== this.options.disabled ) { 32123 this._setOptions( { disabled: isDisabled } ); 32124 } 32125 32126 this._updateTooltip(); 32127 } 32128} ); 32129 32130// DEPRECATED 32131if ( $.uiBackCompat !== false ) { 32132 32133 // Text and Icons options 32134 $.widget( "ui.button", $.ui.button, { 32135 options: { 32136 text: true, 32137 icons: { 32138 primary: null, 32139 secondary: null 32140 } 32141 }, 32142 32143 _create: function() { 32144 if ( this.options.showLabel && !this.options.text ) { 32145 this.options.showLabel = this.options.text; 32146 } 32147 if ( !this.options.showLabel && this.options.text ) { 32148 this.options.text = this.options.showLabel; 32149 } 32150 if ( !this.options.icon && ( this.options.icons.primary || 32151 this.options.icons.secondary ) ) { 32152 if ( this.options.icons.primary ) { 32153 this.options.icon = this.options.icons.primary; 32154 } else { 32155 this.options.icon = this.options.icons.secondary; 32156 this.options.iconPosition = "end"; 32157 } 32158 } else if ( this.options.icon ) { 32159 this.options.icons.primary = this.options.icon; 32160 } 32161 this._super(); 32162 }, 32163 32164 _setOption: function( key, value ) { 32165 if ( key === "text" ) { 32166 this._super( "showLabel", value ); 32167 return; 32168 } 32169 if ( key === "showLabel" ) { 32170 this.options.text = value; 32171 } 32172 if ( key === "icon" ) { 32173 this.options.icons.primary = value; 32174 } 32175 if ( key === "icons" ) { 32176 if ( value.primary ) { 32177 this._super( "icon", value.primary ); 32178 this._super( "iconPosition", "beginning" ); 32179 } else if ( value.secondary ) { 32180 this._super( "icon", value.secondary ); 32181 this._super( "iconPosition", "end" ); 32182 } 32183 } 32184 this._superApply( arguments ); 32185 } 32186 } ); 32187 32188 $.fn.button = ( function( orig ) { 32189 return function( options ) { 32190 var isMethodCall = typeof options === "string"; 32191 var args = Array.prototype.slice.call( arguments, 1 ); 32192 var returnValue = this; 32193 32194 if ( isMethodCall ) { 32195 32196 // If this is an empty collection, we need to have the instance method 32197 // return undefined instead of the jQuery instance 32198 if ( !this.length && options === "instance" ) { 32199 returnValue = undefined; 32200 } else { 32201 this.each( function() { 32202 var methodValue; 32203 var type = $( this ).attr( "type" ); 32204 var name = type !== "checkbox" && type !== "radio" ? 32205 "button" : 32206 "checkboxradio"; 32207 var instance = $.data( this, "ui-" + name ); 32208 32209 if ( options === "instance" ) { 32210 returnValue = instance; 32211 return false; 32212 } 32213 32214 if ( !instance ) { 32215 return $.error( "cannot call methods on button" + 32216 " prior to initialization; " + 32217 "attempted to call method '" + options + "'" ); 32218 } 32219 32220 if ( typeof instance[ options ] !== "function" || 32221 options.charAt( 0 ) === "_" ) { 32222 return $.error( "no such method '" + options + "' for button" + 32223 " widget instance" ); 32224 } 32225 32226 methodValue = instance[ options ].apply( instance, args ); 32227 32228 if ( methodValue !== instance && methodValue !== undefined ) { 32229 returnValue = methodValue && methodValue.jquery ? 32230 returnValue.pushStack( methodValue.get() ) : 32231 methodValue; 32232 return false; 32233 } 32234 } ); 32235 } 32236 } else { 32237 32238 // Allow multiple hashes to be passed on init 32239 if ( args.length ) { 32240 options = $.widget.extend.apply( null, [ options ].concat( args ) ); 32241 } 32242 32243 this.each( function() { 32244 var type = $( this ).attr( "type" ); 32245 var name = type !== "checkbox" && type !== "radio" ? "button" : "checkboxradio"; 32246 var instance = $.data( this, "ui-" + name ); 32247 32248 if ( instance ) { 32249 instance.option( options || {} ); 32250 if ( instance._init ) { 32251 instance._init(); 32252 } 32253 } else { 32254 if ( name === "button" ) { 32255 orig.call( $( this ), options ); 32256 return; 32257 } 32258 32259 $( this ).checkboxradio( $.extend( { icon: false }, options ) ); 32260 } 32261 } ); 32262 } 32263 32264 return returnValue; 32265 }; 32266 } )( $.fn.button ); 32267 32268 $.fn.buttonset = function() { 32269 if ( !$.ui.controlgroup ) { 32270 $.error( "Controlgroup widget missing" ); 32271 } 32272 if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) { 32273 return this.controlgroup.apply( this, 32274 [ arguments[ 0 ], "items.button", arguments[ 2 ] ] ); 32275 } 32276 if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) { 32277 return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] ); 32278 } 32279 if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) { 32280 arguments[ 0 ].items = { 32281 button: arguments[ 0 ].items 32282 }; 32283 } 32284 return this.controlgroup.apply( this, arguments ); 32285 }; 32286} 32287 32288var widgetsButton = $.ui.button; 32289 32290 32291/* eslint-disable max-len, camelcase */ 32292/*! 32293 * jQuery UI Datepicker 1.13.
322932 32294 * http://jqueryui.com 32295 * 32296 * Copyright jQuery Foundation and other contributors 32297 * Released under the MIT license. 32298 * http://jquery.org/license 32299 */ 32300 32301//>>label: Datepicker 32302//>>group: Widgets 32303//>>description: Displays a calendar from an input or inline for selecting dates. 32304//>>docs: http://api.jqueryui.com/datepicker/ 32305//>>demos: http://jqueryui.com/datepicker/ 32306//>>css.structure: ../../themes/base/core.css 32307//>>css.structure: ../../themes/base/datepicker.css 32308//>>css.theme: ../../themes/base/theme.css 32309 32310 32311$.extend( $.ui, { datepicker: { version: "1.13.2
vendor: 43,310 bytes, lines 32311-33464
32311" } } ); 32312 32313var datepicker_instActive; 32314 32315function datepicker_getZindex( elem ) { 32316 var position, value; 32317 while ( elem.length && elem[ 0 ] !== document ) { 32318 32319 // Ignore z-index if position is set to a value where z-index is ignored by the browser 32320 // This makes behavior of this function consistent across browsers 32321 // WebKit always returns auto if the element is positioned 32322 position = elem.css( "position" ); 32323 if ( position === "absolute" || position === "relative" || position === "fixed" ) { 32324 32325 // IE returns 0 when zIndex is not specified 32326 // other browsers return a string 32327 // we ignore the case of nested elements with an explicit value of 0 32328 // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> 32329 value = parseInt( elem.css( "zIndex" ), 10 ); 32330 if ( !isNaN( value ) && value !== 0 ) { 32331 return value; 32332 } 32333 } 32334 elem = elem.parent(); 32335 } 32336 32337 return 0; 32338} 32339 32340/* Date picker manager. 32341 Use the singleton instance of this class, $.datepicker, to interact with the date picker. 32342 Settings for (groups of) date pickers are maintained in an instance object, 32343 allowing multiple different settings on the same page. */ 32344 32345function Datepicker() { 32346 this._curInst = null; // The current instance in use 32347 this._keyEvent = false; // If the last event was a key event 32348 this._disabledInputs = []; // List of date picker inputs that have been disabled 32349 this._datepickerShowing = false; // True if the popup picker is showing , false if not 32350 this._inDialog = false; // True if showing within a "dialog", false if not 32351 this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division 32352 this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class 32353 this._appendClass = "ui-datepicker-append"; // The name of the append marker class 32354 this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class 32355 this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class 32356 this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class 32357 this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class 32358 this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class 32359 this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class 32360 this.regional = []; // Available regional settings, indexed by language code 32361 this.regional[ "" ] = { // Default regional settings 32362 closeText: "Done", // Display text for close link 32363 prevText: "Prev", // Display text for previous month link 32364 nextText: "Next", // Display text for next month link 32365 currentText: "Today", // Display text for current month link 32366 monthNames: [ "January", "February", "March", "April", "May", "June", 32367 "July", "August", "September", "October", "November", "December" ], // Names of months for drop-down and formatting 32368 monthNamesShort: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], // For formatting 32369 dayNames: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], // For formatting 32370 dayNamesShort: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], // For formatting 32371 dayNamesMin: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ], // Column headings for days starting at Sunday 32372 weekHeader: "Wk", // Column header for week of the year 32373 dateFormat: "mm/dd/yy", // See format options on parseDate 32374 firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ... 32375 isRTL: false, // True if right-to-left language, false if left-to-right 32376 showMonthAfterYear: false, // True if the year select precedes month, false for month then year 32377 yearSuffix: "", // Additional text to append to the year in the month headers, 32378 selectMonthLabel: "Select month", // Invisible label for month selector 32379 selectYearLabel: "Select year" // Invisible label for year selector 32380 }; 32381 this._defaults = { // Global defaults for all the date picker instances 32382 showOn: "focus", // "focus" for popup on focus, 32383 // "button" for trigger button, or "both" for either 32384 showAnim: "fadeIn", // Name of jQuery animation for popup 32385 showOptions: {}, // Options for enhanced animations 32386 defaultDate: null, // Used when field is blank: actual date, 32387 // +/-number for offset from today, null for today 32388 appendText: "", // Display text following the input box, e.g. showing the format 32389 buttonText: "...", // Text for trigger button 32390 buttonImage: "", // URL for trigger button image 32391 buttonImageOnly: false, // True if the image appears alone, false if it appears on a button 32392 hideIfNoPrevNext: false, // True to hide next/previous month links 32393 // if not applicable, false to just disable them 32394 navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links 32395 gotoCurrent: false, // True if today link goes back to current selection instead 32396 changeMonth: false, // True if month can be selected directly, false if only prev/next 32397 changeYear: false, // True if year can be selected directly, false if only prev/next 32398 yearRange: "c-10:c+10", // Range of years to display in drop-down, 32399 // either relative to today's year (-nn:+nn), relative to currently displayed year 32400 // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n) 32401 showOtherMonths: false, // True to show dates in other months, false to leave blank 32402 selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable 32403 showWeek: false, // True to show week of the year, false to not show it 32404 calculateWeek: this.iso8601Week, // How to calculate the week of the year, 32405 // takes a Date and returns the number of the week for it 32406 shortYearCutoff: "+10", // Short year values < this are in the current century, 32407 // > this are in the previous century, 32408 // string value starting with "+" for current year + value 32409 minDate: null, // The earliest selectable date, or null for no limit 32410 maxDate: null, // The latest selectable date, or null for no limit 32411 duration: "fast", // Duration of display/closure 32412 beforeShowDay: null, // Function that takes a date and returns an array with 32413 // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "", 32414 // [2] = cell title (optional), e.g. $.datepicker.noWeekends 32415 beforeShow: null, // Function that takes an input field and 32416 // returns a set of custom settings for the date picker 32417 onSelect: null, // Define a callback function when a date is selected 32418 onChangeMonthYear: null, // Define a callback function when the month or year is changed 32419 onClose: null, // Define a callback function when the datepicker is closed 32420 onUpdateDatepicker: null, // Define a callback function when the datepicker is updated 32421 numberOfMonths: 1, // Number of months to show at a time 32422 showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0) 32423 stepMonths: 1, // Number of months to step back/forward 32424 stepBigMonths: 12, // Number of months to step back/forward for the big links 32425 altField: "", // Selector for an alternate field to store selected dates into 32426 altFormat: "", // The date format to use for the alternate field 32427 constrainInput: true, // The input is constrained by the current date format 32428 showButtonPanel: false, // True to show button panel, false to not show it 32429 autoSize: false, // True to size the input for the date format, false to leave as is 32430 disabled: false // The initial disabled state 32431 }; 32432 $.extend( this._defaults, this.regional[ "" ] ); 32433 this.regional.en = $.extend( true, {}, this.regional[ "" ] ); 32434 this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en ); 32435 this.dpDiv = datepicker_bindHover( $( "<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ); 32436} 32437 32438$.extend( Datepicker.prototype, { 32439 32440 /* Class name added to elements to indicate already configured with a date picker. */ 32441 markerClassName: "hasDatepicker", 32442 32443 //Keep track of the maximum number of rows displayed (see #7043) 32444 maxRows: 4, 32445 32446 // TODO rename to "widget" when switching to widget factory 32447 _widgetDatepicker: function() { 32448 return this.dpDiv; 32449 }, 32450 32451 /* Override the default settings for all instances of the date picker. 32452 * @param settings object - the new settings to use as defaults (anonymous object) 32453 * @return the manager object 32454 */ 32455 setDefaults: function( settings ) { 32456 datepicker_extendRemove( this._defaults, settings || {} ); 32457 return this; 32458 }, 32459 32460 /* Attach the date picker to a jQuery selection. 32461 * @param target element - the target input field or division or span 32462 * @param settings object - the new settings to use for this date picker instance (anonymous) 32463 */ 32464 _attachDatepicker: function( target, settings ) { 32465 var nodeName, inline, inst; 32466 nodeName = target.nodeName.toLowerCase(); 32467 inline = ( nodeName === "div" || nodeName === "span" ); 32468 if ( !target.id ) { 32469 this.uuid += 1; 32470 target.id = "dp" + this.uuid; 32471 } 32472 inst = this._newInst( $( target ), inline ); 32473 inst.settings = $.extend( {}, settings || {} ); 32474 if ( nodeName === "input" ) { 32475 this._connectDatepicker( target, inst ); 32476 } else if ( inline ) { 32477 this._inlineDatepicker( target, inst ); 32478 } 32479 }, 32480 32481 /* Create a new instance object. */ 32482 _newInst: function( target, inline ) { 32483 var id = target[ 0 ].id.replace( /([^A-Za-z0-9_\-])/g, "\\\\$1" ); // escape jQuery meta chars 32484 return { id: id, input: target, // associated target 32485 selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection 32486 drawMonth: 0, drawYear: 0, // month being drawn 32487 inline: inline, // is datepicker inline or not 32488 dpDiv: ( !inline ? this.dpDiv : // presentation div 32489 datepicker_bindHover( $( "<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>" ) ) ) }; 32490 }, 32491 32492 /* Attach the date picker to an input field. */ 32493 _connectDatepicker: function( target, inst ) { 32494 var input = $( target ); 32495 inst.append = $( [] ); 32496 inst.trigger = $( [] ); 32497 if ( input.hasClass( this.markerClassName ) ) { 32498 return; 32499 } 32500 this._attachments( input, inst ); 32501 input.addClass( this.markerClassName ).on( "keydown", this._doKeyDown ). 32502 on( "keypress", this._doKeyPress ).on( "keyup", this._doKeyUp ); 32503 this._autoSize( inst ); 32504 $.data( target, "datepicker", inst ); 32505 32506 //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665) 32507 if ( inst.settings.disabled ) { 32508 this._disableDatepicker( target ); 32509 } 32510 }, 32511 32512 /* Make attachments based on settings. */ 32513 _attachments: function( input, inst ) { 32514 var showOn, buttonText, buttonImage, 32515 appendText = this._get( inst, "appendText" ), 32516 isRTL = this._get( inst, "isRTL" ); 32517 32518 if ( inst.append ) { 32519 inst.append.remove(); 32520 } 32521 if ( appendText ) { 32522 inst.append = $( "<span>" ) 32523 .addClass( this._appendClass ) 32524 .text( appendText ); 32525 input[ isRTL ? "before" : "after" ]( inst.append ); 32526 } 32527 32528 input.off( "focus", this._showDatepicker ); 32529 32530 if ( inst.trigger ) { 32531 inst.trigger.remove(); 32532 } 32533 32534 showOn = this._get( inst, "showOn" ); 32535 if ( showOn === "focus" || showOn === "both" ) { // pop-up date picker when in the marked field 32536 input.on( "focus", this._showDatepicker ); 32537 } 32538 if ( showOn === "button" || showOn === "both" ) { // pop-up date picker when button clicked 32539 buttonText = this._get( inst, "buttonText" ); 32540 buttonImage = this._get( inst, "buttonImage" ); 32541 32542 if ( this._get( inst, "buttonImageOnly" ) ) { 32543 inst.trigger = $( "<img>" ) 32544 .addClass( this._triggerClass ) 32545 .attr( { 32546 src: buttonImage, 32547 alt: buttonText, 32548 title: buttonText 32549 } ); 32550 } else { 32551 inst.trigger = $( "<button type='button'>" ) 32552 .addClass( this._triggerClass ); 32553 if ( buttonImage ) { 32554 inst.trigger.html( 32555 $( "<img>" ) 32556 .attr( { 32557 src: buttonImage, 32558 alt: buttonText, 32559 title: buttonText 32560 } ) 32561 ); 32562 } else { 32563 inst.trigger.text( buttonText ); 32564 } 32565 } 32566 32567 input[ isRTL ? "before" : "after" ]( inst.trigger ); 32568 inst.trigger.on( "click", function() { 32569 if ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) { 32570 $.datepicker._hideDatepicker(); 32571 } else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) { 32572 $.datepicker._hideDatepicker(); 32573 $.datepicker._showDatepicker( input[ 0 ] ); 32574 } else { 32575 $.datepicker._showDatepicker( input[ 0 ] ); 32576 } 32577 return false; 32578 } ); 32579 } 32580 }, 32581 32582 /* Apply the maximum length for the date format. */ 32583 _autoSize: function( inst ) { 32584 if ( this._get( inst, "autoSize" ) && !inst.inline ) { 32585 var findMax, max, maxI, i, 32586 date = new Date( 2009, 12 - 1, 20 ), // Ensure double digits 32587 dateFormat = this._get( inst, "dateFormat" ); 32588 32589 if ( dateFormat.match( /[DM]/ ) ) { 32590 findMax = function( names ) { 32591 max = 0; 32592 maxI = 0; 32593 for ( i = 0; i < names.length; i++ ) { 32594 if ( names[ i ].length > max ) { 32595 max = names[ i ].length; 32596 maxI = i; 32597 } 32598 } 32599 return maxI; 32600 }; 32601 date.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ? 32602 "monthNames" : "monthNamesShort" ) ) ) ); 32603 date.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ? 32604 "dayNames" : "dayNamesShort" ) ) ) + 20 - date.getDay() ); 32605 } 32606 inst.input.attr( "size", this._formatDate( inst, date ).length ); 32607 } 32608 }, 32609 32610 /* Attach an inline date picker to a div. */ 32611 _inlineDatepicker: function( target, inst ) { 32612 var divSpan = $( target ); 32613 if ( divSpan.hasClass( this.markerClassName ) ) { 32614 return; 32615 } 32616 divSpan.addClass( this.markerClassName ).append( inst.dpDiv ); 32617 $.data( target, "datepicker", inst ); 32618 this._setDate( inst, this._getDefaultDate( inst ), true ); 32619 this._updateDatepicker( inst ); 32620 this._updateAlternate( inst ); 32621 32622 //If disabled option is true, disable the datepicker before showing it (see ticket #5665) 32623 if ( inst.settings.disabled ) { 32624 this._disableDatepicker( target ); 32625 } 32626 32627 // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements 32628 // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height 32629 inst.dpDiv.css( "display", "block" ); 32630 }, 32631 32632 /* Pop-up the date picker in a "dialog" box. 32633 * @param input element - ignored 32634 * @param date string or Date - the initial date to display 32635 * @param onSelect function - the function to call when a date is selected 32636 * @param settings object - update the dialog date picker instance's settings (anonymous object) 32637 * @param pos int[2] - coordinates for the dialog's position within the screen or 32638 * event - with x/y coordinates or 32639 * leave empty for default (screen centre) 32640 * @return the manager object 32641 */ 32642 _dialogDatepicker: function( input, date, onSelect, settings, pos ) { 32643 var id, browserWidth, browserHeight, scrollX, scrollY, 32644 inst = this._dialogInst; // internal instance 32645 32646 if ( !inst ) { 32647 this.uuid += 1; 32648 id = "dp" + this.uuid; 32649 this._dialogInput = $( "<input type='text' id='" + id + 32650 "' style='position: absolute; top: -100px; width: 0px;'/>" ); 32651 this._dialogInput.on( "keydown", this._doKeyDown ); 32652 $( "body" ).append( this._dialogInput ); 32653 inst = this._dialogInst = this._newInst( this._dialogInput, false ); 32654 inst.settings = {}; 32655 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 32656 } 32657 datepicker_extendRemove( inst.settings, settings || {} ); 32658 date = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date ); 32659 this._dialogInput.val( date ); 32660 32661 this._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null ); 32662 if ( !this._pos ) { 32663 browserWidth = document.documentElement.clientWidth; 32664 browserHeight = document.documentElement.clientHeight; 32665 scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; 32666 scrollY = document.documentElement.scrollTop || document.body.scrollTop; 32667 this._pos = // should use actual width/height below 32668 [ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ]; 32669 } 32670 32671 // Move input on screen for focus, but hidden behind dialog 32672 this._dialogInput.css( "left", ( this._pos[ 0 ] + 20 ) + "px" ).css( "top", this._pos[ 1 ] + "px" ); 32673 inst.settings.onSelect = onSelect; 32674 this._inDialog = true; 32675 this.dpDiv.addClass( this._dialogClass ); 32676 this._showDatepicker( this._dialogInput[ 0 ] ); 32677 if ( $.blockUI ) { 32678 $.blockUI( this.dpDiv ); 32679 } 32680 $.data( this._dialogInput[ 0 ], "datepicker", inst ); 32681 return this; 32682 }, 32683 32684 /* Detach a datepicker from its control. 32685 * @param target element - the target input field or division or span 32686 */ 32687 _destroyDatepicker: function( target ) { 32688 var nodeName, 32689 $target = $( target ), 32690 inst = $.data( target, "datepicker" ); 32691 32692 if ( !$target.hasClass( this.markerClassName ) ) { 32693 return; 32694 } 32695 32696 nodeName = target.nodeName.toLowerCase(); 32697 $.removeData( target, "datepicker" ); 32698 if ( nodeName === "input" ) { 32699 inst.append.remove(); 32700 inst.trigger.remove(); 32701 $target.removeClass( this.markerClassName ). 32702 off( "focus", this._showDatepicker ). 32703 off( "keydown", this._doKeyDown ). 32704 off( "keypress", this._doKeyPress ). 32705 off( "keyup", this._doKeyUp ); 32706 } else if ( nodeName === "div" || nodeName === "span" ) { 32707 $target.removeClass( this.markerClassName ).empty(); 32708 } 32709 32710 if ( datepicker_instActive === inst ) { 32711 datepicker_instActive = null; 32712 this._curInst = null; 32713 } 32714 }, 32715 32716 /* Enable the date picker to a jQuery selection. 32717 * @param target element - the target input field or division or span 32718 */ 32719 _enableDatepicker: function( target ) { 32720 var nodeName, inline, 32721 $target = $( target ), 32722 inst = $.data( target, "datepicker" ); 32723 32724 if ( !$target.hasClass( this.markerClassName ) ) { 32725 return; 32726 } 32727 32728 nodeName = target.nodeName.toLowerCase(); 32729 if ( nodeName === "input" ) { 32730 target.disabled = false; 32731 inst.trigger.filter( "button" ). 32732 each( function() { 32733 this.disabled = false; 32734 } ).end(). 32735 filter( "img" ).css( { opacity: "1.0", cursor: "" } ); 32736 } else if ( nodeName === "div" || nodeName === "span" ) { 32737 inline = $target.children( "." + this._inlineClass ); 32738 inline.children().removeClass( "ui-state-disabled" ); 32739 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 32740 prop( "disabled", false ); 32741 } 32742 this._disabledInputs = $.map( this._disabledInputs, 32743 32744 // Delete entry 32745 function( value ) { 32746 return ( value === target ? null : value ); 32747 } ); 32748 }, 32749 32750 /* Disable the date picker to a jQuery selection. 32751 * @param target element - the target input field or division or span 32752 */ 32753 _disableDatepicker: function( target ) { 32754 var nodeName, inline, 32755 $target = $( target ), 32756 inst = $.data( target, "datepicker" ); 32757 32758 if ( !$target.hasClass( this.markerClassName ) ) { 32759 return; 32760 } 32761 32762 nodeName = target.nodeName.toLowerCase(); 32763 if ( nodeName === "input" ) { 32764 target.disabled = true; 32765 inst.trigger.filter( "button" ). 32766 each( function() { 32767 this.disabled = true; 32768 } ).end(). 32769 filter( "img" ).css( { opacity: "0.5", cursor: "default" } ); 32770 } else if ( nodeName === "div" || nodeName === "span" ) { 32771 inline = $target.children( "." + this._inlineClass ); 32772 inline.children().addClass( "ui-state-disabled" ); 32773 inline.find( "select.ui-datepicker-month, select.ui-datepicker-year" ). 32774 prop( "disabled", true ); 32775 } 32776 this._disabledInputs = $.map( this._disabledInputs, 32777 32778 // Delete entry 32779 function( value ) { 32780 return ( value === target ? null : value ); 32781 } ); 32782 this._disabledInputs[ this._disabledInputs.length ] = target; 32783 }, 32784 32785 /* Is the first field in a jQuery collection disabled as a datepicker? 32786 * @param target element - the target input field or division or span 32787 * @return boolean - true if disabled, false if enabled 32788 */ 32789 _isDisabledDatepicker: function( target ) { 32790 if ( !target ) { 32791 return false; 32792 } 32793 for ( var i = 0; i < this._disabledInputs.length; i++ ) { 32794 if ( this._disabledInputs[ i ] === target ) { 32795 return true; 32796 } 32797 } 32798 return false; 32799 }, 32800 32801 /* Retrieve the instance data for the target control. 32802 * @param target element - the target input field or division or span 32803 * @return object - the associated instance data 32804 * @throws error if a jQuery problem getting data 32805 */ 32806 _getInst: function( target ) { 32807 try { 32808 return $.data( target, "datepicker" ); 32809 } catch ( err ) { 32810 throw "Missing instance data for this datepicker"; 32811 } 32812 }, 32813 32814 /* Update or retrieve the settings for a date picker attached to an input field or division. 32815 * @param target element - the target input field or division or span 32816 * @param name object - the new settings to update or 32817 * string - the name of the setting to change or retrieve, 32818 * when retrieving also "all" for all instance settings or 32819 * "defaults" for all global defaults 32820 * @param value any - the new value for the setting 32821 * (omit if above is an object or to retrieve a value) 32822 */ 32823 _optionDatepicker: function( target, name, value ) { 32824 var settings, date, minDate, maxDate, 32825 inst = this._getInst( target ); 32826 32827 if ( arguments.length === 2 && typeof name === "string" ) { 32828 return ( name === "defaults" ? $.extend( {}, $.datepicker._defaults ) : 32829 ( inst ? ( name === "all" ? $.extend( {}, inst.settings ) : 32830 this._get( inst, name ) ) : null ) ); 32831 } 32832 32833 settings = name || {}; 32834 if ( typeof name === "string" ) { 32835 settings = {}; 32836 settings[ name ] = value; 32837 } 32838 32839 if ( inst ) { 32840 if ( this._curInst === inst ) { 32841 this._hideDatepicker(); 32842 } 32843 32844 date = this._getDateDatepicker( target, true ); 32845 minDate = this._getMinMaxDate( inst, "min" ); 32846 maxDate = this._getMinMaxDate( inst, "max" ); 32847 datepicker_extendRemove( inst.settings, settings ); 32848 32849 // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided 32850 if ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) { 32851 inst.settings.minDate = this._formatDate( inst, minDate ); 32852 } 32853 if ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) { 32854 inst.settings.maxDate = this._formatDate( inst, maxDate ); 32855 } 32856 if ( "disabled" in settings ) { 32857 if ( settings.disabled ) { 32858 this._disableDatepicker( target ); 32859 } else { 32860 this._enableDatepicker( target ); 32861 } 32862 } 32863 this._attachments( $( target ), inst ); 32864 this._autoSize( inst ); 32865 this._setDate( inst, date ); 32866 this._updateAlternate( inst ); 32867 this._updateDatepicker( inst ); 32868 } 32869 }, 32870 32871 // Change method deprecated 32872 _changeDatepicker: function( target, name, value ) { 32873 this._optionDatepicker( target, name, value ); 32874 }, 32875 32876 /* Redraw the date picker attached to an input field or division. 32877 * @param target element - the target input field or division or span 32878 */ 32879 _refreshDatepicker: function( target ) { 32880 var inst = this._getInst( target ); 32881 if ( inst ) { 32882 this._updateDatepicker( inst ); 32883 } 32884 }, 32885 32886 /* Set the dates for a jQuery selection. 32887 * @param target element - the target input field or division or span 32888 * @param date Date - the new date 32889 */ 32890 _setDateDatepicker: function( target, date ) { 32891 var inst = this._getInst( target ); 32892 if ( inst ) { 32893 this._setDate( inst, date ); 32894 this._updateDatepicker( inst ); 32895 this._updateAlternate( inst ); 32896 } 32897 }, 32898 32899 /* Get the date(s) for the first entry in a jQuery selection. 32900 * @param target element - the target input field or division or span 32901 * @param noDefault boolean - true if no default date is to be used 32902 * @return Date - the current date 32903 */ 32904 _getDateDatepicker: function( target, noDefault ) { 32905 var inst = this._getInst( target ); 32906 if ( inst && !inst.inline ) { 32907 this._setDateFromField( inst, noDefault ); 32908 } 32909 return ( inst ? this._getDate( inst ) : null ); 32910 }, 32911 32912 /* Handle keystrokes. */ 32913 _doKeyDown: function( event ) { 32914 var onSelect, dateStr, sel, 32915 inst = $.datepicker._getInst( event.target ), 32916 handled = true, 32917 isRTL = inst.dpDiv.is( ".ui-datepicker-rtl" ); 32918 32919 inst._keyEvent = true; 32920 if ( $.datepicker._datepickerShowing ) { 32921 switch ( event.keyCode ) { 32922 case 9: $.datepicker._hideDatepicker(); 32923 handled = false; 32924 break; // hide on tab out 32925 case 13: sel = $( "td." + $.datepicker._dayOverClass + ":not(." + 32926 $.datepicker._currentClass + ")", inst.dpDiv ); 32927 if ( sel[ 0 ] ) { 32928 $.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] ); 32929 } 32930 32931 onSelect = $.datepicker._get( inst, "onSelect" ); 32932 if ( onSelect ) { 32933 dateStr = $.datepicker._formatDate( inst ); 32934 32935 // Trigger custom callback 32936 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); 32937 } else { 32938 $.datepicker._hideDatepicker(); 32939 } 32940 32941 return false; // don't submit the form 32942 case 27: $.datepicker._hideDatepicker(); 32943 break; // hide on escape 32944 case 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 32945 -$.datepicker._get( inst, "stepBigMonths" ) : 32946 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 32947 break; // previous month/year on page up/+ ctrl 32948 case 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 32949 +$.datepicker._get( inst, "stepBigMonths" ) : 32950 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 32951 break; // next month/year on page down/+ ctrl 32952 case 35: if ( event.ctrlKey || event.metaKey ) { 32953 $.datepicker._clearDate( event.target ); 32954 } 32955 handled = event.ctrlKey || event.metaKey; 32956 break; // clear on ctrl or command +end 32957 case 36: if ( event.ctrlKey || event.metaKey ) { 32958 $.datepicker._gotoToday( event.target ); 32959 } 32960 handled = event.ctrlKey || event.metaKey; 32961 break; // current on ctrl or command +home 32962 case 37: if ( event.ctrlKey || event.metaKey ) { 32963 $.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), "D" ); 32964 } 32965 handled = event.ctrlKey || event.metaKey; 32966 32967 // -1 day on ctrl or command +left 32968 if ( event.originalEvent.altKey ) { 32969 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 32970 -$.datepicker._get( inst, "stepBigMonths" ) : 32971 -$.datepicker._get( inst, "stepMonths" ) ), "M" ); 32972 } 32973 32974 // next month/year on alt +left on Mac 32975 break; 32976 case 38: if ( event.ctrlKey || event.metaKey ) { 32977 $.datepicker._adjustDate( event.target, -7, "D" ); 32978 } 32979 handled = event.ctrlKey || event.metaKey; 32980 break; // -1 week on ctrl or command +up 32981 case 39: if ( event.ctrlKey || event.metaKey ) { 32982 $.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), "D" ); 32983 } 32984 handled = event.ctrlKey || event.metaKey; 32985 32986 // +1 day on ctrl or command +right 32987 if ( event.originalEvent.altKey ) { 32988 $.datepicker._adjustDate( event.target, ( event.ctrlKey ? 32989 +$.datepicker._get( inst, "stepBigMonths" ) : 32990 +$.datepicker._get( inst, "stepMonths" ) ), "M" ); 32991 } 32992 32993 // next month/year on alt +right 32994 break; 32995 case 40: if ( event.ctrlKey || event.metaKey ) { 32996 $.datepicker._adjustDate( event.target, +7, "D" ); 32997 } 32998 handled = event.ctrlKey || event.metaKey; 32999 break; // +1 week on ctrl or command +down 33000 default: handled = false; 33001 } 33002 } else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home 33003 $.datepicker._showDatepicker( this ); 33004 } else { 33005 handled = false; 33006 } 33007 33008 if ( handled ) { 33009 event.preventDefault(); 33010 event.stopPropagation(); 33011 } 33012 }, 33013 33014 /* Filter entered characters - based on date format. */ 33015 _doKeyPress: function( event ) { 33016 var chars, chr, 33017 inst = $.datepicker._getInst( event.target ); 33018 33019 if ( $.datepicker._get( inst, "constrainInput" ) ) { 33020 chars = $.datepicker._possibleChars( $.datepicker._get( inst, "dateFormat" ) ); 33021 chr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode ); 33022 return event.ctrlKey || event.metaKey || ( chr < " " || !chars || chars.indexOf( chr ) > -1 ); 33023 } 33024 }, 33025 33026 /* Synchronise manual entry and field/alternate field. */ 33027 _doKeyUp: function( event ) { 33028 var date, 33029 inst = $.datepicker._getInst( event.target ); 33030 33031 if ( inst.input.val() !== inst.lastVal ) { 33032 try { 33033 date = $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 33034 ( inst.input ? inst.input.val() : null ), 33035 $.datepicker._getFormatConfig( inst ) ); 33036 33037 if ( date ) { // only if valid 33038 $.datepicker._setDateFromField( inst ); 33039 $.datepicker._updateAlternate( inst ); 33040 $.datepicker._updateDatepicker( inst ); 33041 } 33042 } catch ( err ) { 33043 } 33044 } 33045 return true; 33046 }, 33047 33048 /* Pop-up the date picker for a given input field. 33049 * If false returned from beforeShow event handler do not show. 33050 * @param input element - the input field attached to the date picker or 33051 * event - if triggered by focus 33052 */ 33053 _showDatepicker: function( input ) { 33054 input = input.target || input; 33055 if ( input.nodeName.toLowerCase() !== "input" ) { // find from button/image trigger 33056 input = $( "input", input.parentNode )[ 0 ]; 33057 } 33058 33059 if ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here 33060 return; 33061 } 33062 33063 var inst, beforeShow, beforeShowSettings, isFixed, 33064 offset, showAnim, duration; 33065 33066 inst = $.datepicker._getInst( input ); 33067 if ( $.datepicker._curInst && $.datepicker._curInst !== inst ) { 33068 $.datepicker._curInst.dpDiv.stop( true, true ); 33069 if ( inst && $.datepicker._datepickerShowing ) { 33070 $.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] ); 33071 } 33072 } 33073 33074 beforeShow = $.datepicker._get( inst, "beforeShow" ); 33075 beforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {}; 33076 if ( beforeShowSettings === false ) { 33077 return; 33078 } 33079 datepicker_extendRemove( inst.settings, beforeShowSettings ); 33080 33081 inst.lastVal = null; 33082 $.datepicker._lastInput = input; 33083 $.datepicker._setDateFromField( inst ); 33084 33085 if ( $.datepicker._inDialog ) { // hide cursor 33086 input.value = ""; 33087 } 33088 if ( !$.datepicker._pos ) { // position below input 33089 $.datepicker._pos = $.datepicker._findPos( input ); 33090 $.datepicker._pos[ 1 ] += input.offsetHeight; // add the height 33091 } 33092 33093 isFixed = false; 33094 $( input ).parents().each( function() { 33095 isFixed |= $( this ).css( "position" ) === "fixed"; 33096 return !isFixed; 33097 } ); 33098 33099 offset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] }; 33100 $.datepicker._pos = null; 33101 33102 //to avoid flashes on Firefox 33103 inst.dpDiv.empty(); 33104 33105 // determine sizing offscreen 33106 inst.dpDiv.css( { position: "absolute", display: "block", top: "-1000px" } ); 33107 $.datepicker._updateDatepicker( inst ); 33108 33109 // fix width for dynamic number of date pickers 33110 // and adjust position before showing 33111 offset = $.datepicker._checkOffset( inst, offset, isFixed ); 33112 inst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ? 33113 "static" : ( isFixed ? "fixed" : "absolute" ) ), display: "none", 33114 left: offset.left + "px", top: offset.top + "px" } ); 33115 33116 if ( !inst.inline ) { 33117 showAnim = $.datepicker._get( inst, "showAnim" ); 33118 duration = $.datepicker._get( inst, "duration" ); 33119 inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 ); 33120 $.datepicker._datepickerShowing = true; 33121 33122 if ( $.effects && $.effects.effect[ showAnim ] ) { 33123 inst.dpDiv.show( showAnim, $.datepicker._get( inst, "showOptions" ), duration ); 33124 } else { 33125 inst.dpDiv[ showAnim || "show" ]( showAnim ? duration : null ); 33126 } 33127 33128 if ( $.datepicker._shouldFocusInput( inst ) ) { 33129 inst.input.trigger( "focus" ); 33130 } 33131 33132 $.datepicker._curInst = inst; 33133 } 33134 }, 33135 33136 /* Generate the date picker content. */ 33137 _updateDatepicker: function( inst ) { 33138 this.maxRows = 4; //Reset the max number of rows being displayed (see #7043) 33139 datepicker_instActive = inst; // for delegate hover events 33140 inst.dpDiv.empty().append( this._generateHTML( inst ) ); 33141 this._attachHandlers( inst ); 33142 33143 var origyearshtml, 33144 numMonths = this._getNumberOfMonths( inst ), 33145 cols = numMonths[ 1 ], 33146 width = 17, 33147 activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" ), 33148 onUpdateDatepicker = $.datepicker._get( inst, "onUpdateDatepicker" ); 33149 33150 if ( activeCell.length > 0 ) { 33151 datepicker_handleMouseover.apply( activeCell.get( 0 ) ); 33152 } 33153 33154 inst.dpDiv.removeClass( "ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4" ).width( "" ); 33155 if ( cols > 1 ) { 33156 inst.dpDiv.addClass( "ui-datepicker-multi-" + cols ).css( "width", ( width * cols ) + "em" ); 33157 } 33158 inst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? "add" : "remove" ) + 33159 "Class" ]( "ui-datepicker-multi" ); 33160 inst.dpDiv[ ( this._get( inst, "isRTL" ) ? "add" : "remove" ) + 33161 "Class" ]( "ui-datepicker-rtl" ); 33162 33163 if ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) { 33164 inst.input.trigger( "focus" ); 33165 } 33166 33167 // Deffered render of the years select (to avoid flashes on Firefox) 33168 if ( inst.yearshtml ) { 33169 origyearshtml = inst.yearshtml; 33170 setTimeout( function() { 33171 33172 //assure that inst.yearshtml didn't change. 33173 if ( origyearshtml === inst.yearshtml && inst.yearshtml ) { 33174 inst.dpDiv.find( "select.ui-datepicker-year" ).first().replaceWith( inst.yearshtml ); 33175 } 33176 origyearshtml = inst.yearshtml = null; 33177 }, 0 ); 33178 } 33179 33180 if ( onUpdateDatepicker ) { 33181 onUpdateDatepicker.apply( ( inst.input ? inst.input[ 0 ] : null ), [ inst ] ); 33182 } 33183 }, 33184 33185 // #6694 - don't focus the input if it's already focused 33186 // this breaks the change event in IE 33187 // Support: IE and jQuery <1.9 33188 _shouldFocusInput: function( inst ) { 33189 return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" ); 33190 }, 33191 33192 /* Check positioning to remain on screen. */ 33193 _checkOffset: function( inst, offset, isFixed ) { 33194 var dpWidth = inst.dpDiv.outerWidth(), 33195 dpHeight = inst.dpDiv.outerHeight(), 33196 inputWidth = inst.input ? inst.input.outerWidth() : 0, 33197 inputHeight = inst.input ? inst.input.outerHeight() : 0, 33198 viewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ), 33199 viewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() ); 33200 33201 offset.left -= ( this._get( inst, "isRTL" ) ? ( dpWidth - inputWidth ) : 0 ); 33202 offset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0; 33203 offset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0; 33204 33205 // Now check if datepicker is showing outside window viewport - move to a better place if so. 33206 offset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ? 33207 Math.abs( offset.left + dpWidth - viewWidth ) : 0 ); 33208 offset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ? 33209 Math.abs( dpHeight + inputHeight ) : 0 ); 33210 33211 return offset; 33212 }, 33213 33214 /* Find an object's position on the screen. */ 33215 _findPos: function( obj ) { 33216 var position, 33217 inst = this._getInst( obj ), 33218 isRTL = this._get( inst, "isRTL" ); 33219 33220 while ( obj && ( obj.type === "hidden" || obj.nodeType !== 1 || $.expr.pseudos.hidden( obj ) ) ) { 33221 obj = obj[ isRTL ? "previousSibling" : "nextSibling" ]; 33222 } 33223 33224 position = $( obj ).offset(); 33225 return [ position.left, position.top ]; 33226 }, 33227 33228 /* Hide the date picker from view. 33229 * @param input element - the input field attached to the date picker 33230 */ 33231 _hideDatepicker: function( input ) { 33232 var showAnim, duration, postProcess, onClose, 33233 inst = this._curInst; 33234 33235 if ( !inst || ( input && inst !== $.data( input, "datepicker" ) ) ) { 33236 return; 33237 } 33238 33239 if ( this._datepickerShowing ) { 33240 showAnim = this._get( inst, "showAnim" ); 33241 duration = this._get( inst, "duration" ); 33242 postProcess = function() { 33243 $.datepicker._tidyDialog( inst ); 33244 }; 33245 33246 // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed 33247 if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) { 33248 inst.dpDiv.hide( showAnim, $.datepicker._get( inst, "showOptions" ), duration, postProcess ); 33249 } else { 33250 inst.dpDiv[ ( showAnim === "slideDown" ? "slideUp" : 33251 ( showAnim === "fadeIn" ? "fadeOut" : "hide" ) ) ]( ( showAnim ? duration : null ), postProcess ); 33252 } 33253 33254 if ( !showAnim ) { 33255 postProcess(); 33256 } 33257 this._datepickerShowing = false; 33258 33259 onClose = this._get( inst, "onClose" ); 33260 if ( onClose ) { 33261 onClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : "" ), inst ] ); 33262 } 33263 33264 this._lastInput = null; 33265 if ( this._inDialog ) { 33266 this._dialogInput.css( { position: "absolute", left: "0", top: "-100px" } ); 33267 if ( $.blockUI ) { 33268 $.unblockUI(); 33269 $( "body" ).append( this.dpDiv ); 33270 } 33271 } 33272 this._inDialog = false; 33273 } 33274 }, 33275 33276 /* Tidy up after a dialog display. */ 33277 _tidyDialog: function( inst ) { 33278 inst.dpDiv.removeClass( this._dialogClass ).off( ".ui-datepicker-calendar" ); 33279 }, 33280 33281 /* Close date picker if clicked elsewhere. */ 33282 _checkExternalClick: function( event ) { 33283 if ( !$.datepicker._curInst ) { 33284 return; 33285 } 33286 33287 var $target = $( event.target ), 33288 inst = $.datepicker._getInst( $target[ 0 ] ); 33289 33290 if ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId && 33291 $target.parents( "#" + $.datepicker._mainDivId ).length === 0 && 33292 !$target.hasClass( $.datepicker.markerClassName ) && 33293 !$target.closest( "." + $.datepicker._triggerClass ).length && 33294 $.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) || 33295 ( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) { 33296 $.datepicker._hideDatepicker(); 33297 } 33298 }, 33299 33300 /* Adjust one of the date sub-fields. */ 33301 _adjustDate: function( id, offset, period ) { 33302 var target = $( id ), 33303 inst = this._getInst( target[ 0 ] ); 33304 33305 if ( this._isDisabledDatepicker( target[ 0 ] ) ) { 33306 return; 33307 } 33308 this._adjustInstDate( inst, offset, period ); 33309 this._updateDatepicker( inst ); 33310 }, 33311 33312 /* Action for current link. */ 33313 _gotoToday: function( id ) { 33314 var date, 33315 target = $( id ), 33316 inst = this._getInst( target[ 0 ] ); 33317 33318 if ( this._get( inst, "gotoCurrent" ) && inst.currentDay ) { 33319 inst.selectedDay = inst.currentDay; 33320 inst.drawMonth = inst.selectedMonth = inst.currentMonth; 33321 inst.drawYear = inst.selectedYear = inst.currentYear; 33322 } else { 33323 date = new Date(); 33324 inst.selectedDay = date.getDate(); 33325 inst.drawMonth = inst.selectedMonth = date.getMonth(); 33326 inst.drawYear = inst.selectedYear = date.getFullYear(); 33327 } 33328 this._notifyChange( inst ); 33329 this._adjustDate( target ); 33330 }, 33331 33332 /* Action for selecting a new month/year. */ 33333 _selectMonthYear: function( id, select, period ) { 33334 var target = $( id ), 33335 inst = this._getInst( target[ 0 ] ); 33336 33337 inst[ "selected" + ( period === "M" ? "Month" : "Year" ) ] = 33338 inst[ "draw" + ( period === "M" ? "Month" : "Year" ) ] = 33339 parseInt( select.options[ select.selectedIndex ].value, 10 ); 33340 33341 this._notifyChange( inst ); 33342 this._adjustDate( target ); 33343 }, 33344 33345 /* Action for selecting a day. */ 33346 _selectDay: function( id, month, year, td ) { 33347 var inst, 33348 target = $( id ); 33349 33350 if ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) { 33351 return; 33352 } 33353 33354 inst = this._getInst( target[ 0 ] ); 33355 inst.selectedDay = inst.currentDay = parseInt( $( "a", td ).attr( "data-date" ) ); 33356 inst.selectedMonth = inst.currentMonth = month; 33357 inst.selectedYear = inst.currentYear = year; 33358 this._selectDate( id, this._formatDate( inst, 33359 inst.currentDay, inst.currentMonth, inst.currentYear ) ); 33360 }, 33361 33362 /* Erase the input field and hide the date picker. */ 33363 _clearDate: function( id ) { 33364 var target = $( id ); 33365 this._selectDate( target, "" ); 33366 }, 33367 33368 /* Update the input field with the selected date. */ 33369 _selectDate: function( id, dateStr ) { 33370 var onSelect, 33371 target = $( id ), 33372 inst = this._getInst( target[ 0 ] ); 33373 33374 dateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) ); 33375 if ( inst.input ) { 33376 inst.input.val( dateStr ); 33377 } 33378 this._updateAlternate( inst ); 33379 33380 onSelect = this._get( inst, "onSelect" ); 33381 if ( onSelect ) { 33382 onSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] ); // trigger custom callback 33383 } else if ( inst.input ) { 33384 inst.input.trigger( "change" ); // fire the change event 33385 } 33386 33387 if ( inst.inline ) { 33388 this._updateDatepicker( inst ); 33389 } else { 33390 this._hideDatepicker(); 33391 this._lastInput = inst.input[ 0 ]; 33392 if ( typeof( inst.input[ 0 ] ) !== "object" ) { 33393 inst.input.trigger( "focus" ); // restore focus 33394 } 33395 this._lastInput = null; 33396 } 33397 }, 33398 33399 /* Update any alternate field to synchronise with the main field. */ 33400 _updateAlternate: function( inst ) { 33401 var altFormat, date, dateStr, 33402 altField = this._get( inst, "altField" ); 33403 33404 if ( altField ) { // update alternate field too 33405 altFormat = this._get( inst, "altFormat" ) || this._get( inst, "dateFormat" ); 33406 date = this._getDate( inst ); 33407 dateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) ); 33408 $( document ).find( altField ).val( dateStr ); 33409 } 33410 }, 33411 33412 /* Set as beforeShowDay function to prevent selection of weekends. 33413 * @param date Date - the date to customise 33414 * @return [boolean, string] - is this date selectable?, what is its CSS class? 33415 */ 33416 noWeekends: function( date ) { 33417 var day = date.getDay(); 33418 return [ ( day > 0 && day < 6 ), "" ]; 33419 }, 33420 33421 /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition. 33422 * @param date Date - the date to get the week for 33423 * @return number - the number of the week within the year that contains this date 33424 */ 33425 iso8601Week: function( date ) { 33426 var time, 33427 checkDate = new Date( date.getTime() ); 33428 33429 // Find Thursday of this week starting on Monday 33430 checkDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) ); 33431 33432 time = checkDate.getTime(); 33433 checkDate.setMonth( 0 ); // Compare with Jan 1 33434 checkDate.setDate( 1 ); 33435 return Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1; 33436 }, 33437 33438 /* Parse a string value into a date object. 33439 * See formatDate below for the possible formats. 33440 * 33441 * @param format string - the expected format of the date 33442 * @param value string - the date in the above format 33443 * @param settings Object - attributes include: 33444 * shortYearCutoff number - the cutoff year for determining the century (optional) 33445 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 33446 * dayNames string[7] - names of the days from Sunday (optional) 33447 * monthNamesShort string[12] - abbreviated names of the months (optional) 33448 * monthNames string[12] - names of the months (optional) 33449 * @return Date - the extracted date value or null if value is blank 33450 */ 33451 parseDate: function( format, value, settings ) { 33452 if ( format == null || value == null ) { 33453 throw "Invalid arguments"; 33454 } 33455 33456 value = ( typeof value === "object" ? value.toString() : value + "" ); 33457 if ( value === "" ) { 33458 return null; 33459 } 33460 33461 var iFormat, dim, extra, 33462 iValue = 0, 33463 shortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff, 33464 shortYearCutoff = ( typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp
vendor: 5,431 bytes, lines 33464-33654
33464: 33465 new Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ), 33466 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 33467 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 33468 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 33469 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 33470 year = -1, 33471 month = -1, 33472 day = -1, 33473 doy = -1, 33474 literal = false, 33475 date, 33476 33477 // Check whether a format character is doubled 33478 lookAhead = function( match ) { 33479 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 33480 if ( matches ) { 33481 iFormat++; 33482 } 33483 return matches; 33484 }, 33485 33486 // Extract a number from the string value 33487 getNumber = function( match ) { 33488 var isDoubled = lookAhead( match ), 33489 size = ( match === "@" ? 14 : ( match === "!" ? 20 : 33490 ( match === "y" && isDoubled ? 4 : ( match === "o" ? 3 : 2 ) ) ) ), 33491 minSize = ( match === "y" ? size : 1 ), 33492 digits = new RegExp( "^\\d{" + minSize + "," + size + "}" ), 33493 num = value.substring( iValue ).match( digits ); 33494 if ( !num ) { 33495 throw "Missing number at position " + iValue; 33496 } 33497 iValue += num[ 0 ].length; 33498 return parseInt( num[ 0 ], 10 ); 33499 }, 33500 33501 // Extract a name from the string value and convert to an index 33502 getName = function( match, shortNames, longNames ) { 33503 var index = -1, 33504 names = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) { 33505 return [ [ k, v ] ]; 33506 } ).sort( function( a, b ) { 33507 return -( a[ 1 ].length - b[ 1 ].length ); 33508 } ); 33509 33510 $.each( names, function( i, pair ) { 33511 var name = pair[ 1 ]; 33512 if ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) { 33513 index = pair[ 0 ]; 33514 iValue += name.length; 33515 return false; 33516 } 33517 } ); 33518 if ( index !== -1 ) { 33519 return index + 1; 33520 } else { 33521 throw "Unknown name at position " + iValue; 33522 } 33523 }, 33524 33525 // Confirm that a literal character matches the string value 33526 checkLiteral = function() { 33527 if ( value.charAt( iValue ) !== format.charAt( iFormat ) ) { 33528 throw "Unexpected literal at position " + iValue; 33529 } 33530 iValue++; 33531 }; 33532 33533 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 33534 if ( literal ) { 33535 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 33536 literal = false; 33537 } else { 33538 checkLiteral(); 33539 } 33540 } else { 33541 switch ( format.charAt( iFormat ) ) { 33542 case "d": 33543 day = getNumber( "d" ); 33544 break; 33545 case "D": 33546 getName( "D", dayNamesShort, dayNames ); 33547 break; 33548 case "o": 33549 doy = getNumber( "o" ); 33550 break; 33551 case "m": 33552 month = getNumber( "m" ); 33553 break; 33554 case "M": 33555 month = getName( "M", monthNamesShort, monthNames ); 33556 break; 33557 case "y": 33558 year = getNumber( "y" ); 33559 break; 33560 case "@": 33561 date = new Date( getNumber( "@" ) ); 33562 year = date.getFullYear(); 33563 month = date.getMonth() + 1; 33564 day = date.getDate(); 33565 break; 33566 case "!": 33567 date = new Date( ( getNumber( "!" ) - this._ticksTo1970 ) / 10000 ); 33568 year = date.getFullYear(); 33569 month = date.getMonth() + 1; 33570 day = date.getDate(); 33571 break; 33572 case "'": 33573 if ( lookAhead( "'" ) ) { 33574 checkLiteral(); 33575 } else { 33576 literal = true; 33577 } 33578 break; 33579 default: 33580 checkLiteral(); 33581 } 33582 } 33583 } 33584 33585 if ( iValue < value.length ) { 33586 extra = value.substr( iValue ); 33587 if ( !/^\s+/.test( extra ) ) { 33588 throw "Extra/unparsed characters found in date: " + extra; 33589 } 33590 } 33591 33592 if ( year === -1 ) { 33593 year = new Date().getFullYear(); 33594 } else if ( year < 100 ) { 33595 year += new Date().getFullYear() - new Date().getFullYear() % 100 + 33596 ( year <= shortYearCutoff ? 0 : -100 ); 33597 } 33598 33599 if ( doy > -1 ) { 33600 month = 1; 33601 day = doy; 33602 do { 33603 dim = this._getDaysInMonth( year, month - 1 ); 33604 if ( day <= dim ) { 33605 break; 33606 } 33607 month++; 33608 day -= dim; 33609 } while ( true ); 33610 } 33611 33612 date = this._daylightSavingAdjust( new Date( year, month - 1, day ) ); 33613 if ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) { 33614 throw "Invalid date"; // E.g. 31/02/00 33615 } 33616 return date; 33617 }, 33618 33619 /* Standard date formats. */ 33620 ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601) 33621 COOKIE: "D, dd M yy", 33622 ISO_8601: "yy-mm-dd", 33623 RFC_822: "D, d M y", 33624 RFC_850: "DD, dd-M-y", 33625 RFC_1036: "D, d M y", 33626 RFC_1123: "D, d M yy", 33627 RFC_2822: "D, d M yy", 33628 RSS: "D, d M y", // RFC 822 33629 TICKS: "!", 33630 TIMESTAMP: "@", 33631 W3C: "yy-mm-dd", // ISO 8601 33632 33633 _ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) + 33634 Math.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ), 33635 33636 /* Format a date object into a string value. 33637 * The format can be combinations of the following: 33638 * d - day of month (no leading zero) 33639 * dd - day of month (two digit) 33640 * o - day of year (no leading zeros) 33641 * oo - day of year (three digit) 33642 * D - day name short 33643 * DD - day name long 33644 * m - month of year (no leading zero) 33645 * mm - month of year (two digit) 33646 * M - month name short 33647 * MM - month name long 33648 * y - year (two digit) 33649 * yy - year (four digit) 33650 * @ - Unix timestamp (ms since 01/01/1970) 33651 * ! - Windows ticks (100ns since 01/01/0001) 33652 * "..." - literal text 33653 * '' - single quote 33654 *
vendor: 6,198 bytes, lines 33655-33854
33655 * @param format string - the desired format of the date 33656 * @param date Date - the date value to format 33657 * @param settings Object - attributes include: 33658 * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional) 33659 * dayNames string[7] - names of the days from Sunday (optional) 33660 * monthNamesShort string[12] - abbreviated names of the months (optional) 33661 * monthNames string[12] - names of the months (optional) 33662 * @return string - the date in the above format 33663 */ 33664 formatDate: function( format, date, settings ) { 33665 if ( !date ) { 33666 return ""; 33667 } 33668 33669 var iFormat, 33670 dayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort, 33671 dayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames, 33672 monthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort, 33673 monthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames, 33674 33675 // Check whether a format character is doubled 33676 lookAhead = function( match ) { 33677 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 33678 if ( matches ) { 33679 iFormat++; 33680 } 33681 return matches; 33682 }, 33683 33684 // Format a number, with leading zero if necessary 33685 formatNumber = function( match, value, len ) { 33686 var num = "" + value; 33687 if ( lookAhead( match ) ) { 33688 while ( num.length < len ) { 33689 num = "0" + num; 33690 } 33691 } 33692 return num; 33693 }, 33694 33695 // Format a name, short or long as requested 33696 formatName = function( match, value, shortNames, longNames ) { 33697 return ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] ); 33698 }, 33699 output = "", 33700 literal = false; 33701 33702 if ( date ) { 33703 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 33704 if ( literal ) { 33705 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 33706 literal = false; 33707 } else { 33708 output += format.charAt( iFormat ); 33709 } 33710 } else { 33711 switch ( format.charAt( iFormat ) ) { 33712 case "d": 33713 output += formatNumber( "d", date.getDate(), 2 ); 33714 break; 33715 case "D": 33716 output += formatName( "D", date.getDay(), dayNamesShort, dayNames ); 33717 break; 33718 case "o": 33719 output += formatNumber( "o", 33720 Math.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 ); 33721 break; 33722 case "m": 33723 output += formatNumber( "m", date.getMonth() + 1, 2 ); 33724 break; 33725 case "M": 33726 output += formatName( "M", date.getMonth(), monthNamesShort, monthNames ); 33727 break; 33728 case "y": 33729 output += ( lookAhead( "y" ) ? date.getFullYear() : 33730 ( date.getFullYear() % 100 < 10 ? "0" : "" ) + date.getFullYear() % 100 ); 33731 break; 33732 case "@": 33733 output += date.getTime(); 33734 break; 33735 case "!": 33736 output += date.getTime() * 10000 + this._ticksTo1970; 33737 break; 33738 case "'": 33739 if ( lookAhead( "'" ) ) { 33740 output += "'"; 33741 } else { 33742 literal = true; 33743 } 33744 break; 33745 default: 33746 output += format.charAt( iFormat ); 33747 } 33748 } 33749 } 33750 } 33751 return output; 33752 }, 33753 33754 /* Extract all possible characters from the date format. */ 33755 _possibleChars: function( format ) { 33756 var iFormat, 33757 chars = "", 33758 literal = false, 33759 33760 // Check whether a format character is doubled 33761 lookAhead = function( match ) { 33762 var matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match ); 33763 if ( matches ) { 33764 iFormat++; 33765 } 33766 return matches; 33767 }; 33768 33769 for ( iFormat = 0; iFormat < format.length; iFormat++ ) { 33770 if ( literal ) { 33771 if ( format.charAt( iFormat ) === "'" && !lookAhead( "'" ) ) { 33772 literal = false; 33773 } else { 33774 chars += format.charAt( iFormat ); 33775 } 33776 } else { 33777 switch ( format.charAt( iFormat ) ) { 33778 case "d": case "m": case "y": case "@": 33779 chars += "0123456789"; 33780 break; 33781 case "D": case "M": 33782 return null; // Accept anything 33783 case "'": 33784 if ( lookAhead( "'" ) ) { 33785 chars += "'"; 33786 } else { 33787 literal = true; 33788 } 33789 break; 33790 default: 33791 chars += format.charAt( iFormat ); 33792 } 33793 } 33794 } 33795 return chars; 33796 }, 33797 33798 /* Get a setting value, defaulting if necessary. */ 33799 _get: function( inst, name ) { 33800 return inst.settings[ name ] !== undefined ? 33801 inst.settings[ name ] : this._defaults[ name ]; 33802 }, 33803 33804 /* Parse existing date and initialise date picker. */ 33805 _setDateFromField: function( inst, noDefault ) { 33806 if ( inst.input.val() === inst.lastVal ) { 33807 return; 33808 } 33809 33810 var dateFormat = this._get( inst, "dateFormat" ), 33811 dates = inst.lastVal = inst.input ? inst.input.val() : null, 33812 defaultDate = this._getDefaultDate( inst ), 33813 date = defaultDate, 33814 settings = this._getFormatConfig( inst ); 33815 33816 try { 33817 date = this.parseDate( dateFormat, dates, settings ) || defaultDate; 33818 } catch ( event ) { 33819 dates = ( noDefault ? "" : dates ); 33820 } 33821 inst.selectedDay = date.getDate(); 33822 inst.drawMonth = inst.selectedMonth = date.getMonth(); 33823 inst.drawYear = inst.selectedYear = date.getFullYear(); 33824 inst.currentDay = ( dates ? date.getDate() : 0 ); 33825 inst.currentMonth = ( dates ? date.getMonth() : 0 ); 33826 inst.currentYear = ( dates ? date.getFullYear() : 0 ); 33827 this._adjustInstDate( inst ); 33828 }, 33829 33830 /* Retrieve the default date shown on opening. */ 33831 _getDefaultDate: function( inst ) { 33832 return this._restrictMinMax( inst, 33833 this._determineDate( inst, this._get( inst, "defaultDate" ), new Date() ) ); 33834 }, 33835 33836 /* A date may be specified as an exact value or a relative one. */ 33837 _determineDate: function( inst, date, defaultDate ) { 33838 var offsetNumeric = function( offset ) { 33839 var date = new Date(); 33840 date.setDate( date.getDate() + offset ); 33841 return date; 33842 }, 33843 offsetString = function( offset ) { 33844 try { 33845 return $.datepicker.parseDate( $.datepicker._get( inst, "dateFormat" ), 33846 offset, $.datepicker._getFormatConfig( inst ) ); 33847 } catch ( e ) { 33848 33849 // Ignore 33850 } 33851 33852 var date = ( offset.toLowerCase().match( /^c/ ) ? 33853 $.datepicker._getDate( inst ) : null ) || new Date(), 33854 year = date.getFullYear(),
vendor: 5,359 bytes, lines 33855-33993
33855 month = date.getMonth(), 33856 day = date.getDate(), 33857 pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, 33858 matches = pattern.exec( offset ); 33859 33860 while ( matches ) { 33861 switch ( matches[ 2 ] || "d" ) { 33862 case "d" : case "D" : 33863 day += parseInt( matches[ 1 ], 10 ); break; 33864 case "w" : case "W" : 33865 day += parseInt( matches[ 1 ], 10 ) * 7; break; 33866 case "m" : case "M" : 33867 month += parseInt( matches[ 1 ], 10 ); 33868 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 33869 break; 33870 case "y": case "Y" : 33871 year += parseInt( matches[ 1 ], 10 ); 33872 day = Math.min( day, $.datepicker._getDaysInMonth( year, month ) ); 33873 break; 33874 } 33875 matches = pattern.exec( offset ); 33876 } 33877 return new Date( year, month, day ); 33878 }, 33879 newDate = ( date == null || date === "" ? defaultDate : ( typeof date === "string" ? offsetString( date ) : 33880 ( typeof date === "number" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) ); 33881 33882 newDate = ( newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate ); 33883 if ( newDate ) { 33884 newDate.setHours( 0 ); 33885 newDate.setMinutes( 0 ); 33886 newDate.setSeconds( 0 ); 33887 newDate.setMilliseconds( 0 ); 33888 } 33889 return this._daylightSavingAdjust( newDate ); 33890 }, 33891 33892 /* Handle switch to/from daylight saving. 33893 * Hours may be non-zero on daylight saving cut-over: 33894 * > 12 when midnight changeover, but then cannot generate 33895 * midnight datetime, so jump to 1AM, otherwise reset. 33896 * @param date (Date) the date to check 33897 * @return (Date) the corrected date 33898 */ 33899 _daylightSavingAdjust: function( date ) { 33900 if ( !date ) { 33901 return null; 33902 } 33903 date.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 ); 33904 return date; 33905 }, 33906 33907 /* Set the date(s) directly. */ 33908 _setDate: function( inst, date, noChange ) { 33909 var clear = !date, 33910 origMonth = inst.selectedMonth, 33911 origYear = inst.selectedYear, 33912 newDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) ); 33913 33914 inst.selectedDay = inst.currentDay = newDate.getDate(); 33915 inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); 33916 inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); 33917 if ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) { 33918 this._notifyChange( inst ); 33919 } 33920 this._adjustInstDate( inst ); 33921 if ( inst.input ) { 33922 inst.input.val( clear ? "" : this._formatDate( inst ) ); 33923 } 33924 }, 33925 33926 /* Retrieve the date(s) directly. */ 33927 _getDate: function( inst ) { 33928 var startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === "" ) ? null : 33929 this._daylightSavingAdjust( new Date( 33930 inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 33931 return startDate; 33932 }, 33933 33934 /* Attach the onxxx handlers. These are declared statically so 33935 * they work with static code transformers like Caja. 33936 */ 33937 _attachHandlers: function( inst ) { 33938 var stepMonths = this._get( inst, "stepMonths" ), 33939 id = "#" + inst.id.replace( /\\\\/g, "\\" ); 33940 inst.dpDiv.find( "[data-handler]" ).map( function() { 33941 var handler = { 33942 prev: function() { 33943 $.datepicker._adjustDate( id, -stepMonths, "M" ); 33944 }, 33945 next: function() { 33946 $.datepicker._adjustDate( id, +stepMonths, "M" ); 33947 }, 33948 hide: function() { 33949 $.datepicker._hideDatepicker(); 33950 }, 33951 today: function() { 33952 $.datepicker._gotoToday( id ); 33953 }, 33954 selectDay: function() { 33955 $.datepicker._selectDay( id, +this.getAttribute( "data-month" ), +this.getAttribute( "data-year" ), this ); 33956 return false; 33957 }, 33958 selectMonth: function() { 33959 $.datepicker._selectMonthYear( id, this, "M" ); 33960 return false; 33961 }, 33962 selectYear: function() { 33963 $.datepicker._selectMonthYear( id, this, "Y" ); 33964 return false; 33965 } 33966 }; 33967 $( this ).on( this.getAttribute( "data-event" ), handler[ this.getAttribute( "data-handler" ) ] ); 33968 } ); 33969 }, 33970 33971 /* Generate the HTML for the current state of the date picker. */ 33972 _generateHTML: function( inst ) { 33973 var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, 33974 controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, 33975 monthNames, monthNamesShort, beforeShowDay, showOtherMonths, 33976 selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, 33977 cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, 33978 printDate, dRow, tbody, daySettings, otherMonth, unselectable, 33979 tempDate = new Date(), 33980 today = this._daylightSavingAdjust( 33981 new Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time 33982 isRTL = this._get( inst, "isRTL" ), 33983 showButtonPanel = this._get( inst, "showButtonPanel" ), 33984 hideIfNoPrevNext = this._get( inst, "hideIfNoPrevNext" ), 33985 navigationAsDateFormat = this._get( inst, "navigationAsDateFormat" ), 33986 numMonths = this._getNumberOfMonths( inst ), 33987 showCurrentAtPos = this._get( inst, "showCurrentAtPos" ), 33988 stepMonths = this._get( inst, "stepMonths" ), 33989 isMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ), 33990 currentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) : 33991 new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ), 33992 minDate = this._getMinMaxDate( inst, "min" ), 33993 maxDate = this._getMinMaxDate( inst, "max" ),
vendor: 21,259 bytes, lines 33994-34508
33994 drawMonth = inst.drawMonth - showCurrentAtPos, 33995 drawYear = inst.drawYear; 33996 33997 if ( drawMonth < 0 ) { 33998 drawMonth += 12; 33999 drawYear--; 34000 } 34001 if ( maxDate ) { 34002 maxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(), 34003 maxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) ); 34004 maxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw ); 34005 while ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) { 34006 drawMonth--; 34007 if ( drawMonth < 0 ) { 34008 drawMonth = 11; 34009 drawYear--; 34010 } 34011 } 34012 } 34013 inst.drawMonth = drawMonth; 34014 inst.drawYear = drawYear; 34015 34016 prevText = this._get( inst, "prevText" ); 34017 prevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText, 34018 this._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ), 34019 this._getFormatConfig( inst ) ) ); 34020 34021 if ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ) { 34022 prev = $( "<a>" ) 34023 .attr( { 34024 "class": "ui-datepicker-prev ui-corner-all", 34025 "data-handler": "prev", 34026 "data-event": "click", 34027 title: prevText 34028 } ) 34029 .append( 34030 $( "<span>" ) 34031 .addClass( "ui-icon ui-icon-circle-triangle-" + 34032 ( isRTL ? "e" : "w" ) ) 34033 .text( prevText ) 34034 )[ 0 ].outerHTML; 34035 } else if ( hideIfNoPrevNext ) { 34036 prev = ""; 34037 } else { 34038 prev = $( "<a>" ) 34039 .attr( { 34040 "class": "ui-datepicker-prev ui-corner-all ui-state-disabled", 34041 title: prevText 34042 } ) 34043 .append( 34044 $( "<span>" ) 34045 .addClass( "ui-icon ui-icon-circle-triangle-" + 34046 ( isRTL ? "e" : "w" ) ) 34047 .text( prevText ) 34048 )[ 0 ].outerHTML; 34049 } 34050 34051 nextText = this._get( inst, "nextText" ); 34052 nextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText, 34053 this._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ), 34054 this._getFormatConfig( inst ) ) ); 34055 34056 if ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ) { 34057 next = $( "<a>" ) 34058 .attr( { 34059 "class": "ui-datepicker-next ui-corner-all", 34060 "data-handler": "next", 34061 "data-event": "click", 34062 title: nextText 34063 } ) 34064 .append( 34065 $( "<span>" ) 34066 .addClass( "ui-icon ui-icon-circle-triangle-" + 34067 ( isRTL ? "w" : "e" ) ) 34068 .text( nextText ) 34069 )[ 0 ].outerHTML; 34070 } else if ( hideIfNoPrevNext ) { 34071 next = ""; 34072 } else { 34073 next = $( "<a>" ) 34074 .attr( { 34075 "class": "ui-datepicker-next ui-corner-all ui-state-disabled", 34076 title: nextText 34077 } ) 34078 .append( 34079 $( "<span>" ) 34080 .attr( "class", "ui-icon ui-icon-circle-triangle-" + 34081 ( isRTL ? "w" : "e" ) ) 34082 .text( nextText ) 34083 )[ 0 ].outerHTML; 34084 } 34085 34086 currentText = this._get( inst, "currentText" ); 34087 gotoDate = ( this._get( inst, "gotoCurrent" ) && inst.currentDay ? currentDate : today ); 34088 currentText = ( !navigationAsDateFormat ? currentText : 34089 this.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) ); 34090 34091 controls = ""; 34092 if ( !inst.inline ) { 34093 controls = $( "<button>" ) 34094 .attr( { 34095 type: "button", 34096 "class": "ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all", 34097 "data-handler": "hide", 34098 "data-event": "click" 34099 } ) 34100 .text( this._get( inst, "closeText" ) )[ 0 ].outerHTML; 34101 } 34102 34103 buttonPanel = ""; 34104 if ( showButtonPanel ) { 34105 buttonPanel = $( "<div class='ui-datepicker-buttonpane ui-widget-content'>" ) 34106 .append( isRTL ? controls : "" ) 34107 .append( this._isInRange( inst, gotoDate ) ? 34108 $( "<button>" ) 34109 .attr( { 34110 type: "button", 34111 "class": "ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all", 34112 "data-handler": "today", 34113 "data-event": "click" 34114 } ) 34115 .text( currentText ) : 34116 "" ) 34117 .append( isRTL ? "" : controls )[ 0 ].outerHTML; 34118 } 34119 34120 firstDay = parseInt( this._get( inst, "firstDay" ), 10 ); 34121 firstDay = ( isNaN( firstDay ) ? 0 : firstDay ); 34122 34123 showWeek = this._get( inst, "showWeek" ); 34124 dayNames = this._get( inst, "dayNames" ); 34125 dayNamesMin = this._get( inst, "dayNamesMin" ); 34126 monthNames = this._get( inst, "monthNames" ); 34127 monthNamesShort = this._get( inst, "monthNamesShort" ); 34128 beforeShowDay = this._get( inst, "beforeShowDay" ); 34129 showOtherMonths = this._get( inst, "showOtherMonths" ); 34130 selectOtherMonths = this._get( inst, "selectOtherMonths" ); 34131 defaultDate = this._getDefaultDate( inst ); 34132 html = ""; 34133 34134 for ( row = 0; row < numMonths[ 0 ]; row++ ) { 34135 group = ""; 34136 this.maxRows = 4; 34137 for ( col = 0; col < numMonths[ 1 ]; col++ ) { 34138 selectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) ); 34139 cornerClass = " ui-corner-all"; 34140 calender = ""; 34141 if ( isMultiMonth ) { 34142 calender += "<div class='ui-datepicker-group"; 34143 if ( numMonths[ 1 ] > 1 ) { 34144 switch ( col ) { 34145 case 0: calender += " ui-datepicker-group-first"; 34146 cornerClass = " ui-corner-" + ( isRTL ? "right" : "left" ); break; 34147 case numMonths[ 1 ] - 1: calender += " ui-datepicker-group-last"; 34148 cornerClass = " ui-corner-" + ( isRTL ? "left" : "right" ); break; 34149 default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break; 34150 } 34151 } 34152 calender += "'>"; 34153 } 34154 calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" + 34155 ( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : "" ) + 34156 ( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : "" ) + 34157 this._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate, 34158 row > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers 34159 "</div><table class='ui-datepicker-calendar'><thead>" + 34160 "<tr>"; 34161 thead = ( showWeek ? "<th class='ui-datepicker-week-col'>" + this._get( inst, "weekHeader" ) + "</th>" : "" ); 34162 for ( dow = 0; dow < 7; dow++ ) { // days of the week 34163 day = ( dow + firstDay ) % 7; 34164 thead += "<th scope='col'" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "" ) + ">" + 34165 "<span title='" + dayNames[ day ] + "'>" + dayNamesMin[ day ] + "</span></th>"; 34166 } 34167 calender += thead + "</tr></thead><tbody>"; 34168 daysInMonth = this._getDaysInMonth( drawYear, drawMonth ); 34169 if ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) { 34170 inst.selectedDay = Math.min( inst.selectedDay, daysInMonth ); 34171 } 34172 leadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7; 34173 curRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate 34174 numRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043) 34175 this.maxRows = numRows; 34176 printDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) ); 34177 for ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows 34178 calender += "<tr>"; 34179 tbody = ( !showWeek ? "" : "<td class='ui-datepicker-week-col'>" + 34180 this._get( inst, "calculateWeek" )( printDate ) + "</td>" ); 34181 for ( dow = 0; dow < 7; dow++ ) { // create date picker days 34182 daySettings = ( beforeShowDay ? 34183 beforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, "" ] ); 34184 otherMonth = ( printDate.getMonth() !== drawMonth ); 34185 unselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] || 34186 ( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate ); 34187 tbody += "<td class='" + 34188 ( ( dow + firstDay + 6 ) % 7 >= 5 ? " ui-datepicker-week-end" : "" ) + // highlight weekends 34189 ( otherMonth ? " ui-datepicker-other-month" : "" ) + // highlight days from other months 34190 ( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key 34191 ( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ? 34192 34193 // or defaultDate is current printedDate and defaultDate is selectedDate 34194 " " + this._dayOverClass : "" ) + // highlight selected day 34195 ( unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "" ) + // highlight unselectable days 34196 ( otherMonth && !showOtherMonths ? "" : " " + daySettings[ 1 ] + // highlight custom dates 34197 ( printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "" ) + // highlight selected day 34198 ( printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "" ) ) + "'" + // highlight today (if different) 34199 ( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? " title='" + daySettings[ 2 ].replace( /'/g, "'" ) + "'" : "" ) + // cell title 34200 ( unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'" ) + ">" + // actions 34201 ( otherMonth && !showOtherMonths ? " " : // display for other months 34202 ( unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" + 34203 ( printDate.getTime() === today.getTime() ? " ui-state-highlight" : "" ) + 34204 ( printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "" ) + // highlight selected day 34205 ( otherMonth ? " ui-priority-secondary" : "" ) + // distinguish dates from other months 34206 "' href='#' aria-current='" + ( printDate.getTime() === currentDate.getTime() ? "true" : "false" ) + // mark date as selected for screen reader 34207 "' data-date='" + printDate.getDate() + // store date as data 34208 "'>" + printDate.getDate() + "</a>" ) ) + "</td>"; // display selectable date 34209 printDate.setDate( printDate.getDate() + 1 ); 34210 printDate = this._daylightSavingAdjust( printDate ); 34211 } 34212 calender += tbody + "</tr>"; 34213 } 34214 drawMonth++; 34215 if ( drawMonth > 11 ) { 34216 drawMonth = 0; 34217 drawYear++; 34218 } 34219 calender += "</tbody></table>" + ( isMultiMonth ? "</div>" + 34220 ( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? "<div class='ui-datepicker-row-break'></div>" : "" ) : "" ); 34221 group += calender; 34222 } 34223 html += group; 34224 } 34225 html += buttonPanel; 34226 inst._keyEvent = false; 34227 return html; 34228 }, 34229 34230 /* Generate the month and year header. */ 34231 _generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate, 34232 secondary, monthNames, monthNamesShort ) { 34233 34234 var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, 34235 changeMonth = this._get( inst, "changeMonth" ), 34236 changeYear = this._get( inst, "changeYear" ), 34237 showMonthAfterYear = this._get( inst, "showMonthAfterYear" ), 34238 selectMonthLabel = this._get( inst, "selectMonthLabel" ), 34239 selectYearLabel = this._get( inst, "selectYearLabel" ), 34240 html = "<div class='ui-datepicker-title'>", 34241 monthHtml = ""; 34242 34243 // Month selection 34244 if ( secondary || !changeMonth ) { 34245 monthHtml += "<span class='ui-datepicker-month'>" + monthNames[ drawMonth ] + "</span>"; 34246 } else { 34247 inMinYear = ( minDate && minDate.getFullYear() === drawYear ); 34248 inMaxYear = ( maxDate && maxDate.getFullYear() === drawYear ); 34249 monthHtml += "<select class='ui-datepicker-month' aria-label='" + selectMonthLabel + "' data-handler='selectMonth' data-event='change'>"; 34250 for ( month = 0; month < 12; month++ ) { 34251 if ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) { 34252 monthHtml += "<option value='" + month + "'" + 34253 ( month === drawMonth ? " selected='selected'" : "" ) + 34254 ">" + monthNamesShort[ month ] + "</option>"; 34255 } 34256 } 34257 monthHtml += "</select>"; 34258 } 34259 34260 if ( !showMonthAfterYear ) { 34261 html += monthHtml + ( secondary || !( changeMonth && changeYear ) ? " " : "" ); 34262 } 34263 34264 // Year selection 34265 if ( !inst.yearshtml ) { 34266 inst.yearshtml = ""; 34267 if ( secondary || !changeYear ) { 34268 html += "<span class='ui-datepicker-year'>" + drawYear + "</span>"; 34269 } else { 34270 34271 // determine range of years to display 34272 years = this._get( inst, "yearRange" ).split( ":" ); 34273 thisYear = new Date().getFullYear(); 34274 determineYear = function( value ) { 34275 var year = ( value.match( /c[+\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) : 34276 ( value.match( /[+\-].*/ ) ? thisYear + parseInt( value, 10 ) : 34277 parseInt( value, 10 ) ) ); 34278 return ( isNaN( year ) ? thisYear : year ); 34279 }; 34280 year = determineYear( years[ 0 ] ); 34281 endYear = Math.max( year, determineYear( years[ 1 ] || "" ) ); 34282 year = ( minDate ? Math.max( year, minDate.getFullYear() ) : year ); 34283 endYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear ); 34284 inst.yearshtml += "<select class='ui-datepicker-year' aria-label='" + selectYearLabel + "' data-handler='selectYear' data-event='change'>"; 34285 for ( ; year <= endYear; year++ ) { 34286 inst.yearshtml += "<option value='" + year + "'" + 34287 ( year === drawYear ? " selected='selected'" : "" ) + 34288 ">" + year + "</option>"; 34289 } 34290 inst.yearshtml += "</select>"; 34291 34292 html += inst.yearshtml; 34293 inst.yearshtml = null; 34294 } 34295 } 34296 34297 html += this._get( inst, "yearSuffix" ); 34298 if ( showMonthAfterYear ) { 34299 html += ( secondary || !( changeMonth && changeYear ) ? " " : "" ) + monthHtml; 34300 } 34301 html += "</div>"; // Close datepicker_header 34302 return html; 34303 }, 34304 34305 /* Adjust one of the date sub-fields. */ 34306 _adjustInstDate: function( inst, offset, period ) { 34307 var year = inst.selectedYear + ( period === "Y" ? offset : 0 ), 34308 month = inst.selectedMonth + ( period === "M" ? offset : 0 ), 34309 day = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === "D" ? offset : 0 ), 34310 date = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) ); 34311 34312 inst.selectedDay = date.getDate(); 34313 inst.drawMonth = inst.selectedMonth = date.getMonth(); 34314 inst.drawYear = inst.selectedYear = date.getFullYear(); 34315 if ( period === "M" || period === "Y" ) { 34316 this._notifyChange( inst ); 34317 } 34318 }, 34319 34320 /* Ensure a date is within any min/max bounds. */ 34321 _restrictMinMax: function( inst, date ) { 34322 var minDate = this._getMinMaxDate( inst, "min" ), 34323 maxDate = this._getMinMaxDate( inst, "max" ), 34324 newDate = ( minDate && date < minDate ? minDate : date ); 34325 return ( maxDate && newDate > maxDate ? maxDate : newDate ); 34326 }, 34327 34328 /* Notify change of month/year. */ 34329 _notifyChange: function( inst ) { 34330 var onChange = this._get( inst, "onChangeMonthYear" ); 34331 if ( onChange ) { 34332 onChange.apply( ( inst.input ? inst.input[ 0 ] : null ), 34333 [ inst.selectedYear, inst.selectedMonth + 1, inst ] ); 34334 } 34335 }, 34336 34337 /* Determine the number of months to show. */ 34338 _getNumberOfMonths: function( inst ) { 34339 var numMonths = this._get( inst, "numberOfMonths" ); 34340 return ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === "number" ? [ 1, numMonths ] : numMonths ) ); 34341 }, 34342 34343 /* Determine the current maximum date - ensure no time components are set. */ 34344 _getMinMaxDate: function( inst, minMax ) { 34345 return this._determineDate( inst, this._get( inst, minMax + "Date" ), null ); 34346 }, 34347 34348 /* Find the number of days in a given month. */ 34349 _getDaysInMonth: function( year, month ) { 34350 return 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate(); 34351 }, 34352 34353 /* Find the day of the week of the first of a month. */ 34354 _getFirstDayOfMonth: function( year, month ) { 34355 return new Date( year, month, 1 ).getDay(); 34356 }, 34357 34358 /* Determines if we should allow a "next/prev" month display change. */ 34359 _canAdjustMonth: function( inst, offset, curYear, curMonth ) { 34360 var numMonths = this._getNumberOfMonths( inst ), 34361 date = this._daylightSavingAdjust( new Date( curYear, 34362 curMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) ); 34363 34364 if ( offset < 0 ) { 34365 date.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) ); 34366 } 34367 return this._isInRange( inst, date ); 34368 }, 34369 34370 /* Is the given date in the accepted range? */ 34371 _isInRange: function( inst, date ) { 34372 var yearSplit, currentYear, 34373 minDate = this._getMinMaxDate( inst, "min" ), 34374 maxDate = this._getMinMaxDate( inst, "max" ), 34375 minYear = null, 34376 maxYear = null, 34377 years = this._get( inst, "yearRange" ); 34378 if ( years ) { 34379 yearSplit = years.split( ":" ); 34380 currentYear = new Date().getFullYear(); 34381 minYear = parseInt( yearSplit[ 0 ], 10 ); 34382 maxYear = parseInt( yearSplit[ 1 ], 10 ); 34383 if ( yearSplit[ 0 ].match( /[+\-].*/ ) ) { 34384 minYear += currentYear; 34385 } 34386 if ( yearSplit[ 1 ].match( /[+\-].*/ ) ) { 34387 maxYear += currentYear; 34388 } 34389 } 34390 34391 return ( ( !minDate || date.getTime() >= minDate.getTime() ) && 34392 ( !maxDate || date.getTime() <= maxDate.getTime() ) && 34393 ( !minYear || date.getFullYear() >= minYear ) && 34394 ( !maxYear || date.getFullYear() <= maxYear ) ); 34395 }, 34396 34397 /* Provide the configuration settings for formatting/parsing. */ 34398 _getFormatConfig: function( inst ) { 34399 var shortYearCutoff = this._get( inst, "shortYearCutoff" ); 34400 shortYearCutoff = ( typeof shortYearCutoff !== "string" ? shortYearCutoff : 34401 new Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) ); 34402 return { shortYearCutoff: shortYearCutoff, 34403 dayNamesShort: this._get( inst, "dayNamesShort" ), dayNames: this._get( inst, "dayNames" ), 34404 monthNamesShort: this._get( inst, "monthNamesShort" ), monthNames: this._get( inst, "monthNames" ) }; 34405 }, 34406 34407 /* Format the given date for display. */ 34408 _formatDate: function( inst, day, month, year ) { 34409 if ( !day ) { 34410 inst.currentDay = inst.selectedDay; 34411 inst.currentMonth = inst.selectedMonth; 34412 inst.currentYear = inst.selectedYear; 34413 } 34414 var date = ( day ? ( typeof day === "object" ? day : 34415 this._daylightSavingAdjust( new Date( year, month, day ) ) ) : 34416 this._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ); 34417 return this.formatDate( this._get( inst, "dateFormat" ), date, this._getFormatConfig( inst ) ); 34418 } 34419} ); 34420 34421/* 34422 * Bind hover events for datepicker elements. 34423 * Done via delegate so the binding only occurs once in the lifetime of the parent div. 34424 * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker. 34425 */ 34426function datepicker_bindHover( dpDiv ) { 34427 var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; 34428 return dpDiv.on( "mouseout", selector, function() { 34429 $( this ).removeClass( "ui-state-hover" ); 34430 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 34431 $( this ).removeClass( "ui-datepicker-prev-hover" ); 34432 } 34433 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 34434 $( this ).removeClass( "ui-datepicker-next-hover" ); 34435 } 34436 } ) 34437 .on( "mouseover", selector, datepicker_handleMouseover ); 34438} 34439 34440function datepicker_handleMouseover() { 34441 if ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) { 34442 $( this ).parents( ".ui-datepicker-calendar" ).find( "a" ).removeClass( "ui-state-hover" ); 34443 $( this ).addClass( "ui-state-hover" ); 34444 if ( this.className.indexOf( "ui-datepicker-prev" ) !== -1 ) { 34445 $( this ).addClass( "ui-datepicker-prev-hover" ); 34446 } 34447 if ( this.className.indexOf( "ui-datepicker-next" ) !== -1 ) { 34448 $( this ).addClass( "ui-datepicker-next-hover" ); 34449 } 34450 } 34451} 34452 34453/* jQuery extend now ignores nulls! */ 34454function datepicker_extendRemove( target, props ) { 34455 $.extend( target, props ); 34456 for ( var name in props ) { 34457 if ( props[ name ] == null ) { 34458 target[ name ] = props[ name ]; 34459 } 34460 } 34461 return target; 34462} 34463 34464/* Invoke the datepicker functionality. 34465 @param options string - a command, optionally followed by additional parameters or 34466 Object - settings for attaching new datepicker functionality 34467 @return jQuery object */ 34468$.fn.datepicker = function( options ) { 34469 34470 /* Verify an empty collection wasn't passed - Fixes #6976 */ 34471 if ( !this.length ) { 34472 return this; 34473 } 34474 34475 /* Initialise the date picker. */ 34476 if ( !$.datepicker.initialized ) { 34477 $( document ).on( "mousedown", $.datepicker._checkExternalClick ); 34478 $.datepicker.initialized = true; 34479 } 34480 34481 /* Append datepicker main container to body if not exist. */ 34482 if ( $( "#" + $.datepicker._mainDivId ).length === 0 ) { 34483 $( "body" ).append( $.datepicker.dpDiv ); 34484 } 34485 34486 var otherArgs = Array.prototype.slice.call( arguments, 1 ); 34487 if ( typeof options === "string" && ( options === "isDisabled" || options === "getDate" || options === "widget" ) ) { 34488 return $.datepicker[ "_" + options + "Datepicker" ]. 34489 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 34490 } 34491 if ( options === "option" && arguments.length === 2 && typeof arguments[ 1 ] === "string" ) { 34492 return $.datepicker[ "_" + options + "Datepicker" ]. 34493 apply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) ); 34494 } 34495 return this.each( function() { 34496 if ( typeof options === "string" ) { 34497 $.datepicker[ "_" + options + "Datepicker" ] 34498 .apply( $.datepicker, [ this ].concat( otherArgs ) ); 34499 } else { 34500 $.datepicker._attachDatepicker( this, options ); 34501 } 34502 } ); 34503}; 34504 34505$.datepicker = new Datepicker(); // singleton instance 34506$.datepicker.initialized = false; 34507$.datepicker.uuid = new Date().getTime(); 34508$.datepicker.version = "1.13.
vendor: 7,558 bytes, lines 34508-34797
345082"; 34509 34510var widgetsDatepicker = $.datepicker; 34511 34512 34513 34514// This file is deprecated 34515var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); 34516 34517/*! 34518 * jQuery UI Mouse 1.13.2 34519 * http://jqueryui.com 34520 * 34521 * Copyright jQuery Foundation and other contributors 34522 * Released under the MIT license. 34523 * http://jquery.org/license 34524 */ 34525 34526//>>label: Mouse 34527//>>group: Widgets 34528//>>description: Abstracts mouse-based interactions to assist in creating certain widgets. 34529//>>docs: http://api.jqueryui.com/mouse/ 34530 34531 34532var mouseHandled = false; 34533$( document ).on( "mouseup", function() { 34534 mouseHandled = false; 34535} ); 34536 34537var widgetsMouse = $.widget( "ui.mouse", { 34538 version: "1.13.2", 34539 options: { 34540 cancel: "input, textarea, button, select, option", 34541 distance: 1, 34542 delay: 0 34543 }, 34544 _mouseInit: function() { 34545 var that = this; 34546 34547 this.element 34548 .on( "mousedown." + this.widgetName, function( event ) { 34549 return that._mouseDown( event ); 34550 } ) 34551 .on( "click." + this.widgetName, function( event ) { 34552 if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) { 34553 $.removeData( event.target, that.widgetName + ".preventClickEvent" ); 34554 event.stopImmediatePropagation(); 34555 return false; 34556 } 34557 } ); 34558 34559 this.started = false; 34560 }, 34561 34562 // TODO: make sure destroying one instance of mouse doesn't mess with 34563 // other instances of mouse 34564 _mouseDestroy: function() { 34565 this.element.off( "." + this.widgetName ); 34566 if ( this._mouseMoveDelegate ) { 34567 this.document 34568 .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) 34569 .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); 34570 } 34571 }, 34572 34573 _mouseDown: function( event ) { 34574 34575 // don't let more than one widget handle mouseStart 34576 if ( mouseHandled ) { 34577 return; 34578 } 34579 34580 this._mouseMoved = false; 34581 34582 // We may have missed mouseup (out of window) 34583 if ( this._mouseStarted ) { 34584 this._mouseUp( event ); 34585 } 34586 34587 this._mouseDownEvent = event; 34588 34589 var that = this, 34590 btnIsLeft = ( event.which === 1 ), 34591 34592 // event.target.nodeName works around a bug in IE 8 with 34593 // disabled inputs (#7620) 34594 elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ? 34595 $( event.target ).closest( this.options.cancel ).length : false ); 34596 if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) { 34597 return true; 34598 } 34599 34600 this.mouseDelayMet = !this.options.delay; 34601 if ( !this.mouseDelayMet ) { 34602 this._mouseDelayTimer = setTimeout( function() { 34603 that.mouseDelayMet = true; 34604 }, this.options.delay ); 34605 } 34606 34607 if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { 34608 this._mouseStarted = ( this._mouseStart( event ) !== false ); 34609 if ( !this._mouseStarted ) { 34610 event.preventDefault(); 34611 return true; 34612 } 34613 } 34614 34615 // Click event may never have fired (Gecko & Opera) 34616 if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) { 34617 $.removeData( event.target, this.widgetName + ".preventClickEvent" ); 34618 } 34619 34620 // These delegates are required to keep context 34621 this._mouseMoveDelegate = function( event ) { 34622 return that._mouseMove( event ); 34623 }; 34624 this._mouseUpDelegate = function( event ) { 34625 return that._mouseUp( event ); 34626 }; 34627 34628 this.document 34629 .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) 34630 .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); 34631 34632 event.preventDefault(); 34633 34634 mouseHandled = true; 34635 return true; 34636 }, 34637 34638 _mouseMove: function( event ) { 34639 34640 // Only check for mouseups outside the document if you've moved inside the document 34641 // at least once. This prevents the firing of mouseup in the case of IE<9, which will 34642 // fire a mousemove event if content is placed under the cursor. See #7778 34643 // Support: IE <9 34644 if ( this._mouseMoved ) { 34645 34646 // IE mouseup check - mouseup happened when mouse was out of window 34647 if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && 34648 !event.button ) { 34649 return this._mouseUp( event ); 34650 34651 // Iframe mouseup check - mouseup occurred in another document 34652 } else if ( !event.which ) { 34653 34654 // Support: Safari <=8 - 9 34655 // Safari sets which to 0 if you press any of the following keys 34656 // during a drag (#14461) 34657 if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || 34658 event.originalEvent.metaKey || event.originalEvent.shiftKey ) { 34659 this.ignoreMissingWhich = true; 34660 } else if ( !this.ignoreMissingWhich ) { 34661 return this._mouseUp( event ); 34662 } 34663 } 34664 } 34665 34666 if ( event.which || event.button ) { 34667 this._mouseMoved = true; 34668 } 34669 34670 if ( this._mouseStarted ) { 34671 this._mouseDrag( event ); 34672 return event.preventDefault(); 34673 } 34674 34675 if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) { 34676 this._mouseStarted = 34677 ( this._mouseStart( this._mouseDownEvent, event ) !== false ); 34678 if ( this._mouseStarted ) { 34679 this._mouseDrag( event ); 34680 } else { 34681 this._mouseUp( event ); 34682 } 34683 } 34684 34685 return !this._mouseStarted; 34686 }, 34687 34688 _mouseUp: function( event ) { 34689 this.document 34690 .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) 34691 .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); 34692 34693 if ( this._mouseStarted ) { 34694 this._mouseStarted = false; 34695 34696 if ( event.target === this._mouseDownEvent.target ) { 34697 $.data( event.target, this.widgetName + ".preventClickEvent", true ); 34698 } 34699 34700 this._mouseStop( event ); 34701 } 34702 34703 if ( this._mouseDelayTimer ) { 34704 clearTimeout( this._mouseDelayTimer ); 34705 delete this._mouseDelayTimer; 34706 } 34707 34708 this.ignoreMissingWhich = false; 34709 mouseHandled = false; 34710 event.preventDefault(); 34711 }, 34712 34713 _mouseDistanceMet: function( event ) { 34714 return ( Math.max( 34715 Math.abs( this._mouseDownEvent.pageX - event.pageX ), 34716 Math.abs( this._mouseDownEvent.pageY - event.pageY ) 34717 ) >= this.options.distance 34718 ); 34719 }, 34720 34721 _mouseDelayMet: function( /* event */ ) { 34722 return this.mouseDelayMet; 34723 }, 34724 34725 // These are placeholder methods, to be overriden by extending plugin 34726 _mouseStart: function( /* event */ ) {}, 34727 _mouseDrag: function( /* event */ ) {}, 34728 _mouseStop: function( /* event */ ) {}, 34729 _mouseCapture: function( /* event */ ) { 34730 return true; 34731 } 34732} ); 34733 34734 34735 34736// $.ui.plugin is deprecated. Use $.widget() extensions instead. 34737var plugin = $.ui.plugin = { 34738 add: function( module, option, set ) { 34739 var i, 34740 proto = $.ui[ module ].prototype; 34741 for ( i in set ) { 34742 proto.plugins[ i ] = proto.plugins[ i ] || []; 34743 proto.plugins[ i ].push( [ option, set[ i ] ] ); 34744 } 34745 }, 34746 call: function( instance, name, args, allowDisconnected ) { 34747 var i, 34748 set = instance.plugins[ name ]; 34749 34750 if ( !set ) { 34751 return; 34752 } 34753 34754 if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || 34755 instance.element[ 0 ].parentNode.nodeType === 11 ) ) { 34756 return; 34757 } 34758 34759 for ( i = 0; i < set.length; i++ ) { 34760 if ( instance.options[ set[ i ][ 0 ] ] ) { 34761 set[ i ][ 1 ].apply( instance.element, args ); 34762 } 34763 } 34764 } 34765}; 34766 34767 34768 34769var safeBlur = $.ui.safeBlur = function( element ) { 34770 34771 // Support: IE9 - 10 only 34772 // If the <body> is blurred, IE will switch windows, see #9420 34773 if ( element && element.nodeName.toLowerCase() !== "body" ) { 34774 $( element ).trigger( "blur" ); 34775 } 34776}; 34777 34778 34779/*! 34780 * jQuery UI Draggable 1.13.2 34781 * http://jqueryui.com 34782 * 34783 * Copyright jQuery Foundation and other contributors 34784 * Released under the MIT license. 34785 * http://jquery.org/license 34786 */ 34787 34788//>>label: Draggable 34789//>>group: Interactions 34790//>>description: Enables dragging functionality for any element. 34791//>>docs: http://api.jqueryui.com/draggable/ 34792//>>demos: http://jqueryui.com/draggable/ 34793//>>css.structure: ../../themes/base/draggable.css 34794 34795 34796$.widget( "ui.draggable", $.ui.mouse, { 34797 version: "1.13.2
vendor: 8,684 bytes, lines 34797-35143
34797", 34798 widgetEventPrefix: "drag", 34799 options: { 34800 addClasses: true, 34801 appendTo: "parent", 34802 axis: false, 34803 connectToSortable: false, 34804 containment: false, 34805 cursor: "auto", 34806 cursorAt: false, 34807 grid: false, 34808 handle: false, 34809 helper: "original", 34810 iframeFix: false, 34811 opacity: false, 34812 refreshPositions: false, 34813 revert: false, 34814 revertDuration: 500, 34815 scope: "default", 34816 scroll: true, 34817 scrollSensitivity: 20, 34818 scrollSpeed: 20, 34819 snap: false, 34820 snapMode: "both", 34821 snapTolerance: 20, 34822 stack: false, 34823 zIndex: false, 34824 34825 // Callbacks 34826 drag: null, 34827 start: null, 34828 stop: null 34829 }, 34830 _create: function() { 34831 34832 if ( this.options.helper === "original" ) { 34833 this._setPositionRelative(); 34834 } 34835 if ( this.options.addClasses ) { 34836 this._addClass( "ui-draggable" ); 34837 } 34838 this._setHandleClassName(); 34839 34840 this._mouseInit(); 34841 }, 34842 34843 _setOption: function( key, value ) { 34844 this._super( key, value ); 34845 if ( key === "handle" ) { 34846 this._removeHandleClassName(); 34847 this._setHandleClassName(); 34848 } 34849 }, 34850 34851 _destroy: function() { 34852 if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { 34853 this.destroyOnClear = true; 34854 return; 34855 } 34856 this._removeHandleClassName(); 34857 this._mouseDestroy(); 34858 }, 34859 34860 _mouseCapture: function( event ) { 34861 var o = this.options; 34862 34863 // Among others, prevent a drag on a resizable-handle 34864 if ( this.helper || o.disabled || 34865 $( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) { 34866 return false; 34867 } 34868 34869 //Quit if we're not on a valid handle 34870 this.handle = this._getHandle( event ); 34871 if ( !this.handle ) { 34872 return false; 34873 } 34874 34875 this._blurActiveElement( event ); 34876 34877 this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix ); 34878 34879 return true; 34880 34881 }, 34882 34883 _blockFrames: function( selector ) { 34884 this.iframeBlocks = this.document.find( selector ).map( function() { 34885 var iframe = $( this ); 34886 34887 return $( "<div>" ) 34888 .css( "position", "absolute" ) 34889 .appendTo( iframe.parent() ) 34890 .outerWidth( iframe.outerWidth() ) 34891 .outerHeight( iframe.outerHeight() ) 34892 .offset( iframe.offset() )[ 0 ]; 34893 } ); 34894 }, 34895 34896 _unblockFrames: function() { 34897 if ( this.iframeBlocks ) { 34898 this.iframeBlocks.remove(); 34899 delete this.iframeBlocks; 34900 } 34901 }, 34902 34903 _blurActiveElement: function( event ) { 34904 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ), 34905 target = $( event.target ); 34906 34907 // Don't blur if the event occurred on an element that is within 34908 // the currently focused element 34909 // See #10527, #12472 34910 if ( target.closest( activeElement ).length ) { 34911 return; 34912 } 34913 34914 // Blur any element that currently has focus, see #4261 34915 $.ui.safeBlur( activeElement ); 34916 }, 34917 34918 _mouseStart: function( event ) { 34919 34920 var o = this.options; 34921 34922 //Create and append the visible helper 34923 this.helper = this._createHelper( event ); 34924 34925 this._addClass( this.helper, "ui-draggable-dragging" ); 34926 34927 //Cache the helper size 34928 this._cacheHelperProportions(); 34929 34930 //If ddmanager is used for droppables, set the global draggable 34931 if ( $.ui.ddmanager ) { 34932 $.ui.ddmanager.current = this; 34933 } 34934 34935 /* 34936 * - Position generation - 34937 * This block generates everything position related - it's the core of draggables. 34938 */ 34939 34940 //Cache the margins of the original element 34941 this._cacheMargins(); 34942 34943 //Store the helper's css position 34944 this.cssPosition = this.helper.css( "position" ); 34945 this.scrollParent = this.helper.scrollParent( true ); 34946 this.offsetParent = this.helper.offsetParent(); 34947 this.hasFixedAncestor = this.helper.parents().filter( function() { 34948 return $( this ).css( "position" ) === "fixed"; 34949 } ).length > 0; 34950 34951 //The element's absolute position on the page minus margins 34952 this.positionAbs = this.element.offset(); 34953 this._refreshOffsets( event ); 34954 34955 //Generate the original position 34956 this.originalPosition = this.position = this._generatePosition( event, false ); 34957 this.originalPageX = event.pageX; 34958 this.originalPageY = event.pageY; 34959 34960 //Adjust the mouse offset relative to the helper if "cursorAt" is supplied 34961 if ( o.cursorAt ) { 34962 this._adjustOffsetFromHelper( o.cursorAt ); 34963 } 34964 34965 //Set a containment if given in the options 34966 this._setContainment(); 34967 34968 //Trigger event + callbacks 34969 if ( this._trigger( "start", event ) === false ) { 34970 this._clear(); 34971 return false; 34972 } 34973 34974 //Recache the helper size 34975 this._cacheHelperProportions(); 34976 34977 //Prepare the droppable offsets 34978 if ( $.ui.ddmanager && !o.dropBehaviour ) { 34979 $.ui.ddmanager.prepareOffsets( this, event ); 34980 } 34981 34982 // Execute the drag once - this causes the helper not to be visible before getting its 34983 // correct position 34984 this._mouseDrag( event, true ); 34985 34986 // If the ddmanager is used for droppables, inform the manager that dragging has started 34987 // (see #5003) 34988 if ( $.ui.ddmanager ) { 34989 $.ui.ddmanager.dragStart( this, event ); 34990 } 34991 34992 return true; 34993 }, 34994 34995 _refreshOffsets: function( event ) { 34996 this.offset = { 34997 top: this.positionAbs.top - this.margins.top, 34998 left: this.positionAbs.left - this.margins.left, 34999 scroll: false, 35000 parent: this._getParentOffset(), 35001 relative: this._getRelativeOffset() 35002 }; 35003 35004 this.offset.click = { 35005 left: event.pageX - this.offset.left, 35006 top: event.pageY - this.offset.top 35007 }; 35008 }, 35009 35010 _mouseDrag: function( event, noPropagation ) { 35011 35012 // reset any necessary cached properties (see #5009) 35013 if ( this.hasFixedAncestor ) { 35014 this.offset.parent = this._getParentOffset(); 35015 } 35016 35017 //Compute the helpers position 35018 this.position = this._generatePosition( event, true ); 35019 this.positionAbs = this._convertPositionTo( "absolute" ); 35020 35021 //Call plugins and callbacks and use the resulting position if something is returned 35022 if ( !noPropagation ) { 35023 var ui = this._uiHash(); 35024 if ( this._trigger( "drag", event, ui ) === false ) { 35025 this._mouseUp( new $.Event( "mouseup", event ) ); 35026 return false; 35027 } 35028 this.position = ui.position; 35029 } 35030 35031 this.helper[ 0 ].style.left = this.position.left + "px"; 35032 this.helper[ 0 ].style.top = this.position.top + "px"; 35033 35034 if ( $.ui.ddmanager ) { 35035 $.ui.ddmanager.drag( this, event ); 35036 } 35037 35038 return false; 35039 }, 35040 35041 _mouseStop: function( event ) { 35042 35043 //If we are using droppables, inform the manager about the drop 35044 var that = this, 35045 dropped = false; 35046 if ( $.ui.ddmanager && !this.options.dropBehaviour ) { 35047 dropped = $.ui.ddmanager.drop( this, event ); 35048 } 35049 35050 //if a drop comes from outside (a sortable) 35051 if ( this.dropped ) { 35052 dropped = this.dropped; 35053 this.dropped = false; 35054 } 35055 35056 if ( ( this.options.revert === "invalid" && !dropped ) || 35057 ( this.options.revert === "valid" && dropped ) || 35058 this.options.revert === true || ( typeof this.options.revert === "function" && 35059 this.options.revert.call( this.element, dropped ) ) 35060 ) { 35061 $( this.helper ).animate( 35062 this.originalPosition, 35063 parseInt( this.options.revertDuration, 10 ), 35064 function() { 35065 if ( that._trigger( "stop", event ) !== false ) { 35066 that._clear(); 35067 } 35068 } 35069 ); 35070 } else { 35071 if ( this._trigger( "stop", event ) !== false ) { 35072 this._clear(); 35073 } 35074 } 35075 35076 return false; 35077 }, 35078 35079 _mouseUp: function( event ) { 35080 this._unblockFrames(); 35081 35082 // If the ddmanager is used for droppables, inform the manager that dragging has stopped 35083 // (see #5003) 35084 if ( $.ui.ddmanager ) { 35085 $.ui.ddmanager.dragStop( this, event ); 35086 } 35087 35088 // Only need to focus if the event occurred on the draggable itself, see #10527 35089 if ( this.handleElement.is( event.target ) ) { 35090 35091 // The interaction is over; whether or not the click resulted in a drag, 35092 // focus the element 35093 this.element.trigger( "focus" ); 35094 } 35095 35096 return $.ui.mouse.prototype._mouseUp.call( this, event ); 35097 }, 35098 35099 cancel: function() { 35100 35101 if ( this.helper.is( ".ui-draggable-dragging" ) ) { 35102 this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) ); 35103 } else { 35104 this._clear(); 35105 } 35106 35107 return this; 35108 35109 }, 35110 35111 _getHandle: function( event ) { 35112 return this.options.handle ? 35113 !!$( event.target ).closest( this.element.find( this.options.handle ) ).length : 35114 true; 35115 }, 35116 35117 _setHandleClassName: function() { 35118 this.handleElement = this.options.handle ? 35119 this.element.find( this.options.handle ) : this.element; 35120 this._addClass( this.handleElement, "ui-draggable-handle" ); 35121 }, 35122 35123 _removeHandleClassName: function() { 35124 this._removeClass( this.handleElement, "ui-draggable-handle" ); 35125 }, 35126 35127 _createHelper: function( event ) { 35128 35129 var o = this.options, 35130 helperIsFunction = typeof o.helper === "function", 35131 helper = helperIsFunction ? 35132 $( o.helper.apply( this.element[ 0 ], [ event ] ) ) : 35133 ( o.helper === "clone" ? 35134 this.element.clone().removeAttr( "id" ) : 35135 this.element ); 35136 35137 if ( !helper.parents( "body" ).length ) { 35138 helper.appendTo( ( o.appendTo === "parent" ? 35139 this.element[ 0 ].parentNode : 35140 o.appendTo ) ); 35141 } 35142 35143 //
35143Http
vendor: 25,991 bytes, lines 35143-36015
35143://bugs.jqueryui.com/ticket/9446 35144 // a helper function can return the original element 35145 // which wouldn't have been set to relative in _create 35146 if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) { 35147 this._setPositionRelative(); 35148 } 35149 35150 if ( helper[ 0 ] !== this.element[ 0 ] && 35151 !( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) { 35152 helper.css( "position", "absolute" ); 35153 } 35154 35155 return helper; 35156 35157 }, 35158 35159 _setPositionRelative: function() { 35160 if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) { 35161 this.element[ 0 ].style.position = "relative"; 35162 } 35163 }, 35164 35165 _adjustOffsetFromHelper: function( obj ) { 35166 if ( typeof obj === "string" ) { 35167 obj = obj.split( " " ); 35168 } 35169 if ( Array.isArray( obj ) ) { 35170 obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 }; 35171 } 35172 if ( "left" in obj ) { 35173 this.offset.click.left = obj.left + this.margins.left; 35174 } 35175 if ( "right" in obj ) { 35176 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; 35177 } 35178 if ( "top" in obj ) { 35179 this.offset.click.top = obj.top + this.margins.top; 35180 } 35181 if ( "bottom" in obj ) { 35182 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; 35183 } 35184 }, 35185 35186 _isRootNode: function( element ) { 35187 return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ]; 35188 }, 35189 35190 _getParentOffset: function() { 35191 35192 //Get the offsetParent and cache its position 35193 var po = this.offsetParent.offset(), 35194 document = this.document[ 0 ]; 35195 35196 // This is a special case where we need to modify a offset calculated on start, since the 35197 // following happened: 35198 // 1. The position of the helper is absolute, so it's position is calculated based on the 35199 // next positioned parent 35200 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't 35201 // the document, which means that the scroll is included in the initial calculation of the 35202 // offset of the parent, and never recalculated upon drag 35203 if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document && 35204 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) { 35205 po.left += this.scrollParent.scrollLeft(); 35206 po.top += this.scrollParent.scrollTop(); 35207 } 35208 35209 if ( this._isRootNode( this.offsetParent[ 0 ] ) ) { 35210 po = { top: 0, left: 0 }; 35211 } 35212 35213 return { 35214 top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ), 35215 left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 ) 35216 }; 35217 35218 }, 35219 35220 _getRelativeOffset: function() { 35221 if ( this.cssPosition !== "relative" ) { 35222 return { top: 0, left: 0 }; 35223 } 35224 35225 var p = this.element.position(), 35226 scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ); 35227 35228 return { 35229 top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) + 35230 ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ), 35231 left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) + 35232 ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 ) 35233 }; 35234 35235 }, 35236 35237 _cacheMargins: function() { 35238 this.margins = { 35239 left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ), 35240 top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ), 35241 right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ), 35242 bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 ) 35243 }; 35244 }, 35245 35246 _cacheHelperProportions: function() { 35247 this.helperProportions = { 35248 width: this.helper.outerWidth(), 35249 height: this.helper.outerHeight() 35250 }; 35251 }, 35252 35253 _setContainment: function() { 35254 35255 var isUserScrollable, c, ce, 35256 o = this.options, 35257 document = this.document[ 0 ]; 35258 35259 this.relativeContainer = null; 35260 35261 if ( !o.containment ) { 35262 this.containment = null; 35263 return; 35264 } 35265 35266 if ( o.containment === "window" ) { 35267 this.containment = [ 35268 $( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left, 35269 $( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top, 35270 $( window ).scrollLeft() + $( window ).width() - 35271 this.helperProportions.width - this.margins.left, 35272 $( window ).scrollTop() + 35273 ( $( window ).height() || document.body.parentNode.scrollHeight ) - 35274 this.helperProportions.height - this.margins.top 35275 ]; 35276 return; 35277 } 35278 35279 if ( o.containment === "document" ) { 35280 this.containment = [ 35281 0, 35282 0, 35283 $( document ).width() - this.helperProportions.width - this.margins.left, 35284 ( $( document ).height() || document.body.parentNode.scrollHeight ) - 35285 this.helperProportions.height - this.margins.top 35286 ]; 35287 return; 35288 } 35289 35290 if ( o.containment.constructor === Array ) { 35291 this.containment = o.containment; 35292 return; 35293 } 35294 35295 if ( o.containment === "parent" ) { 35296 o.containment = this.helper[ 0 ].parentNode; 35297 } 35298 35299 c = $( o.containment ); 35300 ce = c[ 0 ]; 35301 35302 if ( !ce ) { 35303 return; 35304 } 35305 35306 isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) ); 35307 35308 this.containment = [ 35309 ( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + 35310 ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ), 35311 ( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + 35312 ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ), 35313 ( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) - 35314 ( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) - 35315 ( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) - 35316 this.helperProportions.width - 35317 this.margins.left - 35318 this.margins.right, 35319 ( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - 35320 ( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) - 35321 ( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) - 35322 this.helperProportions.height - 35323 this.margins.top - 35324 this.margins.bottom 35325 ]; 35326 this.relativeContainer = c; 35327 }, 35328 35329 _convertPositionTo: function( d, pos ) { 35330 35331 if ( !pos ) { 35332 pos = this.position; 35333 } 35334 35335 var mod = d === "absolute" ? 1 : -1, 35336 scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ); 35337 35338 return { 35339 top: ( 35340 35341 // The absolute mouse position 35342 pos.top + 35343 35344 // Only for relative positioned nodes: Relative offset from element to offset parent 35345 this.offset.relative.top * mod + 35346 35347 // The offsetParent's offset without borders (offset + border) 35348 this.offset.parent.top * mod - 35349 ( ( this.cssPosition === "fixed" ? 35350 -this.offset.scroll.top : 35351 ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod ) 35352 ), 35353 left: ( 35354 35355 // The absolute mouse position 35356 pos.left + 35357 35358 // Only for relative positioned nodes: Relative offset from element to offset parent 35359 this.offset.relative.left * mod + 35360 35361 // The offsetParent's offset without borders (offset + border) 35362 this.offset.parent.left * mod - 35363 ( ( this.cssPosition === "fixed" ? 35364 -this.offset.scroll.left : 35365 ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod ) 35366 ) 35367 }; 35368 35369 }, 35370 35371 _generatePosition: function( event, constrainPosition ) { 35372 35373 var containment, co, top, left, 35374 o = this.options, 35375 scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ), 35376 pageX = event.pageX, 35377 pageY = event.pageY; 35378 35379 // Cache the scroll 35380 if ( !scrollIsRootNode || !this.offset.scroll ) { 35381 this.offset.scroll = { 35382 top: this.scrollParent.scrollTop(), 35383 left: this.scrollParent.scrollLeft() 35384 }; 35385 } 35386 35387 /* 35388 * - Position constraining - 35389 * Constrain the position to a mix of grid, containment. 35390 */ 35391 35392 // If we are not dragging yet, we won't check for options 35393 if ( constrainPosition ) { 35394 if ( this.containment ) { 35395 if ( this.relativeContainer ) { 35396 co = this.relativeContainer.offset(); 35397 containment = [ 35398 this.containment[ 0 ] + co.left, 35399 this.containment[ 1 ] + co.top, 35400 this.containment[ 2 ] + co.left, 35401 this.containment[ 3 ] + co.top 35402 ]; 35403 } else { 35404 containment = this.containment; 35405 } 35406 35407 if ( event.pageX - this.offset.click.left < containment[ 0 ] ) { 35408 pageX = containment[ 0 ] + this.offset.click.left; 35409 } 35410 if ( event.pageY - this.offset.click.top < containment[ 1 ] ) { 35411 pageY = containment[ 1 ] + this.offset.click.top; 35412 } 35413 if ( event.pageX - this.offset.click.left > containment[ 2 ] ) { 35414 pageX = containment[ 2 ] + this.offset.click.left; 35415 } 35416 if ( event.pageY - this.offset.click.top > containment[ 3 ] ) { 35417 pageY = containment[ 3 ] + this.offset.click.top; 35418 } 35419 } 35420 35421 if ( o.grid ) { 35422 35423 //Check for grid elements set to 0 to prevent divide by 0 error causing invalid 35424 // argument errors in IE (see ticket #6950) 35425 top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY - 35426 this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY; 35427 pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] || 35428 top - this.offset.click.top > containment[ 3 ] ) ? 35429 top : 35430 ( ( top - this.offset.click.top >= containment[ 1 ] ) ? 35431 top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top; 35432 35433 left = o.grid[ 0 ] ? this.originalPageX + 35434 Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] : 35435 this.originalPageX; 35436 pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] || 35437 left - this.offset.click.left > containment[ 2 ] ) ? 35438 left : 35439 ( ( left - this.offset.click.left >= containment[ 0 ] ) ? 35440 left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left; 35441 } 35442 35443 if ( o.axis === "y" ) { 35444 pageX = this.originalPageX; 35445 } 35446 35447 if ( o.axis === "x" ) { 35448 pageY = this.originalPageY; 35449 } 35450 } 35451 35452 return { 35453 top: ( 35454 35455 // The absolute mouse position 35456 pageY - 35457 35458 // Click offset (relative to the element) 35459 this.offset.click.top - 35460 35461 // Only for relative positioned nodes: Relative offset from element to offset parent 35462 this.offset.relative.top - 35463 35464 // The offsetParent's offset without borders (offset + border) 35465 this.offset.parent.top + 35466 ( this.cssPosition === "fixed" ? 35467 -this.offset.scroll.top : 35468 ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) 35469 ), 35470 left: ( 35471 35472 // The absolute mouse position 35473 pageX - 35474 35475 // Click offset (relative to the element) 35476 this.offset.click.left - 35477 35478 // Only for relative positioned nodes: Relative offset from element to offset parent 35479 this.offset.relative.left - 35480 35481 // The offsetParent's offset without borders (offset + border) 35482 this.offset.parent.left + 35483 ( this.cssPosition === "fixed" ? 35484 -this.offset.scroll.left : 35485 ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) 35486 ) 35487 }; 35488 35489 }, 35490 35491 _clear: function() { 35492 this._removeClass( this.helper, "ui-draggable-dragging" ); 35493 if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) { 35494 this.helper.remove(); 35495 } 35496 this.helper = null; 35497 this.cancelHelperRemoval = false; 35498 if ( this.destroyOnClear ) { 35499 this.destroy(); 35500 } 35501 }, 35502 35503 // From now on bulk stuff - mainly helpers 35504 35505 _trigger: function( type, event, ui ) { 35506 ui = ui || this._uiHash(); 35507 $.ui.plugin.call( this, type, [ event, ui, this ], true ); 35508 35509 // Absolute position and offset (see #6884 ) have to be recalculated after plugins 35510 if ( /^(drag|start|stop)/.test( type ) ) { 35511 this.positionAbs = this._convertPositionTo( "absolute" ); 35512 ui.offset = this.positionAbs; 35513 } 35514 return $.Widget.prototype._trigger.call( this, type, event, ui ); 35515 }, 35516 35517 plugins: {}, 35518 35519 _uiHash: function() { 35520 return { 35521 helper: this.helper, 35522 position: this.position, 35523 originalPosition: this.originalPosition, 35524 offset: this.positionAbs 35525 }; 35526 } 35527 35528} ); 35529 35530$.ui.plugin.add( "draggable", "connectToSortable", { 35531 start: function( event, ui, draggable ) { 35532 var uiSortable = $.extend( {}, ui, { 35533 item: draggable.element 35534 } ); 35535 35536 draggable.sortables = []; 35537 $( draggable.options.connectToSortable ).each( function() { 35538 var sortable = $( this ).sortable( "instance" ); 35539 35540 if ( sortable && !sortable.options.disabled ) { 35541 draggable.sortables.push( sortable ); 35542 35543 // RefreshPositions is called at drag start to refresh the containerCache 35544 // which is used in drag. This ensures it's initialized and synchronized 35545 // with any changes that might have happened on the page since initialization. 35546 sortable.refreshPositions(); 35547 sortable._trigger( "activate", event, uiSortable ); 35548 } 35549 } ); 35550 }, 35551 stop: function( event, ui, draggable ) { 35552 var uiSortable = $.extend( {}, ui, { 35553 item: draggable.element 35554 } ); 35555 35556 draggable.cancelHelperRemoval = false; 35557 35558 $.each( draggable.sortables, function() { 35559 var sortable = this; 35560 35561 if ( sortable.isOver ) { 35562 sortable.isOver = 0; 35563 35564 // Allow this sortable to handle removing the helper 35565 draggable.cancelHelperRemoval = true; 35566 sortable.cancelHelperRemoval = false; 35567 35568 // Use _storedCSS To restore properties in the sortable, 35569 // as this also handles revert (#9675) since the draggable 35570 // may have modified them in unexpected ways (#8809) 35571 sortable._storedCSS = { 35572 position: sortable.placeholder.css( "position" ), 35573 top: sortable.placeholder.css( "top" ), 35574 left: sortable.placeholder.css( "left" ) 35575 }; 35576 35577 sortable._mouseStop( event ); 35578 35579 // Once drag has ended, the sortable should return to using 35580 // its original helper, not the shared helper from draggable 35581 sortable.options.helper = sortable.options._helper; 35582 } else { 35583 35584 // Prevent this Sortable from removing the helper. 35585 // However, don't set the draggable to remove the helper 35586 // either as another connected Sortable may yet handle the removal. 35587 sortable.cancelHelperRemoval = true; 35588 35589 sortable._trigger( "deactivate", event, uiSortable ); 35590 } 35591 } ); 35592 }, 35593 drag: function( event, ui, draggable ) { 35594 $.each( draggable.sortables, function() { 35595 var innermostIntersecting = false, 35596 sortable = this; 35597 35598 // Copy over variables that sortable's _intersectsWith uses 35599 sortable.positionAbs = draggable.positionAbs; 35600 sortable.helperProportions = draggable.helperProportions; 35601 sortable.offset.click = draggable.offset.click; 35602 35603 if ( sortable._intersectsWith( sortable.containerCache ) ) { 35604 innermostIntersecting = true; 35605 35606 $.each( draggable.sortables, function() { 35607 35608 // Copy over variables that sortable's _intersectsWith uses 35609 this.positionAbs = draggable.positionAbs; 35610 this.helperProportions = draggable.helperProportions; 35611 this.offset.click = draggable.offset.click; 35612 35613 if ( this !== sortable && 35614 this._intersectsWith( this.containerCache ) && 35615 $.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) { 35616 innermostIntersecting = false; 35617 } 35618 35619 return innermostIntersecting; 35620 } ); 35621 } 35622 35623 if ( innermostIntersecting ) { 35624 35625 // If it intersects, we use a little isOver variable and set it once, 35626 // so that the move-in stuff gets fired only once. 35627 if ( !sortable.isOver ) { 35628 sortable.isOver = 1; 35629 35630 // Store draggable's parent in case we need to reappend to it later. 35631 draggable._parent = ui.helper.parent(); 35632 35633 sortable.currentItem = ui.helper 35634 .appendTo( sortable.element ) 35635 .data( "ui-sortable-item", true ); 35636 35637 // Store helper option to later restore it 35638 sortable.options._helper = sortable.options.helper; 35639 35640 sortable.options.helper = function() { 35641 return ui.helper[ 0 ]; 35642 }; 35643 35644 // Fire the start events of the sortable with our passed browser event, 35645 // and our own helper (so it doesn't create a new one) 35646 event.target = sortable.currentItem[ 0 ]; 35647 sortable._mouseCapture( event, true ); 35648 sortable._mouseStart( event, true, true ); 35649 35650 // Because the browser event is way off the new appended portlet, 35651 // modify necessary variables to reflect the changes 35652 sortable.offset.click.top = draggable.offset.click.top; 35653 sortable.offset.click.left = draggable.offset.click.left; 35654 sortable.offset.parent.left -= draggable.offset.parent.left - 35655 sortable.offset.parent.left; 35656 sortable.offset.parent.top -= draggable.offset.parent.top - 35657 sortable.offset.parent.top; 35658 35659 draggable._trigger( "toSortable", event ); 35660 35661 // Inform draggable that the helper is in a valid drop zone, 35662 // used solely in the revert option to handle "valid/invalid". 35663 draggable.dropped = sortable.element; 35664 35665 // Need to refreshPositions of all sortables in the case that 35666 // adding to one sortable changes the location of the other sortables (#9675) 35667 $.each( draggable.sortables, function() { 35668 this.refreshPositions(); 35669 } ); 35670 35671 // Hack so receive/update callbacks work (mostly) 35672 draggable.currentItem = draggable.element; 35673 sortable.fromOutside = draggable; 35674 } 35675 35676 if ( sortable.currentItem ) { 35677 sortable._mouseDrag( event ); 35678 35679 // Copy the sortable's position because the draggable's can potentially reflect 35680 // a relative position, while sortable is always absolute, which the dragged 35681 // element has now become. (#8809) 35682 ui.position = sortable.position; 35683 } 35684 } else { 35685 35686 // If it doesn't intersect with the sortable, and it intersected before, 35687 // we fake the drag stop of the sortable, but make sure it doesn't remove 35688 // the helper by using cancelHelperRemoval. 35689 if ( sortable.isOver ) { 35690 35691 sortable.isOver = 0; 35692 sortable.cancelHelperRemoval = true; 35693 35694 // Calling sortable's mouseStop would trigger a revert, 35695 // so revert must be temporarily false until after mouseStop is called. 35696 sortable.options._revert = sortable.options.revert; 35697 sortable.options.revert = false; 35698 35699 sortable._trigger( "out", event, sortable._uiHash( sortable ) ); 35700 sortable._mouseStop( event, true ); 35701 35702 // Restore sortable behaviors that were modfied 35703 // when the draggable entered the sortable area (#9481) 35704 sortable.options.revert = sortable.options._revert; 35705 sortable.options.helper = sortable.options._helper; 35706 35707 if ( sortable.placeholder ) { 35708 sortable.placeholder.remove(); 35709 } 35710 35711 // Restore and recalculate the draggable's offset considering the sortable 35712 // may have modified them in unexpected ways. (#8809, #10669) 35713 ui.helper.appendTo( draggable._parent ); 35714 draggable._refreshOffsets( event ); 35715 ui.position = draggable._generatePosition( event, true ); 35716 35717 draggable._trigger( "fromSortable", event ); 35718 35719 // Inform draggable that the helper is no longer in a valid drop zone 35720 draggable.dropped = false; 35721 35722 // Need to refreshPositions of all sortables just in case removing 35723 // from one sortable changes the location of other sortables (#9675) 35724 $.each( draggable.sortables, function() { 35725 this.refreshPositions(); 35726 } ); 35727 } 35728 } 35729 } ); 35730 } 35731} ); 35732 35733$.ui.plugin.add( "draggable", "cursor", { 35734 start: function( event, ui, instance ) { 35735 var t = $( "body" ), 35736 o = instance.options; 35737 35738 if ( t.css( "cursor" ) ) { 35739 o._cursor = t.css( "cursor" ); 35740 } 35741 t.css( "cursor", o.cursor ); 35742 }, 35743 stop: function( event, ui, instance ) { 35744 var o = instance.options; 35745 if ( o._cursor ) { 35746 $( "body" ).css( "cursor", o._cursor ); 35747 } 35748 } 35749} ); 35750 35751$.ui.plugin.add( "draggable", "opacity", { 35752 start: function( event, ui, instance ) { 35753 var t = $( ui.helper ), 35754 o = instance.options; 35755 if ( t.css( "opacity" ) ) { 35756 o._opacity = t.css( "opacity" ); 35757 } 35758 t.css( "opacity", o.opacity ); 35759 }, 35760 stop: function( event, ui, instance ) { 35761 var o = instance.options; 35762 if ( o._opacity ) { 35763 $( ui.helper ).css( "opacity", o._opacity ); 35764 } 35765 } 35766} ); 35767 35768$.ui.plugin.add( "draggable", "scroll", { 35769 start: function( event, ui, i ) { 35770 if ( !i.scrollParentNotHidden ) { 35771 i.scrollParentNotHidden = i.helper.scrollParent( false ); 35772 } 35773 35774 if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && 35775 i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) { 35776 i.overflowOffset = i.scrollParentNotHidden.offset(); 35777 } 35778 }, 35779 drag: function( event, ui, i ) { 35780 35781 var o = i.options, 35782 scrolled = false, 35783 scrollParent = i.scrollParentNotHidden[ 0 ], 35784 document = i.document[ 0 ]; 35785 35786 if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) { 35787 if ( !o.axis || o.axis !== "x" ) { 35788 if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < 35789 o.scrollSensitivity ) { 35790 scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed; 35791 } else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) { 35792 scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed; 35793 } 35794 } 35795 35796 if ( !o.axis || o.axis !== "y" ) { 35797 if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < 35798 o.scrollSensitivity ) { 35799 scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed; 35800 } else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) { 35801 scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed; 35802 } 35803 } 35804 35805 } else { 35806 35807 if ( !o.axis || o.axis !== "x" ) { 35808 if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) { 35809 scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed ); 35810 } else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) < 35811 o.scrollSensitivity ) { 35812 scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed ); 35813 } 35814 } 35815 35816 if ( !o.axis || o.axis !== "y" ) { 35817 if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) { 35818 scrolled = $( document ).scrollLeft( 35819 $( document ).scrollLeft() - o.scrollSpeed 35820 ); 35821 } else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) < 35822 o.scrollSensitivity ) { 35823 scrolled = $( document ).scrollLeft( 35824 $( document ).scrollLeft() + o.scrollSpeed 35825 ); 35826 } 35827 } 35828 35829 } 35830 35831 if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) { 35832 $.ui.ddmanager.prepareOffsets( i, event ); 35833 } 35834 35835 } 35836} ); 35837 35838$.ui.plugin.add( "draggable", "snap", { 35839 start: function( event, ui, i ) { 35840 35841 var o = i.options; 35842 35843 i.snapElements = []; 35844 35845 $( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap ) 35846 .each( function() { 35847 var $t = $( this ), 35848 $o = $t.offset(); 35849 if ( this !== i.element[ 0 ] ) { 35850 i.snapElements.push( { 35851 item: this, 35852 width: $t.outerWidth(), height: $t.outerHeight(), 35853 top: $o.top, left: $o.left 35854 } ); 35855 } 35856 } ); 35857 35858 }, 35859 drag: function( event, ui, inst ) { 35860 35861 var ts, bs, ls, rs, l, r, t, b, i, first, 35862 o = inst.options, 35863 d = o.snapTolerance, 35864 x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width, 35865 y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height; 35866 35867 for ( i = inst.snapElements.length - 1; i >= 0; i-- ) { 35868 35869 l = inst.snapElements[ i ].left - inst.margins.left; 35870 r = l + inst.snapElements[ i ].width; 35871 t = inst.snapElements[ i ].top - inst.margins.top; 35872 b = t + inst.snapElements[ i ].height; 35873 35874 if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || 35875 !$.contains( inst.snapElements[ i ].item.ownerDocument, 35876 inst.snapElements[ i ].item ) ) { 35877 if ( inst.snapElements[ i ].snapping ) { 35878 if ( inst.options.snap.release ) { 35879 inst.options.snap.release.call( 35880 inst.element, 35881 event, 35882 $.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } ) 35883 ); 35884 } 35885 } 35886 inst.snapElements[ i ].snapping = false; 35887 continue; 35888 } 35889 35890 if ( o.snapMode !== "inner" ) { 35891 ts = Math.abs( t - y2 ) <= d; 35892 bs = Math.abs( b - y1 ) <= d; 35893 ls = Math.abs( l - x2 ) <= d; 35894 rs = Math.abs( r - x1 ) <= d; 35895 if ( ts ) { 35896 ui.position.top = inst._convertPositionTo( "relative", { 35897 top: t - inst.helperProportions.height, 35898 left: 0 35899 } ).top; 35900 } 35901 if ( bs ) { 35902 ui.position.top = inst._convertPositionTo( "relative", { 35903 top: b, 35904 left: 0 35905 } ).top; 35906 } 35907 if ( ls ) { 35908 ui.position.left = inst._convertPositionTo( "relative", { 35909 top: 0, 35910 left: l - inst.helperProportions.width 35911 } ).left; 35912 } 35913 if ( rs ) { 35914 ui.position.left = inst._convertPositionTo( "relative", { 35915 top: 0, 35916 left: r 35917 } ).left; 35918 } 35919 } 35920 35921 first = ( ts || bs || ls || rs ); 35922 35923 if ( o.snapMode !== "outer" ) { 35924 ts = Math.abs( t - y1 ) <= d; 35925 bs = Math.abs( b - y2 ) <= d; 35926 ls = Math.abs( l - x1 ) <= d; 35927 rs = Math.abs( r - x2 ) <= d; 35928 if ( ts ) { 35929 ui.position.top = inst._convertPositionTo( "relative", { 35930 top: t, 35931 left: 0 35932 } ).top; 35933 } 35934 if ( bs ) { 35935 ui.position.top = inst._convertPositionTo( "relative", { 35936 top: b - inst.helperProportions.height, 35937 left: 0 35938 } ).top; 35939 } 35940 if ( ls ) { 35941 ui.position.left = inst._convertPositionTo( "relative", { 35942 top: 0, 35943 left: l 35944 } ).left; 35945 } 35946 if ( rs ) { 35947 ui.position.left = inst._convertPositionTo( "relative", { 35948 top: 0, 35949 left: r - inst.helperProportions.width 35950 } ).left; 35951 } 35952 } 35953 35954 if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) { 35955 if ( inst.options.snap.snap ) { 35956 inst.options.snap.snap.call( 35957 inst.element, 35958 event, 35959 $.extend( inst._uiHash(), { 35960 snapItem: inst.snapElements[ i ].item 35961 } ) ); 35962 } 35963 } 35964 inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first ); 35965 35966 } 35967 35968 } 35969} ); 35970 35971$.ui.plugin.add( "draggable", "stack", { 35972 start: function( event, ui, instance ) { 35973 var min, 35974 o = instance.options, 35975 group = $.makeArray( $( o.stack ) ).sort( function( a, b ) { 35976 return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) - 35977 ( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 ); 35978 } ); 35979 35980 if ( !group.length ) { 35981 return; 35982 } 35983 35984 min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0; 35985 $( group ).each( function( i ) { 35986 $( this ).css( "zIndex", min + i ); 35987 } ); 35988 this.css( "zIndex", ( min + group.length ) ); 35989 } 35990} ); 35991 35992$.ui.plugin.add( "draggable", "zIndex", { 35993 start: function( event, ui, instance ) { 35994 var t = $( ui.helper ), 35995 o = instance.options; 35996 35997 if ( t.css( "zIndex" ) ) { 35998 o._zIndex = t.css( "zIndex" ); 35999 } 36000 t.css( "zIndex", o.zIndex ); 36001 }, 36002 stop: function( event, ui, instance ) { 36003 var o = instance.options; 36004 36005 if ( o._zIndex ) { 36006 $( ui.helper ).css( "zIndex", o._zIndex ); 36007 } 36008 } 36009} ); 36010 36011var widgetsDraggable = $.ui.draggable; 36012 36013 36014/*! 36015 * jQuery UI Resizable 1.13.
360152 36016 * http://jqueryui.com 36017 * 36018 * Copyright jQuery Foundation and other contributors 36019 * Released under the MIT license. 36020 * http://jquery.org/license 36021 */ 36022 36023//>>label: Resizable 36024//>>group: Interactions 36025//>>description: Enables resize functionality for any element. 36026//>>docs: http://api.jqueryui.com/resizable/ 36027//>>demos: http://jqueryui.com/resizable/ 36028//>>css.structure: ../../themes/base/core.css 36029//>>css.structure: ../../themes/base/resizable.css 36030//>>css.theme: ../../themes/base/theme.css 36031 36032 36033$.widget( "ui.resizable", $.ui.mouse, { 36034 version: "1.13.2
vendor: 11,739 bytes, lines 36034-36527
36034", 36035 widgetEventPrefix: "resize", 36036 options: { 36037 alsoResize: false, 36038 animate: false, 36039 animateDuration: "slow", 36040 animateEasing: "swing", 36041 aspectRatio: false, 36042 autoHide: false, 36043 classes: { 36044 "ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se" 36045 }, 36046 containment: false, 36047 ghost: false, 36048 grid: false, 36049 handles: "e,s,se", 36050 helper: false, 36051 maxHeight: null, 36052 maxWidth: null, 36053 minHeight: 10, 36054 minWidth: 10, 36055 36056 // See #7960 36057 zIndex: 90, 36058 36059 // Callbacks 36060 resize: null, 36061 start: null, 36062 stop: null 36063 }, 36064 36065 _num: function( value ) { 36066 return parseFloat( value ) || 0; 36067 }, 36068 36069 _isNumber: function( value ) { 36070 return !isNaN( parseFloat( value ) ); 36071 }, 36072 36073 _hasScroll: function( el, a ) { 36074 36075 if ( $( el ).css( "overflow" ) === "hidden" ) { 36076 return false; 36077 } 36078 36079 var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop", 36080 has = false; 36081 36082 if ( el[ scroll ] > 0 ) { 36083 return true; 36084 } 36085 36086 // TODO: determine which cases actually cause this to happen 36087 // if the element doesn't have the scroll set, see if it's possible to 36088 // set the scroll 36089 try { 36090 el[ scroll ] = 1; 36091 has = ( el[ scroll ] > 0 ); 36092 el[ scroll ] = 0; 36093 } catch ( e ) { 36094 36095 // `el` might be a string, then setting `scroll` will throw 36096 // an error in strict mode; ignore it. 36097 } 36098 return has; 36099 }, 36100 36101 _create: function() { 36102 36103 var margins, 36104 o = this.options, 36105 that = this; 36106 this._addClass( "ui-resizable" ); 36107 36108 $.extend( this, { 36109 _aspectRatio: !!( o.aspectRatio ), 36110 aspectRatio: o.aspectRatio, 36111 originalElement: this.element, 36112 _proportionallyResizeElements: [], 36113 _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null 36114 } ); 36115 36116 // Wrap the element if it cannot hold child nodes 36117 if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) { 36118 36119 this.element.wrap( 36120 $( "<div class='ui-wrapper'></div>" ).css( { 36121 overflow: "hidden", 36122 position: this.element.css( "position" ), 36123 width: this.element.outerWidth(), 36124 height: this.element.outerHeight(), 36125 top: this.element.css( "top" ), 36126 left: this.element.css( "left" ) 36127 } ) 36128 ); 36129 36130 this.element = this.element.parent().data( 36131 "ui-resizable", this.element.resizable( "instance" ) 36132 ); 36133 36134 this.elementIsWrapper = true; 36135 36136 margins = { 36137 marginTop: this.originalElement.css( "marginTop" ), 36138 marginRight: this.originalElement.css( "marginRight" ), 36139 marginBottom: this.originalElement.css( "marginBottom" ), 36140 marginLeft: this.originalElement.css( "marginLeft" ) 36141 }; 36142 36143 this.element.css( margins ); 36144 this.originalElement.css( "margin", 0 ); 36145 36146 // support: Safari 36147 // Prevent Safari textarea resize 36148 this.originalResizeStyle = this.originalElement.css( "resize" ); 36149 this.originalElement.css( "resize", "none" ); 36150 36151 this._proportionallyResizeElements.push( this.originalElement.css( { 36152 position: "static", 36153 zoom: 1, 36154 display: "block" 36155 } ) ); 36156 36157 // Support: IE9 36158 // avoid IE jump (hard set the margin) 36159 this.originalElement.css( margins ); 36160 36161 this._proportionallyResize(); 36162 } 36163 36164 this._setupHandles(); 36165 36166 if ( o.autoHide ) { 36167 $( this.element ) 36168 .on( "mouseenter", function() { 36169 if ( o.disabled ) { 36170 return; 36171 } 36172 that._removeClass( "ui-resizable-autohide" ); 36173 that._handles.show(); 36174 } ) 36175 .on( "mouseleave", function() { 36176 if ( o.disabled ) { 36177 return; 36178 } 36179 if ( !that.resizing ) { 36180 that._addClass( "ui-resizable-autohide" ); 36181 that._handles.hide(); 36182 } 36183 } ); 36184 } 36185 36186 this._mouseInit(); 36187 }, 36188 36189 _destroy: function() { 36190 36191 this._mouseDestroy(); 36192 this._addedHandles.remove(); 36193 36194 var wrapper, 36195 _destroy = function( exp ) { 36196 $( exp ) 36197 .removeData( "resizable" ) 36198 .removeData( "ui-resizable" ) 36199 .off( ".resizable" ); 36200 }; 36201 36202 // TODO: Unwrap at same DOM position 36203 if ( this.elementIsWrapper ) { 36204 _destroy( this.element ); 36205 wrapper = this.element; 36206 this.originalElement.css( { 36207 position: wrapper.css( "position" ), 36208 width: wrapper.outerWidth(), 36209 height: wrapper.outerHeight(), 36210 top: wrapper.css( "top" ), 36211 left: wrapper.css( "left" ) 36212 } ).insertAfter( wrapper ); 36213 wrapper.remove(); 36214 } 36215 36216 this.originalElement.css( "resize", this.originalResizeStyle ); 36217 _destroy( this.originalElement ); 36218 36219 return this; 36220 }, 36221 36222 _setOption: function( key, value ) { 36223 this._super( key, value ); 36224 36225 switch ( key ) { 36226 case "handles": 36227 this._removeHandles(); 36228 this._setupHandles(); 36229 break; 36230 case "aspectRatio": 36231 this._aspectRatio = !!value; 36232 break; 36233 default: 36234 break; 36235 } 36236 }, 36237 36238 _setupHandles: function() { 36239 var o = this.options, handle, i, n, hname, axis, that = this; 36240 this.handles = o.handles || 36241 ( !$( ".ui-resizable-handle", this.element ).length ? 36242 "e,s,se" : { 36243 n: ".ui-resizable-n", 36244 e: ".ui-resizable-e", 36245 s: ".ui-resizable-s", 36246 w: ".ui-resizable-w", 36247 se: ".ui-resizable-se", 36248 sw: ".ui-resizable-sw", 36249 ne: ".ui-resizable-ne", 36250 nw: ".ui-resizable-nw" 36251 } ); 36252 36253 this._handles = $(); 36254 this._addedHandles = $(); 36255 if ( this.handles.constructor === String ) { 36256 36257 if ( this.handles === "all" ) { 36258 this.handles = "n,e,s,w,se,sw,ne,nw"; 36259 } 36260 36261 n = this.handles.split( "," ); 36262 this.handles = {}; 36263 36264 for ( i = 0; i < n.length; i++ ) { 36265 36266 handle = String.prototype.trim.call( n[ i ] ); 36267 hname = "ui-resizable-" + handle; 36268 axis = $( "<div>" ); 36269 this._addClass( axis, "ui-resizable-handle " + hname ); 36270 36271 axis.css( { zIndex: o.zIndex } ); 36272 36273 this.handles[ handle ] = ".ui-resizable-" + handle; 36274 if ( !this.element.children( this.handles[ handle ] ).length ) { 36275 this.element.append( axis ); 36276 this._addedHandles = this._addedHandles.add( axis ); 36277 } 36278 } 36279 36280 } 36281 36282 this._renderAxis = function( target ) { 36283 36284 var i, axis, padPos, padWrapper; 36285 36286 target = target || this.element; 36287 36288 for ( i in this.handles ) { 36289 36290 if ( this.handles[ i ].constructor === String ) { 36291 this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show(); 36292 } else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) { 36293 this.handles[ i ] = $( this.handles[ i ] ); 36294 this._on( this.handles[ i ], { "mousedown": that._mouseDown } ); 36295 } 36296 36297 if ( this.elementIsWrapper && 36298 this.originalElement[ 0 ] 36299 .nodeName 36300 .match( /^(textarea|input|select|button)$/i ) ) { 36301 axis = $( this.handles[ i ], this.element ); 36302 36303 padWrapper = /sw|ne|nw|se|n|s/.test( i ) ? 36304 axis.outerHeight() : 36305 axis.outerWidth(); 36306 36307 padPos = [ "padding", 36308 /ne|nw|n/.test( i ) ? "Top" : 36309 /se|sw|s/.test( i ) ? "Bottom" : 36310 /^e$/.test( i ) ? "Right" : "Left" ].join( "" ); 36311 36312 target.css( padPos, padWrapper ); 36313 36314 this._proportionallyResize(); 36315 } 36316 36317 this._handles = this._handles.add( this.handles[ i ] ); 36318 } 36319 }; 36320 36321 // TODO: make renderAxis a prototype function 36322 this._renderAxis( this.element ); 36323 36324 this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) ); 36325 this._handles.disableSelection(); 36326 36327 this._handles.on( "mouseover", function() { 36328 if ( !that.resizing ) { 36329 if ( this.className ) { 36330 axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i ); 36331 } 36332 that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se"; 36333 } 36334 } ); 36335 36336 if ( o.autoHide ) { 36337 this._handles.hide(); 36338 this._addClass( "ui-resizable-autohide" ); 36339 } 36340 }, 36341 36342 _removeHandles: function() { 36343 this._addedHandles.remove(); 36344 }, 36345 36346 _mouseCapture: function( event ) { 36347 var i, handle, 36348 capture = false; 36349 36350 for ( i in this.handles ) { 36351 handle = $( this.handles[ i ] )[ 0 ]; 36352 if ( handle === event.target || $.contains( handle, event.target ) ) { 36353 capture = true; 36354 } 36355 } 36356 36357 return !this.options.disabled && capture; 36358 }, 36359 36360 _mouseStart: function( event ) { 36361 36362 var curleft, curtop, cursor, 36363 o = this.options, 36364 el = this.element; 36365 36366 this.resizing = true; 36367 36368 this._renderProxy(); 36369 36370 curleft = this._num( this.helper.css( "left" ) ); 36371 curtop = this._num( this.helper.css( "top" ) ); 36372 36373 if ( o.containment ) { 36374 curleft += $( o.containment ).scrollLeft() || 0; 36375 curtop += $( o.containment ).scrollTop() || 0; 36376 } 36377 36378 this.offset = this.helper.offset(); 36379 this.position = { left: curleft, top: curtop }; 36380 36381 this.size = this._helper ? { 36382 width: this.helper.width(), 36383 height: this.helper.height() 36384 } : { 36385 width: el.width(), 36386 height: el.height() 36387 }; 36388 36389 this.originalSize = this._helper ? { 36390 width: el.outerWidth(), 36391 height: el.outerHeight() 36392 } : { 36393 width: el.width(), 36394 height: el.height() 36395 }; 36396 36397 this.sizeDiff = { 36398 width: el.outerWidth() - el.width(), 36399 height: el.outerHeight() - el.height() 36400 }; 36401 36402 this.originalPosition = { left: curleft, top: curtop }; 36403 this.originalMousePosition = { left: event.pageX, top: event.pageY }; 36404 36405 this.aspectRatio = ( typeof o.aspectRatio === "number" ) ? 36406 o.aspectRatio : 36407 ( ( this.originalSize.width / this.originalSize.height ) || 1 ); 36408 36409 cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" ); 36410 $( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor ); 36411 36412 this._addClass( "ui-resizable-resizing" ); 36413 this._propagate( "start", event ); 36414 return true; 36415 }, 36416 36417 _mouseDrag: function( event ) { 36418 36419 var data, props, 36420 smp = this.originalMousePosition, 36421 a = this.axis, 36422 dx = ( event.pageX - smp.left ) || 0, 36423 dy = ( event.pageY - smp.top ) || 0, 36424 trigger = this._change[ a ]; 36425 36426 this._updatePrevProperties(); 36427 36428 if ( !trigger ) { 36429 return false; 36430 } 36431 36432 data = trigger.apply( this, [ event, dx, dy ] ); 36433 36434 this._updateVirtualBoundaries( event.shiftKey ); 36435 if ( this._aspectRatio || event.shiftKey ) { 36436 data = this._updateRatio( data, event ); 36437 } 36438 36439 data = this._respectSize( data, event ); 36440 36441 this._updateCache( data ); 36442 36443 this._propagate( "resize", event ); 36444 36445 props = this._applyChanges(); 36446 36447 if ( !this._helper && this._proportionallyResizeElements.length ) { 36448 this._proportionallyResize(); 36449 } 36450 36451 if ( !$.isEmptyObject( props ) ) { 36452 this._updatePrevProperties(); 36453 this._trigger( "resize", event, this.ui() ); 36454 this._applyChanges(); 36455 } 36456 36457 return false; 36458 }, 36459 36460 _mouseStop: function( event ) { 36461 36462 this.resizing = false; 36463 var pr, ista, soffseth, soffsetw, s, left, top, 36464 o = this.options, that = this; 36465 36466 if ( this._helper ) { 36467 36468 pr = this._proportionallyResizeElements; 36469 ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ); 36470 soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height; 36471 soffsetw = ista ? 0 : that.sizeDiff.width; 36472 36473 s = { 36474 width: ( that.helper.width() - soffsetw ), 36475 height: ( that.helper.height() - soffseth ) 36476 }; 36477 left = ( parseFloat( that.element.css( "left" ) ) + 36478 ( that.position.left - that.originalPosition.left ) ) || null; 36479 top = ( parseFloat( that.element.css( "top" ) ) + 36480 ( that.position.top - that.originalPosition.top ) ) || null; 36481 36482 if ( !o.animate ) { 36483 this.element.css( $.extend( s, { top: top, left: left } ) ); 36484 } 36485 36486 that.helper.height( that.size.height ); 36487 that.helper.width( that.size.width ); 36488 36489 if ( this._helper && !o.animate ) { 36490 this._proportionallyResize(); 36491 } 36492 } 36493 36494 $( "body" ).css( "cursor", "auto" ); 36495 36496 this._removeClass( "ui-resizable-resizing" ); 36497 36498 this._propagate( "stop", event ); 36499 36500 if ( this._helper ) { 36501 this.helper.remove(); 36502 } 36503 36504 return false; 36505 36506 }, 36507 36508 _updatePrevProperties: function() { 36509 this.prevPosition = { 36510 top: this.position.top, 36511 left: this.position.left 36512 }; 36513 this.prevSize = { 36514 width: this.size.width, 36515 height: this.size.height 36516 }; 36517 }, 36518 36519 _applyChanges: function() { 36520 var props = {}; 36521 36522 if ( this.position.top !== this.prevPosition.top ) { 36523 props.top = this.position.top + "px"; 36524 } 36525 if ( this.position.left !== this.prevPosition.left ) { 36526 props.left = this.position.left + "px"; 36527 }
vendor: 15,404 bytes, lines 36528-37120
36528 if ( this.size.width !== this.prevSize.width ) { 36529 props.width = this.size.width + "px"; 36530 } 36531 if ( this.size.height !== this.prevSize.height ) { 36532 props.height = this.size.height + "px"; 36533 } 36534 36535 this.helper.css( props ); 36536 36537 return props; 36538 }, 36539 36540 _updateVirtualBoundaries: function( forceAspectRatio ) { 36541 var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b, 36542 o = this.options; 36543 36544 b = { 36545 minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0, 36546 maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity, 36547 minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0, 36548 maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity 36549 }; 36550 36551 if ( this._aspectRatio || forceAspectRatio ) { 36552 pMinWidth = b.minHeight * this.aspectRatio; 36553 pMinHeight = b.minWidth / this.aspectRatio; 36554 pMaxWidth = b.maxHeight * this.aspectRatio; 36555 pMaxHeight = b.maxWidth / this.aspectRatio; 36556 36557 if ( pMinWidth > b.minWidth ) { 36558 b.minWidth = pMinWidth; 36559 } 36560 if ( pMinHeight > b.minHeight ) { 36561 b.minHeight = pMinHeight; 36562 } 36563 if ( pMaxWidth < b.maxWidth ) { 36564 b.maxWidth = pMaxWidth; 36565 } 36566 if ( pMaxHeight < b.maxHeight ) { 36567 b.maxHeight = pMaxHeight; 36568 } 36569 } 36570 this._vBoundaries = b; 36571 }, 36572 36573 _updateCache: function( data ) { 36574 this.offset = this.helper.offset(); 36575 if ( this._isNumber( data.left ) ) { 36576 this.position.left = data.left; 36577 } 36578 if ( this._isNumber( data.top ) ) { 36579 this.position.top = data.top; 36580 } 36581 if ( this._isNumber( data.height ) ) { 36582 this.size.height = data.height; 36583 } 36584 if ( this._isNumber( data.width ) ) { 36585 this.size.width = data.width; 36586 } 36587 }, 36588 36589 _updateRatio: function( data ) { 36590 36591 var cpos = this.position, 36592 csize = this.size, 36593 a = this.axis; 36594 36595 if ( this._isNumber( data.height ) ) { 36596 data.width = ( data.height * this.aspectRatio ); 36597 } else if ( this._isNumber( data.width ) ) { 36598 data.height = ( data.width / this.aspectRatio ); 36599 } 36600 36601 if ( a === "sw" ) { 36602 data.left = cpos.left + ( csize.width - data.width ); 36603 data.top = null; 36604 } 36605 if ( a === "nw" ) { 36606 data.top = cpos.top + ( csize.height - data.height ); 36607 data.left = cpos.left + ( csize.width - data.width ); 36608 } 36609 36610 return data; 36611 }, 36612 36613 _respectSize: function( data ) { 36614 36615 var o = this._vBoundaries, 36616 a = this.axis, 36617 ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ), 36618 ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ), 36619 isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ), 36620 isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ), 36621 dw = this.originalPosition.left + this.originalSize.width, 36622 dh = this.originalPosition.top + this.originalSize.height, 36623 cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a ); 36624 if ( isminw ) { 36625 data.width = o.minWidth; 36626 } 36627 if ( isminh ) { 36628 data.height = o.minHeight; 36629 } 36630 if ( ismaxw ) { 36631 data.width = o.maxWidth; 36632 } 36633 if ( ismaxh ) { 36634 data.height = o.maxHeight; 36635 } 36636 36637 if ( isminw && cw ) { 36638 data.left = dw - o.minWidth; 36639 } 36640 if ( ismaxw && cw ) { 36641 data.left = dw - o.maxWidth; 36642 } 36643 if ( isminh && ch ) { 36644 data.top = dh - o.minHeight; 36645 } 36646 if ( ismaxh && ch ) { 36647 data.top = dh - o.maxHeight; 36648 } 36649 36650 // Fixing jump error on top/left - bug #2330 36651 if ( !data.width && !data.height && !data.left && data.top ) { 36652 data.top = null; 36653 } else if ( !data.width && !data.height && !data.top && data.left ) { 36654 data.left = null; 36655 } 36656 36657 return data; 36658 }, 36659 36660 _getPaddingPlusBorderDimensions: function( element ) { 36661 var i = 0, 36662 widths = [], 36663 borders = [ 36664 element.css( "borderTopWidth" ), 36665 element.css( "borderRightWidth" ), 36666 element.css( "borderBottomWidth" ), 36667 element.css( "borderLeftWidth" ) 36668 ], 36669 paddings = [ 36670 element.css( "paddingTop" ), 36671 element.css( "paddingRight" ), 36672 element.css( "paddingBottom" ), 36673 element.css( "paddingLeft" ) 36674 ]; 36675 36676 for ( ; i < 4; i++ ) { 36677 widths[ i ] = ( parseFloat( borders[ i ] ) || 0 ); 36678 widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 ); 36679 } 36680 36681 return { 36682 height: widths[ 0 ] + widths[ 2 ], 36683 width: widths[ 1 ] + widths[ 3 ] 36684 }; 36685 }, 36686 36687 _proportionallyResize: function() { 36688 36689 if ( !this._proportionallyResizeElements.length ) { 36690 return; 36691 } 36692 36693 var prel, 36694 i = 0, 36695 element = this.helper || this.element; 36696 36697 for ( ; i < this._proportionallyResizeElements.length; i++ ) { 36698 36699 prel = this._proportionallyResizeElements[ i ]; 36700 36701 // TODO: Seems like a bug to cache this.outerDimensions 36702 // considering that we are in a loop. 36703 if ( !this.outerDimensions ) { 36704 this.outerDimensions = this._getPaddingPlusBorderDimensions( prel ); 36705 } 36706 36707 prel.css( { 36708 height: ( element.height() - this.outerDimensions.height ) || 0, 36709 width: ( element.width() - this.outerDimensions.width ) || 0 36710 } ); 36711 36712 } 36713 36714 }, 36715 36716 _renderProxy: function() { 36717 36718 var el = this.element, o = this.options; 36719 this.elementOffset = el.offset(); 36720 36721 if ( this._helper ) { 36722 36723 this.helper = this.helper || $( "<div></div>" ).css( { overflow: "hidden" } ); 36724 36725 this._addClass( this.helper, this._helper ); 36726 this.helper.css( { 36727 width: this.element.outerWidth(), 36728 height: this.element.outerHeight(), 36729 position: "absolute", 36730 left: this.elementOffset.left + "px", 36731 top: this.elementOffset.top + "px", 36732 zIndex: ++o.zIndex //TODO: Don't modify option 36733 } ); 36734 36735 this.helper 36736 .appendTo( "body" ) 36737 .disableSelection(); 36738 36739 } else { 36740 this.helper = this.element; 36741 } 36742 36743 }, 36744 36745 _change: { 36746 e: function( event, dx ) { 36747 return { width: this.originalSize.width + dx }; 36748 }, 36749 w: function( event, dx ) { 36750 var cs = this.originalSize, sp = this.originalPosition; 36751 return { left: sp.left + dx, width: cs.width - dx }; 36752 }, 36753 n: function( event, dx, dy ) { 36754 var cs = this.originalSize, sp = this.originalPosition; 36755 return { top: sp.top + dy, height: cs.height - dy }; 36756 }, 36757 s: function( event, dx, dy ) { 36758 return { height: this.originalSize.height + dy }; 36759 }, 36760 se: function( event, dx, dy ) { 36761 return $.extend( this._change.s.apply( this, arguments ), 36762 this._change.e.apply( this, [ event, dx, dy ] ) ); 36763 }, 36764 sw: function( event, dx, dy ) { 36765 return $.extend( this._change.s.apply( this, arguments ), 36766 this._change.w.apply( this, [ event, dx, dy ] ) ); 36767 }, 36768 ne: function( event, dx, dy ) { 36769 return $.extend( this._change.n.apply( this, arguments ), 36770 this._change.e.apply( this, [ event, dx, dy ] ) ); 36771 }, 36772 nw: function( event, dx, dy ) { 36773 return $.extend( this._change.n.apply( this, arguments ), 36774 this._change.w.apply( this, [ event, dx, dy ] ) ); 36775 } 36776 }, 36777 36778 _propagate: function( n, event ) { 36779 $.ui.plugin.call( this, n, [ event, this.ui() ] ); 36780 if ( n !== "resize" ) { 36781 this._trigger( n, event, this.ui() ); 36782 } 36783 }, 36784 36785 plugins: {}, 36786 36787 ui: function() { 36788 return { 36789 originalElement: this.originalElement, 36790 element: this.element, 36791 helper: this.helper, 36792 position: this.position, 36793 size: this.size, 36794 originalSize: this.originalSize, 36795 originalPosition: this.originalPosition 36796 }; 36797 } 36798 36799} ); 36800 36801/* 36802 * Resizable Extensions 36803 */ 36804 36805$.ui.plugin.add( "resizable", "animate", { 36806 36807 stop: function( event ) { 36808 var that = $( this ).resizable( "instance" ), 36809 o = that.options, 36810 pr = that._proportionallyResizeElements, 36811 ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ), 36812 soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height, 36813 soffsetw = ista ? 0 : that.sizeDiff.width, 36814 style = { 36815 width: ( that.size.width - soffsetw ), 36816 height: ( that.size.height - soffseth ) 36817 }, 36818 left = ( parseFloat( that.element.css( "left" ) ) + 36819 ( that.position.left - that.originalPosition.left ) ) || null, 36820 top = ( parseFloat( that.element.css( "top" ) ) + 36821 ( that.position.top - that.originalPosition.top ) ) || null; 36822 36823 that.element.animate( 36824 $.extend( style, top && left ? { top: top, left: left } : {} ), { 36825 duration: o.animateDuration, 36826 easing: o.animateEasing, 36827 step: function() { 36828 36829 var data = { 36830 width: parseFloat( that.element.css( "width" ) ), 36831 height: parseFloat( that.element.css( "height" ) ), 36832 top: parseFloat( that.element.css( "top" ) ), 36833 left: parseFloat( that.element.css( "left" ) ) 36834 }; 36835 36836 if ( pr && pr.length ) { 36837 $( pr[ 0 ] ).css( { width: data.width, height: data.height } ); 36838 } 36839 36840 // Propagating resize, and updating values for each animation step 36841 that._updateCache( data ); 36842 that._propagate( "resize", event ); 36843 36844 } 36845 } 36846 ); 36847 } 36848 36849} ); 36850 36851$.ui.plugin.add( "resizable", "containment", { 36852 36853 start: function() { 36854 var element, p, co, ch, cw, width, height, 36855 that = $( this ).resizable( "instance" ), 36856 o = that.options, 36857 el = that.element, 36858 oc = o.containment, 36859 ce = ( oc instanceof $ ) ? 36860 oc.get( 0 ) : 36861 ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc; 36862 36863 if ( !ce ) { 36864 return; 36865 } 36866 36867 that.containerElement = $( ce ); 36868 36869 if ( /document/.test( oc ) || oc === document ) { 36870 that.containerOffset = { 36871 left: 0, 36872 top: 0 36873 }; 36874 that.containerPosition = { 36875 left: 0, 36876 top: 0 36877 }; 36878 36879 that.parentData = { 36880 element: $( document ), 36881 left: 0, 36882 top: 0, 36883 width: $( document ).width(), 36884 height: $( document ).height() || document.body.parentNode.scrollHeight 36885 }; 36886 } else { 36887 element = $( ce ); 36888 p = []; 36889 $( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) { 36890 p[ i ] = that._num( element.css( "padding" + name ) ); 36891 } ); 36892 36893 that.containerOffset = element.offset(); 36894 that.containerPosition = element.position(); 36895 that.containerSize = { 36896 height: ( element.innerHeight() - p[ 3 ] ), 36897 width: ( element.innerWidth() - p[ 1 ] ) 36898 }; 36899 36900 co = that.containerOffset; 36901 ch = that.containerSize.height; 36902 cw = that.containerSize.width; 36903 width = ( that._hasScroll( ce, "left" ) ? ce.scrollWidth : cw ); 36904 height = ( that._hasScroll( ce ) ? ce.scrollHeight : ch ); 36905 36906 that.parentData = { 36907 element: ce, 36908 left: co.left, 36909 top: co.top, 36910 width: width, 36911 height: height 36912 }; 36913 } 36914 }, 36915 36916 resize: function( event ) { 36917 var woset, hoset, isParent, isOffsetRelative, 36918 that = $( this ).resizable( "instance" ), 36919 o = that.options, 36920 co = that.containerOffset, 36921 cp = that.position, 36922 pRatio = that._aspectRatio || event.shiftKey, 36923 cop = { 36924 top: 0, 36925 left: 0 36926 }, 36927 ce = that.containerElement, 36928 continueResize = true; 36929 36930 if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) { 36931 cop = co; 36932 } 36933 36934 if ( cp.left < ( that._helper ? co.left : 0 ) ) { 36935 that.size.width = that.size.width + 36936 ( that._helper ? 36937 ( that.position.left - co.left ) : 36938 ( that.position.left - cop.left ) ); 36939 36940 if ( pRatio ) { 36941 that.size.height = that.size.width / that.aspectRatio; 36942 continueResize = false; 36943 } 36944 that.position.left = o.helper ? co.left : 0; 36945 } 36946 36947 if ( cp.top < ( that._helper ? co.top : 0 ) ) { 36948 that.size.height = that.size.height + 36949 ( that._helper ? 36950 ( that.position.top - co.top ) : 36951 that.position.top ); 36952 36953 if ( pRatio ) { 36954 that.size.width = that.size.height * that.aspectRatio; 36955 continueResize = false; 36956 } 36957 that.position.top = that._helper ? co.top : 0; 36958 } 36959 36960 isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 ); 36961 isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) ); 36962 36963 if ( isParent && isOffsetRelative ) { 36964 that.offset.left = that.parentData.left + that.position.left; 36965 that.offset.top = that.parentData.top + that.position.top; 36966 } else { 36967 that.offset.left = that.element.offset().left; 36968 that.offset.top = that.element.offset().top; 36969 } 36970 36971 woset = Math.abs( that.sizeDiff.width + 36972 ( that._helper ? 36973 that.offset.left - cop.left : 36974 ( that.offset.left - co.left ) ) ); 36975 36976 hoset = Math.abs( that.sizeDiff.height + 36977 ( that._helper ? 36978 that.offset.top - cop.top : 36979 ( that.offset.top - co.top ) ) ); 36980 36981 if ( woset + that.size.width >= that.parentData.width ) { 36982 that.size.width = that.parentData.width - woset; 36983 if ( pRatio ) { 36984 that.size.height = that.size.width / that.aspectRatio; 36985 continueResize = false; 36986 } 36987 } 36988 36989 if ( hoset + that.size.height >= that.parentData.height ) { 36990 that.size.height = that.parentData.height - hoset; 36991 if ( pRatio ) { 36992 that.size.width = that.size.height * that.aspectRatio; 36993 continueResize = false; 36994 } 36995 } 36996 36997 if ( !continueResize ) { 36998 that.position.left = that.prevPosition.left; 36999 that.position.top = that.prevPosition.top; 37000 that.size.width = that.prevSize.width; 37001 that.size.height = that.prevSize.height; 37002 } 37003 }, 37004 37005 stop: function() { 37006 var that = $( this ).resizable( "instance" ), 37007 o = that.options, 37008 co = that.containerOffset, 37009 cop = that.containerPosition, 37010 ce = that.containerElement, 37011 helper = $( that.helper ), 37012 ho = helper.offset(), 37013 w = helper.outerWidth() - that.sizeDiff.width, 37014 h = helper.outerHeight() - that.sizeDiff.height; 37015 37016 if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) { 37017 $( this ).css( { 37018 left: ho.left - cop.left - co.left, 37019 width: w, 37020 height: h 37021 } ); 37022 } 37023 37024 if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) { 37025 $( this ).css( { 37026 left: ho.left - cop.left - co.left, 37027 width: w, 37028 height: h 37029 } ); 37030 } 37031 } 37032} ); 37033 37034$.ui.plugin.add( "resizable", "alsoResize", { 37035 37036 start: function() { 37037 var that = $( this ).resizable( "instance" ), 37038 o = that.options; 37039 37040 $( o.alsoResize ).each( function() { 37041 var el = $( this ); 37042 el.data( "ui-resizable-alsoresize", { 37043 width: parseFloat( el.width() ), height: parseFloat( el.height() ), 37044 left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) ) 37045 } ); 37046 } ); 37047 }, 37048 37049 resize: function( event, ui ) { 37050 var that = $( this ).resizable( "instance" ), 37051 o = that.options, 37052 os = that.originalSize, 37053 op = that.originalPosition, 37054 delta = { 37055 height: ( that.size.height - os.height ) || 0, 37056 width: ( that.size.width - os.width ) || 0, 37057 top: ( that.position.top - op.top ) || 0, 37058 left: ( that.position.left - op.left ) || 0 37059 }; 37060 37061 $( o.alsoResize ).each( function() { 37062 var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {}, 37063 css = el.parents( ui.originalElement[ 0 ] ).length ? 37064 [ "width", "height" ] : 37065 [ "width", "height", "top", "left" ]; 37066 37067 $.each( css, function( i, prop ) { 37068 var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 ); 37069 if ( sum && sum >= 0 ) { 37070 style[ prop ] = sum || null; 37071 } 37072 } ); 37073 37074 el.css( style ); 37075 } ); 37076 }, 37077 37078 stop: function() { 37079 $( this ).removeData( "ui-resizable-alsoresize" ); 37080 } 37081} ); 37082 37083$.ui.plugin.add( "resizable", "ghost", { 37084 37085 start: function() { 37086 37087 var that = $( this ).resizable( "instance" ), cs = that.size; 37088 37089 that.ghost = that.originalElement.clone(); 37090 that.ghost.css( { 37091 opacity: 0.25, 37092 display: "block", 37093 position: "relative", 37094 height: cs.height, 37095 width: cs.width, 37096 margin: 0, 37097 left: 0, 37098 top: 0 37099 } ); 37100 37101 that._addClass( that.ghost, "ui-resizable-ghost" ); 37102 37103 // DEPRECATED 37104 // TODO: remove after 1.12 37105 if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) { 37106 37107 // Ghost option 37108 that.ghost.addClass( this.options.ghost ); 37109 } 37110 37111 that.ghost.appendTo( that.helper ); 37112 37113 }, 37114 37115 resize: function() { 37116 var that = $( this ).resizable( "instance" ); 37117 if ( that.ghost ) { 37118 that.ghost.css( { 37119 position: "relative", 37120 height: that.size.height,
vendor: 2,863 bytes, lines 37121-37232
37121 width: that.size.width 37122 } ); 37123 } 37124 }, 37125 37126 stop: function() { 37127 var that = $( this ).resizable( "instance" ); 37128 if ( that.ghost && that.helper ) { 37129 that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) ); 37130 } 37131 } 37132 37133} ); 37134 37135$.ui.plugin.add( "resizable", "grid", { 37136 37137 resize: function() { 37138 var outerDimensions, 37139 that = $( this ).resizable( "instance" ), 37140 o = that.options, 37141 cs = that.size, 37142 os = that.originalSize, 37143 op = that.originalPosition, 37144 a = that.axis, 37145 grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid, 37146 gridX = ( grid[ 0 ] || 1 ), 37147 gridY = ( grid[ 1 ] || 1 ), 37148 ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX, 37149 oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY, 37150 newWidth = os.width + ox, 37151 newHeight = os.height + oy, 37152 isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ), 37153 isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ), 37154 isMinWidth = o.minWidth && ( o.minWidth > newWidth ), 37155 isMinHeight = o.minHeight && ( o.minHeight > newHeight ); 37156 37157 o.grid = grid; 37158 37159 if ( isMinWidth ) { 37160 newWidth += gridX; 37161 } 37162 if ( isMinHeight ) { 37163 newHeight += gridY; 37164 } 37165 if ( isMaxWidth ) { 37166 newWidth -= gridX; 37167 } 37168 if ( isMaxHeight ) { 37169 newHeight -= gridY; 37170 } 37171 37172 if ( /^(se|s|e)$/.test( a ) ) { 37173 that.size.width = newWidth; 37174 that.size.height = newHeight; 37175 } else if ( /^(ne)$/.test( a ) ) { 37176 that.size.width = newWidth; 37177 that.size.height = newHeight; 37178 that.position.top = op.top - oy; 37179 } else if ( /^(sw)$/.test( a ) ) { 37180 that.size.width = newWidth; 37181 that.size.height = newHeight; 37182 that.position.left = op.left - ox; 37183 } else { 37184 if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) { 37185 outerDimensions = that._getPaddingPlusBorderDimensions( this ); 37186 } 37187 37188 if ( newHeight - gridY > 0 ) { 37189 that.size.height = newHeight; 37190 that.position.top = op.top - oy; 37191 } else { 37192 newHeight = gridY - outerDimensions.height; 37193 that.size.height = newHeight; 37194 that.position.top = op.top + os.height - newHeight; 37195 } 37196 if ( newWidth - gridX > 0 ) { 37197 that.size.width = newWidth; 37198 that.position.left = op.left - ox; 37199 } else { 37200 newWidth = gridX - outerDimensions.width; 37201 that.size.width = newWidth; 37202 that.position.left = op.left + os.width - newWidth; 37203 } 37204 } 37205 } 37206 37207} ); 37208 37209var widgetsResizable = $.ui.resizable; 37210 37211 37212/*! 37213 * jQuery UI Dialog 1.13.2 37214 * http://jqueryui.com 37215 * 37216 * Copyright jQuery Foundation and other contributors 37217 * Released under the MIT license. 37218 * http://jquery.org/license 37219 */ 37220 37221//>>label: Dialog 37222//>>group: Widgets 37223//>>description: Displays customizable dialog windows. 37224//>>docs: http://api.jqueryui.com/dialog/ 37225//>>demos: http://jqueryui.com/dialog/ 37226//>>css.structure: ../../themes/base/core.css 37227//>>css.structure: ../../themes/base/dialog.css 37228//>>css.theme: ../../themes/base/theme.css 37229 37230 37231$.widget( "ui.dialog", { 37232 version: "1.13.2
vendor: 20,928 bytes, lines 37232-38066
37232", 37233 options: { 37234 appendTo: "body", 37235 autoOpen: true, 37236 buttons: [], 37237 classes: { 37238 "ui-dialog": "ui-corner-all", 37239 "ui-dialog-titlebar": "ui-corner-all" 37240 }, 37241 closeOnEscape: true, 37242 closeText: "Close", 37243 draggable: true, 37244 hide: null, 37245 height: "auto", 37246 maxHeight: null, 37247 maxWidth: null, 37248 minHeight: 150, 37249 minWidth: 150, 37250 modal: false, 37251 position: { 37252 my: "center", 37253 at: "center", 37254 of: window, 37255 collision: "fit", 37256 37257 // Ensure the titlebar is always visible 37258 using: function( pos ) { 37259 var topOffset = $( this ).css( pos ).offset().top; 37260 if ( topOffset < 0 ) { 37261 $( this ).css( "top", pos.top - topOffset ); 37262 } 37263 } 37264 }, 37265 resizable: true, 37266 show: null, 37267 title: null, 37268 width: 300, 37269 37270 // Callbacks 37271 beforeClose: null, 37272 close: null, 37273 drag: null, 37274 dragStart: null, 37275 dragStop: null, 37276 focus: null, 37277 open: null, 37278 resize: null, 37279 resizeStart: null, 37280 resizeStop: null 37281 }, 37282 37283 sizeRelatedOptions: { 37284 buttons: true, 37285 height: true, 37286 maxHeight: true, 37287 maxWidth: true, 37288 minHeight: true, 37289 minWidth: true, 37290 width: true 37291 }, 37292 37293 resizableRelatedOptions: { 37294 maxHeight: true, 37295 maxWidth: true, 37296 minHeight: true, 37297 minWidth: true 37298 }, 37299 37300 _create: function() { 37301 this.originalCss = { 37302 display: this.element[ 0 ].style.display, 37303 width: this.element[ 0 ].style.width, 37304 minHeight: this.element[ 0 ].style.minHeight, 37305 maxHeight: this.element[ 0 ].style.maxHeight, 37306 height: this.element[ 0 ].style.height 37307 }; 37308 this.originalPosition = { 37309 parent: this.element.parent(), 37310 index: this.element.parent().children().index( this.element ) 37311 }; 37312 this.originalTitle = this.element.attr( "title" ); 37313 if ( this.options.title == null && this.originalTitle != null ) { 37314 this.options.title = this.originalTitle; 37315 } 37316 37317 // Dialogs can't be disabled 37318 if ( this.options.disabled ) { 37319 this.options.disabled = false; 37320 } 37321 37322 this._createWrapper(); 37323 37324 this.element 37325 .show() 37326 .removeAttr( "title" ) 37327 .appendTo( this.uiDialog ); 37328 37329 this._addClass( "ui-dialog-content", "ui-widget-content" ); 37330 37331 this._createTitlebar(); 37332 this._createButtonPane(); 37333 37334 if ( this.options.draggable && $.fn.draggable ) { 37335 this._makeDraggable(); 37336 } 37337 if ( this.options.resizable && $.fn.resizable ) { 37338 this._makeResizable(); 37339 } 37340 37341 this._isOpen = false; 37342 37343 this._trackFocus(); 37344 }, 37345 37346 _init: function() { 37347 if ( this.options.autoOpen ) { 37348 this.open(); 37349 } 37350 }, 37351 37352 _appendTo: function() { 37353 var element = this.options.appendTo; 37354 if ( element && ( element.jquery || element.nodeType ) ) { 37355 return $( element ); 37356 } 37357 return this.document.find( element || "body" ).eq( 0 ); 37358 }, 37359 37360 _destroy: function() { 37361 var next, 37362 originalPosition = this.originalPosition; 37363 37364 this._untrackInstance(); 37365 this._destroyOverlay(); 37366 37367 this.element 37368 .removeUniqueId() 37369 .css( this.originalCss ) 37370 37371 // Without detaching first, the following becomes really slow 37372 .detach(); 37373 37374 this.uiDialog.remove(); 37375 37376 if ( this.originalTitle ) { 37377 this.element.attr( "title", this.originalTitle ); 37378 } 37379 37380 next = originalPosition.parent.children().eq( originalPosition.index ); 37381 37382 // Don't try to place the dialog next to itself (#8613) 37383 if ( next.length && next[ 0 ] !== this.element[ 0 ] ) { 37384 next.before( this.element ); 37385 } else { 37386 originalPosition.parent.append( this.element ); 37387 } 37388 }, 37389 37390 widget: function() { 37391 return this.uiDialog; 37392 }, 37393 37394 disable: $.noop, 37395 enable: $.noop, 37396 37397 close: function( event ) { 37398 var that = this; 37399 37400 if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) { 37401 return; 37402 } 37403 37404 this._isOpen = false; 37405 this._focusedElement = null; 37406 this._destroyOverlay(); 37407 this._untrackInstance(); 37408 37409 if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) { 37410 37411 // Hiding a focused element doesn't trigger blur in WebKit 37412 // so in case we have nothing to focus on, explicitly blur the active element 37413 // https://bugs.webkit.org/show_bug.cgi?id=47182 37414 $.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) ); 37415 } 37416 37417 this._hide( this.uiDialog, this.options.hide, function() { 37418 that._trigger( "close", event ); 37419 } ); 37420 }, 37421 37422 isOpen: function() { 37423 return this._isOpen; 37424 }, 37425 37426 moveToTop: function() { 37427 this._moveToTop(); 37428 }, 37429 37430 _moveToTop: function( event, silent ) { 37431 var moved = false, 37432 zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() { 37433 return +$( this ).css( "z-index" ); 37434 } ).get(), 37435 zIndexMax = Math.max.apply( null, zIndices ); 37436 37437 if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) { 37438 this.uiDialog.css( "z-index", zIndexMax + 1 ); 37439 moved = true; 37440 } 37441 37442 if ( moved && !silent ) { 37443 this._trigger( "focus", event ); 37444 } 37445 return moved; 37446 }, 37447 37448 open: function() { 37449 var that = this; 37450 if ( this._isOpen ) { 37451 if ( this._moveToTop() ) { 37452 this._focusTabbable(); 37453 } 37454 return; 37455 } 37456 37457 this._isOpen = true; 37458 this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) ); 37459 37460 this._size(); 37461 this._position(); 37462 this._createOverlay(); 37463 this._moveToTop( null, true ); 37464 37465 // Ensure the overlay is moved to the top with the dialog, but only when 37466 // opening. The overlay shouldn't move after the dialog is open so that 37467 // modeless dialogs opened after the modal dialog stack properly. 37468 if ( this.overlay ) { 37469 this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 ); 37470 } 37471 37472 this._show( this.uiDialog, this.options.show, function() { 37473 that._focusTabbable(); 37474 that._trigger( "focus" ); 37475 } ); 37476 37477 // Track the dialog immediately upon opening in case a focus event 37478 // somehow occurs outside of the dialog before an element inside the 37479 // dialog is focused (#10152) 37480 this._makeFocusTarget(); 37481 37482 this._trigger( "open" ); 37483 }, 37484 37485 _focusTabbable: function() { 37486 37487 // Set focus to the first match: 37488 // 1. An element that was focused previously 37489 // 2. First element inside the dialog matching [autofocus] 37490 // 3. Tabbable element inside the content element 37491 // 4. Tabbable element inside the buttonpane 37492 // 5. The close button 37493 // 6. The dialog itself 37494 var hasFocus = this._focusedElement; 37495 if ( !hasFocus ) { 37496 hasFocus = this.element.find( "[autofocus]" ); 37497 } 37498 if ( !hasFocus.length ) { 37499 hasFocus = this.element.find( ":tabbable" ); 37500 } 37501 if ( !hasFocus.length ) { 37502 hasFocus = this.uiDialogButtonPane.find( ":tabbable" ); 37503 } 37504 if ( !hasFocus.length ) { 37505 hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" ); 37506 } 37507 if ( !hasFocus.length ) { 37508 hasFocus = this.uiDialog; 37509 } 37510 hasFocus.eq( 0 ).trigger( "focus" ); 37511 }, 37512 37513 _restoreTabbableFocus: function() { 37514 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ), 37515 isActive = this.uiDialog[ 0 ] === activeElement || 37516 $.contains( this.uiDialog[ 0 ], activeElement ); 37517 if ( !isActive ) { 37518 this._focusTabbable(); 37519 } 37520 }, 37521 37522 _keepFocus: function( event ) { 37523 event.preventDefault(); 37524 this._restoreTabbableFocus(); 37525 37526 // support: IE 37527 // IE <= 8 doesn't prevent moving focus even with event.preventDefault() 37528 // so we check again later 37529 this._delay( this._restoreTabbableFocus ); 37530 }, 37531 37532 _createWrapper: function() { 37533 this.uiDialog = $( "<div>" ) 37534 .hide() 37535 .attr( { 37536 37537 // Setting tabIndex makes the div focusable 37538 tabIndex: -1, 37539 role: "dialog" 37540 } ) 37541 .appendTo( this._appendTo() ); 37542 37543 this._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" ); 37544 this._on( this.uiDialog, { 37545 keydown: function( event ) { 37546 if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode && 37547 event.keyCode === $.ui.keyCode.ESCAPE ) { 37548 event.preventDefault(); 37549 this.close( event ); 37550 return; 37551 } 37552 37553 // Prevent tabbing out of dialogs 37554 if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) { 37555 return; 37556 } 37557 var tabbables = this.uiDialog.find( ":tabbable" ), 37558 first = tabbables.first(), 37559 last = tabbables.last(); 37560 37561 if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) && 37562 !event.shiftKey ) { 37563 this._delay( function() { 37564 first.trigger( "focus" ); 37565 } ); 37566 event.preventDefault(); 37567 } else if ( ( event.target === first[ 0 ] || 37568 event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) { 37569 this._delay( function() { 37570 last.trigger( "focus" ); 37571 } ); 37572 event.preventDefault(); 37573 } 37574 }, 37575 mousedown: function( event ) { 37576 if ( this._moveToTop( event ) ) { 37577 this._focusTabbable(); 37578 } 37579 } 37580 } ); 37581 37582 // We assume that any existing aria-describedby attribute means 37583 // that the dialog content is marked up properly 37584 // otherwise we brute force the content as the description 37585 if ( !this.element.find( "[aria-describedby]" ).length ) { 37586 this.uiDialog.attr( { 37587 "aria-describedby": this.element.uniqueId().attr( "id" ) 37588 } ); 37589 } 37590 }, 37591 37592 _createTitlebar: function() { 37593 var uiDialogTitle; 37594 37595 this.uiDialogTitlebar = $( "<div>" ); 37596 this._addClass( this.uiDialogTitlebar, 37597 "ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" ); 37598 this._on( this.uiDialogTitlebar, { 37599 mousedown: function( event ) { 37600 37601 // Don't prevent click on close button (#8838) 37602 // Focusing a dialog that is partially scrolled out of view 37603 // causes the browser to scroll it into view, preventing the click event 37604 if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) { 37605 37606 // Dialog isn't getting focus when dragging (#8063) 37607 this.uiDialog.trigger( "focus" ); 37608 } 37609 } 37610 } ); 37611 37612 // Support: IE 37613 // Use type="button" to prevent enter keypresses in textboxes from closing the 37614 // dialog in IE (#9312) 37615 this.uiDialogTitlebarClose = $( "<button type='button'></button>" ) 37616 .button( { 37617 label: $( "<a>" ).text( this.options.closeText ).html(), 37618 icon: "ui-icon-closethick", 37619 showLabel: false 37620 } ) 37621 .appendTo( this.uiDialogTitlebar ); 37622 37623 this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" ); 37624 this._on( this.uiDialogTitlebarClose, { 37625 click: function( event ) { 37626 event.preventDefault(); 37627 this.close( event ); 37628 } 37629 } ); 37630 37631 uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar ); 37632 this._addClass( uiDialogTitle, "ui-dialog-title" ); 37633 this._title( uiDialogTitle ); 37634 37635 this.uiDialogTitlebar.prependTo( this.uiDialog ); 37636 37637 this.uiDialog.attr( { 37638 "aria-labelledby": uiDialogTitle.attr( "id" ) 37639 } ); 37640 }, 37641 37642 _title: function( title ) { 37643 if ( this.options.title ) { 37644 title.text( this.options.title ); 37645 } else { 37646 title.html( " " ); 37647 } 37648 }, 37649 37650 _createButtonPane: function() { 37651 this.uiDialogButtonPane = $( "<div>" ); 37652 this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane", 37653 "ui-widget-content ui-helper-clearfix" ); 37654 37655 this.uiButtonSet = $( "<div>" ) 37656 .appendTo( this.uiDialogButtonPane ); 37657 this._addClass( this.uiButtonSet, "ui-dialog-buttonset" ); 37658 37659 this._createButtons(); 37660 }, 37661 37662 _createButtons: function() { 37663 var that = this, 37664 buttons = this.options.buttons; 37665 37666 // If we already have a button pane, remove it 37667 this.uiDialogButtonPane.remove(); 37668 this.uiButtonSet.empty(); 37669 37670 if ( $.isEmptyObject( buttons ) || ( Array.isArray( buttons ) && !buttons.length ) ) { 37671 this._removeClass( this.uiDialog, "ui-dialog-buttons" ); 37672 return; 37673 } 37674 37675 $.each( buttons, function( name, props ) { 37676 var click, buttonOptions; 37677 props = typeof props === "function" ? 37678 { click: props, text: name } : 37679 props; 37680 37681 // Default to a non-submitting button 37682 props = $.extend( { type: "button" }, props ); 37683 37684 // Change the context for the click callback to be the main element 37685 click = props.click; 37686 buttonOptions = { 37687 icon: props.icon, 37688 iconPosition: props.iconPosition, 37689 showLabel: props.showLabel, 37690 37691 // Deprecated options 37692 icons: props.icons, 37693 text: props.text 37694 }; 37695 37696 delete props.click; 37697 delete props.icon; 37698 delete props.iconPosition; 37699 delete props.showLabel; 37700 37701 // Deprecated options 37702 delete props.icons; 37703 if ( typeof props.text === "boolean" ) { 37704 delete props.text; 37705 } 37706 37707 $( "<button></button>", props ) 37708 .button( buttonOptions ) 37709 .appendTo( that.uiButtonSet ) 37710 .on( "click", function() { 37711 click.apply( that.element[ 0 ], arguments ); 37712 } ); 37713 } ); 37714 this._addClass( this.uiDialog, "ui-dialog-buttons" ); 37715 this.uiDialogButtonPane.appendTo( this.uiDialog ); 37716 }, 37717 37718 _makeDraggable: function() { 37719 var that = this, 37720 options = this.options; 37721 37722 function filteredUi( ui ) { 37723 return { 37724 position: ui.position, 37725 offset: ui.offset 37726 }; 37727 } 37728 37729 this.uiDialog.draggable( { 37730 cancel: ".ui-dialog-content, .ui-dialog-titlebar-close", 37731 handle: ".ui-dialog-titlebar", 37732 containment: "document", 37733 start: function( event, ui ) { 37734 that._addClass( $( this ), "ui-dialog-dragging" ); 37735 that._blockFrames(); 37736 that._trigger( "dragStart", event, filteredUi( ui ) ); 37737 }, 37738 drag: function( event, ui ) { 37739 that._trigger( "drag", event, filteredUi( ui ) ); 37740 }, 37741 stop: function( event, ui ) { 37742 var left = ui.offset.left - that.document.scrollLeft(), 37743 top = ui.offset.top - that.document.scrollTop(); 37744 37745 options.position = { 37746 my: "left top", 37747 at: "left" + ( left >= 0 ? "+" : "" ) + left + " " + 37748 "top" + ( top >= 0 ? "+" : "" ) + top, 37749 of: that.window 37750 }; 37751 that._removeClass( $( this ), "ui-dialog-dragging" ); 37752 that._unblockFrames(); 37753 that._trigger( "dragStop", event, filteredUi( ui ) ); 37754 } 37755 } ); 37756 }, 37757 37758 _makeResizable: function() { 37759 var that = this, 37760 options = this.options, 37761 handles = options.resizable, 37762 37763 // .ui-resizable has position: relative defined in the stylesheet 37764 // but dialogs have to use absolute or fixed positioning 37765 position = this.uiDialog.css( "position" ), 37766 resizeHandles = typeof handles === "string" ? 37767 handles : 37768 "n,e,s,w,se,sw,ne,nw"; 37769 37770 function filteredUi( ui ) { 37771 return { 37772 originalPosition: ui.originalPosition, 37773 originalSize: ui.originalSize, 37774 position: ui.position, 37775 size: ui.size 37776 }; 37777 } 37778 37779 this.uiDialog.resizable( { 37780 cancel: ".ui-dialog-content", 37781 containment: "document", 37782 alsoResize: this.element, 37783 maxWidth: options.maxWidth, 37784 maxHeight: options.maxHeight, 37785 minWidth: options.minWidth, 37786 minHeight: this._minHeight(), 37787 handles: resizeHandles, 37788 start: function( event, ui ) { 37789 that._addClass( $( this ), "ui-dialog-resizing" ); 37790 that._blockFrames(); 37791 that._trigger( "resizeStart", event, filteredUi( ui ) ); 37792 }, 37793 resize: function( event, ui ) { 37794 that._trigger( "resize", event, filteredUi( ui ) ); 37795 }, 37796 stop: function( event, ui ) { 37797 var offset = that.uiDialog.offset(), 37798 left = offset.left - that.document.scrollLeft(), 37799 top = offset.top - that.document.scrollTop(); 37800 37801 options.height = that.uiDialog.height(); 37802 options.width = that.uiDialog.width(); 37803 options.position = { 37804 my: "left top", 37805 at: "left" + ( left >= 0 ? "+" : "" ) + left + " " + 37806 "top" + ( top >= 0 ? "+" : "" ) + top, 37807 of: that.window 37808 }; 37809 that._removeClass( $( this ), "ui-dialog-resizing" ); 37810 that._unblockFrames(); 37811 that._trigger( "resizeStop", event, filteredUi( ui ) ); 37812 } 37813 } ) 37814 .css( "position", position ); 37815 }, 37816 37817 _trackFocus: function() { 37818 this._on( this.widget(), { 37819 focusin: function( event ) { 37820 this._makeFocusTarget(); 37821 this._focusedElement = $( event.target ); 37822 } 37823 } ); 37824 }, 37825 37826 _makeFocusTarget: function() { 37827 this._untrackInstance(); 37828 this._trackingInstances().unshift( this ); 37829 }, 37830 37831 _untrackInstance: function() { 37832 var instances = this._trackingInstances(), 37833 exists = $.inArray( this, instances ); 37834 if ( exists !== -1 ) { 37835 instances.splice( exists, 1 ); 37836 } 37837 }, 37838 37839 _trackingInstances: function() { 37840 var instances = this.document.data( "ui-dialog-instances" ); 37841 if ( !instances ) { 37842 instances = []; 37843 this.document.data( "ui-dialog-instances", instances ); 37844 } 37845 return instances; 37846 }, 37847 37848 _minHeight: function() { 37849 var options = this.options; 37850 37851 return options.height === "auto" ? 37852 options.minHeight : 37853 Math.min( options.minHeight, options.height ); 37854 }, 37855 37856 _position: function() { 37857 37858 // Need to show the dialog to get the actual offset in the position plugin 37859 var isVisible = this.uiDialog.is( ":visible" ); 37860 if ( !isVisible ) { 37861 this.uiDialog.show(); 37862 } 37863 this.uiDialog.position( this.options.position ); 37864 if ( !isVisible ) { 37865 this.uiDialog.hide(); 37866 } 37867 }, 37868 37869 _setOptions: function( options ) { 37870 var that = this, 37871 resize = false, 37872 resizableOptions = {}; 37873 37874 $.each( options, function( key, value ) { 37875 that._setOption( key, value ); 37876 37877 if ( key in that.sizeRelatedOptions ) { 37878 resize = true; 37879 } 37880 if ( key in that.resizableRelatedOptions ) { 37881 resizableOptions[ key ] = value; 37882 } 37883 } ); 37884 37885 if ( resize ) { 37886 this._size(); 37887 this._position(); 37888 } 37889 if ( this.uiDialog.is( ":data(ui-resizable)" ) ) { 37890 this.uiDialog.resizable( "option", resizableOptions ); 37891 } 37892 }, 37893 37894 _setOption: function( key, value ) { 37895 var isDraggable, isResizable, 37896 uiDialog = this.uiDialog; 37897 37898 if ( key === "disabled" ) { 37899 return; 37900 } 37901 37902 this._super( key, value ); 37903 37904 if ( key === "appendTo" ) { 37905 this.uiDialog.appendTo( this._appendTo() ); 37906 } 37907 37908 if ( key === "buttons" ) { 37909 this._createButtons(); 37910 } 37911 37912 if ( key === "closeText" ) { 37913 this.uiDialogTitlebarClose.button( { 37914 37915 // Ensure that we always pass a string 37916 label: $( "<a>" ).text( "" + this.options.closeText ).html() 37917 } ); 37918 } 37919 37920 if ( key === "draggable" ) { 37921 isDraggable = uiDialog.is( ":data(ui-draggable)" ); 37922 if ( isDraggable && !value ) { 37923 uiDialog.draggable( "destroy" ); 37924 } 37925 37926 if ( !isDraggable && value ) { 37927 this._makeDraggable(); 37928 } 37929 } 37930 37931 if ( key === "position" ) { 37932 this._position(); 37933 } 37934 37935 if ( key === "resizable" ) { 37936 37937 // currently resizable, becoming non-resizable 37938 isResizable = uiDialog.is( ":data(ui-resizable)" ); 37939 if ( isResizable && !value ) { 37940 uiDialog.resizable( "destroy" ); 37941 } 37942 37943 // Currently resizable, changing handles 37944 if ( isResizable && typeof value === "string" ) { 37945 uiDialog.resizable( "option", "handles", value ); 37946 } 37947 37948 // Currently non-resizable, becoming resizable 37949 if ( !isResizable && value !== false ) { 37950 this._makeResizable(); 37951 } 37952 } 37953 37954 if ( key === "title" ) { 37955 this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) ); 37956 } 37957 }, 37958 37959 _size: function() { 37960 37961 // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content 37962 // divs will both have width and height set, so we need to reset them 37963 var nonContentHeight, minContentHeight, maxContentHeight, 37964 options = this.options; 37965 37966 // Reset content sizing 37967 this.element.show().css( { 37968 width: "auto", 37969 minHeight: 0, 37970 maxHeight: "none", 37971 height: 0 37972 } ); 37973 37974 if ( options.minWidth > options.width ) { 37975 options.width = options.minWidth; 37976 } 37977 37978 // Reset wrapper sizing 37979 // determine the height of all the non-content elements 37980 nonContentHeight = this.uiDialog.css( { 37981 height: "auto", 37982 width: options.width 37983 } ) 37984 .outerHeight(); 37985 minContentHeight = Math.max( 0, options.minHeight - nonContentHeight ); 37986 maxContentHeight = typeof options.maxHeight === "number" ? 37987 Math.max( 0, options.maxHeight - nonContentHeight ) : 37988 "none"; 37989 37990 if ( options.height === "auto" ) { 37991 this.element.css( { 37992 minHeight: minContentHeight, 37993 maxHeight: maxContentHeight, 37994 height: "auto" 37995 } ); 37996 } else { 37997 this.element.height( Math.max( 0, options.height - nonContentHeight ) ); 37998 } 37999 38000 if ( this.uiDialog.is( ":data(ui-resizable)" ) ) { 38001 this.uiDialog.resizable( "option", "minHeight", this._minHeight() ); 38002 } 38003 }, 38004 38005 _blockFrames: function() { 38006 this.iframeBlocks = this.document.find( "iframe" ).map( function() { 38007 var iframe = $( this ); 38008 38009 return $( "<div>" ) 38010 .css( { 38011 position: "absolute", 38012 width: iframe.outerWidth(), 38013 height: iframe.outerHeight() 38014 } ) 38015 .appendTo( iframe.parent() ) 38016 .offset( iframe.offset() )[ 0 ]; 38017 } ); 38018 }, 38019 38020 _unblockFrames: function() { 38021 if ( this.iframeBlocks ) { 38022 this.iframeBlocks.remove(); 38023 delete this.iframeBlocks; 38024 } 38025 }, 38026 38027 _allowInteraction: function( event ) { 38028 if ( $( event.target ).closest( ".ui-dialog" ).length ) { 38029 return true; 38030 } 38031 38032 // TODO: Remove hack when datepicker implements 38033 // the .ui-front logic (#8989) 38034 return !!$( event.target ).closest( ".ui-datepicker" ).length; 38035 }, 38036 38037 _createOverlay: function() { 38038 if ( !this.options.modal ) { 38039 return; 38040 } 38041 38042 var jqMinor = $.fn.jquery.substring( 0, 4 ); 38043 38044 // We use a delay in case the overlay is created from an 38045 // event that we're going to be cancelling (#2804) 38046 var isOpening = true; 38047 this._delay( function() { 38048 isOpening = false; 38049 } ); 38050 38051 if ( !this.document.data( "ui-dialog-overlays" ) ) { 38052 38053 // Prevent use of anchors and inputs 38054 // This doesn't use `_on()` because it is a shared event handler 38055 // across all open modal dialogs. 38056 this.document.on( "focusin.ui-dialog", function( event ) { 38057 if ( isOpening ) { 38058 return; 38059 } 38060 38061 var instance = this._trackingInstances()[ 0 ]; 38062 if ( !instance._allowInteraction( event ) ) { 38063 event.preventDefault(); 38064 instance._focusTabbable(); 38065 38066 // Support: jQuery >=3.4 <3.
vendor: 2,204 bytes, lines 38066-38154
380666 only 38067 // Focus re-triggering in jQuery 3.4/3.5 makes the original element 38068 // have its focus event propagated last, breaking the re-targeting. 38069 // Trigger focus in a delay in addition if needed to avoid the issue 38070 // See https://github.com/jquery/jquery/issues/4382 38071 if ( jqMinor === "3.4." || jqMinor === "3.5." ) { 38072 instance._delay( instance._restoreTabbableFocus ); 38073 } 38074 } 38075 }.bind( this ) ); 38076 } 38077 38078 this.overlay = $( "<div>" ) 38079 .appendTo( this._appendTo() ); 38080 38081 this._addClass( this.overlay, null, "ui-widget-overlay ui-front" ); 38082 this._on( this.overlay, { 38083 mousedown: "_keepFocus" 38084 } ); 38085 this.document.data( "ui-dialog-overlays", 38086 ( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 ); 38087 }, 38088 38089 _destroyOverlay: function() { 38090 if ( !this.options.modal ) { 38091 return; 38092 } 38093 38094 if ( this.overlay ) { 38095 var overlays = this.document.data( "ui-dialog-overlays" ) - 1; 38096 38097 if ( !overlays ) { 38098 this.document.off( "focusin.ui-dialog" ); 38099 this.document.removeData( "ui-dialog-overlays" ); 38100 } else { 38101 this.document.data( "ui-dialog-overlays", overlays ); 38102 } 38103 38104 this.overlay.remove(); 38105 this.overlay = null; 38106 } 38107 } 38108} ); 38109 38110// DEPRECATED 38111// TODO: switch return back to widget declaration at top of file when this is removed 38112if ( $.uiBackCompat !== false ) { 38113 38114 // Backcompat for dialogClass option 38115 $.widget( "ui.dialog", $.ui.dialog, { 38116 options: { 38117 dialogClass: "" 38118 }, 38119 _createWrapper: function() { 38120 this._super(); 38121 this.uiDialog.addClass( this.options.dialogClass ); 38122 }, 38123 _setOption: function( key, value ) { 38124 if ( key === "dialogClass" ) { 38125 this.uiDialog 38126 .removeClass( this.options.dialogClass ) 38127 .addClass( value ); 38128 } 38129 this._superApply( arguments ); 38130 } 38131 } ); 38132} 38133 38134var widgetsDialog = $.ui.dialog; 38135 38136 38137/*! 38138 * jQuery UI Droppable 1.13.2 38139 * http://jqueryui.com 38140 * 38141 * Copyright jQuery Foundation and other contributors 38142 * Released under the MIT license. 38143 * http://jquery.org/license 38144 */ 38145 38146//>>label: Droppable 38147//>>group: Interactions 38148//>>description: Enables drop targets for draggable elements. 38149//>>docs: http://api.jqueryui.com/droppable/ 38150//>>demos: http://jqueryui.com/droppable/ 38151 38152 38153$.widget( "ui.droppable", { 38154 version: "1.13.2
vendor: 12,184 bytes, lines 38154-38621
38154", 38155 widgetEventPrefix: "drop", 38156 options: { 38157 accept: "*", 38158 addClasses: true, 38159 greedy: false, 38160 scope: "default", 38161 tolerance: "intersect", 38162 38163 // Callbacks 38164 activate: null, 38165 deactivate: null, 38166 drop: null, 38167 out: null, 38168 over: null 38169 }, 38170 _create: function() { 38171 38172 var proportions, 38173 o = this.options, 38174 accept = o.accept; 38175 38176 this.isover = false; 38177 this.isout = true; 38178 38179 this.accept = typeof accept === "function" ? accept : function( d ) { 38180 return d.is( accept ); 38181 }; 38182 38183 this.proportions = function( /* valueToWrite */ ) { 38184 if ( arguments.length ) { 38185 38186 // Store the droppable's proportions 38187 proportions = arguments[ 0 ]; 38188 } else { 38189 38190 // Retrieve or derive the droppable's proportions 38191 return proportions ? 38192 proportions : 38193 proportions = { 38194 width: this.element[ 0 ].offsetWidth, 38195 height: this.element[ 0 ].offsetHeight 38196 }; 38197 } 38198 }; 38199 38200 this._addToManager( o.scope ); 38201 38202 if ( o.addClasses ) { 38203 this._addClass( "ui-droppable" ); 38204 } 38205 38206 }, 38207 38208 _addToManager: function( scope ) { 38209 38210 // Add the reference and positions to the manager 38211 $.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || []; 38212 $.ui.ddmanager.droppables[ scope ].push( this ); 38213 }, 38214 38215 _splice: function( drop ) { 38216 var i = 0; 38217 for ( ; i < drop.length; i++ ) { 38218 if ( drop[ i ] === this ) { 38219 drop.splice( i, 1 ); 38220 } 38221 } 38222 }, 38223 38224 _destroy: function() { 38225 var drop = $.ui.ddmanager.droppables[ this.options.scope ]; 38226 38227 this._splice( drop ); 38228 }, 38229 38230 _setOption: function( key, value ) { 38231 38232 if ( key === "accept" ) { 38233 this.accept = typeof value === "function" ? value : function( d ) { 38234 return d.is( value ); 38235 }; 38236 } else if ( key === "scope" ) { 38237 var drop = $.ui.ddmanager.droppables[ this.options.scope ]; 38238 38239 this._splice( drop ); 38240 this._addToManager( value ); 38241 } 38242 38243 this._super( key, value ); 38244 }, 38245 38246 _activate: function( event ) { 38247 var draggable = $.ui.ddmanager.current; 38248 38249 this._addActiveClass(); 38250 if ( draggable ) { 38251 this._trigger( "activate", event, this.ui( draggable ) ); 38252 } 38253 }, 38254 38255 _deactivate: function( event ) { 38256 var draggable = $.ui.ddmanager.current; 38257 38258 this._removeActiveClass(); 38259 if ( draggable ) { 38260 this._trigger( "deactivate", event, this.ui( draggable ) ); 38261 } 38262 }, 38263 38264 _over: function( event ) { 38265 38266 var draggable = $.ui.ddmanager.current; 38267 38268 // Bail if draggable and droppable are same element 38269 if ( !draggable || ( draggable.currentItem || 38270 draggable.element )[ 0 ] === this.element[ 0 ] ) { 38271 return; 38272 } 38273 38274 if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || 38275 draggable.element ) ) ) { 38276 this._addHoverClass(); 38277 this._trigger( "over", event, this.ui( draggable ) ); 38278 } 38279 38280 }, 38281 38282 _out: function( event ) { 38283 38284 var draggable = $.ui.ddmanager.current; 38285 38286 // Bail if draggable and droppable are same element 38287 if ( !draggable || ( draggable.currentItem || 38288 draggable.element )[ 0 ] === this.element[ 0 ] ) { 38289 return; 38290 } 38291 38292 if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || 38293 draggable.element ) ) ) { 38294 this._removeHoverClass(); 38295 this._trigger( "out", event, this.ui( draggable ) ); 38296 } 38297 38298 }, 38299 38300 _drop: function( event, custom ) { 38301 38302 var draggable = custom || $.ui.ddmanager.current, 38303 childrenIntersection = false; 38304 38305 // Bail if draggable and droppable are same element 38306 if ( !draggable || ( draggable.currentItem || 38307 draggable.element )[ 0 ] === this.element[ 0 ] ) { 38308 return false; 38309 } 38310 38311 this.element 38312 .find( ":data(ui-droppable)" ) 38313 .not( ".ui-draggable-dragging" ) 38314 .each( function() { 38315 var inst = $( this ).droppable( "instance" ); 38316 if ( 38317 inst.options.greedy && 38318 !inst.options.disabled && 38319 inst.options.scope === draggable.options.scope && 38320 inst.accept.call( 38321 inst.element[ 0 ], ( draggable.currentItem || draggable.element ) 38322 ) && 38323 $.ui.intersect( 38324 draggable, 38325 $.extend( inst, { offset: inst.element.offset() } ), 38326 inst.options.tolerance, event 38327 ) 38328 ) { 38329 childrenIntersection = true; 38330 return false; 38331 } 38332 } ); 38333 if ( childrenIntersection ) { 38334 return false; 38335 } 38336 38337 if ( this.accept.call( this.element[ 0 ], 38338 ( draggable.currentItem || draggable.element ) ) ) { 38339 this._removeActiveClass(); 38340 this._removeHoverClass(); 38341 38342 this._trigger( "drop", event, this.ui( draggable ) ); 38343 return this.element; 38344 } 38345 38346 return false; 38347 38348 }, 38349 38350 ui: function( c ) { 38351 return { 38352 draggable: ( c.currentItem || c.element ), 38353 helper: c.helper, 38354 position: c.position, 38355 offset: c.positionAbs 38356 }; 38357 }, 38358 38359 // Extension points just to make backcompat sane and avoid duplicating logic 38360 // TODO: Remove in 1.14 along with call to it below 38361 _addHoverClass: function() { 38362 this._addClass( "ui-droppable-hover" ); 38363 }, 38364 38365 _removeHoverClass: function() { 38366 this._removeClass( "ui-droppable-hover" ); 38367 }, 38368 38369 _addActiveClass: function() { 38370 this._addClass( "ui-droppable-active" ); 38371 }, 38372 38373 _removeActiveClass: function() { 38374 this._removeClass( "ui-droppable-active" ); 38375 } 38376} ); 38377 38378$.ui.intersect = ( function() { 38379 function isOverAxis( x, reference, size ) { 38380 return ( x >= reference ) && ( x < ( reference + size ) ); 38381 } 38382 38383 return function( draggable, droppable, toleranceMode, event ) { 38384 38385 if ( !droppable.offset ) { 38386 return false; 38387 } 38388 38389 var x1 = ( draggable.positionAbs || 38390 draggable.position.absolute ).left + draggable.margins.left, 38391 y1 = ( draggable.positionAbs || 38392 draggable.position.absolute ).top + draggable.margins.top, 38393 x2 = x1 + draggable.helperProportions.width, 38394 y2 = y1 + draggable.helperProportions.height, 38395 l = droppable.offset.left, 38396 t = droppable.offset.top, 38397 r = l + droppable.proportions().width, 38398 b = t + droppable.proportions().height; 38399 38400 switch ( toleranceMode ) { 38401 case "fit": 38402 return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b ); 38403 case "intersect": 38404 return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half 38405 x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half 38406 t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half 38407 y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half 38408 case "pointer": 38409 return isOverAxis( event.pageY, t, droppable.proportions().height ) && 38410 isOverAxis( event.pageX, l, droppable.proportions().width ); 38411 case "touch": 38412 return ( 38413 ( y1 >= t && y1 <= b ) || // Top edge touching 38414 ( y2 >= t && y2 <= b ) || // Bottom edge touching 38415 ( y1 < t && y2 > b ) // Surrounded vertically 38416 ) && ( 38417 ( x1 >= l && x1 <= r ) || // Left edge touching 38418 ( x2 >= l && x2 <= r ) || // Right edge touching 38419 ( x1 < l && x2 > r ) // Surrounded horizontally 38420 ); 38421 default: 38422 return false; 38423 } 38424 }; 38425} )(); 38426 38427/* 38428 This manager tracks offsets of draggables and droppables 38429*/ 38430$.ui.ddmanager = { 38431 current: null, 38432 droppables: { "default": [] }, 38433 prepareOffsets: function( t, event ) { 38434 38435 var i, j, 38436 m = $.ui.ddmanager.droppables[ t.options.scope ] || [], 38437 type = event ? event.type : null, // workaround for #2317 38438 list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack(); 38439 38440 droppablesLoop: for ( i = 0; i < m.length; i++ ) { 38441 38442 // No disabled and non-accepted 38443 if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], 38444 ( t.currentItem || t.element ) ) ) ) { 38445 continue; 38446 } 38447 38448 // Filter out elements in the current dragged item 38449 for ( j = 0; j < list.length; j++ ) { 38450 if ( list[ j ] === m[ i ].element[ 0 ] ) { 38451 m[ i ].proportions().height = 0; 38452 continue droppablesLoop; 38453 } 38454 } 38455 38456 m[ i ].visible = m[ i ].element.css( "display" ) !== "none"; 38457 if ( !m[ i ].visible ) { 38458 continue; 38459 } 38460 38461 // Activate the droppable if used directly from draggables 38462 if ( type === "mousedown" ) { 38463 m[ i ]._activate.call( m[ i ], event ); 38464 } 38465 38466 m[ i ].offset = m[ i ].element.offset(); 38467 m[ i ].proportions( { 38468 width: m[ i ].element[ 0 ].offsetWidth, 38469 height: m[ i ].element[ 0 ].offsetHeight 38470 } ); 38471 38472 } 38473 38474 }, 38475 drop: function( draggable, event ) { 38476 38477 var dropped = false; 38478 38479 // Create a copy of the droppables in case the list changes during the drop (#9116) 38480 $.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() { 38481 38482 if ( !this.options ) { 38483 return; 38484 } 38485 if ( !this.options.disabled && this.visible && 38486 $.ui.intersect( draggable, this, this.options.tolerance, event ) ) { 38487 dropped = this._drop.call( this, event ) || dropped; 38488 } 38489 38490 if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], 38491 ( draggable.currentItem || draggable.element ) ) ) { 38492 this.isout = true; 38493 this.isover = false; 38494 this._deactivate.call( this, event ); 38495 } 38496 38497 } ); 38498 return dropped; 38499 38500 }, 38501 dragStart: function( draggable, event ) { 38502 38503 // Listen for scrolling so that if the dragging causes scrolling the position of the 38504 // droppables can be recalculated (see #5003) 38505 draggable.element.parentsUntil( "body" ).on( "scroll.droppable", function() { 38506 if ( !draggable.options.refreshPositions ) { 38507 $.ui.ddmanager.prepareOffsets( draggable, event ); 38508 } 38509 } ); 38510 }, 38511 drag: function( draggable, event ) { 38512 38513 // If you have a highly dynamic page, you might try this option. It renders positions 38514 // every time you move the mouse. 38515 if ( draggable.options.refreshPositions ) { 38516 $.ui.ddmanager.prepareOffsets( draggable, event ); 38517 } 38518 38519 // Run through all droppables and check their positions based on specific tolerance options 38520 $.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() { 38521 38522 if ( this.options.disabled || this.greedyChild || !this.visible ) { 38523 return; 38524 } 38525 38526 var parentInstance, scope, parent, 38527 intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ), 38528 c = !intersects && this.isover ? 38529 "isout" : 38530 ( intersects && !this.isover ? "isover" : null ); 38531 if ( !c ) { 38532 return; 38533 } 38534 38535 if ( this.options.greedy ) { 38536 38537 // find droppable parents with same scope 38538 scope = this.options.scope; 38539 parent = this.element.parents( ":data(ui-droppable)" ).filter( function() { 38540 return $( this ).droppable( "instance" ).options.scope === scope; 38541 } ); 38542 38543 if ( parent.length ) { 38544 parentInstance = $( parent[ 0 ] ).droppable( "instance" ); 38545 parentInstance.greedyChild = ( c === "isover" ); 38546 } 38547 } 38548 38549 // We just moved into a greedy child 38550 if ( parentInstance && c === "isover" ) { 38551 parentInstance.isover = false; 38552 parentInstance.isout = true; 38553 parentInstance._out.call( parentInstance, event ); 38554 } 38555 38556 this[ c ] = true; 38557 this[ c === "isout" ? "isover" : "isout" ] = false; 38558 this[ c === "isover" ? "_over" : "_out" ].call( this, event ); 38559 38560 // We just moved out of a greedy child 38561 if ( parentInstance && c === "isout" ) { 38562 parentInstance.isout = false; 38563 parentInstance.isover = true; 38564 parentInstance._over.call( parentInstance, event ); 38565 } 38566 } ); 38567 38568 }, 38569 dragStop: function( draggable, event ) { 38570 draggable.element.parentsUntil( "body" ).off( "scroll.droppable" ); 38571 38572 // Call prepareOffsets one final time since IE does not fire return scroll events when 38573 // overflow was caused by drag (see #5003) 38574 if ( !draggable.options.refreshPositions ) { 38575 $.ui.ddmanager.prepareOffsets( draggable, event ); 38576 } 38577 } 38578}; 38579 38580// DEPRECATED 38581// TODO: switch return back to widget declaration at top of file when this is removed 38582if ( $.uiBackCompat !== false ) { 38583 38584 // Backcompat for activeClass and hoverClass options 38585 $.widget( "ui.droppable", $.ui.droppable, { 38586 options: { 38587 hoverClass: false, 38588 activeClass: false 38589 }, 38590 _addActiveClass: function() { 38591 this._super(); 38592 if ( this.options.activeClass ) { 38593 this.element.addClass( this.options.activeClass ); 38594 } 38595 }, 38596 _removeActiveClass: function() { 38597 this._super(); 38598 if ( this.options.activeClass ) { 38599 this.element.removeClass( this.options.activeClass ); 38600 } 38601 }, 38602 _addHoverClass: function() { 38603 this._super(); 38604 if ( this.options.hoverClass ) { 38605 this.element.addClass( this.options.hoverClass ); 38606 } 38607 }, 38608 _removeHoverClass: function() { 38609 this._super(); 38610 if ( this.options.hoverClass ) { 38611 this.element.removeClass( this.options.hoverClass ); 38612 } 38613 } 38614 } ); 38615} 38616 38617var widgetsDroppable = $.ui.droppable; 38618 38619 38620/*! 38621 * jQuery UI Progressbar 1.13.
386212 38622 * http://jqueryui.com 38623 * 38624 * Copyright jQuery Foundation and other contributors 38625 * Released under the MIT license. 38626 * http://jquery.org/license 38627 */ 38628 38629//>>label: Progressbar 38630//>>group: Widgets 38631/* eslint-disable max-len */ 38632//>>
vendor: 4,217 bytes, lines 38632-38801
38632description: Displays a status indicator for loading state, standard percentage, and other progress indicators. 38633/* eslint-enable max-len */ 38634//>>docs: http://api.jqueryui.com/progressbar/ 38635//>>demos: http://jqueryui.com/progressbar/ 38636//>>css.structure: ../../themes/base/core.css 38637//>>css.structure: ../../themes/base/progressbar.css 38638//>>css.theme: ../../themes/base/theme.css 38639 38640 38641var widgetsProgressbar = $.widget( "ui.progressbar", { 38642 version: "1.13.2", 38643 options: { 38644 classes: { 38645 "ui-progressbar": "ui-corner-all", 38646 "ui-progressbar-value": "ui-corner-left", 38647 "ui-progressbar-complete": "ui-corner-right" 38648 }, 38649 max: 100, 38650 value: 0, 38651 38652 change: null, 38653 complete: null 38654 }, 38655 38656 min: 0, 38657 38658 _create: function() { 38659 38660 // Constrain initial value 38661 this.oldValue = this.options.value = this._constrainedValue(); 38662 38663 this.element.attr( { 38664 38665 // Only set static values; aria-valuenow and aria-valuemax are 38666 // set inside _refreshValue() 38667 role: "progressbar", 38668 "aria-valuemin": this.min 38669 } ); 38670 this._addClass( "ui-progressbar", "ui-widget ui-widget-content" ); 38671 38672 this.valueDiv = $( "<div>" ).appendTo( this.element ); 38673 this._addClass( this.valueDiv, "ui-progressbar-value", "ui-widget-header" ); 38674 this._refreshValue(); 38675 }, 38676 38677 _destroy: function() { 38678 this.element.removeAttr( "role aria-valuemin aria-valuemax aria-valuenow" ); 38679 38680 this.valueDiv.remove(); 38681 }, 38682 38683 value: function( newValue ) { 38684 if ( newValue === undefined ) { 38685 return this.options.value; 38686 } 38687 38688 this.options.value = this._constrainedValue( newValue ); 38689 this._refreshValue(); 38690 }, 38691 38692 _constrainedValue: function( newValue ) { 38693 if ( newValue === undefined ) { 38694 newValue = this.options.value; 38695 } 38696 38697 this.indeterminate = newValue === false; 38698 38699 // Sanitize value 38700 if ( typeof newValue !== "number" ) { 38701 newValue = 0; 38702 } 38703 38704 return this.indeterminate ? false : 38705 Math.min( this.options.max, Math.max( this.min, newValue ) ); 38706 }, 38707 38708 _setOptions: function( options ) { 38709 38710 // Ensure "value" option is set after other values (like max) 38711 var value = options.value; 38712 delete options.value; 38713 38714 this._super( options ); 38715 38716 this.options.value = this._constrainedValue( value ); 38717 this._refreshValue(); 38718 }, 38719 38720 _setOption: function( key, value ) { 38721 if ( key === "max" ) { 38722 38723 // Don't allow a max less than min 38724 value = Math.max( this.min, value ); 38725 } 38726 this._super( key, value ); 38727 }, 38728 38729 _setOptionDisabled: function( value ) { 38730 this._super( value ); 38731 38732 this.element.attr( "aria-disabled", value ); 38733 this._toggleClass( null, "ui-state-disabled", !!value ); 38734 }, 38735 38736 _percentage: function() { 38737 return this.indeterminate ? 38738 100 : 38739 100 * ( this.options.value - this.min ) / ( this.options.max - this.min ); 38740 }, 38741 38742 _refreshValue: function() { 38743 var value = this.options.value, 38744 percentage = this._percentage(); 38745 38746 this.valueDiv 38747 .toggle( this.indeterminate || value > this.min ) 38748 .width( percentage.toFixed( 0 ) + "%" ); 38749 38750 this 38751 ._toggleClass( this.valueDiv, "ui-progressbar-complete", null, 38752 value === this.options.max ) 38753 ._toggleClass( "ui-progressbar-indeterminate", null, this.indeterminate ); 38754 38755 if ( this.indeterminate ) { 38756 this.element.removeAttr( "aria-valuenow" ); 38757 if ( !this.overlayDiv ) { 38758 this.overlayDiv = $( "<div>" ).appendTo( this.valueDiv ); 38759 this._addClass( this.overlayDiv, "ui-progressbar-overlay" ); 38760 } 38761 } else { 38762 this.element.attr( { 38763 "aria-valuemax": this.options.max, 38764 "aria-valuenow": value 38765 } ); 38766 if ( this.overlayDiv ) { 38767 this.overlayDiv.remove(); 38768 this.overlayDiv = null; 38769 } 38770 } 38771 38772 if ( this.oldValue !== value ) { 38773 this.oldValue = value; 38774 this._trigger( "change" ); 38775 } 38776 if ( value === this.options.max ) { 38777 this._trigger( "complete" ); 38778 } 38779 } 38780} ); 38781 38782 38783/*! 38784 * jQuery UI Selectable 1.13.2 38785 * http://jqueryui.com 38786 * 38787 * Copyright jQuery Foundation and other contributors 38788 * Released under the MIT license. 38789 * http://jquery.org/license 38790 */ 38791 38792//>>label: Selectable 38793//>>group: Interactions 38794//>>description: Allows groups of elements to be selected with the mouse. 38795//>>docs: http://api.jqueryui.com/selectable/ 38796//>>demos: http://jqueryui.com/selectable/ 38797//>>css.structure: ../../themes/base/selectable.css 38798 38799 38800var widgetsSelectable = $.widget( "ui.selectable", $.ui.mouse, { 38801 version: "1.13.2
vendor: 7,327 bytes, lines 38801-39082
38801", 38802 options: { 38803 appendTo: "body", 38804 autoRefresh: true, 38805 distance: 0, 38806 filter: "*", 38807 tolerance: "touch", 38808 38809 // Callbacks 38810 selected: null, 38811 selecting: null, 38812 start: null, 38813 stop: null, 38814 unselected: null, 38815 unselecting: null 38816 }, 38817 _create: function() { 38818 var that = this; 38819 38820 this._addClass( "ui-selectable" ); 38821 38822 this.dragged = false; 38823 38824 // Cache selectee children based on filter 38825 this.refresh = function() { 38826 that.elementPos = $( that.element[ 0 ] ).offset(); 38827 that.selectees = $( that.options.filter, that.element[ 0 ] ); 38828 that._addClass( that.selectees, "ui-selectee" ); 38829 that.selectees.each( function() { 38830 var $this = $( this ), 38831 selecteeOffset = $this.offset(), 38832 pos = { 38833 left: selecteeOffset.left - that.elementPos.left, 38834 top: selecteeOffset.top - that.elementPos.top 38835 }; 38836 $.data( this, "selectable-item", { 38837 element: this, 38838 $element: $this, 38839 left: pos.left, 38840 top: pos.top, 38841 right: pos.left + $this.outerWidth(), 38842 bottom: pos.top + $this.outerHeight(), 38843 startselected: false, 38844 selected: $this.hasClass( "ui-selected" ), 38845 selecting: $this.hasClass( "ui-selecting" ), 38846 unselecting: $this.hasClass( "ui-unselecting" ) 38847 } ); 38848 } ); 38849 }; 38850 this.refresh(); 38851 38852 this._mouseInit(); 38853 38854 this.helper = $( "<div>" ); 38855 this._addClass( this.helper, "ui-selectable-helper" ); 38856 }, 38857 38858 _destroy: function() { 38859 this.selectees.removeData( "selectable-item" ); 38860 this._mouseDestroy(); 38861 }, 38862 38863 _mouseStart: function( event ) { 38864 var that = this, 38865 options = this.options; 38866 38867 this.opos = [ event.pageX, event.pageY ]; 38868 this.elementPos = $( this.element[ 0 ] ).offset(); 38869 38870 if ( this.options.disabled ) { 38871 return; 38872 } 38873 38874 this.selectees = $( options.filter, this.element[ 0 ] ); 38875 38876 this._trigger( "start", event ); 38877 38878 $( options.appendTo ).append( this.helper ); 38879 38880 // position helper (lasso) 38881 this.helper.css( { 38882 "left": event.pageX, 38883 "top": event.pageY, 38884 "width": 0, 38885 "height": 0 38886 } ); 38887 38888 if ( options.autoRefresh ) { 38889 this.refresh(); 38890 } 38891 38892 this.selectees.filter( ".ui-selected" ).each( function() { 38893 var selectee = $.data( this, "selectable-item" ); 38894 selectee.startselected = true; 38895 if ( !event.metaKey && !event.ctrlKey ) { 38896 that._removeClass( selectee.$element, "ui-selected" ); 38897 selectee.selected = false; 38898 that._addClass( selectee.$element, "ui-unselecting" ); 38899 selectee.unselecting = true; 38900 38901 // selectable UNSELECTING callback 38902 that._trigger( "unselecting", event, { 38903 unselecting: selectee.element 38904 } ); 38905 } 38906 } ); 38907 38908 $( event.target ).parents().addBack().each( function() { 38909 var doSelect, 38910 selectee = $.data( this, "selectable-item" ); 38911 if ( selectee ) { 38912 doSelect = ( !event.metaKey && !event.ctrlKey ) || 38913 !selectee.$element.hasClass( "ui-selected" ); 38914 that._removeClass( selectee.$element, doSelect ? "ui-unselecting" : "ui-selected" ) 38915 ._addClass( selectee.$element, doSelect ? "ui-selecting" : "ui-unselecting" ); 38916 selectee.unselecting = !doSelect; 38917 selectee.selecting = doSelect; 38918 selectee.selected = doSelect; 38919 38920 // selectable (UN)SELECTING callback 38921 if ( doSelect ) { 38922 that._trigger( "selecting", event, { 38923 selecting: selectee.element 38924 } ); 38925 } else { 38926 that._trigger( "unselecting", event, { 38927 unselecting: selectee.element 38928 } ); 38929 } 38930 return false; 38931 } 38932 } ); 38933 38934 }, 38935 38936 _mouseDrag: function( event ) { 38937 38938 this.dragged = true; 38939 38940 if ( this.options.disabled ) { 38941 return; 38942 } 38943 38944 var tmp, 38945 that = this, 38946 options = this.options, 38947 x1 = this.opos[ 0 ], 38948 y1 = this.opos[ 1 ], 38949 x2 = event.pageX, 38950 y2 = event.pageY; 38951 38952 if ( x1 > x2 ) { 38953 tmp = x2; x2 = x1; x1 = tmp; 38954 } 38955 if ( y1 > y2 ) { 38956 tmp = y2; y2 = y1; y1 = tmp; 38957 } 38958 this.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } ); 38959 38960 this.selectees.each( function() { 38961 var selectee = $.data( this, "selectable-item" ), 38962 hit = false, 38963 offset = {}; 38964 38965 //prevent helper from being selected if appendTo: selectable 38966 if ( !selectee || selectee.element === that.element[ 0 ] ) { 38967 return; 38968 } 38969 38970 offset.left = selectee.left + that.elementPos.left; 38971 offset.right = selectee.right + that.elementPos.left; 38972 offset.top = selectee.top + that.elementPos.top; 38973 offset.bottom = selectee.bottom + that.elementPos.top; 38974 38975 if ( options.tolerance === "touch" ) { 38976 hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 || 38977 offset.bottom < y1 ) ); 38978 } else if ( options.tolerance === "fit" ) { 38979 hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 && 38980 offset.bottom < y2 ); 38981 } 38982 38983 if ( hit ) { 38984 38985 // SELECT 38986 if ( selectee.selected ) { 38987 that._removeClass( selectee.$element, "ui-selected" ); 38988 selectee.selected = false; 38989 } 38990 if ( selectee.unselecting ) { 38991 that._removeClass( selectee.$element, "ui-unselecting" ); 38992 selectee.unselecting = false; 38993 } 38994 if ( !selectee.selecting ) { 38995 that._addClass( selectee.$element, "ui-selecting" ); 38996 selectee.selecting = true; 38997 38998 // selectable SELECTING callback 38999 that._trigger( "selecting", event, { 39000 selecting: selectee.element 39001 } ); 39002 } 39003 } else { 39004 39005 // UNSELECT 39006 if ( selectee.selecting ) { 39007 if ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) { 39008 that._removeClass( selectee.$element, "ui-selecting" ); 39009 selectee.selecting = false; 39010 that._addClass( selectee.$element, "ui-selected" ); 39011 selectee.selected = true; 39012 } else { 39013 that._removeClass( selectee.$element, "ui-selecting" ); 39014 selectee.selecting = false; 39015 if ( selectee.startselected ) { 39016 that._addClass( selectee.$element, "ui-unselecting" ); 39017 selectee.unselecting = true; 39018 } 39019 39020 // selectable UNSELECTING callback 39021 that._trigger( "unselecting", event, { 39022 unselecting: selectee.element 39023 } ); 39024 } 39025 } 39026 if ( selectee.selected ) { 39027 if ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) { 39028 that._removeClass( selectee.$element, "ui-selected" ); 39029 selectee.selected = false; 39030 39031 that._addClass( selectee.$element, "ui-unselecting" ); 39032 selectee.unselecting = true; 39033 39034 // selectable UNSELECTING callback 39035 that._trigger( "unselecting", event, { 39036 unselecting: selectee.element 39037 } ); 39038 } 39039 } 39040 } 39041 } ); 39042 39043 return false; 39044 }, 39045 39046 _mouseStop: function( event ) { 39047 var that = this; 39048 39049 this.dragged = false; 39050 39051 $( ".ui-unselecting", this.element[ 0 ] ).each( function() { 39052 var selectee = $.data( this, "selectable-item" ); 39053 that._removeClass( selectee.$element, "ui-unselecting" ); 39054 selectee.unselecting = false; 39055 selectee.startselected = false; 39056 that._trigger( "unselected", event, { 39057 unselected: selectee.element 39058 } ); 39059 } ); 39060 $( ".ui-selecting", this.element[ 0 ] ).each( function() { 39061 var selectee = $.data( this, "selectable-item" ); 39062 that._removeClass( selectee.$element, "ui-selecting" ) 39063 ._addClass( selectee.$element, "ui-selected" ); 39064 selectee.selecting = false; 39065 selectee.selected = true; 39066 selectee.startselected = true; 39067 that._trigger( "selected", event, { 39068 selected: selectee.element 39069 } ); 39070 } ); 39071 this._trigger( "stop", event ); 39072 39073 this.helper.remove(); 39074 39075 return false; 39076 } 39077 39078} ); 39079 39080 39081/*! 39082 * jQuery UI Selectmenu 1.13.
vendor: 8,061 bytes, lines 39082-39413
390822 39083 * http://jqueryui.com 39084 * 39085 * Copyright jQuery Foundation and other contributors 39086 * Released under the MIT license. 39087 * http://jquery.org/license 39088 */ 39089 39090//>>label: Selectmenu 39091//>>group: Widgets 39092/* eslint-disable max-len */ 39093//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select. 39094/* eslint-enable max-len */ 39095//>>docs: http://api.jqueryui.com/selectmenu/ 39096//>>demos: http://jqueryui.com/selectmenu/ 39097//>>css.structure: ../../themes/base/core.css 39098//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css 39099//>>css.theme: ../../themes/base/theme.css 39100 39101 39102var widgetsSelectmenu = $.widget( "ui.selectmenu", [ $.ui.formResetMixin, { 39103 version: "1.13.2", 39104 defaultElement: "<select>", 39105 options: { 39106 appendTo: null, 39107 classes: { 39108 "ui-selectmenu-button-open": "ui-corner-top", 39109 "ui-selectmenu-button-closed": "ui-corner-all" 39110 }, 39111 disabled: null, 39112 icons: { 39113 button: "ui-icon-triangle-1-s" 39114 }, 39115 position: { 39116 my: "left top", 39117 at: "left bottom", 39118 collision: "none" 39119 }, 39120 width: false, 39121 39122 // Callbacks 39123 change: null, 39124 close: null, 39125 focus: null, 39126 open: null, 39127 select: null 39128 }, 39129 39130 _create: function() { 39131 var selectmenuId = this.element.uniqueId().attr( "id" ); 39132 this.ids = { 39133 element: selectmenuId, 39134 button: selectmenuId + "-button", 39135 menu: selectmenuId + "-menu" 39136 }; 39137 39138 this._drawButton(); 39139 this._drawMenu(); 39140 this._bindFormResetHandler(); 39141 39142 this._rendered = false; 39143 this.menuItems = $(); 39144 }, 39145 39146 _drawButton: function() { 39147 var icon, 39148 that = this, 39149 item = this._parseOption( 39150 this.element.find( "option:selected" ), 39151 this.element[ 0 ].selectedIndex 39152 ); 39153 39154 // Associate existing label with the new button 39155 this.labels = this.element.labels().attr( "for", this.ids.button ); 39156 this._on( this.labels, { 39157 click: function( event ) { 39158 this.button.trigger( "focus" ); 39159 event.preventDefault(); 39160 } 39161 } ); 39162 39163 // Hide original select element 39164 this.element.hide(); 39165 39166 // Create button 39167 this.button = $( "<span>", { 39168 tabindex: this.options.disabled ? -1 : 0, 39169 id: this.ids.button, 39170 role: "combobox", 39171 "aria-expanded": "false", 39172 "aria-autocomplete": "list", 39173 "aria-owns": this.ids.menu, 39174 "aria-haspopup": "true", 39175 title: this.element.attr( "title" ) 39176 } ) 39177 .insertAfter( this.element ); 39178 39179 this._addClass( this.button, "ui-selectmenu-button ui-selectmenu-button-closed", 39180 "ui-button ui-widget" ); 39181 39182 icon = $( "<span>" ).appendTo( this.button ); 39183 this._addClass( icon, "ui-selectmenu-icon", "ui-icon " + this.options.icons.button ); 39184 this.buttonItem = this._renderButtonItem( item ) 39185 .appendTo( this.button ); 39186 39187 if ( this.options.width !== false ) { 39188 this._resizeButton(); 39189 } 39190 39191 this._on( this.button, this._buttonEvents ); 39192 this.button.one( "focusin", function() { 39193 39194 // Delay rendering the menu items until the button receives focus. 39195 // The menu may have already been rendered via a programmatic open. 39196 if ( !that._rendered ) { 39197 that._refreshMenu(); 39198 } 39199 } ); 39200 }, 39201 39202 _drawMenu: function() { 39203 var that = this; 39204 39205 // Create menu 39206 this.menu = $( "<ul>", { 39207 "aria-hidden": "true", 39208 "aria-labelledby": this.ids.button, 39209 id: this.ids.menu 39210 } ); 39211 39212 // Wrap menu 39213 this.menuWrap = $( "<div>" ).append( this.menu ); 39214 this._addClass( this.menuWrap, "ui-selectmenu-menu", "ui-front" ); 39215 this.menuWrap.appendTo( this._appendTo() ); 39216 39217 // Initialize menu widget 39218 this.menuInstance = this.menu 39219 .menu( { 39220 classes: { 39221 "ui-menu": "ui-corner-bottom" 39222 }, 39223 role: "listbox", 39224 select: function( event, ui ) { 39225 event.preventDefault(); 39226 39227 // Support: IE8 39228 // If the item was selected via a click, the text selection 39229 // will be destroyed in IE 39230 that._setSelection(); 39231 39232 that._select( ui.item.data( "ui-selectmenu-item" ), event ); 39233 }, 39234 focus: function( event, ui ) { 39235 var item = ui.item.data( "ui-selectmenu-item" ); 39236 39237 // Prevent inital focus from firing and check if its a newly focused item 39238 if ( that.focusIndex != null && item.index !== that.focusIndex ) { 39239 that._trigger( "focus", event, { item: item } ); 39240 if ( !that.isOpen ) { 39241 that._select( item, event ); 39242 } 39243 } 39244 that.focusIndex = item.index; 39245 39246 that.button.attr( "aria-activedescendant", 39247 that.menuItems.eq( item.index ).attr( "id" ) ); 39248 } 39249 } ) 39250 .menu( "instance" ); 39251 39252 // Don't close the menu on mouseleave 39253 this.menuInstance._off( this.menu, "mouseleave" ); 39254 39255 // Cancel the menu's collapseAll on document click 39256 this.menuInstance._closeOnDocumentClick = function() { 39257 return false; 39258 }; 39259 39260 // Selects often contain empty items, but never contain dividers 39261 this.menuInstance._isDivider = function() { 39262 return false; 39263 }; 39264 }, 39265 39266 refresh: function() { 39267 this._refreshMenu(); 39268 this.buttonItem.replaceWith( 39269 this.buttonItem = this._renderButtonItem( 39270 39271 // Fall back to an empty object in case there are no options 39272 this._getSelectedItem().data( "ui-selectmenu-item" ) || {} 39273 ) 39274 ); 39275 if ( this.options.width === null ) { 39276 this._resizeButton(); 39277 } 39278 }, 39279 39280 _refreshMenu: function() { 39281 var item, 39282 options = this.element.find( "option" ); 39283 39284 this.menu.empty(); 39285 39286 this._parseOptions( options ); 39287 this._renderMenu( this.menu, this.items ); 39288 39289 this.menuInstance.refresh(); 39290 this.menuItems = this.menu.find( "li" ) 39291 .not( ".ui-selectmenu-optgroup" ) 39292 .find( ".ui-menu-item-wrapper" ); 39293 39294 this._rendered = true; 39295 39296 if ( !options.length ) { 39297 return; 39298 } 39299 39300 item = this._getSelectedItem(); 39301 39302 // Update the menu to have the correct item focused 39303 this.menuInstance.focus( null, item ); 39304 this._setAria( item.data( "ui-selectmenu-item" ) ); 39305 39306 // Set disabled state 39307 this._setOption( "disabled", this.element.prop( "disabled" ) ); 39308 }, 39309 39310 open: function( event ) { 39311 if ( this.options.disabled ) { 39312 return; 39313 } 39314 39315 // If this is the first time the menu is being opened, render the items 39316 if ( !this._rendered ) { 39317 this._refreshMenu(); 39318 } else { 39319 39320 // Menu clears focus on close, reset focus to selected item 39321 this._removeClass( this.menu.find( ".ui-state-active" ), null, "ui-state-active" ); 39322 this.menuInstance.focus( null, this._getSelectedItem() ); 39323 } 39324 39325 // If there are no options, don't open the menu 39326 if ( !this.menuItems.length ) { 39327 return; 39328 } 39329 39330 this.isOpen = true; 39331 this._toggleAttr(); 39332 this._resizeMenu(); 39333 this._position(); 39334 39335 this._on( this.document, this._documentClick ); 39336 39337 this._trigger( "open", event ); 39338 }, 39339 39340 _position: function() { 39341 this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) ); 39342 }, 39343 39344 close: function( event ) { 39345 if ( !this.isOpen ) { 39346 return; 39347 } 39348 39349 this.isOpen = false; 39350 this._toggleAttr(); 39351 39352 this.range = null; 39353 this._off( this.document ); 39354 39355 this._trigger( "close", event ); 39356 }, 39357 39358 widget: function() { 39359 return this.button; 39360 }, 39361 39362 menuWidget: function() { 39363 return this.menu; 39364 }, 39365 39366 _renderButtonItem: function( item ) { 39367 var buttonItem = $( "<span>" ); 39368 39369 this._setText( buttonItem, item.label ); 39370 this._addClass( buttonItem, "ui-selectmenu-text" ); 39371 39372 return buttonItem; 39373 }, 39374 39375 _renderMenu: function( ul, items ) { 39376 var that = this, 39377 currentOptgroup = ""; 39378 39379 $.each( items, function( index, item ) { 39380 var li; 39381 39382 if ( item.optgroup !== currentOptgroup ) { 39383 li = $( "<li>", { 39384 text: item.optgroup 39385 } ); 39386 that._addClass( li, "ui-selectmenu-optgroup", "ui-menu-divider" + 39387 ( item.element.parent( "optgroup" ).prop( "disabled" ) ? 39388 " ui-state-disabled" : 39389 "" ) ); 39390 39391 li.appendTo( ul ); 39392 39393 currentOptgroup = item.optgroup; 39394 } 39395 39396 that._renderItemData( ul, item ); 39397 } ); 39398 }, 39399 39400 _renderItemData: function( ul, item ) { 39401 return this._renderItem( ul, item ).data( "ui-selectmenu-item", item ); 39402 }, 39403 39404 _renderItem: function( ul, item ) { 39405 var li = $( "<li>" ), 39406 wrapper = $( "<div>", { 39407 title: item.element.attr( "title" ) 39408 } ); 39409 39410 if ( item.disabled ) { 39411 this._addClass( li, null, "ui-state-disabled" ); 39412 } 39413 this._setText( wrapper, item.label );
vendor: 2,380 bytes, lines 39413-39521
39413 39414 39415 return li.append( wrapper ).appendTo( ul ); 39416 }, 39417 39418 _setText: function( element, value ) { 39419 if ( value ) { 39420 element.text( value ); 39421 } else { 39422 element.html( " " ); 39423 } 39424 }, 39425 39426 _move: function( direction, event ) { 39427 var item, next, 39428 filter = ".ui-menu-item"; 39429 39430 if ( this.isOpen ) { 39431 item = this.menuItems.eq( this.focusIndex ).parent( "li" ); 39432 } else { 39433 item = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" ); 39434 filter += ":not(.ui-state-disabled)"; 39435 } 39436 39437 if ( direction === "first" || direction === "last" ) { 39438 next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 ); 39439 } else { 39440 next = item[ direction + "All" ]( filter ).eq( 0 ); 39441 } 39442 39443 if ( next.length ) { 39444 this.menuInstance.focus( event, next ); 39445 } 39446 }, 39447 39448 _getSelectedItem: function() { 39449 return this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( "li" ); 39450 }, 39451 39452 _toggle: function( event ) { 39453 this[ this.isOpen ? "close" : "open" ]( event ); 39454 }, 39455 39456 _setSelection: function() { 39457 var selection; 39458 39459 if ( !this.range ) { 39460 return; 39461 } 39462 39463 if ( window.getSelection ) { 39464 selection = window.getSelection(); 39465 selection.removeAllRanges(); 39466 selection.addRange( this.range ); 39467 39468 // Support: IE8 39469 } else { 39470 this.range.select(); 39471 } 39472 39473 // Support: IE 39474 // Setting the text selection kills the button focus in IE, but 39475 // restoring the focus doesn't kill the selection. 39476 this.button.trigger( "focus" ); 39477 }, 39478 39479 _documentClick: { 39480 mousedown: function( event ) { 39481 if ( !this.isOpen ) { 39482 return; 39483 } 39484 39485 if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + 39486 $.escapeSelector( this.ids.button ) ).length ) { 39487 this.close( event ); 39488 } 39489 } 39490 }, 39491 39492 _buttonEvents: { 39493 39494 // Prevent text selection from being reset when interacting with the selectmenu (#10144) 39495 mousedown: function() { 39496 var selection; 39497 39498 if ( window.getSelection ) { 39499 selection = window.getSelection(); 39500 if ( selection.rangeCount ) { 39501 this.range = selection.getRangeAt( 0 ); 39502 } 39503 39504 // Support: IE8 39505 } else { 39506 this.range = document.selection.createRange(); 39507 } 39508 }, 39509 39510 click: function( event ) { 39511 this._setSelection(); 39512 this._toggle( event ); 39513 }, 39514 39515 keydown: function( event ) { 39516 var preventDefault = true; 39517 switch ( event.keyCode ) { 39518 case $.ui.keyCode.TAB: 39519 case $.ui.keyCode.ESCAPE: 39520 this.close( event ); 39521 preventDefault = false;
vendor: 4,716 bytes, lines 39522-39717
39522 break; 39523 case $.ui.keyCode.ENTER: 39524 if ( this.isOpen ) { 39525 this._selectFocusedItem( event ); 39526 } 39527 break; 39528 case $.ui.keyCode.UP: 39529 if ( event.altKey ) { 39530 this._toggle( event ); 39531 } else { 39532 this._move( "prev", event ); 39533 } 39534 break; 39535 case $.ui.keyCode.DOWN: 39536 if ( event.altKey ) { 39537 this._toggle( event ); 39538 } else { 39539 this._move( "next", event ); 39540 } 39541 break; 39542 case $.ui.keyCode.SPACE: 39543 if ( this.isOpen ) { 39544 this._selectFocusedItem( event ); 39545 } else { 39546 this._toggle( event ); 39547 } 39548 break; 39549 case $.ui.keyCode.LEFT: 39550 this._move( "prev", event ); 39551 break; 39552 case $.ui.keyCode.RIGHT: 39553 this._move( "next", event ); 39554 break; 39555 case $.ui.keyCode.HOME: 39556 case $.ui.keyCode.PAGE_UP: 39557 this._move( "first", event ); 39558 break; 39559 case $.ui.keyCode.END: 39560 case $.ui.keyCode.PAGE_DOWN: 39561 this._move( "last", event ); 39562 break; 39563 default: 39564 this.menu.trigger( event ); 39565 preventDefault = false; 39566 } 39567 39568 if ( preventDefault ) { 39569 event.preventDefault(); 39570 } 39571 } 39572 }, 39573 39574 _selectFocusedItem: function( event ) { 39575 var item = this.menuItems.eq( this.focusIndex ).parent( "li" ); 39576 if ( !item.hasClass( "ui-state-disabled" ) ) { 39577 this._select( item.data( "ui-selectmenu-item" ), event ); 39578 } 39579 }, 39580 39581 _select: function( item, event ) { 39582 var oldIndex = this.element[ 0 ].selectedIndex; 39583 39584 // Change native select element 39585 this.element[ 0 ].selectedIndex = item.index; 39586 this.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) ); 39587 this._setAria( item ); 39588 this._trigger( "select", event, { item: item } ); 39589 39590 if ( item.index !== oldIndex ) { 39591 this._trigger( "change", event, { item: item } ); 39592 } 39593 39594 this.close( event ); 39595 }, 39596 39597 _setAria: function( item ) { 39598 var id = this.menuItems.eq( item.index ).attr( "id" ); 39599 39600 this.button.attr( { 39601 "aria-labelledby": id, 39602 "aria-activedescendant": id 39603 } ); 39604 this.menu.attr( "aria-activedescendant", id ); 39605 }, 39606 39607 _setOption: function( key, value ) { 39608 if ( key === "icons" ) { 39609 var icon = this.button.find( "span.ui-icon" ); 39610 this._removeClass( icon, null, this.options.icons.button ) 39611 ._addClass( icon, null, value.button ); 39612 } 39613 39614 this._super( key, value ); 39615 39616 if ( key === "appendTo" ) { 39617 this.menuWrap.appendTo( this._appendTo() ); 39618 } 39619 39620 if ( key === "width" ) { 39621 this._resizeButton(); 39622 } 39623 }, 39624 39625 _setOptionDisabled: function( value ) { 39626 this._super( value ); 39627 39628 this.menuInstance.option( "disabled", value ); 39629 this.button.attr( "aria-disabled", value ); 39630 this._toggleClass( this.button, null, "ui-state-disabled", value ); 39631 39632 this.element.prop( "disabled", value ); 39633 if ( value ) { 39634 this.button.attr( "tabindex", -1 ); 39635 this.close(); 39636 } else { 39637 this.button.attr( "tabindex", 0 ); 39638 } 39639 }, 39640 39641 _appendTo: function() { 39642 var element = this.options.appendTo; 39643 39644 if ( element ) { 39645 element = element.jquery || element.nodeType ? 39646 $( element ) : 39647 this.document.find( element ).eq( 0 ); 39648 } 39649 39650 if ( !element || !element[ 0 ] ) { 39651 element = this.element.closest( ".ui-front, dialog" ); 39652 } 39653 39654 if ( !element.length ) { 39655 element = this.document[ 0 ].body; 39656 } 39657 39658 return element; 39659 }, 39660 39661 _toggleAttr: function() { 39662 this.button.attr( "aria-expanded", this.isOpen ); 39663 39664 // We can't use two _toggleClass() calls here, because we need to make sure 39665 // we always remove classes first and add them second, otherwise if both classes have the 39666 // same theme class, it will be removed after we add it. 39667 this._removeClass( this.button, "ui-selectmenu-button-" + 39668 ( this.isOpen ? "closed" : "open" ) ) 39669 ._addClass( this.button, "ui-selectmenu-button-" + 39670 ( this.isOpen ? "open" : "closed" ) ) 39671 ._toggleClass( this.menuWrap, "ui-selectmenu-open", null, this.isOpen ); 39672 39673 this.menu.attr( "aria-hidden", !this.isOpen ); 39674 }, 39675 39676 _resizeButton: function() { 39677 var width = this.options.width; 39678 39679 // For `width: false`, just remove inline style and stop 39680 if ( width === false ) { 39681 this.button.css( "width", "" ); 39682 return; 39683 } 39684 39685 // For `width: null`, match the width of the original element 39686 if ( width === null ) { 39687 width = this.element.show().outerWidth(); 39688 this.element.hide(); 39689 } 39690 39691 this.button.outerWidth( width ); 39692 }, 39693 39694 _resizeMenu: function() { 39695 this.menu.outerWidth( Math.max( 39696 this.button.outerWidth(), 39697 39698 // Support: IE10 39699 // IE10 wraps long text (possibly a rounding bug) 39700 // so we add 1px to avoid the wrapping 39701 this.menu.width( "" ).outerWidth() + 1 39702 ) ); 39703 }, 39704 39705 _getCreateOptions: function() { 39706 var options = this._super(); 39707 39708 options.disabled = this.element.prop( "disabled" ); 39709 39710 return options; 39711 }, 39712 39713 _parseOptions: function( options ) { 39714 var that = this, 39715 data = []; 39716 options.each( function( index, item ) { 39717
vendor: 3,668 bytes, lines 39717-39867
39717if ( item.hidden ) { 39718 return; 39719 } 39720 39721 data.push( that._parseOption( $( item ), index ) ); 39722 } ); 39723 this.items = data; 39724 }, 39725 39726 _parseOption: function( option, index ) { 39727 var optgroup = option.parent( "optgroup" ); 39728 39729 return { 39730 element: option, 39731 index: index, 39732 value: option.val(), 39733 label: option.text(), 39734 optgroup: optgroup.attr( "label" ) || "", 39735 disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" ) 39736 }; 39737 }, 39738 39739 _destroy: function() { 39740 this._unbindFormResetHandler(); 39741 this.menuWrap.remove(); 39742 this.button.remove(); 39743 this.element.show(); 39744 this.element.removeUniqueId(); 39745 this.labels.attr( "for", this.ids.element ); 39746 } 39747} ] ); 39748 39749 39750/*! 39751 * jQuery UI Slider 1.13.2 39752 * http://jqueryui.com 39753 * 39754 * Copyright jQuery Foundation and other contributors 39755 * Released under the MIT license. 39756 * http://jquery.org/license 39757 */ 39758 39759//>>label: Slider 39760//>>group: Widgets 39761//>>description: Displays a flexible slider with ranges and accessibility via keyboard. 39762//>>docs: http://api.jqueryui.com/slider/ 39763//>>demos: http://jqueryui.com/slider/ 39764//>>css.structure: ../../themes/base/core.css 39765//>>css.structure: ../../themes/base/slider.css 39766//>>css.theme: ../../themes/base/theme.css 39767 39768 39769var widgetsSlider = $.widget( "ui.slider", $.ui.mouse, { 39770 version: "1.13.2", 39771 widgetEventPrefix: "slide", 39772 39773 options: { 39774 animate: false, 39775 classes: { 39776 "ui-slider": "ui-corner-all", 39777 "ui-slider-handle": "ui-corner-all", 39778 39779 // Note: ui-widget-header isn't the most fittingly semantic framework class for this 39780 // element, but worked best visually with a variety of themes 39781 "ui-slider-range": "ui-corner-all ui-widget-header" 39782 }, 39783 distance: 0, 39784 max: 100, 39785 min: 0, 39786 orientation: "horizontal", 39787 range: false, 39788 step: 1, 39789 value: 0, 39790 values: null, 39791 39792 // Callbacks 39793 change: null, 39794 slide: null, 39795 start: null, 39796 stop: null 39797 }, 39798 39799 // Number of pages in a slider 39800 // (how many times can you page up/down to go through the whole range) 39801 numPages: 5, 39802 39803 _create: function() { 39804 this._keySliding = false; 39805 this._mouseSliding = false; 39806 this._animateOff = true; 39807 this._handleIndex = null; 39808 this._detectOrientation(); 39809 this._mouseInit(); 39810 this._calculateNewMax(); 39811 39812 this._addClass( "ui-slider ui-slider-" + this.orientation, 39813 "ui-widget ui-widget-content" ); 39814 39815 this._refresh(); 39816 39817 this._animateOff = false; 39818 }, 39819 39820 _refresh: function() { 39821 this._createRange(); 39822 this._createHandles(); 39823 this._setupEvents(); 39824 this._refreshValue(); 39825 }, 39826 39827 _createHandles: function() { 39828 var i, handleCount, 39829 options = this.options, 39830 existingHandles = this.element.find( ".ui-slider-handle" ), 39831 handle = "<span tabindex='0'></span>", 39832 handles = []; 39833 39834 handleCount = ( options.values && options.values.length ) || 1; 39835 39836 if ( existingHandles.length > handleCount ) { 39837 existingHandles.slice( handleCount ).remove(); 39838 existingHandles = existingHandles.slice( 0, handleCount ); 39839 } 39840 39841 for ( i = existingHandles.length; i < handleCount; i++ ) { 39842 handles.push( handle ); 39843 } 39844 39845 this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) ); 39846 39847 this._addClass( this.handles, "ui-slider-handle", "ui-state-default" ); 39848 39849 this.handle = this.handles.eq( 0 ); 39850 39851 this.handles.each( function( i ) { 39852 $( this ) 39853 .data( "ui-slider-handle-index", i ) 39854 .attr( "tabIndex", 0 ); 39855 } ); 39856 }, 39857 39858 _createRange: function() { 39859 var options = this.options; 39860 39861 if ( options.range ) { 39862 if ( options.range === true ) { 39863 if ( !options.values ) { 39864 options.values = [ this._valueMin(), this._valueMin() ]; 39865 } else if ( options.values.length && options.values.length !== 2 ) { 39866 options.values = [ options.values[ 0 ], options.values[ 0 ] ]; 39867 } else if ( Array
vendor: 6,343 bytes, lines 39867-40113
39867.isArray( options.values ) ) { 39868 options.values = options.values.slice( 0 ); 39869 } 39870 } 39871 39872 if ( !this.range || !this.range.length ) { 39873 this.range = $( "<div>" ) 39874 .appendTo( this.element ); 39875 39876 this._addClass( this.range, "ui-slider-range" ); 39877 } else { 39878 this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" ); 39879 39880 // Handle range switching from true to min/max 39881 this.range.css( { 39882 "left": "", 39883 "bottom": "" 39884 } ); 39885 } 39886 if ( options.range === "min" || options.range === "max" ) { 39887 this._addClass( this.range, "ui-slider-range-" + options.range ); 39888 } 39889 } else { 39890 if ( this.range ) { 39891 this.range.remove(); 39892 } 39893 this.range = null; 39894 } 39895 }, 39896 39897 _setupEvents: function() { 39898 this._off( this.handles ); 39899 this._on( this.handles, this._handleEvents ); 39900 this._hoverable( this.handles ); 39901 this._focusable( this.handles ); 39902 }, 39903 39904 _destroy: function() { 39905 this.handles.remove(); 39906 if ( this.range ) { 39907 this.range.remove(); 39908 } 39909 39910 this._mouseDestroy(); 39911 }, 39912 39913 _mouseCapture: function( event ) { 39914 var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle, 39915 that = this, 39916 o = this.options; 39917 39918 if ( o.disabled ) { 39919 return false; 39920 } 39921 39922 this.elementSize = { 39923 width: this.element.outerWidth(), 39924 height: this.element.outerHeight() 39925 }; 39926 this.elementOffset = this.element.offset(); 39927 39928 position = { x: event.pageX, y: event.pageY }; 39929 normValue = this._normValueFromMouse( position ); 39930 distance = this._valueMax() - this._valueMin() + 1; 39931 this.handles.each( function( i ) { 39932 var thisDistance = Math.abs( normValue - that.values( i ) ); 39933 if ( ( distance > thisDistance ) || 39934 ( distance === thisDistance && 39935 ( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) { 39936 distance = thisDistance; 39937 closestHandle = $( this ); 39938 index = i; 39939 } 39940 } ); 39941 39942 allowed = this._start( event, index ); 39943 if ( allowed === false ) { 39944 return false; 39945 } 39946 this._mouseSliding = true; 39947 39948 this._handleIndex = index; 39949 39950 this._addClass( closestHandle, null, "ui-state-active" ); 39951 closestHandle.trigger( "focus" ); 39952 39953 offset = closestHandle.offset(); 39954 mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" ); 39955 this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : { 39956 left: event.pageX - offset.left - ( closestHandle.width() / 2 ), 39957 top: event.pageY - offset.top - 39958 ( closestHandle.height() / 2 ) - 39959 ( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) - 39960 ( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) + 39961 ( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 ) 39962 }; 39963 39964 if ( !this.handles.hasClass( "ui-state-hover" ) ) { 39965 this._slide( event, index, normValue ); 39966 } 39967 this._animateOff = true; 39968 return true; 39969 }, 39970 39971 _mouseStart: function() { 39972 return true; 39973 }, 39974 39975 _mouseDrag: function( event ) { 39976 var position = { x: event.pageX, y: event.pageY }, 39977 normValue = this._normValueFromMouse( position ); 39978 39979 this._slide( event, this._handleIndex, normValue ); 39980 39981 return false; 39982 }, 39983 39984 _mouseStop: function( event ) { 39985 this._removeClass( this.handles, null, "ui-state-active" ); 39986 this._mouseSliding = false; 39987 39988 this._stop( event, this._handleIndex ); 39989 this._change( event, this._handleIndex ); 39990 39991 this._handleIndex = null; 39992 this._clickOffset = null; 39993 this._animateOff = false; 39994 39995 return false; 39996 }, 39997 39998 _detectOrientation: function() { 39999 this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal"; 40000 }, 40001 40002 _normValueFromMouse: function( position ) { 40003 var pixelTotal, 40004 pixelMouse, 40005 percentMouse, 40006 valueTotal, 40007 valueMouse; 40008 40009 if ( this.orientation === "horizontal" ) { 40010 pixelTotal = this.elementSize.width; 40011 pixelMouse = position.x - this.elementOffset.left - 40012 ( this._clickOffset ? this._clickOffset.left : 0 ); 40013 } else { 40014 pixelTotal = this.elementSize.height; 40015 pixelMouse = position.y - this.elementOffset.top - 40016 ( this._clickOffset ? this._clickOffset.top : 0 ); 40017 } 40018 40019 percentMouse = ( pixelMouse / pixelTotal ); 40020 if ( percentMouse > 1 ) { 40021 percentMouse = 1; 40022 } 40023 if ( percentMouse < 0 ) { 40024 percentMouse = 0; 40025 } 40026 if ( this.orientation === "vertical" ) { 40027 percentMouse = 1 - percentMouse; 40028 } 40029 40030 valueTotal = this._valueMax() - this._valueMin(); 40031 valueMouse = this._valueMin() + percentMouse * valueTotal; 40032 40033 return this._trimAlignValue( valueMouse ); 40034 }, 40035 40036 _uiHash: function( index, value, values ) { 40037 var uiHash = { 40038 handle: this.handles[ index ], 40039 handleIndex: index, 40040 value: value !== undefined ? value : this.value() 40041 }; 40042 40043 if ( this._hasMultipleValues() ) { 40044 uiHash.value = value !== undefined ? value : this.values( index ); 40045 uiHash.values = values || this.values(); 40046 } 40047 40048 return uiHash; 40049 }, 40050 40051 _hasMultipleValues: function() { 40052 return this.options.values && this.options.values.length; 40053 }, 40054 40055 _start: function( event, index ) { 40056 return this._trigger( "start", event, this._uiHash( index ) ); 40057 }, 40058 40059 _slide: function( event, index, newVal ) { 40060 var allowed, otherVal, 40061 currentValue = this.value(), 40062 newValues = this.values(); 40063 40064 if ( this._hasMultipleValues() ) { 40065 otherVal = this.values( index ? 0 : 1 ); 40066 currentValue = this.values( index ); 40067 40068 if ( this.options.values.length === 2 && this.options.range === true ) { 40069 newVal = index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal ); 40070 } 40071 40072 newValues[ index ] = newVal; 40073 } 40074 40075 if ( newVal === currentValue ) { 40076 return; 40077 } 40078 40079 allowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) ); 40080 40081 // A slide can be canceled by returning false from the slide callback 40082 if ( allowed === false ) { 40083 return; 40084 } 40085 40086 if ( this._hasMultipleValues() ) { 40087 this.values( index, newVal ); 40088 } else { 40089 this.value( newVal ); 40090 } 40091 }, 40092 40093 _stop: function( event, index ) { 40094 this._trigger( "stop", event, this._uiHash( index ) ); 40095 }, 40096 40097 _change: function( event, index ) { 40098 if ( !this._keySliding && !this._mouseSliding ) { 40099 40100 //store the last changed value index for reference when handles overlap 40101 this._lastChangedValue = index; 40102 this._trigger( "change", event, this._uiHash( index ) ); 40103 } 40104 }, 40105 40106 value: function( newValue ) { 40107 if ( arguments.length ) { 40108 this.options.value = this._trimAlignValue( newValue ); 40109 this._refreshValue(); 40110 this._change( null, 0 ); 40111 return; 40112 } 40113
vendor: 4,358 bytes, lines 40114-40286
40114 return this._value(); 40115 }, 40116 40117 values: function( index, newValue ) { 40118 var vals, 40119 newValues, 40120 i; 40121 40122 if ( arguments.length > 1 ) { 40123 this.options.values[ index ] = this._trimAlignValue( newValue ); 40124 this._refreshValue(); 40125 this._change( null, index ); 40126 return; 40127 } 40128 40129 if ( arguments.length ) { 40130 if ( Array.isArray( arguments[ 0 ] ) ) { 40131 vals = this.options.values; 40132 newValues = arguments[ 0 ]; 40133 for ( i = 0; i < vals.length; i += 1 ) { 40134 vals[ i ] = this._trimAlignValue( newValues[ i ] ); 40135 this._change( null, i ); 40136 } 40137 this._refreshValue(); 40138 } else { 40139 if ( this._hasMultipleValues() ) { 40140 return this._values( index ); 40141 } else { 40142 return this.value(); 40143 } 40144 } 40145 } else { 40146 return this._values(); 40147 } 40148 }, 40149 40150 _setOption: function( key, value ) { 40151 var i, 40152 valsLength = 0; 40153 40154 if ( key === "range" && this.options.range === true ) { 40155 if ( value === "min" ) { 40156 this.options.value = this._values( 0 ); 40157 this.options.values = null; 40158 } else if ( value === "max" ) { 40159 this.options.value = this._values( this.options.values.length - 1 ); 40160 this.options.values = null; 40161 } 40162 } 40163 40164 if ( Array.isArray( this.options.values ) ) { 40165 valsLength = this.options.values.length; 40166 } 40167 40168 this._super( key, value ); 40169 40170 switch ( key ) { 40171 case "orientation": 40172 this._detectOrientation(); 40173 this._removeClass( "ui-slider-horizontal ui-slider-vertical" ) 40174 ._addClass( "ui-slider-" + this.orientation ); 40175 this._refreshValue(); 40176 if ( this.options.range ) { 40177 this._refreshRange( value ); 40178 } 40179 40180 // Reset positioning from previous orientation 40181 this.handles.css( value === "horizontal" ? "bottom" : "left", "" ); 40182 break; 40183 case "value": 40184 this._animateOff = true; 40185 this._refreshValue(); 40186 this._change( null, 0 ); 40187 this._animateOff = false; 40188 break; 40189 case "values": 40190 this._animateOff = true; 40191 this._refreshValue(); 40192 40193 // Start from the last handle to prevent unreachable handles (#9046) 40194 for ( i = valsLength - 1; i >= 0; i-- ) { 40195 this._change( null, i ); 40196 } 40197 this._animateOff = false; 40198 break; 40199 case "step": 40200 case "min": 40201 case "max": 40202 this._animateOff = true; 40203 this._calculateNewMax(); 40204 this._refreshValue(); 40205 this._animateOff = false; 40206 break; 40207 case "range": 40208 this._animateOff = true; 40209 this._refresh(); 40210 this._animateOff = false; 40211 break; 40212 } 40213 }, 40214 40215 _setOptionDisabled: function( value ) { 40216 this._super( value ); 40217 40218 this._toggleClass( null, "ui-state-disabled", !!value ); 40219 }, 40220 40221 //internal value getter 40222 // _value() returns value trimmed by min and max, aligned by step 40223 _value: function() { 40224 var val = this.options.value; 40225 val = this._trimAlignValue( val ); 40226 40227 return val; 40228 }, 40229 40230 //internal values getter 40231 // _values() returns array of values trimmed by min and max, aligned by step 40232 // _values( index ) returns single value trimmed by min and max, aligned by step 40233 _values: function( index ) { 40234 var val, 40235 vals, 40236 i; 40237 40238 if ( arguments.length ) { 40239 val = this.options.values[ index ]; 40240 val = this._trimAlignValue( val ); 40241 40242 return val; 40243 } else if ( this._hasMultipleValues() ) { 40244 40245 // .slice() creates a copy of the array 40246 // this copy gets trimmed by min and max and then returned 40247 vals = this.options.values.slice(); 40248 for ( i = 0; i < vals.length; i += 1 ) { 40249 vals[ i ] = this._trimAlignValue( vals[ i ] ); 40250 } 40251 40252 return vals; 40253 } else { 40254 return []; 40255 } 40256 }, 40257 40258 // Returns the step-aligned value that val is closest to, between (inclusive) min and max 40259 _trimAlignValue: function( val ) { 40260 if ( val <= this._valueMin() ) { 40261 return this._valueMin(); 40262 } 40263 if ( val >= this._valueMax() ) { 40264 return this._valueMax(); 40265 } 40266 var step = ( this.options.step > 0 ) ? this.options.step : 1, 40267 valModStep = ( val - this._valueMin() ) % step, 40268 alignValue = val - valModStep; 40269 40270 if ( Math.abs( valModStep ) * 2 >= step ) { 40271 alignValue += ( valModStep > 0 ) ? step : ( -step ); 40272 } 40273 40274 // Since JavaScript has problems with large floats, round 40275 // the final value to 5 digits after the decimal point (see #4124) 40276 return parseFloat( alignValue.toFixed( 5 ) ); 40277 }, 40278 40279 _calculateNewMax: function() { 40280 var max = this.options.max, 40281 min = this._valueMin(), 40282 step = this.options.step, 40283 aboveMin = Math.round( ( max - min ) / step ) * step; 40284 max = aboveMin + min; 40285 if ( max > this.options.max ) { 40286
vendor: 5,594 bytes, lines 40287-40486
40287 //If max is not divisible by step, rounding off may increase its value 40288 max -= step; 40289 } 40290 this.max = parseFloat( max.toFixed( this._precision() ) ); 40291 }, 40292 40293 _precision: function() { 40294 var precision = this._precisionOf( this.options.step ); 40295 if ( this.options.min !== null ) { 40296 precision = Math.max( precision, this._precisionOf( this.options.min ) ); 40297 } 40298 return precision; 40299 }, 40300 40301 _precisionOf: function( num ) { 40302 var str = num.toString(), 40303 decimal = str.indexOf( "." ); 40304 return decimal === -1 ? 0 : str.length - decimal - 1; 40305 }, 40306 40307 _valueMin: function() { 40308 return this.options.min; 40309 }, 40310 40311 _valueMax: function() { 40312 return this.max; 40313 }, 40314 40315 _refreshRange: function( orientation ) { 40316 if ( orientation === "vertical" ) { 40317 this.range.css( { "width": "", "left": "" } ); 40318 } 40319 if ( orientation === "horizontal" ) { 40320 this.range.css( { "height": "", "bottom": "" } ); 40321 } 40322 }, 40323 40324 _refreshValue: function() { 40325 var lastValPercent, valPercent, value, valueMin, valueMax, 40326 oRange = this.options.range, 40327 o = this.options, 40328 that = this, 40329 animate = ( !this._animateOff ) ? o.animate : false, 40330 _set = {}; 40331 40332 if ( this._hasMultipleValues() ) { 40333 this.handles.each( function( i ) { 40334 valPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() - 40335 that._valueMin() ) * 100; 40336 _set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; 40337 $( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); 40338 if ( that.options.range === true ) { 40339 if ( that.orientation === "horizontal" ) { 40340 if ( i === 0 ) { 40341 that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 40342 left: valPercent + "%" 40343 }, o.animate ); 40344 } 40345 if ( i === 1 ) { 40346 that.range[ animate ? "animate" : "css" ]( { 40347 width: ( valPercent - lastValPercent ) + "%" 40348 }, { 40349 queue: false, 40350 duration: o.animate 40351 } ); 40352 } 40353 } else { 40354 if ( i === 0 ) { 40355 that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 40356 bottom: ( valPercent ) + "%" 40357 }, o.animate ); 40358 } 40359 if ( i === 1 ) { 40360 that.range[ animate ? "animate" : "css" ]( { 40361 height: ( valPercent - lastValPercent ) + "%" 40362 }, { 40363 queue: false, 40364 duration: o.animate 40365 } ); 40366 } 40367 } 40368 } 40369 lastValPercent = valPercent; 40370 } ); 40371 } else { 40372 value = this.value(); 40373 valueMin = this._valueMin(); 40374 valueMax = this._valueMax(); 40375 valPercent = ( valueMax !== valueMin ) ? 40376 ( value - valueMin ) / ( valueMax - valueMin ) * 100 : 40377 0; 40378 _set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%"; 40379 this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate ); 40380 40381 if ( oRange === "min" && this.orientation === "horizontal" ) { 40382 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 40383 width: valPercent + "%" 40384 }, o.animate ); 40385 } 40386 if ( oRange === "max" && this.orientation === "horizontal" ) { 40387 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 40388 width: ( 100 - valPercent ) + "%" 40389 }, o.animate ); 40390 } 40391 if ( oRange === "min" && this.orientation === "vertical" ) { 40392 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 40393 height: valPercent + "%" 40394 }, o.animate ); 40395 } 40396 if ( oRange === "max" && this.orientation === "vertical" ) { 40397 this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { 40398 height: ( 100 - valPercent ) + "%" 40399 }, o.animate ); 40400 } 40401 } 40402 }, 40403 40404 _handleEvents: { 40405 keydown: function( event ) { 40406 var allowed, curVal, newVal, step, 40407 index = $( event.target ).data( "ui-slider-handle-index" ); 40408 40409 switch ( event.keyCode ) { 40410 case $.ui.keyCode.HOME: 40411 case $.ui.keyCode.END: 40412 case $.ui.keyCode.PAGE_UP: 40413 case $.ui.keyCode.PAGE_DOWN: 40414 case $.ui.keyCode.UP: 40415 case $.ui.keyCode.RIGHT: 40416 case $.ui.keyCode.DOWN: 40417 case $.ui.keyCode.LEFT: 40418 event.preventDefault(); 40419 if ( !this._keySliding ) { 40420 this._keySliding = true; 40421 this._addClass( $( event.target ), null, "ui-state-active" ); 40422 allowed = this._start( event, index ); 40423 if ( allowed === false ) { 40424 return; 40425 } 40426 } 40427 break; 40428 } 40429 40430 step = this.options.step; 40431 if ( this._hasMultipleValues() ) { 40432 curVal = newVal = this.values( index ); 40433 } else { 40434 curVal = newVal = this.value(); 40435 } 40436 40437 switch ( event.keyCode ) { 40438 case $.ui.keyCode.HOME: 40439 newVal = this._valueMin(); 40440 break; 40441 case $.ui.keyCode.END: 40442 newVal = this._valueMax(); 40443 break; 40444 case $.ui.keyCode.PAGE_UP: 40445 newVal = this._trimAlignValue( 40446 curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages ) 40447 ); 40448 break; 40449 case $.ui.keyCode.PAGE_DOWN: 40450 newVal = this._trimAlignValue( 40451 curVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) ); 40452 break; 40453 case $.ui.keyCode.UP: 40454 case $.ui.keyCode.RIGHT: 40455 if ( curVal === this._valueMax() ) { 40456 return; 40457 } 40458 newVal = this._trimAlignValue( curVal + step ); 40459 break; 40460 case $.ui.keyCode.DOWN: 40461 case $.ui.keyCode.LEFT: 40462 if ( curVal === this._valueMin() ) { 40463 return; 40464 } 40465 newVal = this._trimAlignValue( curVal - step ); 40466 break; 40467 } 40468 40469 this._slide( event, index, newVal ); 40470 }, 40471 keyup: function( event ) { 40472 var index = $( event.target ).data( "ui-slider-handle-index" ); 40473 40474 if ( this._keySliding ) { 40475 this._keySliding = false; 40476 this._stop( event, index ); 40477 this._change( event, index ); 40478 this._removeClass( $( event.target ), null, "ui-state-active" ); 40479 } 40480 } 40481 } 40482} ); 40483 40484 40485/*! 40486 * jQuery UI Sortable 1.1
404863.2 40487 * http://jqueryui.com 40488 * 40489 * Copyright jQuery Foundation and other contributors 40490 * Released under the MIT license. 40491 * http://jquery.org/license 40492 */ 40493 40494//>>label: Sortable 40495//>>group: Interactions 40496//>>description: Enables items in a list to be sorted using the mouse. 40497//>>docs: http://api.jqueryui.com/sortable/ 40498//>>demos: http://jqueryui.com/sortable/ 40499//>>css.structure: ../../themes/base/sortable.css 40500 40501 40502var widgetsSortable = $.widget( "ui.sortable", $.ui.mouse, { 40503 version: "1.13.2
vendor: 12,414 bytes, lines 40503-40965
40503", 40504 widgetEventPrefix: "sort", 40505 ready: false, 40506 options: { 40507 appendTo: "parent", 40508 axis: false, 40509 connectWith: false, 40510 containment: false, 40511 cursor: "auto", 40512 cursorAt: false, 40513 dropOnEmpty: true, 40514 forcePlaceholderSize: false, 40515 forceHelperSize: false, 40516 grid: false, 40517 handle: false, 40518 helper: "original", 40519 items: "> *", 40520 opacity: false, 40521 placeholder: false, 40522 revert: false, 40523 scroll: true, 40524 scrollSensitivity: 20, 40525 scrollSpeed: 20, 40526 scope: "default", 40527 tolerance: "intersect", 40528 zIndex: 1000, 40529 40530 // Callbacks 40531 activate: null, 40532 beforeStop: null, 40533 change: null, 40534 deactivate: null, 40535 out: null, 40536 over: null, 40537 receive: null, 40538 remove: null, 40539 sort: null, 40540 start: null, 40541 stop: null, 40542 update: null 40543 }, 40544 40545 _isOverAxis: function( x, reference, size ) { 40546 return ( x >= reference ) && ( x < ( reference + size ) ); 40547 }, 40548 40549 _isFloating: function( item ) { 40550 return ( /left|right/ ).test( item.css( "float" ) ) || 40551 ( /inline|table-cell/ ).test( item.css( "display" ) ); 40552 }, 40553 40554 _create: function() { 40555 this.containerCache = {}; 40556 this._addClass( "ui-sortable" ); 40557 40558 //Get the items 40559 this.refresh(); 40560 40561 //Let's determine the parent's offset 40562 this.offset = this.element.offset(); 40563 40564 //Initialize mouse events for interaction 40565 this._mouseInit(); 40566 40567 this._setHandleClassName(); 40568 40569 //We're ready to go 40570 this.ready = true; 40571 40572 }, 40573 40574 _setOption: function( key, value ) { 40575 this._super( key, value ); 40576 40577 if ( key === "handle" ) { 40578 this._setHandleClassName(); 40579 } 40580 }, 40581 40582 _setHandleClassName: function() { 40583 var that = this; 40584 this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" ); 40585 $.each( this.items, function() { 40586 that._addClass( 40587 this.instance.options.handle ? 40588 this.item.find( this.instance.options.handle ) : 40589 this.item, 40590 "ui-sortable-handle" 40591 ); 40592 } ); 40593 }, 40594 40595 _destroy: function() { 40596 this._mouseDestroy(); 40597 40598 for ( var i = this.items.length - 1; i >= 0; i-- ) { 40599 this.items[ i ].item.removeData( this.widgetName + "-item" ); 40600 } 40601 40602 return this; 40603 }, 40604 40605 _mouseCapture: function( event, overrideHandle ) { 40606 var currentItem = null, 40607 validHandle = false, 40608 that = this; 40609 40610 if ( this.reverting ) { 40611 return false; 40612 } 40613 40614 if ( this.options.disabled || this.options.type === "static" ) { 40615 return false; 40616 } 40617 40618 //We have to refresh the items data once first 40619 this._refreshItems( event ); 40620 40621 //Find out if the clicked node (or one of its parents) is a actual item in this.items 40622 $( event.target ).parents().each( function() { 40623 if ( $.data( this, that.widgetName + "-item" ) === that ) { 40624 currentItem = $( this ); 40625 return false; 40626 } 40627 } ); 40628 if ( $.data( event.target, that.widgetName + "-item" ) === that ) { 40629 currentItem = $( event.target ); 40630 } 40631 40632 if ( !currentItem ) { 40633 return false; 40634 } 40635 if ( this.options.handle && !overrideHandle ) { 40636 $( this.options.handle, currentItem ).find( "*" ).addBack().each( function() { 40637 if ( this === event.target ) { 40638 validHandle = true; 40639 } 40640 } ); 40641 if ( !validHandle ) { 40642 return false; 40643 } 40644 } 40645 40646 this.currentItem = currentItem; 40647 this._removeCurrentsFromItems(); 40648 return true; 40649 40650 }, 40651 40652 _mouseStart: function( event, overrideHandle, noActivation ) { 40653 40654 var i, body, 40655 o = this.options; 40656 40657 this.currentContainer = this; 40658 40659 //We only need to call refreshPositions, because the refreshItems call has been moved to 40660 // mouseCapture 40661 this.refreshPositions(); 40662 40663 //Prepare the dragged items parent 40664 this.appendTo = $( o.appendTo !== "parent" ? 40665 o.appendTo : 40666 this.currentItem.parent() ); 40667 40668 //Create and append the visible helper 40669 this.helper = this._createHelper( event ); 40670 40671 //Cache the helper size 40672 this._cacheHelperProportions(); 40673 40674 /* 40675 * - Position generation - 40676 * This block generates everything position related - it's the core of draggables. 40677 */ 40678 40679 //Cache the margins of the original element 40680 this._cacheMargins(); 40681 40682 //The element's absolute position on the page minus margins 40683 this.offset = this.currentItem.offset(); 40684 this.offset = { 40685 top: this.offset.top - this.margins.top, 40686 left: this.offset.left - this.margins.left 40687 }; 40688 40689 $.extend( this.offset, { 40690 click: { //Where the click happened, relative to the element 40691 left: event.pageX - this.offset.left, 40692 top: event.pageY - this.offset.top 40693 }, 40694 40695 // This is a relative to absolute position minus the actual position calculation - 40696 // only used for relative positioned helper 40697 relative: this._getRelativeOffset() 40698 } ); 40699 40700 // After we get the helper offset, but before we get the parent offset we can 40701 // change the helper's position to absolute 40702 // TODO: Still need to figure out a way to make relative sorting possible 40703 this.helper.css( "position", "absolute" ); 40704 this.cssPosition = this.helper.css( "position" ); 40705 40706 //Adjust the mouse offset relative to the helper if "cursorAt" is supplied 40707 if ( o.cursorAt ) { 40708 this._adjustOffsetFromHelper( o.cursorAt ); 40709 } 40710 40711 //Cache the former DOM position 40712 this.domPosition = { 40713 prev: this.currentItem.prev()[ 0 ], 40714 parent: this.currentItem.parent()[ 0 ] 40715 }; 40716 40717 // If the helper is not the original, hide the original so it's not playing any role during 40718 // the drag, won't cause anything bad this way 40719 if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { 40720 this.currentItem.hide(); 40721 } 40722 40723 //Create the placeholder 40724 this._createPlaceholder(); 40725 40726 //Get the next scrolling parent 40727 this.scrollParent = this.placeholder.scrollParent(); 40728 40729 $.extend( this.offset, { 40730 parent: this._getParentOffset() 40731 } ); 40732 40733 //Set a containment if given in the options 40734 if ( o.containment ) { 40735 this._setContainment(); 40736 } 40737 40738 if ( o.cursor && o.cursor !== "auto" ) { // cursor option 40739 body = this.document.find( "body" ); 40740 40741 // Support: IE 40742 this.storedCursor = body.css( "cursor" ); 40743 body.css( "cursor", o.cursor ); 40744 40745 this.storedStylesheet = 40746 $( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body ); 40747 } 40748 40749 // We need to make sure to grab the zIndex before setting the 40750 // opacity, because setting the opacity to anything lower than 1 40751 // causes the zIndex to change from "auto" to 0. 40752 if ( o.zIndex ) { // zIndex option 40753 if ( this.helper.css( "zIndex" ) ) { 40754 this._storedZIndex = this.helper.css( "zIndex" ); 40755 } 40756 this.helper.css( "zIndex", o.zIndex ); 40757 } 40758 40759 if ( o.opacity ) { // opacity option 40760 if ( this.helper.css( "opacity" ) ) { 40761 this._storedOpacity = this.helper.css( "opacity" ); 40762 } 40763 this.helper.css( "opacity", o.opacity ); 40764 } 40765 40766 //Prepare scrolling 40767 if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && 40768 this.scrollParent[ 0 ].tagName !== "HTML" ) { 40769 this.overflowOffset = this.scrollParent.offset(); 40770 } 40771 40772 //Call callbacks 40773 this._trigger( "start", event, this._uiHash() ); 40774 40775 //Recache the helper size 40776 if ( !this._preserveHelperProportions ) { 40777 this._cacheHelperProportions(); 40778 } 40779 40780 //Post "activate" events to possible containers 40781 if ( !noActivation ) { 40782 for ( i = this.containers.length - 1; i >= 0; i-- ) { 40783 this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) ); 40784 } 40785 } 40786 40787 //Prepare possible droppables 40788 if ( $.ui.ddmanager ) { 40789 $.ui.ddmanager.current = this; 40790 } 40791 40792 if ( $.ui.ddmanager && !o.dropBehaviour ) { 40793 $.ui.ddmanager.prepareOffsets( this, event ); 40794 } 40795 40796 this.dragging = true; 40797 40798 this._addClass( this.helper, "ui-sortable-helper" ); 40799 40800 //Move the helper, if needed 40801 if ( !this.helper.parent().is( this.appendTo ) ) { 40802 this.helper.detach().appendTo( this.appendTo ); 40803 40804 //Update position 40805 this.offset.parent = this._getParentOffset(); 40806 } 40807 40808 //Generate the original position 40809 this.position = this.originalPosition = this._generatePosition( event ); 40810 this.originalPageX = event.pageX; 40811 this.originalPageY = event.pageY; 40812 this.lastPositionAbs = this.positionAbs = this._convertPositionTo( "absolute" ); 40813 40814 this._mouseDrag( event ); 40815 40816 return true; 40817 40818 }, 40819 40820 _scroll: function( event ) { 40821 var o = this.options, 40822 scrolled = false; 40823 40824 if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && 40825 this.scrollParent[ 0 ].tagName !== "HTML" ) { 40826 40827 if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) - 40828 event.pageY < o.scrollSensitivity ) { 40829 this.scrollParent[ 0 ].scrollTop = 40830 scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed; 40831 } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) { 40832 this.scrollParent[ 0 ].scrollTop = 40833 scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed; 40834 } 40835 40836 if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) - 40837 event.pageX < o.scrollSensitivity ) { 40838 this.scrollParent[ 0 ].scrollLeft = scrolled = 40839 this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed; 40840 } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) { 40841 this.scrollParent[ 0 ].scrollLeft = scrolled = 40842 this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed; 40843 } 40844 40845 } else { 40846 40847 if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) { 40848 scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed ); 40849 } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) < 40850 o.scrollSensitivity ) { 40851 scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed ); 40852 } 40853 40854 if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) { 40855 scrolled = this.document.scrollLeft( 40856 this.document.scrollLeft() - o.scrollSpeed 40857 ); 40858 } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) < 40859 o.scrollSensitivity ) { 40860 scrolled = this.document.scrollLeft( 40861 this.document.scrollLeft() + o.scrollSpeed 40862 ); 40863 } 40864 40865 } 40866 40867 return scrolled; 40868 }, 40869 40870 _mouseDrag: function( event ) { 40871 var i, item, itemElement, intersection, 40872 o = this.options; 40873 40874 //Compute the helpers position 40875 this.position = this._generatePosition( event ); 40876 this.positionAbs = this._convertPositionTo( "absolute" ); 40877 40878 //Set the helper position 40879 if ( !this.options.axis || this.options.axis !== "y" ) { 40880 this.helper[ 0 ].style.left = this.position.left + "px"; 40881 } 40882 if ( !this.options.axis || this.options.axis !== "x" ) { 40883 this.helper[ 0 ].style.top = this.position.top + "px"; 40884 } 40885 40886 //Do scrolling 40887 if ( o.scroll ) { 40888 if ( this._scroll( event ) !== false ) { 40889 40890 //Update item positions used in position checks 40891 this._refreshItemPositions( true ); 40892 40893 if ( $.ui.ddmanager && !o.dropBehaviour ) { 40894 $.ui.ddmanager.prepareOffsets( this, event ); 40895 } 40896 } 40897 } 40898 40899 this.dragDirection = { 40900 vertical: this._getDragVerticalDirection(), 40901 horizontal: this._getDragHorizontalDirection() 40902 }; 40903 40904 //Rearrange 40905 for ( i = this.items.length - 1; i >= 0; i-- ) { 40906 40907 //Cache variables and intersection, continue if no intersection 40908 item = this.items[ i ]; 40909 itemElement = item.item[ 0 ]; 40910 intersection = this._intersectsWithPointer( item ); 40911 if ( !intersection ) { 40912 continue; 40913 } 40914 40915 // Only put the placeholder inside the current Container, skip all 40916 // items from other containers. This works because when moving 40917 // an item from one container to another the 40918 // currentContainer is switched before the placeholder is moved. 40919 // 40920 // Without this, moving items in "sub-sortables" can cause 40921 // the placeholder to jitter between the outer and inner container. 40922 if ( item.instance !== this.currentContainer ) { 40923 continue; 40924 } 40925 40926 // Cannot intersect with itself 40927 // no useless actions that have been done before 40928 // no action if the item moved is the parent of the item checked 40929 if ( itemElement !== this.currentItem[ 0 ] && 40930 this.placeholder[ intersection === 1 ? 40931 "next" : "prev" ]()[ 0 ] !== itemElement && 40932 !$.contains( this.placeholder[ 0 ], itemElement ) && 40933 ( this.options.type === "semi-dynamic" ? 40934 !$.contains( this.element[ 0 ], itemElement ) : 40935 true 40936 ) 40937 ) { 40938 40939 this.direction = intersection === 1 ? "down" : "up"; 40940 40941 if ( this.options.tolerance === "pointer" || 40942 this._intersectsWithSides( item ) ) { 40943 this._rearrange( event, item ); 40944 } else { 40945 break; 40946 } 40947 40948 this._trigger( "change", event, this._uiHash() ); 40949 break; 40950 } 40951 } 40952 40953 //Post events to containers 40954 this._contactContainers( event ); 40955 40956 //Interconnect with droppables 40957 if ( $.ui.ddmanager ) { 40958 $.ui.ddmanager.drag( this, event ); 40959 } 40960 40961 //Call callbacks 40962 this._trigger( "sort", event, this._uiHash() ); 40963 40964 this.lastPositionAbs = this.positionAbs; 40965 return false;
vendor: 5,063 bytes, lines 40966-41155
40966 40967 }, 40968 40969 _mouseStop: function( event, noPropagation ) { 40970 40971 if ( !event ) { 40972 return; 40973 } 40974 40975 //If we are using droppables, inform the manager about the drop 40976 if ( $.ui.ddmanager && !this.options.dropBehaviour ) { 40977 $.ui.ddmanager.drop( this, event ); 40978 } 40979 40980 if ( this.options.revert ) { 40981 var that = this, 40982 cur = this.placeholder.offset(), 40983 axis = this.options.axis, 40984 animation = {}; 40985 40986 if ( !axis || axis === "x" ) { 40987 animation.left = cur.left - this.offset.parent.left - this.margins.left + 40988 ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? 40989 0 : 40990 this.offsetParent[ 0 ].scrollLeft 40991 ); 40992 } 40993 if ( !axis || axis === "y" ) { 40994 animation.top = cur.top - this.offset.parent.top - this.margins.top + 40995 ( this.offsetParent[ 0 ] === this.document[ 0 ].body ? 40996 0 : 40997 this.offsetParent[ 0 ].scrollTop 40998 ); 40999 } 41000 this.reverting = true; 41001 $( this.helper ).animate( 41002 animation, 41003 parseInt( this.options.revert, 10 ) || 500, 41004 function() { 41005 that._clear( event ); 41006 } 41007 ); 41008 } else { 41009 this._clear( event, noPropagation ); 41010 } 41011 41012 return false; 41013 41014 }, 41015 41016 cancel: function() { 41017 41018 if ( this.dragging ) { 41019 41020 this._mouseUp( new $.Event( "mouseup", { target: null } ) ); 41021 41022 if ( this.options.helper === "original" ) { 41023 this.currentItem.css( this._storedCSS ); 41024 this._removeClass( this.currentItem, "ui-sortable-helper" ); 41025 } else { 41026 this.currentItem.show(); 41027 } 41028 41029 //Post deactivating events to containers 41030 for ( var i = this.containers.length - 1; i >= 0; i-- ) { 41031 this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) ); 41032 if ( this.containers[ i ].containerCache.over ) { 41033 this.containers[ i ]._trigger( "out", null, this._uiHash( this ) ); 41034 this.containers[ i ].containerCache.over = 0; 41035 } 41036 } 41037 41038 } 41039 41040 if ( this.placeholder ) { 41041 41042 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, 41043 // it unbinds ALL events from the original node! 41044 if ( this.placeholder[ 0 ].parentNode ) { 41045 this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); 41046 } 41047 if ( this.options.helper !== "original" && this.helper && 41048 this.helper[ 0 ].parentNode ) { 41049 this.helper.remove(); 41050 } 41051 41052 $.extend( this, { 41053 helper: null, 41054 dragging: false, 41055 reverting: false, 41056 _noFinalSort: null 41057 } ); 41058 41059 if ( this.domPosition.prev ) { 41060 $( this.domPosition.prev ).after( this.currentItem ); 41061 } else { 41062 $( this.domPosition.parent ).prepend( this.currentItem ); 41063 } 41064 } 41065 41066 return this; 41067 41068 }, 41069 41070 serialize: function( o ) { 41071 41072 var items = this._getItemsAsjQuery( o && o.connected ), 41073 str = []; 41074 o = o || {}; 41075 41076 $( items ).each( function() { 41077 var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" ) 41078 .match( o.expression || ( /(.+)[\-=_](.+)/ ) ); 41079 if ( res ) { 41080 str.push( 41081 ( o.key || res[ 1 ] + "[]" ) + 41082 "=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) ); 41083 } 41084 } ); 41085 41086 if ( !str.length && o.key ) { 41087 str.push( o.key + "=" ); 41088 } 41089 41090 return str.join( "&" ); 41091 41092 }, 41093 41094 toArray: function( o ) { 41095 41096 var items = this._getItemsAsjQuery( o && o.connected ), 41097 ret = []; 41098 41099 o = o || {}; 41100 41101 items.each( function() { 41102 ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" ); 41103 } ); 41104 return ret; 41105 41106 }, 41107 41108 /* Be careful with the following core functions */ 41109 _intersectsWith: function( item ) { 41110 41111 var x1 = this.positionAbs.left, 41112 x2 = x1 + this.helperProportions.width, 41113 y1 = this.positionAbs.top, 41114 y2 = y1 + this.helperProportions.height, 41115 l = item.left, 41116 r = l + item.width, 41117 t = item.top, 41118 b = t + item.height, 41119 dyClick = this.offset.click.top, 41120 dxClick = this.offset.click.left, 41121 isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && 41122 ( y1 + dyClick ) < b ), 41123 isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && 41124 ( x1 + dxClick ) < r ), 41125 isOverElement = isOverElementHeight && isOverElementWidth; 41126 41127 if ( this.options.tolerance === "pointer" || 41128 this.options.forcePointerForContainers || 41129 ( this.options.tolerance !== "pointer" && 41130 this.helperProportions[ this.floating ? "width" : "height" ] > 41131 item[ this.floating ? "width" : "height" ] ) 41132 ) { 41133 return isOverElement; 41134 } else { 41135 41136 return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half 41137 x2 - ( this.helperProportions.width / 2 ) < r && // Left Half 41138 t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half 41139 y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half 41140 41141 } 41142 }, 41143 41144 _intersectsWithPointer: function( item ) { 41145 var verticalDirection, horizontalDirection, 41146 isOverElementHeight = ( this.options.axis === "x" ) || 41147 this._isOverAxis( 41148 this.positionAbs.top + this.offset.click.top, item.top, item.height ), 41149 isOverElementWidth = ( this.options.axis === "y" ) || 41150 this._isOverAxis( 41151 this.positionAbs.left + this.offset.click.left, item.left, item.width ), 41152 isOverElement = isOverElementHeight && isOverElementWidth; 41153 41154 if ( !isOverElement ) { 41155 return false;
vendor: 18,663 bytes, lines 41156-41738
41156 } 41157 41158 verticalDirection = this.dragDirection.vertical; 41159 horizontalDirection = this.dragDirection.horizontal; 41160 41161 return this.floating ? 41162 ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 ) : 41163 ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) ); 41164 41165 }, 41166 41167 _intersectsWithSides: function( item ) { 41168 41169 var isOverBottomHalf = this._isOverAxis( this.positionAbs.top + 41170 this.offset.click.top, item.top + ( item.height / 2 ), item.height ), 41171 isOverRightHalf = this._isOverAxis( this.positionAbs.left + 41172 this.offset.click.left, item.left + ( item.width / 2 ), item.width ), 41173 verticalDirection = this.dragDirection.vertical, 41174 horizontalDirection = this.dragDirection.horizontal; 41175 41176 if ( this.floating && horizontalDirection ) { 41177 return ( ( horizontalDirection === "right" && isOverRightHalf ) || 41178 ( horizontalDirection === "left" && !isOverRightHalf ) ); 41179 } else { 41180 return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) || 41181 ( verticalDirection === "up" && !isOverBottomHalf ) ); 41182 } 41183 41184 }, 41185 41186 _getDragVerticalDirection: function() { 41187 var delta = this.positionAbs.top - this.lastPositionAbs.top; 41188 return delta !== 0 && ( delta > 0 ? "down" : "up" ); 41189 }, 41190 41191 _getDragHorizontalDirection: function() { 41192 var delta = this.positionAbs.left - this.lastPositionAbs.left; 41193 return delta !== 0 && ( delta > 0 ? "right" : "left" ); 41194 }, 41195 41196 refresh: function( event ) { 41197 this._refreshItems( event ); 41198 this._setHandleClassName(); 41199 this.refreshPositions(); 41200 return this; 41201 }, 41202 41203 _connectWith: function() { 41204 var options = this.options; 41205 return options.connectWith.constructor === String ? 41206 [ options.connectWith ] : 41207 options.connectWith; 41208 }, 41209 41210 _getItemsAsjQuery: function( connected ) { 41211 41212 var i, j, cur, inst, 41213 items = [], 41214 queries = [], 41215 connectWith = this._connectWith(); 41216 41217 if ( connectWith && connected ) { 41218 for ( i = connectWith.length - 1; i >= 0; i-- ) { 41219 cur = $( connectWith[ i ], this.document[ 0 ] ); 41220 for ( j = cur.length - 1; j >= 0; j-- ) { 41221 inst = $.data( cur[ j ], this.widgetFullName ); 41222 if ( inst && inst !== this && !inst.options.disabled ) { 41223 queries.push( [ typeof inst.options.items === "function" ? 41224 inst.options.items.call( inst.element ) : 41225 $( inst.options.items, inst.element ) 41226 .not( ".ui-sortable-helper" ) 41227 .not( ".ui-sortable-placeholder" ), inst ] ); 41228 } 41229 } 41230 } 41231 } 41232 41233 queries.push( [ typeof this.options.items === "function" ? 41234 this.options.items 41235 .call( this.element, null, { options: this.options, item: this.currentItem } ) : 41236 $( this.options.items, this.element ) 41237 .not( ".ui-sortable-helper" ) 41238 .not( ".ui-sortable-placeholder" ), this ] ); 41239 41240 function addItems() { 41241 items.push( this ); 41242 } 41243 for ( i = queries.length - 1; i >= 0; i-- ) { 41244 queries[ i ][ 0 ].each( addItems ); 41245 } 41246 41247 return $( items ); 41248 41249 }, 41250 41251 _removeCurrentsFromItems: function() { 41252 41253 var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" ); 41254 41255 this.items = $.grep( this.items, function( item ) { 41256 for ( var j = 0; j < list.length; j++ ) { 41257 if ( list[ j ] === item.item[ 0 ] ) { 41258 return false; 41259 } 41260 } 41261 return true; 41262 } ); 41263 41264 }, 41265 41266 _refreshItems: function( event ) { 41267 41268 this.items = []; 41269 this.containers = [ this ]; 41270 41271 var i, j, cur, inst, targetData, _queries, item, queriesLength, 41272 items = this.items, 41273 queries = [ [ typeof this.options.items === "function" ? 41274 this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) : 41275 $( this.options.items, this.element ), this ] ], 41276 connectWith = this._connectWith(); 41277 41278 //Shouldn't be run the first time through due to massive slow-down 41279 if ( connectWith && this.ready ) { 41280 for ( i = connectWith.length - 1; i >= 0; i-- ) { 41281 cur = $( connectWith[ i ], this.document[ 0 ] ); 41282 for ( j = cur.length - 1; j >= 0; j-- ) { 41283 inst = $.data( cur[ j ], this.widgetFullName ); 41284 if ( inst && inst !== this && !inst.options.disabled ) { 41285 queries.push( [ typeof inst.options.items === "function" ? 41286 inst.options.items 41287 .call( inst.element[ 0 ], event, { item: this.currentItem } ) : 41288 $( inst.options.items, inst.element ), inst ] ); 41289 this.containers.push( inst ); 41290 } 41291 } 41292 } 41293 } 41294 41295 for ( i = queries.length - 1; i >= 0; i-- ) { 41296 targetData = queries[ i ][ 1 ]; 41297 _queries = queries[ i ][ 0 ]; 41298 41299 for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) { 41300 item = $( _queries[ j ] ); 41301 41302 // Data for target checking (mouse manager) 41303 item.data( this.widgetName + "-item", targetData ); 41304 41305 items.push( { 41306 item: item, 41307 instance: targetData, 41308 width: 0, height: 0, 41309 left: 0, top: 0 41310 } ); 41311 } 41312 } 41313 41314 }, 41315 41316 _refreshItemPositions: function( fast ) { 41317 var i, item, t, p; 41318 41319 for ( i = this.items.length - 1; i >= 0; i-- ) { 41320 item = this.items[ i ]; 41321 41322 //We ignore calculating positions of all connected containers when we're not over them 41323 if ( this.currentContainer && item.instance !== this.currentContainer && 41324 item.item[ 0 ] !== this.currentItem[ 0 ] ) { 41325 continue; 41326 } 41327 41328 t = this.options.toleranceElement ? 41329 $( this.options.toleranceElement, item.item ) : 41330 item.item; 41331 41332 if ( !fast ) { 41333 item.width = t.outerWidth(); 41334 item.height = t.outerHeight(); 41335 } 41336 41337 p = t.offset(); 41338 item.left = p.left; 41339 item.top = p.top; 41340 } 41341 }, 41342 41343 refreshPositions: function( fast ) { 41344 41345 // Determine whether items are being displayed horizontally 41346 this.floating = this.items.length ? 41347 this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) : 41348 false; 41349 41350 // This has to be redone because due to the item being moved out/into the offsetParent, 41351 // the offsetParent's position will change 41352 if ( this.offsetParent && this.helper ) { 41353 this.offset.parent = this._getParentOffset(); 41354 } 41355 41356 this._refreshItemPositions( fast ); 41357 41358 var i, p; 41359 41360 if ( this.options.custom && this.options.custom.refreshContainers ) { 41361 this.options.custom.refreshContainers.call( this ); 41362 } else { 41363 for ( i = this.containers.length - 1; i >= 0; i-- ) { 41364 p = this.containers[ i ].element.offset(); 41365 this.containers[ i ].containerCache.left = p.left; 41366 this.containers[ i ].containerCache.top = p.top; 41367 this.containers[ i ].containerCache.width = 41368 this.containers[ i ].element.outerWidth(); 41369 this.containers[ i ].containerCache.height = 41370 this.containers[ i ].element.outerHeight(); 41371 } 41372 } 41373 41374 return this; 41375 }, 41376 41377 _createPlaceholder: function( that ) { 41378 that = that || this; 41379 var className, nodeName, 41380 o = that.options; 41381 41382 if ( !o.placeholder || o.placeholder.constructor === String ) { 41383 className = o.placeholder; 41384 nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(); 41385 o.placeholder = { 41386 element: function() { 41387 41388 var element = $( "<" + nodeName + ">", that.document[ 0 ] ); 41389 41390 that._addClass( element, "ui-sortable-placeholder", 41391 className || that.currentItem[ 0 ].className ) 41392 ._removeClass( element, "ui-sortable-helper" ); 41393 41394 if ( nodeName === "tbody" ) { 41395 that._createTrPlaceholder( 41396 that.currentItem.find( "tr" ).eq( 0 ), 41397 $( "<tr>", that.document[ 0 ] ).appendTo( element ) 41398 ); 41399 } else if ( nodeName === "tr" ) { 41400 that._createTrPlaceholder( that.currentItem, element ); 41401 } else if ( nodeName === "img" ) { 41402 element.attr( "src", that.currentItem.attr( "src" ) ); 41403 } 41404 41405 if ( !className ) { 41406 element.css( "visibility", "hidden" ); 41407 } 41408 41409 return element; 41410 }, 41411 update: function( container, p ) { 41412 41413 // 1. If a className is set as 'placeholder option, we don't force sizes - 41414 // the class is responsible for that 41415 // 2. The option 'forcePlaceholderSize can be enabled to force it even if a 41416 // class name is specified 41417 if ( className && !o.forcePlaceholderSize ) { 41418 return; 41419 } 41420 41421 // If the element doesn't have a actual height or width by itself (without 41422 // styles coming from a stylesheet), it receives the inline height and width 41423 // from the dragged item. Or, if it's a tbody or tr, it's going to have a height 41424 // anyway since we're populating them with <td>s above, but they're unlikely to 41425 // be the correct height on their own if the row heights are dynamic, so we'll 41426 // always assign the height of the dragged item given forcePlaceholderSize 41427 // is true. 41428 if ( !p.height() || ( o.forcePlaceholderSize && 41429 ( nodeName === "tbody" || nodeName === "tr" ) ) ) { 41430 p.height( 41431 that.currentItem.innerHeight() - 41432 parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) - 41433 parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) ); 41434 } 41435 if ( !p.width() ) { 41436 p.width( 41437 that.currentItem.innerWidth() - 41438 parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) - 41439 parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) ); 41440 } 41441 } 41442 }; 41443 } 41444 41445 //Create the placeholder 41446 that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) ); 41447 41448 //Append it after the actual current item 41449 that.currentItem.after( that.placeholder ); 41450 41451 //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317) 41452 o.placeholder.update( that, that.placeholder ); 41453 41454 }, 41455 41456 _createTrPlaceholder: function( sourceTr, targetTr ) { 41457 var that = this; 41458 41459 sourceTr.children().each( function() { 41460 $( "<td> </td>", that.document[ 0 ] ) 41461 .attr( "colspan", $( this ).attr( "colspan" ) || 1 ) 41462 .appendTo( targetTr ); 41463 } ); 41464 }, 41465 41466 _contactContainers: function( event ) { 41467 var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, 41468 floating, axis, 41469 innermostContainer = null, 41470 innermostIndex = null; 41471 41472 // Get innermost container that intersects with item 41473 for ( i = this.containers.length - 1; i >= 0; i-- ) { 41474 41475 // Never consider a container that's located within the item itself 41476 if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) { 41477 continue; 41478 } 41479 41480 if ( this._intersectsWith( this.containers[ i ].containerCache ) ) { 41481 41482 // If we've already found a container and it's more "inner" than this, then continue 41483 if ( innermostContainer && 41484 $.contains( 41485 this.containers[ i ].element[ 0 ], 41486 innermostContainer.element[ 0 ] ) ) { 41487 continue; 41488 } 41489 41490 innermostContainer = this.containers[ i ]; 41491 innermostIndex = i; 41492 41493 } else { 41494 41495 // container doesn't intersect. trigger "out" event if necessary 41496 if ( this.containers[ i ].containerCache.over ) { 41497 this.containers[ i ]._trigger( "out", event, this._uiHash( this ) ); 41498 this.containers[ i ].containerCache.over = 0; 41499 } 41500 } 41501 41502 } 41503 41504 // If no intersecting containers found, return 41505 if ( !innermostContainer ) { 41506 return; 41507 } 41508 41509 // Move the item into the container if it's not there already 41510 if ( this.containers.length === 1 ) { 41511 if ( !this.containers[ innermostIndex ].containerCache.over ) { 41512 this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); 41513 this.containers[ innermostIndex ].containerCache.over = 1; 41514 } 41515 } else { 41516 41517 // When entering a new container, we will find the item with the least distance and 41518 // append our item near it 41519 dist = 10000; 41520 itemWithLeastDistance = null; 41521 floating = innermostContainer.floating || this._isFloating( this.currentItem ); 41522 posProperty = floating ? "left" : "top"; 41523 sizeProperty = floating ? "width" : "height"; 41524 axis = floating ? "pageX" : "pageY"; 41525 41526 for ( j = this.items.length - 1; j >= 0; j-- ) { 41527 if ( !$.contains( 41528 this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] ) 41529 ) { 41530 continue; 41531 } 41532 if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) { 41533 continue; 41534 } 41535 41536 cur = this.items[ j ].item.offset()[ posProperty ]; 41537 nearBottom = false; 41538 if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) { 41539 nearBottom = true; 41540 } 41541 41542 if ( Math.abs( event[ axis ] - cur ) < dist ) { 41543 dist = Math.abs( event[ axis ] - cur ); 41544 itemWithLeastDistance = this.items[ j ]; 41545 this.direction = nearBottom ? "up" : "down"; 41546 } 41547 } 41548 41549 //Check if dropOnEmpty is enabled 41550 if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) { 41551 return; 41552 } 41553 41554 if ( this.currentContainer === this.containers[ innermostIndex ] ) { 41555 if ( !this.currentContainer.containerCache.over ) { 41556 this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() ); 41557 this.currentContainer.containerCache.over = 1; 41558 } 41559 return; 41560 } 41561 41562 if ( itemWithLeastDistance ) { 41563 this._rearrange( event, itemWithLeastDistance, null, true ); 41564 } else { 41565 this._rearrange( event, null, this.containers[ innermostIndex ].element, true ); 41566 } 41567 this._trigger( "change", event, this._uiHash() ); 41568 this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) ); 41569 this.currentContainer = this.containers[ innermostIndex ]; 41570 41571 //Update the placeholder 41572 this.options.placeholder.update( this.currentContainer, this.placeholder ); 41573 41574 //Update scrollParent 41575 this.scrollParent = this.placeholder.scrollParent(); 41576 41577 //Update overflowOffset 41578 if ( this.scrollParent[ 0 ] !== this.document[ 0 ] && 41579 this.scrollParent[ 0 ].tagName !== "HTML" ) { 41580 this.overflowOffset = this.scrollParent.offset(); 41581 } 41582 41583 this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) ); 41584 this.containers[ innermostIndex ].containerCache.over = 1; 41585 } 41586 41587 }, 41588 41589 _createHelper: function( event ) { 41590 41591 var o = this.options, 41592 helper = typeof o.helper === "function" ? 41593 $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) : 41594 ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem ); 41595 41596 //Add the helper to the DOM if that didn't happen already 41597 if ( !helper.parents( "body" ).length ) { 41598 this.appendTo[ 0 ].appendChild( helper[ 0 ] ); 41599 } 41600 41601 if ( helper[ 0 ] === this.currentItem[ 0 ] ) { 41602 this._storedCSS = { 41603 width: this.currentItem[ 0 ].style.width, 41604 height: this.currentItem[ 0 ].style.height, 41605 position: this.currentItem.css( "position" ), 41606 top: this.currentItem.css( "top" ), 41607 left: this.currentItem.css( "left" ) 41608 }; 41609 } 41610 41611 if ( !helper[ 0 ].style.width || o.forceHelperSize ) { 41612 helper.width( this.currentItem.width() ); 41613 } 41614 if ( !helper[ 0 ].style.height || o.forceHelperSize ) { 41615 helper.height( this.currentItem.height() ); 41616 } 41617 41618 return helper; 41619 41620 }, 41621 41622 _adjustOffsetFromHelper: function( obj ) { 41623 if ( typeof obj === "string" ) { 41624 obj = obj.split( " " ); 41625 } 41626 if ( Array.isArray( obj ) ) { 41627 obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 }; 41628 } 41629 if ( "left" in obj ) { 41630 this.offset.click.left = obj.left + this.margins.left; 41631 } 41632 if ( "right" in obj ) { 41633 this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left; 41634 } 41635 if ( "top" in obj ) { 41636 this.offset.click.top = obj.top + this.margins.top; 41637 } 41638 if ( "bottom" in obj ) { 41639 this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top; 41640 } 41641 }, 41642 41643 _getParentOffset: function() { 41644 41645 //Get the offsetParent and cache its position 41646 this.offsetParent = this.helper.offsetParent(); 41647 var po = this.offsetParent.offset(); 41648 41649 // This is a special case where we need to modify a offset calculated on start, since the 41650 // following happened: 41651 // 1. The position of the helper is absolute, so it's position is calculated based on the 41652 // next positioned parent 41653 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't 41654 // the document, which means that the scroll is included in the initial calculation of the 41655 // offset of the parent, and never recalculated upon drag 41656 if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] && 41657 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) { 41658 po.left += this.scrollParent.scrollLeft(); 41659 po.top += this.scrollParent.scrollTop(); 41660 } 41661 41662 // This needs to be actually done for all browsers, since pageX/pageY includes this 41663 // information with an ugly IE fix 41664 if ( this.offsetParent[ 0 ] === this.document[ 0 ].body || 41665 ( this.offsetParent[ 0 ].tagName && 41666 this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) { 41667 po = { top: 0, left: 0 }; 41668 } 41669 41670 return { 41671 top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ), 41672 left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 ) 41673 }; 41674 41675 }, 41676 41677 _getRelativeOffset: function() { 41678 41679 if ( this.cssPosition === "relative" ) { 41680 var p = this.currentItem.position(); 41681 return { 41682 top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) + 41683 this.scrollParent.scrollTop(), 41684 left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) + 41685 this.scrollParent.scrollLeft() 41686 }; 41687 } else { 41688 return { top: 0, left: 0 }; 41689 } 41690 41691 }, 41692 41693 _cacheMargins: function() { 41694 this.margins = { 41695 left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ), 41696 top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 ) 41697 }; 41698 }, 41699 41700 _cacheHelperProportions: function() { 41701 this.helperProportions = { 41702 width: this.helper.outerWidth(), 41703 height: this.helper.outerHeight() 41704 }; 41705 }, 41706 41707 _setContainment: function() { 41708 41709 var ce, co, over, 41710 o = this.options; 41711 if ( o.containment === "parent" ) { 41712 o.containment = this.helper[ 0 ].parentNode; 41713 } 41714 if ( o.containment === "document" || o.containment === "window" ) { 41715 this.containment = [ 41716 0 - this.offset.relative.left - this.offset.parent.left, 41717 0 - this.offset.relative.top - this.offset.parent.top, 41718 o.containment === "document" ? 41719 this.document.width() : 41720 this.window.width() - this.helperProportions.width - this.margins.left, 41721 ( o.containment === "document" ? 41722 ( this.document.height() || document.body.parentNode.scrollHeight ) : 41723 this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight 41724 ) - this.helperProportions.height - this.margins.top 41725 ]; 41726 } 41727 41728 if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) { 41729 ce = $( o.containment )[ 0 ]; 41730 co = $( o.containment ).offset(); 41731 over = ( $( ce ).css( "overflow" ) !== "hidden" ); 41732 41733 this.containment = [ 41734 co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) + 41735 ( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left, 41736 co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) + 41737 ( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top, 41738 co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth )
vendor: 1,747 bytes, lines 41738-41790
41738: ce.offsetWidth ) - 41739 ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) - 41740 ( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) - 41741 this.helperProportions.width - this.margins.left, 41742 co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) - 41743 ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) - 41744 ( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) - 41745 this.helperProportions.height - this.margins.top 41746 ]; 41747 } 41748 41749 }, 41750 41751 _convertPositionTo: function( d, pos ) { 41752 41753 if ( !pos ) { 41754 pos = this.position; 41755 } 41756 var mod = d === "absolute" ? 1 : -1, 41757 scroll = this.cssPosition === "absolute" && 41758 !( this.scrollParent[ 0 ] !== this.document[ 0 ] && 41759 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? 41760 this.offsetParent : 41761 this.scrollParent, 41762 scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); 41763 41764 return { 41765 top: ( 41766 41767 // The absolute mouse position 41768 pos.top + 41769 41770 // Only for relative positioned nodes: Relative offset from element to offset parent 41771 this.offset.relative.top * mod + 41772 41773 // The offsetParent's offset without borders (offset + border) 41774 this.offset.parent.top * mod - 41775 ( ( this.cssPosition === "fixed" ? 41776 -this.scrollParent.scrollTop() : 41777 ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod ) 41778 ), 41779 left: ( 41780 41781 // The absolute mouse position 41782 pos.left + 41783 41784 // Only for relative positioned nodes: Relative offset from element to offset parent 41785 this.offset.relative.left * mod + 41786 41787 // The offsetParent's offset without borders (offset + border) 41788 this.offset.parent.left * mod - 41789 ( ( this.cssPosition === "fixed" ? 41790 -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :
vendor: 4,632 bytes, lines 41791-41934
41791 scroll.scrollLeft() ) * mod ) 41792 ) 41793 }; 41794 41795 }, 41796 41797 _generatePosition: function( event ) { 41798 41799 var top, left, 41800 o = this.options, 41801 pageX = event.pageX, 41802 pageY = event.pageY, 41803 scroll = this.cssPosition === "absolute" && 41804 !( this.scrollParent[ 0 ] !== this.document[ 0 ] && 41805 $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? 41806 this.offsetParent : 41807 this.scrollParent, 41808 scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName ); 41809 41810 // This is another very weird special case that only happens for relative elements: 41811 // 1. If the css position is relative 41812 // 2. and the scroll parent is the document or similar to the offset parent 41813 // we have to refresh the relative offset during the scroll so there are no jumps 41814 if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] && 41815 this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) { 41816 this.offset.relative = this._getRelativeOffset(); 41817 } 41818 41819 /* 41820 * - Position constraining - 41821 * Constrain the position to a mix of grid, containment. 41822 */ 41823 41824 if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options 41825 41826 if ( this.containment ) { 41827 if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) { 41828 pageX = this.containment[ 0 ] + this.offset.click.left; 41829 } 41830 if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) { 41831 pageY = this.containment[ 1 ] + this.offset.click.top; 41832 } 41833 if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) { 41834 pageX = this.containment[ 2 ] + this.offset.click.left; 41835 } 41836 if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) { 41837 pageY = this.containment[ 3 ] + this.offset.click.top; 41838 } 41839 } 41840 41841 if ( o.grid ) { 41842 top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) / 41843 o.grid[ 1 ] ) * o.grid[ 1 ]; 41844 pageY = this.containment ? 41845 ( ( top - this.offset.click.top >= this.containment[ 1 ] && 41846 top - this.offset.click.top <= this.containment[ 3 ] ) ? 41847 top : 41848 ( ( top - this.offset.click.top >= this.containment[ 1 ] ) ? 41849 top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : 41850 top; 41851 41852 left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) / 41853 o.grid[ 0 ] ) * o.grid[ 0 ]; 41854 pageX = this.containment ? 41855 ( ( left - this.offset.click.left >= this.containment[ 0 ] && 41856 left - this.offset.click.left <= this.containment[ 2 ] ) ? 41857 left : 41858 ( ( left - this.offset.click.left >= this.containment[ 0 ] ) ? 41859 left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : 41860 left; 41861 } 41862 41863 } 41864 41865 return { 41866 top: ( 41867 41868 // The absolute mouse position 41869 pageY - 41870 41871 // Click offset (relative to the element) 41872 this.offset.click.top - 41873 41874 // Only for relative positioned nodes: Relative offset from element to offset parent 41875 this.offset.relative.top - 41876 41877 // The offsetParent's offset without borders (offset + border) 41878 this.offset.parent.top + 41879 ( ( this.cssPosition === "fixed" ? 41880 -this.scrollParent.scrollTop() : 41881 ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) ) 41882 ), 41883 left: ( 41884 41885 // The absolute mouse position 41886 pageX - 41887 41888 // Click offset (relative to the element) 41889 this.offset.click.left - 41890 41891 // Only for relative positioned nodes: Relative offset from element to offset parent 41892 this.offset.relative.left - 41893 41894 // The offsetParent's offset without borders (offset + border) 41895 this.offset.parent.left + 41896 ( ( this.cssPosition === "fixed" ? 41897 -this.scrollParent.scrollLeft() : 41898 scrollIsRootNode ? 0 : scroll.scrollLeft() ) ) 41899 ) 41900 }; 41901 41902 }, 41903 41904 _rearrange: function( event, i, a, hardRefresh ) { 41905 41906 if ( a ) { 41907 a[ 0 ].appendChild( this.placeholder[ 0 ] ); 41908 } else { 41909 i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ], 41910 ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) ); 41911 } 41912 41913 //Various things done here to improve the performance: 41914 // 1. we create a setTimeout, that calls refreshPositions 41915 // 2. on the instance, we have a counter variable, that get's higher after every append 41916 // 3. on the local scope, we copy the counter variable, and check in the timeout, 41917 // if it's still the same 41918 // 4. this lets only the last addition to the timeout stack through 41919 this.counter = this.counter ? ++this.counter : 1; 41920 var counter = this.counter; 41921 41922 this._delay( function() { 41923 if ( counter === this.counter ) { 41924 41925 //Precompute after each DOM insertion, NOT on mousemove 41926 this.refreshPositions( !hardRefresh ); 41927 } 41928 } ); 41929 41930 }, 41931 41932 _clear: function( event, noPropagation ) { 41933 41934 this.reverting = false;
vendor: 4,281 bytes, lines 41935-42079
41935 41936 // We delay all events that have to be triggered to after the point where the placeholder 41937 // has been removed and everything else normalized again 41938 var i, 41939 delayedTriggers = []; 41940 41941 // We first have to update the dom position of the actual currentItem 41942 // Note: don't do it if the current item is already removed (by a user), or it gets 41943 // reappended (see #4088) 41944 if ( !this._noFinalSort && this.currentItem.parent().length ) { 41945 this.placeholder.before( this.currentItem ); 41946 } 41947 this._noFinalSort = null; 41948 41949 if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) { 41950 for ( i in this._storedCSS ) { 41951 if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) { 41952 this._storedCSS[ i ] = ""; 41953 } 41954 } 41955 this.currentItem.css( this._storedCSS ); 41956 this._removeClass( this.currentItem, "ui-sortable-helper" ); 41957 } else { 41958 this.currentItem.show(); 41959 } 41960 41961 if ( this.fromOutside && !noPropagation ) { 41962 delayedTriggers.push( function( event ) { 41963 this._trigger( "receive", event, this._uiHash( this.fromOutside ) ); 41964 } ); 41965 } 41966 if ( ( this.fromOutside || 41967 this.domPosition.prev !== 41968 this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] || 41969 this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) { 41970 41971 // Trigger update callback if the DOM position has changed 41972 delayedTriggers.push( function( event ) { 41973 this._trigger( "update", event, this._uiHash() ); 41974 } ); 41975 } 41976 41977 // Check if the items Container has Changed and trigger appropriate 41978 // events. 41979 if ( this !== this.currentContainer ) { 41980 if ( !noPropagation ) { 41981 delayedTriggers.push( function( event ) { 41982 this._trigger( "remove", event, this._uiHash() ); 41983 } ); 41984 delayedTriggers.push( ( function( c ) { 41985 return function( event ) { 41986 c._trigger( "receive", event, this._uiHash( this ) ); 41987 }; 41988 } ).call( this, this.currentContainer ) ); 41989 delayedTriggers.push( ( function( c ) { 41990 return function( event ) { 41991 c._trigger( "update", event, this._uiHash( this ) ); 41992 }; 41993 } ).call( this, this.currentContainer ) ); 41994 } 41995 } 41996 41997 //Post events to containers 41998 function delayEvent( type, instance, container ) { 41999 return function( event ) { 42000 container._trigger( type, event, instance._uiHash( instance ) ); 42001 }; 42002 } 42003 for ( i = this.containers.length - 1; i >= 0; i-- ) { 42004 if ( !noPropagation ) { 42005 delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) ); 42006 } 42007 if ( this.containers[ i ].containerCache.over ) { 42008 delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) ); 42009 this.containers[ i ].containerCache.over = 0; 42010 } 42011 } 42012 42013 //Do what was originally in plugins 42014 if ( this.storedCursor ) { 42015 this.document.find( "body" ).css( "cursor", this.storedCursor ); 42016 this.storedStylesheet.remove(); 42017 } 42018 if ( this._storedOpacity ) { 42019 this.helper.css( "opacity", this._storedOpacity ); 42020 } 42021 if ( this._storedZIndex ) { 42022 this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex ); 42023 } 42024 42025 this.dragging = false; 42026 42027 if ( !noPropagation ) { 42028 this._trigger( "beforeStop", event, this._uiHash() ); 42029 } 42030 42031 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, 42032 // it unbinds ALL events from the original node! 42033 this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] ); 42034 42035 if ( !this.cancelHelperRemoval ) { 42036 if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) { 42037 this.helper.remove(); 42038 } 42039 this.helper = null; 42040 } 42041 42042 if ( !noPropagation ) { 42043 for ( i = 0; i < delayedTriggers.length; i++ ) { 42044 42045 // Trigger all delayed events 42046 delayedTriggers[ i ].call( this, event ); 42047 } 42048 this._trigger( "stop", event, this._uiHash() ); 42049 } 42050 42051 this.fromOutside = false; 42052 return !this.cancelHelperRemoval; 42053 42054 }, 42055 42056 _trigger: function() { 42057 if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) { 42058 this.cancel(); 42059 } 42060 }, 42061 42062 _uiHash: function( _inst ) { 42063 var inst = _inst || this; 42064 return { 42065 helper: inst.helper, 42066 placeholder: inst.placeholder || $( [] ), 42067 position: inst.position, 42068 originalPosition: inst.originalPosition, 42069 offset: inst.positionAbs, 42070 item: inst.currentItem, 42071 sender: _inst ? _inst.element : null 42072 }; 42073 } 42074 42075} ); 42076 42077 42078/*! 42079 * jQuery UI Spinner 1.1
420793.2 42080 * http://jqueryui.com 42081 * 42082 * Copyright jQuery Foundation and other contributors 42083 * Released under the MIT license. 42084 * http://jquery.org/license 42085 */ 42086 42087//>>label: Spinner 42088//>>group: Widgets 42089//>>description: Displays buttons to easily input numbers via the keyboard or mouse. 42090//>>docs: http://api.jqueryui.com/spinner/ 42091//>>demos: http://jqueryui.com/spinner/ 42092//>>css.structure: ../../themes/base/core.css 42093//>>css.structure: ../../themes/base/spinner.css 42094//>>css.theme: ../../themes/base/theme.css 42095 42096 42097function spinnerModifier( fn ) { 42098 return function() { 42099 var previous = this.element.val(); 42100 fn.apply( this, arguments ); 42101 this._refresh(); 42102 if ( previous !== this.element.val() ) { 42103 this._trigger( "change" ); 42104 } 42105 }; 42106} 42107 42108$.widget( "ui.spinner", { 42109 version: "1.13.2
vendor: 13,310 bytes, lines 42109-42640
42109", 42110 defaultElement: "<input>", 42111 widgetEventPrefix: "spin", 42112 options: { 42113 classes: { 42114 "ui-spinner": "ui-corner-all", 42115 "ui-spinner-down": "ui-corner-br", 42116 "ui-spinner-up": "ui-corner-tr" 42117 }, 42118 culture: null, 42119 icons: { 42120 down: "ui-icon-triangle-1-s", 42121 up: "ui-icon-triangle-1-n" 42122 }, 42123 incremental: true, 42124 max: null, 42125 min: null, 42126 numberFormat: null, 42127 page: 10, 42128 step: 1, 42129 42130 change: null, 42131 spin: null, 42132 start: null, 42133 stop: null 42134 }, 42135 42136 _create: function() { 42137 42138 // handle string values that need to be parsed 42139 this._setOption( "max", this.options.max ); 42140 this._setOption( "min", this.options.min ); 42141 this._setOption( "step", this.options.step ); 42142 42143 // Only format if there is a value, prevents the field from being marked 42144 // as invalid in Firefox, see #9573. 42145 if ( this.value() !== "" ) { 42146 42147 // Format the value, but don't constrain. 42148 this._value( this.element.val(), true ); 42149 } 42150 42151 this._draw(); 42152 this._on( this._events ); 42153 this._refresh(); 42154 42155 // Turning off autocomplete prevents the browser from remembering the 42156 // value when navigating through history, so we re-enable autocomplete 42157 // if the page is unloaded before the widget is destroyed. #7790 42158 this._on( this.window, { 42159 beforeunload: function() { 42160 this.element.removeAttr( "autocomplete" ); 42161 } 42162 } ); 42163 }, 42164 42165 _getCreateOptions: function() { 42166 var options = this._super(); 42167 var element = this.element; 42168 42169 $.each( [ "min", "max", "step" ], function( i, option ) { 42170 var value = element.attr( option ); 42171 if ( value != null && value.length ) { 42172 options[ option ] = value; 42173 } 42174 } ); 42175 42176 return options; 42177 }, 42178 42179 _events: { 42180 keydown: function( event ) { 42181 if ( this._start( event ) && this._keydown( event ) ) { 42182 event.preventDefault(); 42183 } 42184 }, 42185 keyup: "_stop", 42186 focus: function() { 42187 this.previous = this.element.val(); 42188 }, 42189 blur: function( event ) { 42190 if ( this.cancelBlur ) { 42191 delete this.cancelBlur; 42192 return; 42193 } 42194 42195 this._stop(); 42196 this._refresh(); 42197 if ( this.previous !== this.element.val() ) { 42198 this._trigger( "change", event ); 42199 } 42200 }, 42201 mousewheel: function( event, delta ) { 42202 var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ); 42203 var isActive = this.element[ 0 ] === activeElement; 42204 42205 if ( !isActive || !delta ) { 42206 return; 42207 } 42208 42209 if ( !this.spinning && !this._start( event ) ) { 42210 return false; 42211 } 42212 42213 this._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event ); 42214 clearTimeout( this.mousewheelTimer ); 42215 this.mousewheelTimer = this._delay( function() { 42216 if ( this.spinning ) { 42217 this._stop( event ); 42218 } 42219 }, 100 ); 42220 event.preventDefault(); 42221 }, 42222 "mousedown .ui-spinner-button": function( event ) { 42223 var previous; 42224 42225 // We never want the buttons to have focus; whenever the user is 42226 // interacting with the spinner, the focus should be on the input. 42227 // If the input is focused then this.previous is properly set from 42228 // when the input first received focus. If the input is not focused 42229 // then we need to set this.previous based on the value before spinning. 42230 previous = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ? 42231 this.previous : this.element.val(); 42232 function checkFocus() { 42233 var isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ); 42234 if ( !isActive ) { 42235 this.element.trigger( "focus" ); 42236 this.previous = previous; 42237 42238 // support: IE 42239 // IE sets focus asynchronously, so we need to check if focus 42240 // moved off of the input because the user clicked on the button. 42241 this._delay( function() { 42242 this.previous = previous; 42243 } ); 42244 } 42245 } 42246 42247 // Ensure focus is on (or stays on) the text field 42248 event.preventDefault(); 42249 checkFocus.call( this ); 42250 42251 // Support: IE 42252 // IE doesn't prevent moving focus even with event.preventDefault() 42253 // so we set a flag to know when we should ignore the blur event 42254 // and check (again) if focus moved off of the input. 42255 this.cancelBlur = true; 42256 this._delay( function() { 42257 delete this.cancelBlur; 42258 checkFocus.call( this ); 42259 } ); 42260 42261 if ( this._start( event ) === false ) { 42262 return; 42263 } 42264 42265 this._repeat( null, $( event.currentTarget ) 42266 .hasClass( "ui-spinner-up" ) ? 1 : -1, event ); 42267 }, 42268 "mouseup .ui-spinner-button": "_stop", 42269 "mouseenter .ui-spinner-button": function( event ) { 42270 42271 // button will add ui-state-active if mouse was down while mouseleave and kept down 42272 if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) { 42273 return; 42274 } 42275 42276 if ( this._start( event ) === false ) { 42277 return false; 42278 } 42279 this._repeat( null, $( event.currentTarget ) 42280 .hasClass( "ui-spinner-up" ) ? 1 : -1, event ); 42281 }, 42282 42283 // TODO: do we really want to consider this a stop? 42284 // shouldn't we just stop the repeater and wait until mouseup before 42285 // we trigger the stop event? 42286 "mouseleave .ui-spinner-button": "_stop" 42287 }, 42288 42289 // Support mobile enhanced option and make backcompat more sane 42290 _enhance: function() { 42291 this.uiSpinner = this.element 42292 .attr( "autocomplete", "off" ) 42293 .wrap( "<span>" ) 42294 .parent() 42295 42296 // Add buttons 42297 .append( 42298 "<a></a><a></a>" 42299 ); 42300 }, 42301 42302 _draw: function() { 42303 this._enhance(); 42304 42305 this._addClass( this.uiSpinner, "ui-spinner", "ui-widget ui-widget-content" ); 42306 this._addClass( "ui-spinner-input" ); 42307 42308 this.element.attr( "role", "spinbutton" ); 42309 42310 // Button bindings 42311 this.buttons = this.uiSpinner.children( "a" ) 42312 .attr( "tabIndex", -1 ) 42313 .attr( "aria-hidden", true ) 42314 .button( { 42315 classes: { 42316 "ui-button": "" 42317 } 42318 } ); 42319 42320 // TODO: Right now button does not support classes this is already updated in button PR 42321 this._removeClass( this.buttons, "ui-corner-all" ); 42322 42323 this._addClass( this.buttons.first(), "ui-spinner-button ui-spinner-up" ); 42324 this._addClass( this.buttons.last(), "ui-spinner-button ui-spinner-down" ); 42325 this.buttons.first().button( { 42326 "icon": this.options.icons.up, 42327 "showLabel": false 42328 } ); 42329 this.buttons.last().button( { 42330 "icon": this.options.icons.down, 42331 "showLabel": false 42332 } ); 42333 42334 // IE 6 doesn't understand height: 50% for the buttons 42335 // unless the wrapper has an explicit height 42336 if ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) && 42337 this.uiSpinner.height() > 0 ) { 42338 this.uiSpinner.height( this.uiSpinner.height() ); 42339 } 42340 }, 42341 42342 _keydown: function( event ) { 42343 var options = this.options, 42344 keyCode = $.ui.keyCode; 42345 42346 switch ( event.keyCode ) { 42347 case keyCode.UP: 42348 this._repeat( null, 1, event ); 42349 return true; 42350 case keyCode.DOWN: 42351 this._repeat( null, -1, event ); 42352 return true; 42353 case keyCode.PAGE_UP: 42354 this._repeat( null, options.page, event ); 42355 return true; 42356 case keyCode.PAGE_DOWN: 42357 this._repeat( null, -options.page, event ); 42358 return true; 42359 } 42360 42361 return false; 42362 }, 42363 42364 _start: function( event ) { 42365 if ( !this.spinning && this._trigger( "start", event ) === false ) { 42366 return false; 42367 } 42368 42369 if ( !this.counter ) { 42370 this.counter = 1; 42371 } 42372 this.spinning = true; 42373 return true; 42374 }, 42375 42376 _repeat: function( i, steps, event ) { 42377 i = i || 500; 42378 42379 clearTimeout( this.timer ); 42380 this.timer = this._delay( function() { 42381 this._repeat( 40, steps, event ); 42382 }, i ); 42383 42384 this._spin( steps * this.options.step, event ); 42385 }, 42386 42387 _spin: function( step, event ) { 42388 var value = this.value() || 0; 42389 42390 if ( !this.counter ) { 42391 this.counter = 1; 42392 } 42393 42394 value = this._adjustValue( value + step * this._increment( this.counter ) ); 42395 42396 if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false ) { 42397 this._value( value ); 42398 this.counter++; 42399 } 42400 }, 42401 42402 _increment: function( i ) { 42403 var incremental = this.options.incremental; 42404 42405 if ( incremental ) { 42406 return typeof incremental === "function" ? 42407 incremental( i ) : 42408 Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 ); 42409 } 42410 42411 return 1; 42412 }, 42413 42414 _precision: function() { 42415 var precision = this._precisionOf( this.options.step ); 42416 if ( this.options.min !== null ) { 42417 precision = Math.max( precision, this._precisionOf( this.options.min ) ); 42418 } 42419 return precision; 42420 }, 42421 42422 _precisionOf: function( num ) { 42423 var str = num.toString(), 42424 decimal = str.indexOf( "." ); 42425 return decimal === -1 ? 0 : str.length - decimal - 1; 42426 }, 42427 42428 _adjustValue: function( value ) { 42429 var base, aboveMin, 42430 options = this.options; 42431 42432 // Make sure we're at a valid step 42433 // - find out where we are relative to the base (min or 0) 42434 base = options.min !== null ? options.min : 0; 42435 aboveMin = value - base; 42436 42437 // - round to the nearest step 42438 aboveMin = Math.round( aboveMin / options.step ) * options.step; 42439 42440 // - rounding is based on 0, so adjust back to our base 42441 value = base + aboveMin; 42442 42443 // Fix precision from bad JS floating point math 42444 value = parseFloat( value.toFixed( this._precision() ) ); 42445 42446 // Clamp the value 42447 if ( options.max !== null && value > options.max ) { 42448 return options.max; 42449 } 42450 if ( options.min !== null && value < options.min ) { 42451 return options.min; 42452 } 42453 42454 return value; 42455 }, 42456 42457 _stop: function( event ) { 42458 if ( !this.spinning ) { 42459 return; 42460 } 42461 42462 clearTimeout( this.timer ); 42463 clearTimeout( this.mousewheelTimer ); 42464 this.counter = 0; 42465 this.spinning = false; 42466 this._trigger( "stop", event ); 42467 }, 42468 42469 _setOption: function( key, value ) { 42470 var prevValue, first, last; 42471 42472 if ( key === "culture" || key === "numberFormat" ) { 42473 prevValue = this._parse( this.element.val() ); 42474 this.options[ key ] = value; 42475 this.element.val( this._format( prevValue ) ); 42476 return; 42477 } 42478 42479 if ( key === "max" || key === "min" || key === "step" ) { 42480 if ( typeof value === "string" ) { 42481 value = this._parse( value ); 42482 } 42483 } 42484 if ( key === "icons" ) { 42485 first = this.buttons.first().find( ".ui-icon" ); 42486 this._removeClass( first, null, this.options.icons.up ); 42487 this._addClass( first, null, value.up ); 42488 last = this.buttons.last().find( ".ui-icon" ); 42489 this._removeClass( last, null, this.options.icons.down ); 42490 this._addClass( last, null, value.down ); 42491 } 42492 42493 this._super( key, value ); 42494 }, 42495 42496 _setOptionDisabled: function( value ) { 42497 this._super( value ); 42498 42499 this._toggleClass( this.uiSpinner, null, "ui-state-disabled", !!value ); 42500 this.element.prop( "disabled", !!value ); 42501 this.buttons.button( value ? "disable" : "enable" ); 42502 }, 42503 42504 _setOptions: spinnerModifier( function( options ) { 42505 this._super( options ); 42506 } ), 42507 42508 _parse: function( val ) { 42509 if ( typeof val === "string" && val !== "" ) { 42510 val = window.Globalize && this.options.numberFormat ? 42511 Globalize.parseFloat( val, 10, this.options.culture ) : +val; 42512 } 42513 return val === "" || isNaN( val ) ? null : val; 42514 }, 42515 42516 _format: function( value ) { 42517 if ( value === "" ) { 42518 return ""; 42519 } 42520 return window.Globalize && this.options.numberFormat ? 42521 Globalize.format( value, this.options.numberFormat, this.options.culture ) : 42522 value; 42523 }, 42524 42525 _refresh: function() { 42526 this.element.attr( { 42527 "aria-valuemin": this.options.min, 42528 "aria-valuemax": this.options.max, 42529 42530 // TODO: what should we do with values that can't be parsed? 42531 "aria-valuenow": this._parse( this.element.val() ) 42532 } ); 42533 }, 42534 42535 isValid: function() { 42536 var value = this.value(); 42537 42538 // Null is invalid 42539 if ( value === null ) { 42540 return false; 42541 } 42542 42543 // If value gets adjusted, it's invalid 42544 return value === this._adjustValue( value ); 42545 }, 42546 42547 // Update the value without triggering change 42548 _value: function( value, allowAny ) { 42549 var parsed; 42550 if ( value !== "" ) { 42551 parsed = this._parse( value ); 42552 if ( parsed !== null ) { 42553 if ( !allowAny ) { 42554 parsed = this._adjustValue( parsed ); 42555 } 42556 value = this._format( parsed ); 42557 } 42558 } 42559 this.element.val( value ); 42560 this._refresh(); 42561 }, 42562 42563 _destroy: function() { 42564 this.element 42565 .prop( "disabled", false ) 42566 .removeAttr( "autocomplete role aria-valuemin aria-valuemax aria-valuenow" ); 42567 42568 this.uiSpinner.replaceWith( this.element ); 42569 }, 42570 42571 stepUp: spinnerModifier( function( steps ) { 42572 this._stepUp( steps ); 42573 } ), 42574 _stepUp: function( steps ) { 42575 if ( this._start() ) { 42576 this._spin( ( steps || 1 ) * this.options.step ); 42577 this._stop(); 42578 } 42579 }, 42580 42581 stepDown: spinnerModifier( function( steps ) { 42582 this._stepDown( steps ); 42583 } ), 42584 _stepDown: function( steps ) { 42585 if ( this._start() ) { 42586 this._spin( ( steps || 1 ) * -this.options.step ); 42587 this._stop(); 42588 } 42589 }, 42590 42591 pageUp: spinnerModifier( function( pages ) { 42592 this._stepUp( ( pages || 1 ) * this.options.page ); 42593 } ), 42594 42595 pageDown: spinnerModifier( function( pages ) { 42596 this._stepDown( ( pages || 1 ) * this.options.page ); 42597 } ), 42598 42599 value: function( newVal ) { 42600 if ( !arguments.length ) { 42601 return this._parse( this.element.val() ); 42602 } 42603 spinnerModifier( this._value ).call( this, newVal ); 42604 }, 42605 42606 widget: function() { 42607 return this.uiSpinner; 42608 } 42609} ); 42610 42611// DEPRECATED 42612// TODO: switch return back to widget declaration at top of file when this is removed 42613if ( $.uiBackCompat !== false ) { 42614 42615 // Backcompat for spinner html extension points 42616 $.widget( "ui.spinner", $.ui.spinner, { 42617 _enhance: function() { 42618 this.uiSpinner = this.element 42619 .attr( "autocomplete", "off" ) 42620 .wrap( this._uiSpinnerHtml() ) 42621 .parent() 42622 42623 // Add buttons 42624 .append( this._buttonHtml() ); 42625 }, 42626 _uiSpinnerHtml: function() { 42627 return "<span>"; 42628 }, 42629 42630 _buttonHtml: function() { 42631 return "<a></a><a></a>"; 42632 } 42633 } ); 42634} 42635 42636var widgetsSpinner = $.ui.spinner; 42637 42638 42639/*! 42640 * jQuery UI Tabs 1.13.
426402 42641 * http://jqueryui.com 42642 * 42643 * Copyright jQuery Foundation and other contributors 42644 * Released under the MIT license. 42645 * http://jquery.org/license 42646 */ 42647 42648//>>label: Tabs 42649//>>group: Widgets 42650//>>description: Transforms a set of container elements into a tab structure. 42651//>>docs: http://api.jqueryui.com/tabs/ 42652//>>demos: http://jqueryui.com/tabs/ 42653//>>css.structure: ../../themes/base/core.css 42654//>>css.structure: ../../themes/base/tabs.css 42655//>>css.theme: ../../themes/base/theme.css 42656 42657 42658$.widget( "ui.tabs", { 42659 version: "1.13.2
vendor: 12,261 bytes, lines 42659-43126
42659", 42660 delay: 300, 42661 options: { 42662 active: null, 42663 classes: { 42664 "ui-tabs": "ui-corner-all", 42665 "ui-tabs-nav": "ui-corner-all", 42666 "ui-tabs-panel": "ui-corner-bottom", 42667 "ui-tabs-tab": "ui-corner-top" 42668 }, 42669 collapsible: false, 42670 event: "click", 42671 heightStyle: "content", 42672 hide: null, 42673 show: null, 42674 42675 // Callbacks 42676 activate: null, 42677 beforeActivate: null, 42678 beforeLoad: null, 42679 load: null 42680 }, 42681 42682 _isLocal: ( function() { 42683 var rhash = /#.*$/; 42684 42685 return function( anchor ) { 42686 var anchorUrl, locationUrl; 42687 42688 anchorUrl = anchor.href.replace( rhash, "" ); 42689 locationUrl = location.href.replace( rhash, "" ); 42690 42691 // Decoding may throw an error if the URL isn't UTF-8 (#9518) 42692 try { 42693 anchorUrl = decodeURIComponent( anchorUrl ); 42694 } catch ( error ) {} 42695 try { 42696 locationUrl = decodeURIComponent( locationUrl ); 42697 } catch ( error ) {} 42698 42699 return anchor.hash.length > 1 && anchorUrl === locationUrl; 42700 }; 42701 } )(), 42702 42703 _create: function() { 42704 var that = this, 42705 options = this.options; 42706 42707 this.running = false; 42708 42709 this._addClass( "ui-tabs", "ui-widget ui-widget-content" ); 42710 this._toggleClass( "ui-tabs-collapsible", null, options.collapsible ); 42711 42712 this._processTabs(); 42713 options.active = this._initialActive(); 42714 42715 // Take disabling tabs via class attribute from HTML 42716 // into account and update option properly. 42717 if ( Array.isArray( options.disabled ) ) { 42718 options.disabled = $.uniqueSort( options.disabled.concat( 42719 $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { 42720 return that.tabs.index( li ); 42721 } ) 42722 ) ).sort(); 42723 } 42724 42725 // Check for length avoids error when initializing empty list 42726 if ( this.options.active !== false && this.anchors.length ) { 42727 this.active = this._findActive( options.active ); 42728 } else { 42729 this.active = $(); 42730 } 42731 42732 this._refresh(); 42733 42734 if ( this.active.length ) { 42735 this.load( options.active ); 42736 } 42737 }, 42738 42739 _initialActive: function() { 42740 var active = this.options.active, 42741 collapsible = this.options.collapsible, 42742 locationHash = location.hash.substring( 1 ); 42743 42744 if ( active === null ) { 42745 42746 // check the fragment identifier in the URL 42747 if ( locationHash ) { 42748 this.tabs.each( function( i, tab ) { 42749 if ( $( tab ).attr( "aria-controls" ) === locationHash ) { 42750 active = i; 42751 return false; 42752 } 42753 } ); 42754 } 42755 42756 // Check for a tab marked active via a class 42757 if ( active === null ) { 42758 active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); 42759 } 42760 42761 // No active tab, set to false 42762 if ( active === null || active === -1 ) { 42763 active = this.tabs.length ? 0 : false; 42764 } 42765 } 42766 42767 // Handle numbers: negative, out of range 42768 if ( active !== false ) { 42769 active = this.tabs.index( this.tabs.eq( active ) ); 42770 if ( active === -1 ) { 42771 active = collapsible ? false : 0; 42772 } 42773 } 42774 42775 // Don't allow collapsible: false and active: false 42776 if ( !collapsible && active === false && this.anchors.length ) { 42777 active = 0; 42778 } 42779 42780 return active; 42781 }, 42782 42783 _getCreateEventData: function() { 42784 return { 42785 tab: this.active, 42786 panel: !this.active.length ? $() : this._getPanelForTab( this.active ) 42787 }; 42788 }, 42789 42790 _tabKeydown: function( event ) { 42791 var focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( "li" ), 42792 selectedIndex = this.tabs.index( focusedTab ), 42793 goingForward = true; 42794 42795 if ( this._handlePageNav( event ) ) { 42796 return; 42797 } 42798 42799 switch ( event.keyCode ) { 42800 case $.ui.keyCode.RIGHT: 42801 case $.ui.keyCode.DOWN: 42802 selectedIndex++; 42803 break; 42804 case $.ui.keyCode.UP: 42805 case $.ui.keyCode.LEFT: 42806 goingForward = false; 42807 selectedIndex--; 42808 break; 42809 case $.ui.keyCode.END: 42810 selectedIndex = this.anchors.length - 1; 42811 break; 42812 case $.ui.keyCode.HOME: 42813 selectedIndex = 0; 42814 break; 42815 case $.ui.keyCode.SPACE: 42816 42817 // Activate only, no collapsing 42818 event.preventDefault(); 42819 clearTimeout( this.activating ); 42820 this._activate( selectedIndex ); 42821 return; 42822 case $.ui.keyCode.ENTER: 42823 42824 // Toggle (cancel delayed activation, allow collapsing) 42825 event.preventDefault(); 42826 clearTimeout( this.activating ); 42827 42828 // Determine if we should collapse or activate 42829 this._activate( selectedIndex === this.options.active ? false : selectedIndex ); 42830 return; 42831 default: 42832 return; 42833 } 42834 42835 // Focus the appropriate tab, based on which key was pressed 42836 event.preventDefault(); 42837 clearTimeout( this.activating ); 42838 selectedIndex = this._focusNextTab( selectedIndex, goingForward ); 42839 42840 // Navigating with control/command key will prevent automatic activation 42841 if ( !event.ctrlKey && !event.metaKey ) { 42842 42843 // Update aria-selected immediately so that AT think the tab is already selected. 42844 // Otherwise AT may confuse the user by stating that they need to activate the tab, 42845 // but the tab will already be activated by the time the announcement finishes. 42846 focusedTab.attr( "aria-selected", "false" ); 42847 this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); 42848 42849 this.activating = this._delay( function() { 42850 this.option( "active", selectedIndex ); 42851 }, this.delay ); 42852 } 42853 }, 42854 42855 _panelKeydown: function( event ) { 42856 if ( this._handlePageNav( event ) ) { 42857 return; 42858 } 42859 42860 // Ctrl+up moves focus to the current tab 42861 if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { 42862 event.preventDefault(); 42863 this.active.trigger( "focus" ); 42864 } 42865 }, 42866 42867 // Alt+page up/down moves focus to the previous/next tab (and activates) 42868 _handlePageNav: function( event ) { 42869 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { 42870 this._activate( this._focusNextTab( this.options.active - 1, false ) ); 42871 return true; 42872 } 42873 if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { 42874 this._activate( this._focusNextTab( this.options.active + 1, true ) ); 42875 return true; 42876 } 42877 }, 42878 42879 _findNextTab: function( index, goingForward ) { 42880 var lastTabIndex = this.tabs.length - 1; 42881 42882 function constrain() { 42883 if ( index > lastTabIndex ) { 42884 index = 0; 42885 } 42886 if ( index < 0 ) { 42887 index = lastTabIndex; 42888 } 42889 return index; 42890 } 42891 42892 while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { 42893 index = goingForward ? index + 1 : index - 1; 42894 } 42895 42896 return index; 42897 }, 42898 42899 _focusNextTab: function( index, goingForward ) { 42900 index = this._findNextTab( index, goingForward ); 42901 this.tabs.eq( index ).trigger( "focus" ); 42902 return index; 42903 }, 42904 42905 _setOption: function( key, value ) { 42906 if ( key === "active" ) { 42907 42908 // _activate() will handle invalid values and update this.options 42909 this._activate( value ); 42910 return; 42911 } 42912 42913 this._super( key, value ); 42914 42915 if ( key === "collapsible" ) { 42916 this._toggleClass( "ui-tabs-collapsible", null, value ); 42917 42918 // Setting collapsible: false while collapsed; open first panel 42919 if ( !value && this.options.active === false ) { 42920 this._activate( 0 ); 42921 } 42922 } 42923 42924 if ( key === "event" ) { 42925 this._setupEvents( value ); 42926 } 42927 42928 if ( key === "heightStyle" ) { 42929 this._setupHeightStyle( value ); 42930 } 42931 }, 42932 42933 _sanitizeSelector: function( hash ) { 42934 return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; 42935 }, 42936 42937 refresh: function() { 42938 var options = this.options, 42939 lis = this.tablist.children( ":has(a[href])" ); 42940 42941 // Get disabled tabs from class attribute from HTML 42942 // this will get converted to a boolean if needed in _refresh() 42943 options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { 42944 return lis.index( tab ); 42945 } ); 42946 42947 this._processTabs(); 42948 42949 // Was collapsed or no tabs 42950 if ( options.active === false || !this.anchors.length ) { 42951 options.active = false; 42952 this.active = $(); 42953 42954 // was active, but active tab is gone 42955 } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { 42956 42957 // all remaining tabs are disabled 42958 if ( this.tabs.length === options.disabled.length ) { 42959 options.active = false; 42960 this.active = $(); 42961 42962 // activate previous tab 42963 } else { 42964 this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); 42965 } 42966 42967 // was active, active tab still exists 42968 } else { 42969 42970 // make sure active index is correct 42971 options.active = this.tabs.index( this.active ); 42972 } 42973 42974 this._refresh(); 42975 }, 42976 42977 _refresh: function() { 42978 this._setOptionDisabled( this.options.disabled ); 42979 this._setupEvents( this.options.event ); 42980 this._setupHeightStyle( this.options.heightStyle ); 42981 42982 this.tabs.not( this.active ).attr( { 42983 "aria-selected": "false", 42984 "aria-expanded": "false", 42985 tabIndex: -1 42986 } ); 42987 this.panels.not( this._getPanelForTab( this.active ) ) 42988 .hide() 42989 .attr( { 42990 "aria-hidden": "true" 42991 } ); 42992 42993 // Make sure one tab is in the tab order 42994 if ( !this.active.length ) { 42995 this.tabs.eq( 0 ).attr( "tabIndex", 0 ); 42996 } else { 42997 this.active 42998 .attr( { 42999 "aria-selected": "true", 43000 "aria-expanded": "true", 43001 tabIndex: 0 43002 } ); 43003 this._addClass( this.active, "ui-tabs-active", "ui-state-active" ); 43004 this._getPanelForTab( this.active ) 43005 .show() 43006 .attr( { 43007 "aria-hidden": "false" 43008 } ); 43009 } 43010 }, 43011 43012 _processTabs: function() { 43013 var that = this, 43014 prevTabs = this.tabs, 43015 prevAnchors = this.anchors, 43016 prevPanels = this.panels; 43017 43018 this.tablist = this._getList().attr( "role", "tablist" ); 43019 this._addClass( this.tablist, "ui-tabs-nav", 43020 "ui-helper-reset ui-helper-clearfix ui-widget-header" ); 43021 43022 // Prevent users from focusing disabled tabs via click 43023 this.tablist 43024 .on( "mousedown" + this.eventNamespace, "> li", function( event ) { 43025 if ( $( this ).is( ".ui-state-disabled" ) ) { 43026 event.preventDefault(); 43027 } 43028 } ) 43029 43030 // Support: IE <9 43031 // Preventing the default action in mousedown doesn't prevent IE 43032 // from focusing the element, so if the anchor gets focused, blur. 43033 // We don't have to worry about focusing the previously focused 43034 // element since clicking on a non-focusable element should focus 43035 // the body anyway. 43036 .on( "focus" + this.eventNamespace, ".ui-tabs-anchor", function() { 43037 if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { 43038 this.blur(); 43039 } 43040 } ); 43041 43042 this.tabs = this.tablist.find( "> li:has(a[href])" ) 43043 .attr( { 43044 role: "tab", 43045 tabIndex: -1 43046 } ); 43047 this._addClass( this.tabs, "ui-tabs-tab", "ui-state-default" ); 43048 43049 this.anchors = this.tabs.map( function() { 43050 return $( "a", this )[ 0 ]; 43051 } ) 43052 .attr( { 43053 tabIndex: -1 43054 } ); 43055 this._addClass( this.anchors, "ui-tabs-anchor" ); 43056 43057 this.panels = $(); 43058 43059 this.anchors.each( function( i, anchor ) { 43060 var selector, panel, panelId, 43061 anchorId = $( anchor ).uniqueId().attr( "id" ), 43062 tab = $( anchor ).closest( "li" ), 43063 originalAriaControls = tab.attr( "aria-controls" ); 43064 43065 // Inline tab 43066 if ( that._isLocal( anchor ) ) { 43067 selector = anchor.hash; 43068 panelId = selector.substring( 1 ); 43069 panel = that.element.find( that._sanitizeSelector( selector ) ); 43070 43071 // remote tab 43072 } else { 43073 43074 // If the tab doesn't already have aria-controls, 43075 // generate an id by using a throw-away element 43076 panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id; 43077 selector = "#" + panelId; 43078 panel = that.element.find( selector ); 43079 if ( !panel.length ) { 43080 panel = that._createPanel( panelId ); 43081 panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); 43082 } 43083 panel.attr( "aria-live", "polite" ); 43084 } 43085 43086 if ( panel.length ) { 43087 that.panels = that.panels.add( panel ); 43088 } 43089 if ( originalAriaControls ) { 43090 tab.data( "ui-tabs-aria-controls", originalAriaControls ); 43091 } 43092 tab.attr( { 43093 "aria-controls": panelId, 43094 "aria-labelledby": anchorId 43095 } ); 43096 panel.attr( "aria-labelledby", anchorId ); 43097 } ); 43098 43099 this.panels.attr( "role", "tabpanel" ); 43100 this._addClass( this.panels, "ui-tabs-panel", "ui-widget-content" ); 43101 43102 // Avoid memory leaks (#10056) 43103 if ( prevTabs ) { 43104 this._off( prevTabs.not( this.tabs ) ); 43105 this._off( prevAnchors.not( this.anchors ) ); 43106 this._off( prevPanels.not( this.panels ) ); 43107 } 43108 }, 43109 43110 // Allow overriding how to find the list for rare usage scenarios (#7715) 43111 _getList: function() { 43112 return this.tablist || this.element.find( "ol, ul" ).eq( 0 ); 43113 }, 43114 43115 _createPanel: function( id ) { 43116 return $( "<div>" ) 43117 .attr( "id", id ) 43118 .data( "ui-tabs-destroy", true ); 43119 }, 43120 43121 _setOptionDisabled: function( disabled ) { 43122 var currentItem, li, i; 43123 43124 if ( Array.isArray( disabled ) ) { 43125 if ( !disabled.length ) { 43126 disabled = false;
vendor: 6,148 bytes, lines 43127-43355
43127 } else if ( disabled.length === this.anchors.length ) { 43128 disabled = true; 43129 } 43130 } 43131 43132 // Disable tabs 43133 for ( i = 0; ( li = this.tabs[ i ] ); i++ ) { 43134 currentItem = $( li ); 43135 if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { 43136 currentItem.attr( "aria-disabled", "true" ); 43137 this._addClass( currentItem, null, "ui-state-disabled" ); 43138 } else { 43139 currentItem.removeAttr( "aria-disabled" ); 43140 this._removeClass( currentItem, null, "ui-state-disabled" ); 43141 } 43142 } 43143 43144 this.options.disabled = disabled; 43145 43146 this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, 43147 disabled === true ); 43148 }, 43149 43150 _setupEvents: function( event ) { 43151 var events = {}; 43152 if ( event ) { 43153 $.each( event.split( " " ), function( index, eventName ) { 43154 events[ eventName ] = "_eventHandler"; 43155 } ); 43156 } 43157 43158 this._off( this.anchors.add( this.tabs ).add( this.panels ) ); 43159 43160 // Always prevent the default action, even when disabled 43161 this._on( true, this.anchors, { 43162 click: function( event ) { 43163 event.preventDefault(); 43164 } 43165 } ); 43166 this._on( this.anchors, events ); 43167 this._on( this.tabs, { keydown: "_tabKeydown" } ); 43168 this._on( this.panels, { keydown: "_panelKeydown" } ); 43169 43170 this._focusable( this.tabs ); 43171 this._hoverable( this.tabs ); 43172 }, 43173 43174 _setupHeightStyle: function( heightStyle ) { 43175 var maxHeight, 43176 parent = this.element.parent(); 43177 43178 if ( heightStyle === "fill" ) { 43179 maxHeight = parent.height(); 43180 maxHeight -= this.element.outerHeight() - this.element.height(); 43181 43182 this.element.siblings( ":visible" ).each( function() { 43183 var elem = $( this ), 43184 position = elem.css( "position" ); 43185 43186 if ( position === "absolute" || position === "fixed" ) { 43187 return; 43188 } 43189 maxHeight -= elem.outerHeight( true ); 43190 } ); 43191 43192 this.element.children().not( this.panels ).each( function() { 43193 maxHeight -= $( this ).outerHeight( true ); 43194 } ); 43195 43196 this.panels.each( function() { 43197 $( this ).height( Math.max( 0, maxHeight - 43198 $( this ).innerHeight() + $( this ).height() ) ); 43199 } ) 43200 .css( "overflow", "auto" ); 43201 } else if ( heightStyle === "auto" ) { 43202 maxHeight = 0; 43203 this.panels.each( function() { 43204 maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); 43205 } ).height( maxHeight ); 43206 } 43207 }, 43208 43209 _eventHandler: function( event ) { 43210 var options = this.options, 43211 active = this.active, 43212 anchor = $( event.currentTarget ), 43213 tab = anchor.closest( "li" ), 43214 clickedIsActive = tab[ 0 ] === active[ 0 ], 43215 collapsing = clickedIsActive && options.collapsible, 43216 toShow = collapsing ? $() : this._getPanelForTab( tab ), 43217 toHide = !active.length ? $() : this._getPanelForTab( active ), 43218 eventData = { 43219 oldTab: active, 43220 oldPanel: toHide, 43221 newTab: collapsing ? $() : tab, 43222 newPanel: toShow 43223 }; 43224 43225 event.preventDefault(); 43226 43227 if ( tab.hasClass( "ui-state-disabled" ) || 43228 43229 // tab is already loading 43230 tab.hasClass( "ui-tabs-loading" ) || 43231 43232 // can't switch durning an animation 43233 this.running || 43234 43235 // click on active header, but not collapsible 43236 ( clickedIsActive && !options.collapsible ) || 43237 43238 // allow canceling activation 43239 ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { 43240 return; 43241 } 43242 43243 options.active = collapsing ? false : this.tabs.index( tab ); 43244 43245 this.active = clickedIsActive ? $() : tab; 43246 if ( this.xhr ) { 43247 this.xhr.abort(); 43248 } 43249 43250 if ( !toHide.length && !toShow.length ) { 43251 $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); 43252 } 43253 43254 if ( toShow.length ) { 43255 this.load( this.tabs.index( tab ), event ); 43256 } 43257 this._toggle( event, eventData ); 43258 }, 43259 43260 // Handles show/hide for selecting tabs 43261 _toggle: function( event, eventData ) { 43262 var that = this, 43263 toShow = eventData.newPanel, 43264 toHide = eventData.oldPanel; 43265 43266 this.running = true; 43267 43268 function complete() { 43269 that.running = false; 43270 that._trigger( "activate", event, eventData ); 43271 } 43272 43273 function show() { 43274 that._addClass( eventData.newTab.closest( "li" ), "ui-tabs-active", "ui-state-active" ); 43275 43276 if ( toShow.length && that.options.show ) { 43277 that._show( toShow, that.options.show, complete ); 43278 } else { 43279 toShow.show(); 43280 complete(); 43281 } 43282 } 43283 43284 // Start out by hiding, then showing, then completing 43285 if ( toHide.length && this.options.hide ) { 43286 this._hide( toHide, this.options.hide, function() { 43287 that._removeClass( eventData.oldTab.closest( "li" ), 43288 "ui-tabs-active", "ui-state-active" ); 43289 show(); 43290 } ); 43291 } else { 43292 this._removeClass( eventData.oldTab.closest( "li" ), 43293 "ui-tabs-active", "ui-state-active" ); 43294 toHide.hide(); 43295 show(); 43296 } 43297 43298 toHide.attr( "aria-hidden", "true" ); 43299 eventData.oldTab.attr( { 43300 "aria-selected": "false", 43301 "aria-expanded": "false" 43302 } ); 43303 43304 // If we're switching tabs, remove the old tab from the tab order. 43305 // If we're opening from collapsed state, remove the previous tab from the tab order. 43306 // If we're collapsing, then keep the collapsing tab in the tab order. 43307 if ( toShow.length && toHide.length ) { 43308 eventData.oldTab.attr( "tabIndex", -1 ); 43309 } else if ( toShow.length ) { 43310 this.tabs.filter( function() { 43311 return $( this ).attr( "tabIndex" ) === 0; 43312 } ) 43313 .attr( "tabIndex", -1 ); 43314 } 43315 43316 toShow.attr( "aria-hidden", "false" ); 43317 eventData.newTab.attr( { 43318 "aria-selected": "true", 43319 "aria-expanded": "true", 43320 tabIndex: 0 43321 } ); 43322 }, 43323 43324 _activate: function( index ) { 43325 var anchor, 43326 active = this._findActive( index ); 43327 43328 // Trying to activate the already active panel 43329 if ( active[ 0 ] === this.active[ 0 ] ) { 43330 return; 43331 } 43332 43333 // Trying to collapse, simulate a click on the current active header 43334 if ( !active.length ) { 43335 active = this.active; 43336 } 43337 43338 anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; 43339 this._eventHandler( { 43340 target: anchor, 43341 currentTarget: anchor, 43342 preventDefault: $.noop 43343 } ); 43344 }, 43345 43346 _findActive: function( index ) { 43347 return index === false ? $() : this.tabs.eq( index ); 43348 }, 43349 43350 _getIndex: function( index ) { 43351 43352 // meta-function to give users option to provide a href string instead of a numerical index. 43353 if ( typeof index === "string" ) { 43354 index = this.anchors.index( this.anchors.filter( "[href$='" + 43355 $.
vendor: 4,911 bytes, lines 43355-43563
43355escapeSelector( index ) + "']" ) ); 43356 } 43357 43358 return index; 43359 }, 43360 43361 _destroy: function() { 43362 if ( this.xhr ) { 43363 this.xhr.abort(); 43364 } 43365 43366 this.tablist 43367 .removeAttr( "role" ) 43368 .off( this.eventNamespace ); 43369 43370 this.anchors 43371 .removeAttr( "role tabIndex" ) 43372 .removeUniqueId(); 43373 43374 this.tabs.add( this.panels ).each( function() { 43375 if ( $.data( this, "ui-tabs-destroy" ) ) { 43376 $( this ).remove(); 43377 } else { 43378 $( this ).removeAttr( "role tabIndex " + 43379 "aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded" ); 43380 } 43381 } ); 43382 43383 this.tabs.each( function() { 43384 var li = $( this ), 43385 prev = li.data( "ui-tabs-aria-controls" ); 43386 if ( prev ) { 43387 li 43388 .attr( "aria-controls", prev ) 43389 .removeData( "ui-tabs-aria-controls" ); 43390 } else { 43391 li.removeAttr( "aria-controls" ); 43392 } 43393 } ); 43394 43395 this.panels.show(); 43396 43397 if ( this.options.heightStyle !== "content" ) { 43398 this.panels.css( "height", "" ); 43399 } 43400 }, 43401 43402 enable: function( index ) { 43403 var disabled = this.options.disabled; 43404 if ( disabled === false ) { 43405 return; 43406 } 43407 43408 if ( index === undefined ) { 43409 disabled = false; 43410 } else { 43411 index = this._getIndex( index ); 43412 if ( Array.isArray( disabled ) ) { 43413 disabled = $.map( disabled, function( num ) { 43414 return num !== index ? num : null; 43415 } ); 43416 } else { 43417 disabled = $.map( this.tabs, function( li, num ) { 43418 return num !== index ? num : null; 43419 } ); 43420 } 43421 } 43422 this._setOptionDisabled( disabled ); 43423 }, 43424 43425 disable: function( index ) { 43426 var disabled = this.options.disabled; 43427 if ( disabled === true ) { 43428 return; 43429 } 43430 43431 if ( index === undefined ) { 43432 disabled = true; 43433 } else { 43434 index = this._getIndex( index ); 43435 if ( $.inArray( index, disabled ) !== -1 ) { 43436 return; 43437 } 43438 if ( Array.isArray( disabled ) ) { 43439 disabled = $.merge( [ index ], disabled ).sort(); 43440 } else { 43441 disabled = [ index ]; 43442 } 43443 } 43444 this._setOptionDisabled( disabled ); 43445 }, 43446 43447 load: function( index, event ) { 43448 index = this._getIndex( index ); 43449 var that = this, 43450 tab = this.tabs.eq( index ), 43451 anchor = tab.find( ".ui-tabs-anchor" ), 43452 panel = this._getPanelForTab( tab ), 43453 eventData = { 43454 tab: tab, 43455 panel: panel 43456 }, 43457 complete = function( jqXHR, status ) { 43458 if ( status === "abort" ) { 43459 that.panels.stop( false, true ); 43460 } 43461 43462 that._removeClass( tab, "ui-tabs-loading" ); 43463 panel.removeAttr( "aria-busy" ); 43464 43465 if ( jqXHR === that.xhr ) { 43466 delete that.xhr; 43467 } 43468 }; 43469 43470 // Not remote 43471 if ( this._isLocal( anchor[ 0 ] ) ) { 43472 return; 43473 } 43474 43475 this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); 43476 43477 // Support: jQuery <1.8 43478 // jQuery <1.8 returns false if the request is canceled in beforeSend, 43479 // but as of 1.8, $.ajax() always returns a jqXHR object. 43480 if ( this.xhr && this.xhr.statusText !== "canceled" ) { 43481 this._addClass( tab, "ui-tabs-loading" ); 43482 panel.attr( "aria-busy", "true" ); 43483 43484 this.xhr 43485 .done( function( response, status, jqXHR ) { 43486 43487 // support: jQuery <1.8 43488 // http://bugs.jquery.com/ticket/11778 43489 setTimeout( function() { 43490 panel.html( response ); 43491 that._trigger( "load", event, eventData ); 43492 43493 complete( jqXHR, status ); 43494 }, 1 ); 43495 } ) 43496 .fail( function( jqXHR, status ) { 43497 43498 // support: jQuery <1.8 43499 // http://bugs.jquery.com/ticket/11778 43500 setTimeout( function() { 43501 complete( jqXHR, status ); 43502 }, 1 ); 43503 } ); 43504 } 43505 }, 43506 43507 _ajaxSettings: function( anchor, event, eventData ) { 43508 var that = this; 43509 return { 43510 43511 // Support: IE <11 only 43512 // Strip any hash that exists to prevent errors with the Ajax request 43513 url: anchor.attr( "href" ).replace( /#.*$/, "" ), 43514 beforeSend: function( jqXHR, settings ) { 43515 return that._trigger( "beforeLoad", event, 43516 $.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) ); 43517 } 43518 }; 43519 }, 43520 43521 _getPanelForTab: function( tab ) { 43522 var id = $( tab ).attr( "aria-controls" ); 43523 return this.element.find( this._sanitizeSelector( "#" + id ) ); 43524 } 43525} ); 43526 43527// DEPRECATED 43528// TODO: Switch return back to widget declaration at top of file when this is removed 43529if ( $.uiBackCompat !== false ) { 43530 43531 // Backcompat for ui-tab class (now ui-tabs-tab) 43532 $.widget( "ui.tabs", $.ui.tabs, { 43533 _processTabs: function() { 43534 this._superApply( arguments ); 43535 this._addClass( this.tabs, "ui-tab" ); 43536 } 43537 } ); 43538} 43539 43540var widgetsTabs = $.ui.tabs; 43541 43542 43543/*! 43544 * jQuery UI Tooltip 1.13.2 43545 * http://jqueryui.com 43546 * 43547 * Copyright jQuery Foundation and other contributors 43548 * Released under the MIT license. 43549 * http://jquery.org/license 43550 */ 43551 43552//>>label: Tooltip 43553//>>group: Widgets 43554//>>description: Shows additional information for any element on hover or focus. 43555//>>docs: http://api.jqueryui.com/tooltip/ 43556//>>demos: http://jqueryui.com/tooltip/ 43557//>>css.structure: ../../themes/base/core.css 43558//>>css.structure: ../../themes/base/tooltip.css 43559//>>css.theme: ../../themes/base/theme.css 43560 43561 43562$.widget( "ui.tooltip", { 43563 version: "1.13.2
vendor: 13,567 bytes, lines 43563-44051
43563", 43564 options: { 43565 classes: { 43566 "ui-tooltip": "ui-corner-all ui-widget-shadow" 43567 }, 43568 content: function() { 43569 var title = $( this ).attr( "title" ); 43570 43571 // Escape title, since we're going from an attribute to raw HTML 43572 return $( "<a>" ).text( title ).html(); 43573 }, 43574 hide: true, 43575 43576 // Disabled elements have inconsistent behavior across browsers (#8661) 43577 items: "[title]:not([disabled])", 43578 position: { 43579 my: "left top+15", 43580 at: "left bottom", 43581 collision: "flipfit flip" 43582 }, 43583 show: true, 43584 track: false, 43585 43586 // Callbacks 43587 close: null, 43588 open: null 43589 }, 43590 43591 _addDescribedBy: function( elem, id ) { 43592 var describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ); 43593 describedby.push( id ); 43594 elem 43595 .data( "ui-tooltip-id", id ) 43596 .attr( "aria-describedby", String.prototype.trim.call( describedby.join( " " ) ) ); 43597 }, 43598 43599 _removeDescribedBy: function( elem ) { 43600 var id = elem.data( "ui-tooltip-id" ), 43601 describedby = ( elem.attr( "aria-describedby" ) || "" ).split( /\s+/ ), 43602 index = $.inArray( id, describedby ); 43603 43604 if ( index !== -1 ) { 43605 describedby.splice( index, 1 ); 43606 } 43607 43608 elem.removeData( "ui-tooltip-id" ); 43609 describedby = String.prototype.trim.call( describedby.join( " " ) ); 43610 if ( describedby ) { 43611 elem.attr( "aria-describedby", describedby ); 43612 } else { 43613 elem.removeAttr( "aria-describedby" ); 43614 } 43615 }, 43616 43617 _create: function() { 43618 this._on( { 43619 mouseover: "open", 43620 focusin: "open" 43621 } ); 43622 43623 // IDs of generated tooltips, needed for destroy 43624 this.tooltips = {}; 43625 43626 // IDs of parent tooltips where we removed the title attribute 43627 this.parents = {}; 43628 43629 // Append the aria-live region so tooltips announce correctly 43630 this.liveRegion = $( "<div>" ) 43631 .attr( { 43632 role: "log", 43633 "aria-live": "assertive", 43634 "aria-relevant": "additions" 43635 } ) 43636 .appendTo( this.document[ 0 ].body ); 43637 this._addClass( this.liveRegion, null, "ui-helper-hidden-accessible" ); 43638 43639 this.disabledTitles = $( [] ); 43640 }, 43641 43642 _setOption: function( key, value ) { 43643 var that = this; 43644 43645 this._super( key, value ); 43646 43647 if ( key === "content" ) { 43648 $.each( this.tooltips, function( id, tooltipData ) { 43649 that._updateContent( tooltipData.element ); 43650 } ); 43651 } 43652 }, 43653 43654 _setOptionDisabled: function( value ) { 43655 this[ value ? "_disable" : "_enable" ](); 43656 }, 43657 43658 _disable: function() { 43659 var that = this; 43660 43661 // Close open tooltips 43662 $.each( this.tooltips, function( id, tooltipData ) { 43663 var event = $.Event( "blur" ); 43664 event.target = event.currentTarget = tooltipData.element[ 0 ]; 43665 that.close( event, true ); 43666 } ); 43667 43668 // Remove title attributes to prevent native tooltips 43669 this.disabledTitles = this.disabledTitles.add( 43670 this.element.find( this.options.items ).addBack() 43671 .filter( function() { 43672 var element = $( this ); 43673 if ( element.is( "[title]" ) ) { 43674 return element 43675 .data( "ui-tooltip-title", element.attr( "title" ) ) 43676 .removeAttr( "title" ); 43677 } 43678 } ) 43679 ); 43680 }, 43681 43682 _enable: function() { 43683 43684 // restore title attributes 43685 this.disabledTitles.each( function() { 43686 var element = $( this ); 43687 if ( element.data( "ui-tooltip-title" ) ) { 43688 element.attr( "title", element.data( "ui-tooltip-title" ) ); 43689 } 43690 } ); 43691 this.disabledTitles = $( [] ); 43692 }, 43693 43694 open: function( event ) { 43695 var that = this, 43696 target = $( event ? event.target : this.element ) 43697 43698 // we need closest here due to mouseover bubbling, 43699 // but always pointing at the same event target 43700 .closest( this.options.items ); 43701 43702 // No element to show a tooltip for or the tooltip is already open 43703 if ( !target.length || target.data( "ui-tooltip-id" ) ) { 43704 return; 43705 } 43706 43707 if ( target.attr( "title" ) ) { 43708 target.data( "ui-tooltip-title", target.attr( "title" ) ); 43709 } 43710 43711 target.data( "ui-tooltip-open", true ); 43712 43713 // Kill parent tooltips, custom or native, for hover 43714 if ( event && event.type === "mouseover" ) { 43715 target.parents().each( function() { 43716 var parent = $( this ), 43717 blurEvent; 43718 if ( parent.data( "ui-tooltip-open" ) ) { 43719 blurEvent = $.Event( "blur" ); 43720 blurEvent.target = blurEvent.currentTarget = this; 43721 that.close( blurEvent, true ); 43722 } 43723 if ( parent.attr( "title" ) ) { 43724 parent.uniqueId(); 43725 that.parents[ this.id ] = { 43726 element: this, 43727 title: parent.attr( "title" ) 43728 }; 43729 parent.attr( "title", "" ); 43730 } 43731 } ); 43732 } 43733 43734 this._registerCloseHandlers( event, target ); 43735 this._updateContent( target, event ); 43736 }, 43737 43738 _updateContent: function( target, event ) { 43739 var content, 43740 contentOption = this.options.content, 43741 that = this, 43742 eventType = event ? event.type : null; 43743 43744 if ( typeof contentOption === "string" || contentOption.nodeType || 43745 contentOption.jquery ) { 43746 return this._open( event, target, contentOption ); 43747 } 43748 43749 content = contentOption.call( target[ 0 ], function( response ) { 43750 43751 // IE may instantly serve a cached response for ajax requests 43752 // delay this call to _open so the other call to _open runs first 43753 that._delay( function() { 43754 43755 // Ignore async response if tooltip was closed already 43756 if ( !target.data( "ui-tooltip-open" ) ) { 43757 return; 43758 } 43759 43760 // JQuery creates a special event for focusin when it doesn't 43761 // exist natively. To improve performance, the native event 43762 // object is reused and the type is changed. Therefore, we can't 43763 // rely on the type being correct after the event finished 43764 // bubbling, so we set it back to the previous value. (#8740) 43765 if ( event ) { 43766 event.type = eventType; 43767 } 43768 this._open( event, target, response ); 43769 } ); 43770 } ); 43771 if ( content ) { 43772 this._open( event, target, content ); 43773 } 43774 }, 43775 43776 _open: function( event, target, content ) { 43777 var tooltipData, tooltip, delayedShow, a11yContent, 43778 positionOption = $.extend( {}, this.options.position ); 43779 43780 if ( !content ) { 43781 return; 43782 } 43783 43784 // Content can be updated multiple times. If the tooltip already 43785 // exists, then just update the content and bail. 43786 tooltipData = this._find( target ); 43787 if ( tooltipData ) { 43788 tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content ); 43789 return; 43790 } 43791 43792 // If we have a title, clear it to prevent the native tooltip 43793 // we have to check first to avoid defining a title if none exists 43794 // (we don't want to cause an element to start matching [title]) 43795 // 43796 // We use removeAttr only for key events, to allow IE to export the correct 43797 // accessible attributes. For mouse events, set to empty string to avoid 43798 // native tooltip showing up (happens only when removing inside mouseover). 43799 if ( target.is( "[title]" ) ) { 43800 if ( event && event.type === "mouseover" ) { 43801 target.attr( "title", "" ); 43802 } else { 43803 target.removeAttr( "title" ); 43804 } 43805 } 43806 43807 tooltipData = this._tooltip( target ); 43808 tooltip = tooltipData.tooltip; 43809 this._addDescribedBy( target, tooltip.attr( "id" ) ); 43810 tooltip.find( ".ui-tooltip-content" ).html( content ); 43811 43812 // Support: Voiceover on OS X, JAWS on IE <= 9 43813 // JAWS announces deletions even when aria-relevant="additions" 43814 // Voiceover will sometimes re-read the entire log region's contents from the beginning 43815 this.liveRegion.children().hide(); 43816 a11yContent = $( "<div>" ).html( tooltip.find( ".ui-tooltip-content" ).html() ); 43817 a11yContent.removeAttr( "name" ).find( "[name]" ).removeAttr( "name" ); 43818 a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" ); 43819 a11yContent.appendTo( this.liveRegion ); 43820 43821 function position( event ) { 43822 positionOption.of = event; 43823 if ( tooltip.is( ":hidden" ) ) { 43824 return; 43825 } 43826 tooltip.position( positionOption ); 43827 } 43828 if ( this.options.track && event && /^mouse/.test( event.type ) ) { 43829 this._on( this.document, { 43830 mousemove: position 43831 } ); 43832 43833 // trigger once to override element-relative positioning 43834 position( event ); 43835 } else { 43836 tooltip.position( $.extend( { 43837 of: target 43838 }, this.options.position ) ); 43839 } 43840 43841 tooltip.hide(); 43842 43843 this._show( tooltip, this.options.show ); 43844 43845 // Handle tracking tooltips that are shown with a delay (#8644). As soon 43846 // as the tooltip is visible, position the tooltip using the most recent 43847 // event. 43848 // Adds the check to add the timers only when both delay and track options are set (#14682) 43849 if ( this.options.track && this.options.show && this.options.show.delay ) { 43850 delayedShow = this.delayedShow = setInterval( function() { 43851 if ( tooltip.is( ":visible" ) ) { 43852 position( positionOption.of ); 43853 clearInterval( delayedShow ); 43854 } 43855 }, 13 ); 43856 } 43857 43858 this._trigger( "open", event, { tooltip: tooltip } ); 43859 }, 43860 43861 _registerCloseHandlers: function( event, target ) { 43862 var events = { 43863 keyup: function( event ) { 43864 if ( event.keyCode === $.ui.keyCode.ESCAPE ) { 43865 var fakeEvent = $.Event( event ); 43866 fakeEvent.currentTarget = target[ 0 ]; 43867 this.close( fakeEvent, true ); 43868 } 43869 } 43870 }; 43871 43872 // Only bind remove handler for delegated targets. Non-delegated 43873 // tooltips will handle this in destroy. 43874 if ( target[ 0 ] !== this.element[ 0 ] ) { 43875 events.remove = function() { 43876 var targetElement = this._find( target ); 43877 if ( targetElement ) { 43878 this._removeTooltip( targetElement.tooltip ); 43879 } 43880 }; 43881 } 43882 43883 if ( !event || event.type === "mouseover" ) { 43884 events.mouseleave = "close"; 43885 } 43886 if ( !event || event.type === "focusin" ) { 43887 events.focusout = "close"; 43888 } 43889 this._on( true, target, events ); 43890 }, 43891 43892 close: function( event ) { 43893 var tooltip, 43894 that = this, 43895 target = $( event ? event.currentTarget : this.element ), 43896 tooltipData = this._find( target ); 43897 43898 // The tooltip may already be closed 43899 if ( !tooltipData ) { 43900 43901 // We set ui-tooltip-open immediately upon open (in open()), but only set the 43902 // additional data once there's actually content to show (in _open()). So even if the 43903 // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in 43904 // the period between open() and _open(). 43905 target.removeData( "ui-tooltip-open" ); 43906 return; 43907 } 43908 43909 tooltip = tooltipData.tooltip; 43910 43911 // Disabling closes the tooltip, so we need to track when we're closing 43912 // to avoid an infinite loop in case the tooltip becomes disabled on close 43913 if ( tooltipData.closing ) { 43914 return; 43915 } 43916 43917 // Clear the interval for delayed tracking tooltips 43918 clearInterval( this.delayedShow ); 43919 43920 // Only set title if we had one before (see comment in _open()) 43921 // If the title attribute has changed since open(), don't restore 43922 if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) { 43923 target.attr( "title", target.data( "ui-tooltip-title" ) ); 43924 } 43925 43926 this._removeDescribedBy( target ); 43927 43928 tooltipData.hiding = true; 43929 tooltip.stop( true ); 43930 this._hide( tooltip, this.options.hide, function() { 43931 that._removeTooltip( $( this ) ); 43932 } ); 43933 43934 target.removeData( "ui-tooltip-open" ); 43935 this._off( target, "mouseleave focusout keyup" ); 43936 43937 // Remove 'remove' binding only on delegated targets 43938 if ( target[ 0 ] !== this.element[ 0 ] ) { 43939 this._off( target, "remove" ); 43940 } 43941 this._off( this.document, "mousemove" ); 43942 43943 if ( event && event.type === "mouseleave" ) { 43944 $.each( this.parents, function( id, parent ) { 43945 $( parent.element ).attr( "title", parent.title ); 43946 delete that.parents[ id ]; 43947 } ); 43948 } 43949 43950 tooltipData.closing = true; 43951 this._trigger( "close", event, { tooltip: tooltip } ); 43952 if ( !tooltipData.hiding ) { 43953 tooltipData.closing = false; 43954 } 43955 }, 43956 43957 _tooltip: function( element ) { 43958 var tooltip = $( "<div>" ).attr( "role", "tooltip" ), 43959 content = $( "<div>" ).appendTo( tooltip ), 43960 id = tooltip.uniqueId().attr( "id" ); 43961 43962 this._addClass( content, "ui-tooltip-content" ); 43963 this._addClass( tooltip, "ui-tooltip", "ui-widget ui-widget-content" ); 43964 43965 tooltip.appendTo( this._appendTo( element ) ); 43966 43967 return this.tooltips[ id ] = { 43968 element: element, 43969 tooltip: tooltip 43970 }; 43971 }, 43972 43973 _find: function( target ) { 43974 var id = target.data( "ui-tooltip-id" ); 43975 return id ? this.tooltips[ id ] : null; 43976 }, 43977 43978 _removeTooltip: function( tooltip ) { 43979 43980 // Clear the interval for delayed tracking tooltips 43981 clearInterval( this.delayedShow ); 43982 43983 tooltip.remove(); 43984 delete this.tooltips[ tooltip.attr( "id" ) ]; 43985 }, 43986 43987 _appendTo: function( target ) { 43988 var element = target.closest( ".ui-front, dialog" ); 43989 43990 if ( !element.length ) { 43991 element = this.document[ 0 ].body; 43992 } 43993 43994 return element; 43995 }, 43996 43997 _destroy: function() { 43998 var that = this; 43999 44000 // Close open tooltips 44001 $.each( this.tooltips, function( id, tooltipData ) { 44002 44003 // Delegate to close method to handle common cleanup 44004 var event = $.Event( "blur" ), 44005 element = tooltipData.element; 44006 event.target = event.currentTarget = element[ 0 ]; 44007 that.close( event, true ); 44008 44009 // Remove immediately; destroying an open tooltip doesn't use the 44010 // hide animation 44011 $( "#" + id ).remove(); 44012 44013 // Restore the title 44014 if ( element.data( "ui-tooltip-title" ) ) { 44015 44016 // If the title attribute has changed since open(), don't restore 44017 if ( !element.attr( "title" ) ) { 44018 element.attr( "title", element.data( "ui-tooltip-title" ) ); 44019 } 44020 element.removeData( "ui-tooltip-title" ); 44021 } 44022 } ); 44023 this.liveRegion.remove(); 44024 } 44025} ); 44026 44027// DEPRECATED 44028// TODO: Switch return back to widget declaration at top of file when this is removed 44029if ( $.uiBackCompat !== false ) { 44030 44031 // Backcompat for tooltipClass option 44032 $.widget( "ui.tooltip", $.ui.tooltip, { 44033 options: { 44034 tooltipClass: null 44035 }, 44036 _tooltip: function() { 44037 var tooltipData = this._superApply( arguments ); 44038 if ( this.options.tooltipClass ) { 44039 tooltipData.tooltip.addClass( this.options.tooltipClass ); 44040 } 44041 return tooltipData; 44042 } 44043 } ); 44044} 44045 44046var widgetsTooltip = $.ui.tooltip; 44047 44048 44049 44050 44051} );
44051 44052//Jquery UI end here 44053try { 44054 (function ($, window, undefined) { 44055 "$:nomunge"; 44056 var str_hashchange = "hashchange", 44057 doc = document, 44058 fake_onhashchange, 44059 special = $.event.special, 44060 doc_mode = doc.documentMode, 44061 supports_onhashchange = "on" + str_hashchange in window && (doc_mode === undefined || doc_mode > 7); 44062 function get_fragment(url) { 44063 url = url || location.href; 44064 return "#" + url.replace(/^[^#]*#?(.*)$/, "$1"); 44065 } 44066 $.fn[str_hashchange] = function (fn) { 44067 return fn ? this.bind(str_hashchange, fn) : this.trigger(str_hashchange); 44068 }; 44069 $.fn[str_hashchange].delay = 50; 44070 special[str_hashchange] = $.extend(special[str_hashchange], { 44071 setup: function () { 44072 if (supports_onhashchange) { 44073 return false; 44074 } 44075 $(fake_onhashchange.start); 44076 }, 44077 teardown: function () { 44078 if (supports_onhashchange) { 44079 return false; 44080 } 44081 $(fake_onhashchange.stop); 44082 }, 44083 }); 44084 fake_onhashchange = (function () { 44085 var self = {}, 44086 timeout_id, 44087 last_hash = get_fragment(), 44088 fn_retval = function (val) { 44089 return val; 44090 }, 44091 history_set = fn_retval, 44092 history_get = fn_retval; 44093 self.start = function () { 44094 timeout_id || poll(); 44095 }; 44096 self.stop = function () { 44097 timeout_id && clearTimeout(timeout_id); 44098 timeout_id = undefined; 44099 }; 44100 function poll() { 44101 var hash = get_fragment(), 44102 history_hash = history_get(last_hash); 44103 if (hash !== last_hash) { 44104 history_set((last_hash = hash), history_hash); 44105 $(window).trigger(str_hashchange); 44106 } else if (history_hash !== last_hash) { 44107 location.href = location.href.replace(/#.*/, "") + history_hash; 44108 } 44109 timeout_id = setTimeout(poll, $.fn[str_hashchange].delay); 44110 } 44111 $.browser.msie && 44112 !supports_onhashchange && 44113 (function () { 44114 var iframe, iframe_src; 44115 self.start = function () { 44116 if (!iframe) { 44117 iframe_src = $.fn[str_hashchange].src; 44118 iframe_src = iframe_src && iframe_src + get_fragment(); 44119 iframe = $('<iframe tabindex="-1" title="empty"/>') 44120 .hide() 44121 .one("load", function () { 44122 iframe_src || history_set(get_fragment()); 44123 poll(); 44124 }) 44125 .attr("src", iframe_src || "javascript:0") 44126 .insertAfter("body")[0].contentWindow; 44127 doc.onpropertychange = function () { 44128 try { 44129 if (event.propertyName === "title") { 44130 iframe.document.title = doc.title; 44131 } 44132 } catch (e) {} 44133 }; 44134 } 44135 }; 44136 self.stop = fn_retval; 44137 history_get = function () { 44138 return get_fragment(iframe.location.href); 44139 }; 44140 history_set = function (hash, history_hash) { 44141 var iframe_doc = iframe.document, 44142 domain = $.fn[str_hashchange].domain; 44143 if (hash !== history_hash) { 44144 iframe_doc.title = doc.title; 44145 iframe_doc.open(); 44146 domain && iframe_doc.write('<script>document.domain="' + domain + '"</script>'); 44147 iframe_doc.close(); 44148 iframe.location.hash = hash; 44149 } 44150 }; 44151 })(); 44152 return self; 44153 })(); 44154 })(jQuery, this); 44155} catch (e) {} 44156!(function (a, b) { 44157 "function" == typeof define && define.amd ? define(["jquery"], b) : "object" == typeof exports ? (module.exports = b(require("jquery"))) : (a.lightbox = b(a.jQuery)); 44158})(this, function (a) { 44159 function b(b) { 44160 (this.album = []), (this.currentImageIndex = void 0), this.init(), (this.options = a.extend({}, this.constructor.defaults)), this.option(b); 44161 } 44162 return ( 44163 (b.defaults = { 44164 albumLabel: "%1 / %2", 44165 alwaysShowNavOnTouchDevices: !1, 44166 fadeDuration: 600,
44167 fitImagesInViewport: !0, 44168 imageFadeDuration: 600, 44169 positionFromTop: 0, 44170 resizeDuration: 500, 44171 showImageNumberLabel: !0, 44172 wrapAround: !1, 44173 disableScrolling: !1, 44174 sanitizeTitle: !1, 44175 maxWidth: 900, 44176 }), 44177 (b.prototype.option = function (b) { 44178 a.extend(this.options, b); 44179 }), 44180 (b.prototype.imageCountLabel = function (a, b) { 44181 return this.options.albumLabel.replace(/%1/g, a).replace(/%2/g, b); 44182 }), 44183 (b.prototype.init = function () { 44184 var b = this; 44185 a(document).ready(function () { 44186 b.enable(), b.build(); 44187 }); 44188 }), 44189 (b.prototype.enable = function () { 44190 var b = this; 44191 a("body").on("click", "a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]", function (c) { 44192 return b.start(a(c.currentTarget)), !1; 44193 }); 44194 }), 44195 (b.prototype.build = function () { 44196 if (!(a("#lightbox").length > 0)) { 44197 var b = this; 44198 a( 44199 '<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a><span>Close</span></div></div></div></div>' 44200 ).appendTo(a("body")), 44201 (this.$lightbox = a("#lightbox")), 44202 (this.$overlay = a("#lightboxOverlay")), 44203 (this.$outerContainer = this.$lightbox.find(".lb-outerContainer")), 44204 (this.$container = this.$lightbox.find(".lb-container")), 44205 (this.$image = this.$lightbox.find(".lb-image")), 44206 (this.$nav = this.$lightbox.find(".lb-nav")), 44207 (this.containerPadding = { 44208 top: parseInt(this.$container.css("padding-top"), 10), 44209 right: parseInt(this.$container.css("padding-right"), 10), 44210 bottom: parseInt(this.$container.css("padding-bottom"), 10), 44211 left: parseInt(this.$container.css("padding-left"), 10), 44212 }), 44213 (this.imageBorderWidth = { 44214 top: parseInt(this.$image.css("border-top-width"), 10), 44215 right: parseInt(this.$image.css("border-right-width"), 10), 44216 bottom: parseInt(this.$image.css("border-bottom-width"), 10), 44217 left: parseInt(this.$image.css("border-left-width"), 10), 44218 }), 44219 this.$overlay.hide().on("click", function () { 44220 return b.end(), !1; 44221 }), 44222 this.$lightbox.hide().on("click", function (c) { 44223 return "lightbox" === a(c.target).attr("id") && b.end(), !1; 44224 }), 44225 this.$outerContainer.on("click", function (c) { 44226 return "lightbox" === a(c.target).attr("id") && b.end(), !1; 44227 }), 44228 this.$lightbox.find(".lb-prev").on("click", function () { 44229 return 0 === b.currentImageIndex ? b.changeImage(b.album.length - 1) : b.changeImage(b.currentImageIndex - 1), !1; 44230 }), 44231 this.$lightbox.find(".lb-next").on("click", function () { 44232 return b.currentImageIndex === b.album.length - 1 ? b.changeImage(0) : b.changeImage(b.currentImageIndex + 1), !1; 44233 }), 44234 this.$nav.on("mousedown", function (a) { 44235 3 === a.which && 44236 (b.$nav.css("pointer-events", "none"), 44237 b.$lightbox.one("contextmenu", function () { 44238 setTimeout( 44239 function () { 44240 this.$nav.css("pointer-events", "auto"); 44241 }.bind(b), 44242 0 44243 ); 44244 })); 44245 }), 44246 this.$lightbox.find(".lb-loader, .lb-close").on("click", function () { 44247 return b.end(), !1; 44248 }); 44249 } 44250 }), 44251 (b.prototype.start = function (b) { 44252 function c(a) { 44253 d.album.push({ alt: a.attr("data-alt"), link: a.attr("href"), title: a.attr("data-title") || a.attr("title") }); 44254 } 44255 var d = this, 44256 e = a(window); 44257 e.on("resize", a.proxy(this.sizeOverlay, this)), a("select, object, embed").css({ visibility: "hidden" }), this.sizeOverlay(), (this.album = []); 44258 var f, 44259 g = 0, 44260 h = b.attr("data-lightbox"); 44261 if (h) { 44262 f = a(b.prop("tagName") + '[data-lightbox="' + h + '"]'); 44263 for (var i = 0; i < f.length; i = ++i) c(a(f[i])), f[i] === b[0] && (g = i); 44264 } else if ("lightbox" === b.attr("rel")) c(b); 44265 else { 44266 f = a(b.prop("tagName") + '[rel="' + b.attr("rel") + '"]'); 44267 for (var j = 0; j < f.length; j = ++j) c(a(f[j])), f[j] === b[0] && (g = j); 44268 } 44269 var k = e.scrollTop() + this.options.positionFromTop, 44270 l = e.scrollLeft(); 44271 this.$lightbox.css({ top: k + "px", left: l + "px" }).fadeIn(this.options.fadeDuration), this.options.disableScrolling && a("html").addClass("lb-disable-scrolling"), this.changeImage(g); 44272 }), 44273 (b.prototype.changeImage = function (b) { 44274 var c = this; 44275 this.disableKeyboardNav(); 44276 var d = this.$lightbox.find(".lb-image"); 44277 this.$overlay.fadeIn(this.options.fadeDuration), 44278 a(".lb-loader").fadeIn("slow"), 44279 this.$lightbox.find(".lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption").hide(), 44280 this.$outerContainer.addClass("animating"); 44281 var e = new Image(); 44282 (e.onload = function () { 44283 var f, g, h, i, j, k; 44284 d.attr({ alt: c.album[b].alt, src: c.album[b].link }), 44285 a(e), 44286 d.width(e.width), 44287 d.height(e.height), 44288 c.options.fitImagesInViewport && 44289 ((k = a(window).width()), 44290 (j = a(window).height()), 44291 (i = k - c.containerPadding.left - c.containerPadding.right - c.imageBorderWidth.left - c.imageBorderWidth.right - 20), 44292 (h = j - c.containerPadding.top - c.containerPadding.bottom - c.imageBorderWidth.top - c.imageBorderWidth.bottom - 120), 44293 c.options.maxWidth && c.options.maxWidth < i && (i = c.options.maxWidth), 44294 c.options.maxHeight && c.options.maxHeight < i && (h = c.options.maxHeight),
44295 (e.width > i || e.height > h) && 44296 (e.width / i > e.height / h ? ((g = i), (f = parseInt(e.height / (e.width / g), 10)), d.width(g), d.height(f)) : ((f = h), (g = parseInt(e.width / (e.height / f), 10)), d.width(g), d.height(f)))), 44297 c.sizeContainer(d.width(), d.height()); 44298 }), 44299 (e.src = this.album[b].link), 44300 (this.currentImageIndex = b); 44301 }), 44302 (b.prototype.sizeOverlay = function () { 44303 this.$overlay.width(a(document).width()).height(a(document).height()); 44304 }), 44305 (b.prototype.sizeContainer = function (a, b) { 44306 function c() { 44307 d.$lightbox.find(".lb-dataContainer").width(g), d.$lightbox.find(".lb-prevLink").height(h), d.$lightbox.find(".lb-nextLink").height(h), d.showImage(); 44308 } 44309 var d = this, 44310 e = this.$outerContainer.outerWidth(), 44311 f = this.$outerContainer.outerHeight(), 44312 g = a + this.containerPadding.left + this.containerPadding.right + this.imageBorderWidth.left + this.imageBorderWidth.right, 44313 h = b + this.containerPadding.top + this.containerPadding.bottom + this.imageBorderWidth.top + this.imageBorderWidth.bottom; 44314 e !== g || f !== h 44315 ? this.$outerContainer.animate({ width: g, height: h }, this.options.resizeDuration, "swing", function () { 44316 c(); 44317 }) 44318 : c(); 44319 }), 44320 (b.prototype.showImage = function () { 44321 this.$lightbox.find(".lb-loader").stop(!0).hide(), this.$lightbox.find(".lb-image").fadeIn(this.options.imageFadeDuration), this.updateNav(), this.updateDetails(), this.preloadNeighboringImages(), this.enableKeyboardNav(); 44322 }), 44323 (b.prototype.updateNav = function () { 44324 var a = !1; 44325 try { 44326 document.createEvent("TouchEvent"), (a = !!this.options.alwaysShowNavOnTouchDevices); 44327 } catch (a) {} 44328 this.$lightbox.find(".lb-nav").show(), 44329 this.album.length > 1 && 44330 (this.options.wrapAround 44331 ? (a && this.$lightbox.find(".lb-prev, .lb-next").css("opacity", "1"), this.$lightbox.find(".lb-prev, .lb-next").show()) 44332 : (this.currentImageIndex > 0 && (this.$lightbox.find(".lb-prev").show(), a && this.$lightbox.find(".lb-prev").css("opacity", "1")), 44333 this.currentImageIndex < this.album.length - 1 && (this.$lightbox.find(".lb-next").show(), a && this.$lightbox.find(".lb-next").css("opacity", "1")))); 44334 }), 44335 (b.prototype.updateDetails = function () { 44336 var b = this; 44337 if (void 0 !== this.album[this.currentImageIndex].title && "" !== this.album[this.currentImageIndex].title) { 44338 var c = this.$lightbox.find(".lb-caption"); 44339 this.options.sanitizeTitle ? c.text(this.album[this.currentImageIndex].title) : c.html(this.album[this.currentImageIndex].title), 44340 c 44341 .fadeIn("fast") 44342 .find("a") 44343 .on("click", function (b) { 44344 void 0 !== a(this).attr("target") ? window.open(a(this).attr("href"), a(this).attr("target")) : (location.href = a(this).attr("href")); 44345 }); 44346 } 44347 if (this.album.length > 1 && this.options.showImageNumberLabel) { 44348 var d = this.imageCountLabel(this.currentImageIndex + 1, this.album.length); 44349 this.$lightbox.find(".lb-number").text(d).fadeIn("fast"); 44350 } else this.$lightbox.find(".lb-number").hide(); 44351 this.$outerContainer.removeClass("animating"), 44352 this.$lightbox.find(".lb-dataContainer").fadeIn(this.options.resizeDuration, function () { 44353 return b.sizeOverlay(); 44354 }); 44355 }), 44356 (b.prototype.preloadNeighboringImages = function () { 44357 if (this.album.length > this.currentImageIndex + 1) { 44358 new Image().src = this.album[this.currentImageIndex + 1].link; 44359 } 44360 if (this.currentImageIndex > 0) { 44361 new Image().src = this.album[this.currentImageIndex - 1].link; 44362 } 44363 }), 44364 (b.prototype.enableKeyboardNav = function () { 44365 a(document).on("keyup.keyboard", a.proxy(this.keyboardAction, this)); 44366 }), 44367 (b.prototype.disableKeyboardNav = function () { 44368 a(document).off(".keyboard"); 44369 }), 44370 (b.prototype.keyboardAction = function (a) { 44371 var b = a.keyCode, 44372 c = String.fromCharCode(b).toLowerCase(); 44373 27 === b || c.match(/x|o|c/) 44374 ? this.end() 44375 : "p" === c || 37 === b 44376 ? 0 !== this.currentImageIndex 44377 ? this.changeImage(this.currentImageIndex - 1) 44378 : this.options.wrapAround && this.album.length > 1 && this.changeImage(this.album.length - 1) 44379 : ("n" !== c && 39 !== b) || (this.currentImageIndex !== this.album.length - 1 ? this.changeImage(this.currentImageIndex + 1) : this.options.wrapAround && this.album.length > 1 && this.changeImage(0)); 44380 }), 44381 (b.prototype.end = function () { 44382 this.disableKeyboardNav(), 44383 a(window).off("resize", this.sizeOverlay), 44384 this.$lightbox.fadeOut(this.options.fadeDuration), 44385 this.$overlay.fadeOut(this.options.fadeDuration), 44386 a("select, object, embed").css({ visibility: "visible" }), 44387 this.options.disableScrolling && a("html").removeClass("lb-disable-scrolling"); 44388 }), 44389 new b() 44390 ); 44391}); 44392!(function (e) { 44393 "function" == typeof define && define.amd ? define(["jquery"], e) : "undefined" != typeof module && module.exports ? (module.exports = e) : e(jQuery, window, document); 44394})(function (e) { 44395 !(function (t) { 44396 var o = "function" == typeof define && define.amd, 44397 a = "undefined" != typeof module && module.exports, 44398 n = "https:" == document.location.protocol ? "https:" : "http:", 44399 i = "cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js"; 44400 o || (a ? require("jquery-mousewheel")(e) : e.event.special.mousewheel || e("head").append(decodeURI("%3Cscript src=" + n + "//" + i + "%3E%3C/script%3E"))), t(); 44401 })(function () { 44402 var t, 44403 o = "mCustomScrollbar", 44404 a = "mCS", 44405 n = ".mCustomScrollbar", 44406 i = { 44407 setTop: 0, 44408 setLeft: 0, 44409 axis: "y", 44410 scrollbarPosition: "inside", 44411 scrollInertia: 950, 44412 autoDraggerLength: !0, 44413 alwaysShowScrollbar: 0, 44414 snapOffset: 0, 44415 mouseWheel: { enable: !0, scrollAmount: "auto", axis: "y", deltaFactor: "auto", disableOver
44415: ["select", "option", "keygen", "datalist", "textarea"] }, 44416 scrollButtons: { scrollType: "stepless", scrollAmount: "auto" }, 44417 keyboard: { enable: !0, scrollType: "stepless", scrollAmount: "auto" }, 44418 contentTouchScroll: 25, 44419 documentTouchScroll: !0, 44420 advanced: { autoScrollOnFocus: "input,textarea,select,button,datalist,keygen,a[tabindex],area,object,[contenteditable='true']", updateOnContentResize: !0, updateOnImageLoad: "auto", autoUpdateTimeout: 60 }, 44421 theme: "light", 44422 callbacks: { onTotalScrollOffset: 0, onTotalScrollBackOffset: 0, alwaysTriggerOffsets: !0 }, 44423 }, 44424 r = 0, 44425 l = {}, 44426 s = window.attachEvent && !window.addEventListener ? 1 : 0, 44427 c = !1, 44428 d = [ 44429 "mCSB_dragger_onDrag", 44430 "mCSB_scrollTools_onDrag", 44431 "mCS_img_loaded", 44432 "mCS_disabled", 44433 "mCS_destroyed", 44434 "mCS_no_scrollbar", 44435 "mCS-autoHide", 44436 "mCS-dir-rtl", 44437 "mCS_no_scrollbar_y", 44438 "mCS_no_scrollbar_x", 44439 "mCS_y_hidden", 44440 "mCS_x_hidden", 44441 "mCSB_draggerContainer", 44442 "mCSB_buttonUp", 44443 "mCSB_buttonDown", 44444 "mCSB_buttonLeft", 44445 "mCSB_buttonRight", 44446 ], 44447 u = { 44448 init: function (t) { 44449 var t = e.extend(!0, {}, i, t), 44450 o = f.call(this); 44451 if (t.live) { 44452 var s = t.liveSelector || this.selector || n, 44453 c = e(s); 44454 if ("off" === t.live) return void m(s); 44455 l[s] = setTimeout(function () { 44456 c.mCustomScrollbar(t), "once" === t.live && c.length && m(s); 44457 }, 500); 44458 } else m(s); 44459 return ( 44460 (t.setWidth = t.set_width ? t.set_width : t.setWidth), 44461 (t.setHeight = t.set_height ? t.set_height : t.setHeight), 44462 (t.axis = t.horizontalScroll ? "x" : p(t.axis)), 44463 (t.scrollInertia = t.scrollInertia > 0 && t.scrollInertia < 17 ? 17 : t.scrollInertia), 44464 "object" != typeof t.mouseWheel && 1 == t.mouseWheel && (t.mouseWheel = { enable: !0, scrollAmount: "auto", axis: "y", preventDefault: !1, deltaFactor: "auto", normalizeDelta: !1, invert: !1 }), 44465 (t.mouseWheel.scrollAmount = t.mouseWheelPixels ? t.mouseWheelPixels : t.mouseWheel.scrollAmount), 44466 (t.mouseWheel.normalizeDelta = t.advanced.normalizeMouseWheelDelta ? t.advanced.normalizeMouseWheelDelta : t.mouseWheel.normalizeDelta), 44467 (t.scrollButtons.scrollType = g(t.scrollButtons.scrollType)), 44468 h(t), 44469 e(o).each(function () { 44470 var o = e(this); 44471 if (!o.data(a)) { 44472 o.data(a, { 44473 idx: ++r, 44474 opt: t, 44475 scrollRatio: { y: null, x: null }, 44476 overflowed: null, 44477 contentReset: { y: null, x: null }, 44478 bindEvents: !1, 44479 tweenRunning: !1, 44480 sequential: {}, 44481 langDir: o.css("direction"), 44482 cbOffsets: null, 44483 trigger: null, 44484 poll: { size: { o: 0, n: 0 }, img: { o: 0, n: 0 }, change: { o: 0, n: 0 } }, 44485 }); 44486 var n = o.data(a), 44487 i = n.opt, 44488 l = o.data("mcs-axis"), 44489 s = o.data("mcs-scrollbar-position"), 44490 c = o.data("mcs-theme"); 44491 l && (i.axis = l), 44492 s && (i.scrollbarPosition = s), 44493 c && ((i.theme = c), h(i)), 44494 v.call(this), 44495 n && i.callbacks.onCreate && "function" == typeof i.callbacks.onCreate && i.callbacks.onCreate.call(this), 44496 e("#mCSB_" + n.idx + "_container img:not(." + d[2] + ")").addClass(d[2]), 44497 u.update.call(null, o); 44498 } 44499 }) 44500 ); 44501 }, 44502 update: function (t, o) { 44503 var n = t || f.call(this); 44504 return e(n).each(function () { 44505 var t = e(this); 44506 if (t.data(a)) { 44507 var n = t.data(a), 44508 i = n.opt, 44509 r = e("#mCSB_" + n.idx + "_container"), 44510 l = e("#mCSB_" + n.idx), 44511 s = [e("#mCSB_" + n.idx + "_dragger_vertical"), e("#mCSB_" + n.idx + "_dragger_horizontal")]; 44512 if (!r.length) return; 44513 n.tweenRunning && Q(t), 44514 o && n && i.callbacks.onBeforeUpdate && "function" == typeof i.callbacks.onBeforeUpdate && i.callbacks.onBeforeUpdate.call(this), 44515 t.hasClass(d[3]) && t.removeClass(d[3]), 44516 t.hasClass(d[4]) && t.removeClass(d[4]), 44517 l.css("max-height", "none"), 44518 l.height() !== t.height() && l.css("max-height", t.height()), 44519 _.call(this), 44520 "y" === i.axis || i.advanced.autoExpandHorizontalScroll || r.css("width", x(r)), 44521 (n.overflowed = y.call(this)), 44522 M.call(this), 44523 i.autoDraggerLength && S.call(this), 44524 b.call(this), 44525 T.call(this); 44526 var c = [Math.abs(r[0].offsetTop), Math.abs(r[0].offsetLeft)]; 44527 "x" !== i.axis && 44528 (n.overflowed[0] 44529 ? s[0].height() > s[0].parent().height() 44530 ? B.call(this) 44531 : (G(t, c[0].toString(), { dir: "y", dur: 0, overwrite: "none" }
44531), (n.contentReset.y = null)) 44532 : (B.call(this), "y" === i.axis ? k.call(this) : "yx" === i.axis && n.overflowed[1] && G(t, c[1].toString(), { dir: "x", dur: 0, overwrite: "none" }))), 44533 "y" !== i.axis && 44534 (n.overflowed[1] 44535 ? s[1].width() > s[1].parent().width() 44536 ? B.call(this) 44537 : (G(t, c[1].toString(), { dir: "x", dur: 0, overwrite: "none" }), (n.contentReset.x = null)) 44538 : (B.call(this), "x" === i.axis ? k.call(this) : "yx" === i.axis && n.overflowed[0] && G(t, c[0].toString(), { dir: "y", dur: 0, overwrite: "none" }))), 44539 o && 44540 n && 44541 (2 === o && i.callbacks.onImageLoad && "function" == typeof i.callbacks.onImageLoad 44542 ? i.callbacks.onImageLoad.call(this) 44543 : 3 === o && i.callbacks.onSelectorChange && "function" == typeof i.callbacks.onSelectorChange 44544 ? i.callbacks.onSelectorChange.call(this) 44545 : i.callbacks.onUpdate && "function" == typeof i.callbacks.onUpdate && i.callbacks.onUpdate.call(this)), 44546 N.call(this); 44547 } 44548 }); 44549 }, 44550 scrollTo: function (t, o) { 44551 if ("undefined" != typeof t && null != t) { 44552 var n = f.call(this); 44553 return e(n).each(function () { 44554 var n = e(this); 44555 if (n.data(a)) { 44556 var i = n.data(a), 44557 r = i.opt, 44558 l = { trigger: "external", scrollInertia: r.scrollInertia, scrollEasing: "mcsEaseInOut", moveDragger: !1, timeout: 60, callbacks: !0, onStart: !0, onUpdate: !0, onComplete: !0 }, 44559 s = e.extend(!0, {}, l, o), 44560 c = Y.call(this, t), 44561 d = s.scrollInertia > 0 && s.scrollInertia < 17 ? 17 : s.scrollInertia; 44562 (c[0] = X.call(this, c[0], "y")), 44563 (c[1] = X.call(this, c[1], "x")), 44564 s.moveDragger && ((c[0] *= i.scrollRatio.y), (c[1] *= i.scrollRatio.x)), 44565 (s.dur = ne() ? 0 : d), 44566 setTimeout(function () { 44567 null !== c[0] && "undefined" != typeof c[0] && "x" !== r.axis && i.overflowed[0] && ((s.dir = "y"), (s.overwrite = "all"), G(n, c[0].toString(), s)), 44568 null !== c[1] && "undefined" != typeof c[1] && "y" !== r.axis && i.overflowed[1] && ((s.dir = "x"), (s.overwrite = "none"), G(n, c[1].toString(), s)); 44569 }, s.timeout); 44570 } 44571 }); 44572 } 44573 }, 44574 stop: function () { 44575 var t = f.call(this); 44576 return e(t).each(function () { 44577 var t = e(this); 44578 t.data(a) && Q(t); 44579 }); 44580 }, 44581 disable: function (t) { 44582 var o = f.call(this); 44583 return e(o).each(function () { 44584 var o = e(this); 44585 if (o.data(a)) { 44586 o.data(a); 44587 N.call(this, "remove"), k.call(this), t && B.call(this), M.call(this, !0), o.addClass(d[3]); 44588 } 44589 }); 44590 }, 44591 destroy: function () { 44592 var t = f.call(this); 44593 return e(t).each(function () { 44594 var n = e(this); 44595 if (n.data(a)) { 44596 var i = n.data(a), 44597 r = i.opt, 44598 l = e("#mCSB_" + i.idx), 44599 s = e("#mCSB_" + i.idx + "_container"), 44600 c = e(".mCSB_" + i.idx + "_scrollbar"); 44601 r.live && m(r.liveSelector || e(t).selector), 44602 N.call(this, "remove"), 44603 k.call(this), 44604 B.call(this), 44605 n.removeData(a), 44606 $(this, "mcs"), 44607 c.remove(), 44608 s.find("img." + d[2]).removeClass(d[2]), 44609 l.replaceWith(s.contents()), 44610 n.removeClass(o + " _" + a + "_" + i.idx + " " + d[6] + " " + d[7] + " " + d[5] + " " + d[3]).addClass(d[4]); 44611 } 44612 }); 44613 }, 44614 }, 44615 f = function () { 44616 return "object" != typeof e(this) || e(this).length < 1 ? n : this; 44617 }, 44618 h = function (t) { 44619 var o = ["rounded", "rounded-dark", "rounded-dots", "rounded-dots-dark"], 44620 a = ["rounded-dots", "rounded-dots-dark", "3d", "3d-dark", "3d-thick", "3d-thick-dark", "inset", "inset-dark", "inset-2", "inset-2-dark", "inset-3", "inset-3-dark"], 44621 n = ["minimal", "minimal-dark"], 44622 i = ["minimal", "minimal-dark"], 44623 r = ["minimal", "minimal-dark"]; 44624 (t.autoDraggerLength = e.inArray(t.theme, o) > -1 ? !1 : t.autoDraggerLength), 44625 (t.autoExpandScrollbar = e.inArray(t.theme, a) > -1 ? !1 : t.autoExpandScrollbar), 44626 (t.scrollButtons.enable = e.inArray(t.theme, n) > -1 ? !1 : t.scrollButtons.enable), 44627 (t.autoHideScrollbar = e.inArray(t.theme, i) > -1 ? !0 : t.autoHideScrollbar), 44628 (t.scrollbarPosition = e.inArray(t.theme, r) > -1 ? "outside" : t.scrollbarPosition); 44629 }, 44630 m = function (e) { 44631 l[e] && (clearTimeout(l[e]), $(l, e)); 44632 }, 44633 p = function (e) { 44634 return "yx" === e || "xy" === e || "auto" === e ? "yx" : "x" === e || "horizontal" === e ? "x" : "y"; 44635 }, 44636 g = function (e) { 44637 return "stepped" === e || "pixels" === e || "step" === e || "click" === e ? "stepped" : "stepless"; 44638 }, 44639 v = function () { 44640 var t = e(this), 44641 n = t.data(a), 44642 i = n.opt, 44643 r = i.autoExpandScrollbar ? " " + d[1] + "_exp
vendor: 19,515 bytes, lines 44643-44971
44643and" : "", 44644 l = [ 44645 "<div id='mCSB_" + 44646 n.idx + 44647 "_scrollbar_vertical' class='mCSB_scrollTools mCSB_" + 44648 n.idx + 44649 "_scrollbar mCS-" + 44650 i.theme + 44651 " mCSB_scrollTools_vertical" + 44652 r + 44653 "'><div class='" + 44654 d[12] + 44655 "'><div id='mCSB_" + 44656 n.idx + 44657 "_dragger_vertical' class='mCSB_dragger' style='position:absolute;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>", 44658 "<div id='mCSB_" + 44659 n.idx + 44660 "_scrollbar_horizontal' class='mCSB_scrollTools mCSB_" + 44661 n.idx + 44662 "_scrollbar mCS-" + 44663 i.theme + 44664 " mCSB_scrollTools_horizontal" + 44665 r + 44666 "'><div class='" + 44667 d[12] + 44668 "'><div id='mCSB_" + 44669 n.idx + 44670 "_dragger_horizontal' class='mCSB_dragger' style='position:absolute;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>", 44671 ], 44672 s = "yx" === i.axis ? "mCSB_vertical_horizontal" : "x" === i.axis ? "mCSB_horizontal" : "mCSB_vertical", 44673 c = "yx" === i.axis ? l[0] + l[1] : "x" === i.axis ? l[1] : l[0], 44674 u = "yx" === i.axis ? "<div id='mCSB_" + n.idx + "_container_wrapper' class='mCSB_container_wrapper' />" : "", 44675 f = i.autoHideScrollbar ? " " + d[6] : "", 44676 h = "x" !== i.axis && "rtl" === n.langDir ? " " + d[7] : ""; 44677 i.setWidth && t.css("width", i.setWidth), 44678 i.setHeight && t.css("height", i.setHeight), 44679 (i.setLeft = "y" !== i.axis && "rtl" === n.langDir ? "989999px" : i.setLeft), 44680 t 44681 .addClass(o + " _" + a + "_" + n.idx + f + h) 44682 .wrapInner( 44683 "<div id='mCSB_" + 44684 n.idx + 44685 "' class='mCustomScrollBox mCS-" + 44686 i.theme + 44687 " " + 44688 s + 44689 "'><div id='mCSB_" + 44690 n.idx + 44691 "_container' class='mCSB_container' style='position:relative; top:" + 44692 i.setTop + 44693 "; left:" + 44694 i.setLeft + 44695 ";' dir='" + 44696 n.langDir + 44697 "' /></div>" 44698 ); 44699 var m = e("#mCSB_" + n.idx), 44700 p = e("#mCSB_" + n.idx + "_container"); 44701 "y" === i.axis || i.advanced.autoExpandHorizontalScroll || p.css("width", x(p)), 44702 "outside" === i.scrollbarPosition ? ("static" === t.css("position") && t.css("position", "relative"), t.css("overflow", "visible"), m.addClass("mCSB_outside").after(c)) : (m.addClass("mCSB_inside").append(c), p.wrap(u)), 44703 w.call(this); 44704 var g = [e("#mCSB_" + n.idx + "_dragger_vertical"), e("#mCSB_" + n.idx + "_dragger_horizontal")]; 44705 g[0].css("min-height", g[0].height()), g[1].css("min-width", g[1].width()); 44706 }, 44707 x = function (t) { 44708 var o = [ 44709 t[0].scrollWidth, 44710 Math.max.apply( 44711 Math, 44712 t 44713 .children() 44714 .map(function () { 44715 return e(this).outerWidth(!0); 44716 }) 44717 .get() 44718 ), 44719 ], 44720 a = t.parent().width(); 44721 return o[0] > a ? o[0] : o[1] > a ? o[1] : "100%"; 44722 }, 44723 _ = function () { 44724 var t = e(this), 44725 o = t.data(a), 44726 n = o.opt, 44727 i = e("#mCSB_" + o.idx + "_container"); 44728 if (n.advanced.autoExpandHorizontalScroll && "y" !== n.axis) { 44729 i.css({ width: "auto", "min-width": 0, "overflow-x": "scroll" }); 44730 var r = Math.ceil(i[0].scrollWidth); 44731 3 === n.advanced.autoExpandHorizontalScroll || (2 !== n.advanced.autoExpandHorizontalScroll && r > i.parent().width()) 44732 ? i.css({ width: r, "min-width": "100%", "overflow-x": "inherit" }) 44733 : i 44734 .css({ "overflow-x": "inherit", position: "absolute" }) 44735 .wrap("<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' />") 44736 .css({ width: Math.ceil(i[0].getBoundingClientRect().right + 0.4) - Math.floor(i[0].getBoundingClientRect().left), "min-width": "100%", position: "relative" }) 44737 .unwrap(); 44738 } 44739 }, 44740 w = function () { 44741 var t = e(this), 44742 o = t.data(a), 44743 n = o.opt, 44744 i = e(".mCSB_" + o.idx + "_scrollbar:first"), 44745 r = oe(n.scrollButtons.tabindex) ? "tabindex='" + n.scrollButtons.tabindex + "'" : "", 44746 l = ["<a href='#' class='" + d[13] + "' " + r + " />", "<a href='#' class='" + d[14] + "' " + r + " />", "<a href='#' class='" + d[15] + "' " + r + " />", "<a href='#' class='" + d[16] + "' " + r + " />"], 44747 s = ["x" === n.axis ? l[2] : l[0], "x" === n.axis ? l[3] : l[1], l[2], l[3]]; 44748 n.scrollButtons.enable && i.prepend(s[0]).append(s[1]).next(".mCSB_scrollTools").prepend(s[2]).append(s[3]); 44749 }, 44750 S = function () { 44751 var t = e(this), 44752 o = t.data(a), 44753 n = e("#mCSB_" + o.idx), 44754 i = e("#mCSB_" + o.idx + "_container"), 44755 r = [e("#mCSB_" + o.idx + "_dragger_vertical"), e("#mCSB_" + o.idx + "_dragger_horizontal")], 44756 l = [n.height() / i.outerHeight(!1), n.width() / i.outerWidth(!1)], 44757 c = [parseInt(r[0].css("min-height")), Math.round(l[0] * r[0].parent().height()), parseInt(r[1].css("min-width")), Math.round(l[1] * r[1].parent().width())], 44758 d = s && c[1] < c[0] ? c[0] : c[1], 44759 u = s && c[3] < c[2] ? c[2] : c[3]; 44760 r[0] 44761 .css({ height: d, "max-height": r[0].parent().height() - 10 }) 44762 .find(".mCSB_dragger_bar") 44763 .css({ "line-height": c[0] + "px" }), 44764 r[1].css({ width: u, "max-width": r[1].parent().width() - 10 }); 44765 }, 44766 b = function () { 44767 var t = e(this), 44768 o = t.data(a), 44769 n = e("#mCSB_" + o.idx), 44770 i = e("#mCSB_" + o.idx + "_container"), 44771 r = [e("#mCSB_" + o.idx + "_dragger_vertical"), e("#mCSB_" + o.idx + "_dragger_horizontal")], 44772 l = [i.outerHeight(!1) - n.height(), i.outerWidth(!1) - n.width()], 44773 s = [l[0] / (r[0].parent().height() - r[0].height()), l[1] / (r[1].parent().width() - r[1].width())]; 44774 o.scrollRatio = { y: s[0], x: s[1] }; 44775 }, 44776 C = function (e, t, o) { 44777 var a = o ? d[0] + "_expanded" : "", 44778 n = e.closest(".mCSB_scrollTools"); 44779 "active" === t 44780 ? (e.toggleClass(d[0] + " " + a), n.toggleClass(d[1]), (e[0]._draggable = e[0]._draggable ? 0 : 1)) 44781 : e[0]._draggable || ("hide" === t ? (e.removeClass(d[0]), n.removeClass(d[1])) : (e.addClass(d[0]), n.addClass(d[1]))); 44782 }, 44783 y = function () { 44784 var t = e(this), 44785 o = t.data(a), 44786 n = e("#mCSB_" + o.idx), 44787 i = e("#mCSB_" + o.idx + "_container"), 44788 r = null == o.overflowed ? i.height() : i.outerHeight(!1), 44789 l = null == o.overflowed ? i.width() : i.outerWidth(!1), 44790 s = i[0].scrollHeight, 44791 c = i[0].scrollWidth; 44792 return s > r && (r = s), c > l && (l = c), [r > n.height(), l > n.width()]; 44793 }, 44794 B = function () { 44795 var t = e(this), 44796 o = t.data(a), 44797 n = o.opt, 44798 i = e("#mCSB_" + o.idx), 44799 r = e("#mCSB_" + o.idx + "_container"), 44800 l = [e("#mCSB_" + o.idx + "_dragger_vertical"), e("#mCSB_" + o.idx + "_dragger_horizontal")]; 44801 if ((Q(t), (("x" !== n.axis && !o.overflowed[0]) || ("y" === n.axis && o.overflowed[0])) && (l[0].add(r).css("top", 0), G(t, "_resetY")), ("y" !== n.axis && !o.overflowed[1]) || ("x" === n.axis && o.overflowed[1]))) { 44802 var s = (dx = 0); 44803 "rtl" === o.langDir && ((s = i.width() - r.outerWidth(!1)), (dx = Math.abs(s / o.scrollRatio.x))), r.css("left", s), l[1].css("left", dx), G(t, "_resetX"); 44804 } 44805 }, 44806 T = function () { 44807 function t() { 44808 r = setTimeout(function () { 44809 e.event.special.mousewheel ? (clearTimeout(r), W.call(o[0])) : t(); 44810 }, 100); 44811 } 44812 var o = e(this), 44813 n = o.data(a), 44814 i = n.opt; 44815 if (!n.bindEvents) { 44816 if ((I.call(this), i.contentTouchScroll && D.call(this), E.call(this), i.mouseWheel.enable)) { 44817 var r; 44818 t(); 44819 } 44820 P.call(this), U.call(this), i.advanced.autoScrollOnFocus && H.call(this), i.scrollButtons.enable && F.call(this), i.keyboard.enable && q.call(this), (n.bindEvents = !0); 44821 } 44822 }, 44823 k = function () { 44824 var t = e(this), 44825 o = t.data(a), 44826 n = o.opt, 44827 i = a + "_" + o.idx, 44828 r = ".mCSB_" + o.idx + "_scrollbar", 44829 l = e("#mCSB_" + o.idx + ",#mCSB_" + o.idx + "_container,#mCSB_" + o.idx + "_container_wrapper," + r + " ." + d[12] + ",#mCSB_" + o.idx + "_dragger_vertical,#mCSB_" + o.idx + "_dragger_horizontal," + r + ">a"), 44830 s = e("#mCSB_" + o.idx + "_container"); 44831 n.advanced.releaseDraggableSelectors && l.add(e(n.advanced.releaseDraggableSelectors)), 44832 n.advanced.extraDraggableSelectors && l.add(e(n.advanced.extraDraggableSelectors)), 44833 o.bindEvents && 44834 (e(document) 44835 .add(e(!A() || top.document)) 44836 .unbind("." + i), 44837 l.each(function () { 44838 e(this).unbind("." + i); 44839 }), 44840 clearTimeout(t[0]._focusTimeout), 44841 $(t[0], "_focusTimeout"), 44842 clearTimeout(o.sequential.step), 44843 $(o.sequential, "step"), 44844 clearTimeout(s[0].onCompleteTimeout), 44845 $(s[0], "onCompleteTimeout"), 44846 (o.bindEvents = !1)); 44847 }, 44848 M = function (t) { 44849 var o = e(this), 44850 n = o.data(a), 44851 i = n.opt, 44852 r = e("#mCSB_" + n.idx + "_container_wrapper"), 44853 l = r.length ? r : e("#mCSB_" + n.idx + "_container"), 44854 s = [e("#mCSB_" + n.idx + "_scrollbar_vertical"), e("#mCSB_" + n.idx + "_scrollbar_horizontal")], 44855 c = [s[0].find(".mCSB_dragger"), s[1].find(".mCSB_dragger")]; 44856 "x" !== i.axis && 44857 (n.overflowed[0] && !t 44858 ? (s[0].add(c[0]).add(s[0].children("a")).css("display", "block"), l.removeClass(d[8] + " " + d[10])) 44859 : (i.alwaysShowScrollbar ? (2 !== i.alwaysShowScrollbar && c[0].css("display", "none"), l.removeClass(d[10])) : (s[0].css("display", "none"), l.addClass(d[10])), l.addClass(d[8]))), 44860 "y" !== i.axis && 44861 (n.overflowed[1] && !t 44862 ? (s[1].add(c[1]).add(s[1].children("a")).css("display", "block"), l.removeClass(d[9] + " " + d[11])) 44863 : (i.alwaysShowScrollbar ? (2 !== i.alwaysShowScrollbar && c[1].css("display", "none"), l.removeClass(d[11])) : (s[1].css("display", "none"), l.addClass(d[11])), l.addClass(d[9]))), 44864 n.overflowed[0] || n.overflowed[1] ? o.removeClass(d[5]) : o.addClass(d[5]); 44865 }, 44866 O = function (t) { 44867 var o = t.type, 44868 a = t.target.ownerDocument !== document && null !== frameElement ? [e(frameElement).offset().top, e(frameElement).offset().left] : null, 44869 n = A() && t.target.ownerDocument !== top.document && null !== frameElement ? [e(t.view.frameElement).offset().top, e(t.view.frameElement).offset().left] : [0, 0]; 44870 switch (o) { 44871 case "pointerdown": 44872 case "MSPointerDown": 44873 case "pointermove": 44874 case "MSPointerMove": 44875 case "pointerup": 44876 case "MSPointerUp": 44877 return a ? [t.originalEvent.pageY - a[0] + n[0], t.originalEvent.pageX - a[1] + n[1], !1] : [t.originalEvent.pageY, t.originalEvent.pageX, !1]; 44878 case "touchstart": 44879 case "touchmove": 44880 case "touchend": 44881 var i = t.originalEvent.touches[0] || t.originalEvent.changedTouches[0], 44882 r = t.originalEvent.touches.length || t.originalEvent.changedTouches.length; 44883 return t.target.ownerDocument !== document ? [i.screenY, i.screenX, r > 1] : [i.pageY, i.pageX, r > 1]; 44884 default: 44885 return a ? [t.pageY - a[0] + n[0], t.pageX - a[1] + n[1], !1] : [t.pageY, t.pageX, !1]; 44886 } 44887 }, 44888 I = function () { 44889 function t(e, t, a, n) { 44890 if (((h[0].idleTimer = d.scrollInertia < 233 ? 250 : 0), o.attr("id") === f[1])) 44891 var i = "x", 44892 s = (o[0].offsetLeft - t + n) * l.scrollRatio.x; 44893 else 44894 var i = "y", 44895 s = (o[0].offsetTop - e + a) * l.scrollRatio.y; 44896 G(r, s.toString(), { dir: i, drag: !0 }); 44897 } 44898 var o, 44899 n, 44900 i, 44901 r = e(this), 44902 l = r.data(a), 44903 d = l.opt, 44904 u = a + "_" + l.idx, 44905 f = ["mCSB_" + l.idx + "_dragger_vertical", "mCSB_" + l.idx + "_dragger_horizontal"], 44906 h = e("#mCSB_" + l.idx + "_container"), 44907 m = e("#" + f[0] + ",#" + f[1]), 44908 p = d.advanced.releaseDraggableSelectors ? m.add(e(d.advanced.releaseDraggableSelectors)) : m, 44909 g = d.advanced.extraDraggableSelectors ? e(!A() || top.document).add(e(d.advanced.extraDraggableSelectors)) : e(!A() || top.document); 44910 m 44911 .bind("contextmenu." + u, function (e) { 44912 e.preventDefault(); 44913 }) 44914 .bind("mousedown." + u + " touchstart." + u + " pointerdown." + u + " MSPointerDown." + u, function (t) { 44915 if ((t.stopImmediatePropagation(), t.preventDefault(), ee(t))) { 44916 (c = !0), 44917 s && 44918 (document.onselectstart = function () { 44919 return !1; 44920 }), 44921 L.call(h, !1), 44922 Q(r), 44923 (o = e(this)); 44924 var a = o.offset(), 44925 l = O(t)[0] - a.top, 44926 u = O(t)[1] - a.left, 44927 f = o.height() + a.top, 44928 m = o.width() + a.left; 44929 f > l && l > 0 && m > u && u > 0 && ((n = l), (i = u)), C(o, "active", d.autoExpandScrollbar); 44930 } 44931 }) 44932 .bind("touchmove." + u, function (e) { 44933 e.stopImmediatePropagation(), e.preventDefault(); 44934 var a = o.offset(), 44935 r = O(e)[0] - a.top, 44936 l = O(e)[1] - a.left; 44937 t(n, i, r, l); 44938 }), 44939 e(document) 44940 .add(g) 44941 .bind("mousemove." + u + " pointermove." + u + " MSPointerMove." + u, function (e) { 44942 if (o) { 44943 var a = o.offset(), 44944 r = O(e)[0] - a.top, 44945 l = O(e)[1] - a.left; 44946 if (n === r && i === l) return; 44947 t(n, i, r, l); 44948 } 44949 }) 44950 .add(p) 44951 .bind("mouseup." + u + " touchend." + u + " pointerup." + u + " MSPointerUp." + u, function () { 44952 o && (C(o, "active", d.autoExpandScrollbar), (o = null)), (c = !1), s && (document.onselectstart = null), L.call(h, !0); 44953 }); 44954 }, 44955 D = function () { 44956 function o(e) { 44957 if (!te(e) || c || O(e)[2]) return void (t = 0); 44958 (t = 1), (b = 0), (C = 0), (d = 1), y.removeClass("mCS_touch_action"); 44959 var o = I.offset(); 44960 (u = O(e)[0] - o.top), (f = O(e)[1] - o.left), (z = [O(e)[0], O(e)[1]]); 44961 } 44962 function n(e) { 44963 if (te(e) && !c && !O(e)[2] && (T.documentTouchScroll || e.preventDefault(), e.stopImmediatePropagation(), (!C || b) && d)) { 44964 g = K(); 44965 var t = M.offset(), 44966 o = O(e)[0] - t.top, 44967 a = O(e)[1] - t.left, 44968 n = "mcsLinearOut"; 44969 if ((E.push(o), W.push(a), (z[2] = Math.abs(O(e)[0] - z[0])), (z[3] = Math.abs(O(e)[1] - z[1])), B.overflowed[0])) 44970 var i = D[0].parent().height() - D[0].height(), 44971 r = u - o > 0 && o - u >
44971 -(i * B.scrollRatio.y) && (2 * z[3] < z[2] || "yx" === T.axis); 44972 if (B.overflowed[1]) 44973 var l = D[1].parent().width() - D[1].width(), 44974 h = f - a > 0 && a - f > -(l * B.scrollRatio.x) && (2 * z[2] < z[3] || "yx" === T.axis); 44975 r || h ? (U || e.preventDefault(), (b = 1)) : ((C = 1), y.addClass("mCS_touch_action")), 44976 U && e.preventDefault(), 44977 (w = "yx" === T.axis ? [u - o, f - a] : "x" === T.axis ? [null, f - a] : [u - o, null]), 44978 (I[0].idleTimer = 250), 44979 B.overflowed[0] && s(w[0], R, n, "y", "all", !0), 44980 B.overflowed[1] && s(w[1], R, n, "x", L, !0); 44981 } 44982 } 44983 function i(e) { 44984 if (!te(e) || c || O(e)[2]) return void (t = 0); 44985 (t = 1), e.stopImmediatePropagation(), Q(y), (p = K()); 44986 var o = M.offset(); 44987 (h = O(e)[0] - o.top), (m = O(e)[1] - o.left), (E = []), (W = []); 44988 } 44989 function r(e) { 44990 if (te(e) && !c && !O(e)[2]) { 44991 (d = 0), e.stopImmediatePropagation(), (b = 0), (C = 0), (v = K()); 44992 var t = M.offset(), 44993 o = O(e)[0] - t.top, 44994 a = O(e)[1] - t.left; 44995 if (!(v - g > 30)) { 44996 _ = 1e3 / (v - p); 44997 var n = "mcsEaseOut", 44998 i = 2.5 > _, 44999 r = i ? [E[E.length - 2], W[W.length - 2]] : [0, 0]; 45000 x = i ? [o - r[0], a - r[1]] : [o - h, a - m]; 45001 var u = [Math.abs(x[0]), Math.abs(x[1])]; 45002 _ = i ? [Math.abs(x[0] / 4), Math.abs(x[1] / 4)] : [_, _]; 45003 var f = [Math.abs(I[0].offsetTop) - x[0] * l(u[0] / _[0], _[0]), Math.abs(I[0].offsetLeft) - x[1] * l(u[1] / _[1], _[1])]; 45004 (w = "yx" === T.axis ? [f[0], f[1]] : "x" === T.axis ? [null, f[1]] : [f[0], null]), (S = [4 * u[0] + T.scrollInertia, 4 * u[1] + T.scrollInertia]); 45005 var y = parseInt(T.contentTouchScroll) || 0; 45006 (w[0] = u[0] > y ? w[0] : 0), (w[1] = u[1] > y ? w[1] : 0), B.overflowed[0] && s(w[0], S[0], n, "y", L, !1), B.overflowed[1] && s(w[1], S[1], n, "x", L, !1); 45007 } 45008 } 45009 } 45010 function l(e, t) { 45011 var o = [1.5 * t, 2 * t, t / 1.5, t / 2]; 45012 return e > 90 ? (t > 4 ? o[0] : o[3]) : e > 60 ? (t > 3 ? o[3] : o[2]) : e > 30 ? (t > 8 ? o[1] : t > 6 ? o[0] : t > 4 ? t : o[2]) : t > 8 ? t : o[3]; 45013 } 45014 function s(e, t, o, a, n, i) { 45015 e && G(y, e.toString(), { dur: t, scrollEasing: o, dir: a, overwrite: n, drag: i }); 45016 } 45017 var d, 45018 u, 45019 f, 45020 h, 45021 m, 45022 p, 45023 g, 45024 v, 45025 x, 45026 _, 45027 w, 45028 S, 45029 b, 45030 C, 45031 y = e(this), 45032 B = y.data(a), 45033 T = B.opt, 45034 k = a + "_" + B.idx, 45035 M = e("#mCSB_" + B.idx), 45036 I = e("#mCSB_" + B.idx + "_container"), 45037 D = [e("#mCSB_" + B.idx + "_dragger_vertical"), e("#mCSB_" + B.idx + "_dragger_horizontal")], 45038 E = [], 45039 W = [], 45040 R = 0, 45041 L = "yx" === T.axis ? "none" : "all", 45042 z = [], 45043 P = I.find("iframe"), 45044 H = ["touchstart." + k + " pointerdown." + k + " MSPointerDown." + k, "touchmove." + k + " pointermove." + k + " MSPointerMove." + k, "touchend." + k + " pointerup." + k + " MSPointerUp." + k], 45045 U = void 0 !== document.body.style.touchAction && "" !== document.body.style.touchAction; 45046 I.bind(H[0], function (e) { 45047 o(e); 45048 }).bind(H[1], function (e) { 45049 n(e); 45050 }), 45051 M.bind(H[0], function (e) { 45052 i(e); 45053 }).bind(H[2], function (e) { 45054 r(e); 45055 }), 45056 P.length && 45057 P.each(function () { 45058 e(this).bind("load", function () { 45059 A(this) && 45060 e(this.contentDocument || this.contentWindow.document) 45061 .bind(H[0], function (e) { 45062 o(e), i(e); 45063 }) 45064 .bind(H[1], function (e) { 45065 n(e); 45066 }) 45067 .bind(H[2], function (e) { 45068 r(e); 45069 }); 45070 }); 45071 }); 45072 }, 45073 E = function () { 45074 function o() { 45075 return window.getSelection ? window.getSelection().toString() : document.selection && "Control" != document.selection.type ? document.selection.createRange().text : 0; 45076 } 45077 function n(e, t, o) { 45078 (d.type = o && i ? "stepped" : "stepless"), (d.scrollAmount = 10), j(r, e, t, "mcsLinearOut", o ? 60 : null); 45079 } 45080 var i, 45081 r = e(this), 45082 l = r.data(a), 45083 s = l.opt, 45084 d = l.sequential, 45085 u = a + "_" + l.idx, 45086 f = e("#mCSB_" + l.idx + "_container"), 45087 h = f.parent(); 45088 f.bind("mousedown." + u, function () { 45089 t || i || ((i = 1), (c = !0)); 45090 }) 45091 .add(document) 45092 .bind("mousemove." + u, function (e) { 45093 if (!t && i && o()) { 45094 var a = f.offset(), 45095 r = O(e)[0] - a.top + f[0].offsetTop, 45096 c = O(e)[1] - a.left + f[0].offsetLeft; 45097 r > 0 && r < h.height() && c > 0 && c < h.width() 45098 ? d.step && n("off", null, "stepped") 45099 : ("x" !== s.axis && l.overflowed[0] && (0 > r ? n("on", 38) : r > h.height() && n("on", 40)), "y" !== s.axis && l.overflowed[1] && (0 > c ? n("on", 37) : c > h.width() && n("on", 39))); 45100 } 45101 }) 45102 .bind("mouseup." + u + " dragend." + u, function () { 45103 t || (i && ((i = 0), n("off", null)), (c = !1)); 45104 }); 45105 }, 45106 W = function () { 45107 function t(t, a) { 45108 if ((Q(o), !z(o, t.target))) { 45109 var r = "auto" !== i.mouseWheel.deltaFactor ? parseInt(i.mouseWheel.deltaFactor) : s && t.deltaFactor < 100 ? 100 : t.deltaFactor || 100, 45110 d = i.scrollInertia; 45111 if ("x" === i.axis || "x" === i.mouseWheel.axis) 45112 var u = "x", 45113 f = [Math.round(r * n.scrollRatio.x), parseInt(i.mouseWheel.scrollAmount)], 45114 h = "auto" !== i.mouseWheel.scrollAmount ? f[1] : f[0] >= l.width() ? 0.9 * l.width() : f[0], 45115 m = Math.abs(e("#mCSB_" + n.idx + "_container")[0].offsetLeft), 45116 p = c[1][0].offsetLeft, 45117 g = c[1].parent().width() - c[1].width(), 45118 v = "y" === i.mouseWheel.axis ? t.deltaY || a : t.deltaX; 45119 else 45120 var u = "y", 45121 f = [Math.round(r * n.scrollRatio.y), parseInt(i.mouseWheel.scrollAmount)], 45122 h = "auto" !== i.mouseWheel.scrollAmount ? f[1] : f[0] >= l.height() ? 0.9 * l.height() : f[0], 45123 m = Math.abs(e("#mCSB_" + n.idx + "_container")[0].offsetTop), 45124 p = c[0][0].offsetTop, 45125 g = c[0].parent().height() - c[0].height(), 45126 v = t.deltaY || a; 45127 ("y" === u && !n.overflowed[0]) || 45128 ("x" === u && !n.overflowed[1]) || 45129 ((i.mouseWheel.invert || t.webkitDirectionInvertedFromDevice) && (v = -v), 45130 i.mouseWheel.normalizeDelta && (v = 0 > v ? -1 : 1), 45131 ((v > 0 && 0 !== p) || (0 > v && p !== g) || i.mouseWheel.preventDefault) && (t.stopImmediatePropagation(), t.preventDefault()), 45132 t.deltaFactor < 5 && !i.mouseWheel.normalizeDelta && ((h = t.deltaFactor), (d = 17)), 45133 G(o, (m - v * h).toString(), { dir: u, dur: d })); 45134 } 45135 } 45136 if (e(this).data(a)) { 45137 var o = e(this), 45138 n = o.data(a), 45139 i = n.opt, 45140 r = a + "_" + n.idx, 45141 l = e("#mCSB_" + n.idx),
45142 c = [e("#mCSB_" + n.idx + "_dragger_vertical"), e("#mCSB_" + n.idx + "_dragger_horizontal")], 45143 d = e("#mCSB_" + n.idx + "_container").find("iframe"); 45144 d.length && 45145 d.each(function () { 45146 e(this).bind("load", function () { 45147 A(this) && 45148 e(this.contentDocument || this.contentWindow.document).bind("mousewheel." + r, function (e, o) { 45149 t(e, o); 45150 }); 45151 }); 45152 }), 45153 l.bind("mousewheel." + r, function (e, o) { 45154 t(e, o); 45155 }); 45156 } 45157 }, 45158 R = new Object(), 45159 A = function (t) { 45160 var o = !1, 45161 a = !1, 45162 n = null; 45163 if ((void 0 === t ? (a = "#empty") : void 0 !== e(t).attr("id") && (a = e(t).attr("id")), a !== !1 && void 0 !== R[a])) return R[a]; 45164 if (t) { 45165 try { 45166 var i = t.contentDocument || t.contentWindow.document; 45167 n = i.body.innerHTML; 45168 } catch (r) {} 45169 o = null !== n; 45170 } else { 45171 try { 45172 var i = top.document; 45173 n = i.body.innerHTML; 45174 } catch (r) {} 45175 o = null !== n; 45176 } 45177 return a !== !1 && (R[a] = o), o; 45178 }, 45179 L = function (e) { 45180 var t = this.find("iframe"); 45181 if (t.length) { 45182 var o = e ? "auto" : "none"; 45183 t.css("pointer-events", o); 45184 } 45185 }, 45186 z = function (t, o) { 45187 var n = o.nodeName.toLowerCase(), 45188 i = t.data(a).opt.mouseWheel.disableOver, 45189 r = ["select", "textarea"]; 45190 return e.inArray(n, i) > -1 && !(e.inArray(n, r) > -1 && !e(o).is(":focus")); 45191 }, 45192 P = function () { 45193 var t, 45194 o = e(this), 45195 n = o.data(a), 45196 i = a + "_" + n.idx, 45197 r = e("#mCSB_" + n.idx + "_container"), 45198 l = r.parent(), 45199 s = e(".mCSB_" + n.idx + "_scrollbar ." + d[12]); 45200 s.bind("mousedown." + i + " touchstart." + i + " pointerdown." + i + " MSPointerDown." + i, function (o) { 45201 (c = !0), e(o.target).hasClass("mCSB_dragger") || (t = 1); 45202 }) 45203 .bind("touchend." + i + " pointerup." + i + " MSPointerUp." + i, function () { 45204 c = !1; 45205 }) 45206 .bind("click." + i, function (a) { 45207 if (t && ((t = 0), e(a.target).hasClass(d[12]) || e(a.target).hasClass("mCSB_draggerRail"))) { 45208 Q(o); 45209 var i = e(this), 45210 s = i.find(".mCSB_dragger"); 45211 if (i.parent(".mCSB_scrollTools_horizontal").length > 0) { 45212 if (!n.overflowed[1]) return; 45213 var c = "x", 45214 u = a.pageX > s.offset().left ? -1 : 1, 45215 f = Math.abs(r[0].offsetLeft) - u * (0.9 * l.width()); 45216 } else { 45217 if (!n.overflowed[0]) return; 45218 var c = "y", 45219 u = a.pageY > s.offset().top ? -1 : 1, 45220 f = Math.abs(r[0].offsetTop) - u * (0.9 * l.height()); 45221 } 45222 G(o, f.toString(), { dir: c, scrollEasing: "mcsEaseInOut" }); 45223 } 45224 }); 45225 }, 45226 H = function () { 45227 var t = e(this), 45228 o = t.data(a), 45229 n = o.opt, 45230 i = a + "_" + o.idx, 45231 r = e("#mCSB_" + o.idx + "_container"), 45232 l = r.parent(); 45233 r.bind("focusin." + i, function () { 45234 var o = e(document.activeElement), 45235 a = r.find(".mCustomScrollBox").length, 45236 i = 0; 45237 o.is(n.advanced.autoScrollOnFocus) && 45238 (Q(t), 45239 clearTimeout(t[0]._focusTimeout), 45240 (t[0]._focusTimer = a ? (i + 17) * a : 0), 45241 (t[0]._focusTimeout = setTimeout(function () {
45242 var e = [ae(o)[0], ae(o)[1]], 45243 a = [r[0].offsetTop, r[0].offsetLeft], 45244 s = [a[0] + e[0] >= 0 && a[0] + e[0] < l.height() - o.outerHeight(!1), a[1] + e[1] >= 0 && a[0] + e[1] < l.width() - o.outerWidth(!1)], 45245 c = "yx" !== n.axis || s[0] || s[1] ? "all" : "none"; 45246 "x" === n.axis || s[0] || G(t, e[0].toString(), { dir: "y", scrollEasing: "mcsEaseInOut", overwrite: c, dur: i }), 45247 "y" === n.axis || s[1] || G(t, e[1].toString(), { dir: "x", scrollEasing: "mcsEaseInOut", overwrite: c, dur: i }); 45248 }, t[0]._focusTimer))); 45249 }); 45250 }, 45251 U = function () { 45252 var t = e(this), 45253 o = t.data(a), 45254 n = a + "_" + o.idx, 45255 i = e("#mCSB_" + o.idx + "_container").parent(); 45256 i.bind("scroll." + n, function () { 45257 (0 === i.scrollTop() && 0 === i.scrollLeft()) || e(".mCSB_" + o.idx + "_scrollbar").css("visibility", "hidden"); 45258 }); 45259 }, 45260 F = function () { 45261 var t = e(this), 45262 o = t.data(a), 45263 n = o.opt, 45264 i = o.sequential, 45265 r = a + "_" + o.idx, 45266 l = ".mCSB_" + o.idx + "_scrollbar", 45267 s = e(l + ">a"); 45268 s.bind("contextmenu." + r, function (e) { 45269 e.preventDefault(); 45270 }).bind( 45271 "mousedown." + 45272 r + 45273 " touchstart." + 45274 r + 45275 " pointerdown." + 45276 r + 45277 " MSPointerDown." + 45278 r + 45279 " mouseup." + 45280 r + 45281 " touchend." + 45282 r + 45283 " pointerup." + 45284 r + 45285 " MSPointerUp." + 45286 r + 45287 " mouseout." + 45288 r + 45289 " pointerout." + 45290 r + 45291 " MSPointerOut." + 45292 r + 45293 " click." + 45294 r, 45295 function (a) { 45296 function r(e, o) { 45297 (i.scrollAmount = n.scrollButtons.scrollAmount), j(t, e, o); 45298 } 45299 if ((a.preventDefault(), ee(a))) { 45300 var l = e(this).attr("class"); 45301 switch (((i.type = n.scrollButtons.scrollType), a.type)) { 45302 case "mousedown": 45303 case "touchstart": 45304 case "pointerdown": 45305 case "MSPointerDown": 45306 if ("stepped" === i.type) return; 45307 (c = !0), (o.tweenRunning = !1), r("on", l); 45308 break; 45309 case "mouseup": 45310 case "touchend": 45311 case "pointerup": 45312 case "MSPointerUp": 45313 case "mouseout": 45314 case "pointerout": 45315 case "MSPointerOut": 45316 if ("stepped" === i.type) return; 45317 (c = !1), i.dir && r("off", l); 45318 break; 45319 case "click": 45320 if ("stepped" !== i.type || o.tweenRunning) return; 45321 r("on", l); 45322 } 45323 } 45324 } 45325 ); 45326 }, 45327 q = function () { 45328 function t(t) { 45329 function a(e, t) { 45330 (r.type = i.keyboard.scrollType), (r.scrollAmount = i.keyboard.scrollAmount), ("stepped" === r.type && n.tweenRunning) || j(o, e, t); 45331 } 45332 switch (t.type) { 45333 case "blur": 45334 n.tweenRunning && r.dir && a("off", null); 45335 break; 45336 case "keydown": 45337 case "keyup":
45338 var l = t.keyCode ? t.keyCode : t.which, 45339 s = "on"; 45340 if (("x" !== i.axis && (38 === l || 40 === l)) || ("y" !== i.axis && (37 === l || 39 === l))) { 45341 if (((38 === l || 40 === l) && !n.overflowed[0]) || ((37 === l || 39 === l) && !n.overflowed[1])) return; 45342 "keyup" === t.type && (s = "off"), e(document.activeElement).is(u) || (t.preventDefault(), t.stopImmediatePropagation(), a(s, l)); 45343 } else if (33 === l || 34 === l) { 45344 if (((n.overflowed[0] || n.overflowed[1]) && (t.preventDefault(), t.stopImmediatePropagation()), "keyup" === t.type)) { 45345 Q(o); 45346 var f = 34 === l ? -1 : 1; 45347 if ("x" === i.axis || ("yx" === i.axis && n.overflowed[1] && !n.overflowed[0])) 45348 var h = "x", 45349 m = Math.abs(c[0].offsetLeft) - f * (0.9 * d.width()); 45350 else 45351 var h = "y", 45352 m = Math.abs(c[0].offsetTop) - f * (0.9 * d.height()); 45353 G(o, m.toString(), { dir: h, scrollEasing: "mcsEaseInOut" }); 45354 } 45355 } else if ((35 === l || 36 === l) && !e(document.activeElement).is(u) && ((n.overflowed[0] || n.overflowed[1]) && (t.preventDefault(), t.stopImmediatePropagation()), "keyup" === t.type)) { 45356 if ("x" === i.axis || ("yx" === i.axis && n.overflowed[1] && !n.overflowed[0])) 45357 var h = "x", 45358 m = 35 === l ? Math.abs(d.width() - c.outerWidth(!1)) : 0; 45359 else 45360 var h = "y", 45361 m = 35 === l ? Math.abs(d.height() - c.outerHeight(!1)) : 0; 45362 G(o, m.toString(), { dir: h, scrollEasing: "mcsEaseInOut" }); 45363 } 45364 } 45365 } 45366 var o = e(this), 45367 n = o.data(a), 45368 i = n.opt, 45369 r = n.sequential, 45370 l = a + "_" + n.idx, 45371 s = e("#mCSB_" + n.idx), 45372 c = e("#mCSB_" + n.idx + "_container"), 45373 d = c.parent(), 45374 u = "input,textarea,select,datalist,keygen,[contenteditable='true']", 45375 f = c.find("iframe"), 45376 h = ["blur." + l + " keydown." + l + " keyup." + l]; 45377 f.length && 45378 f.each(function () { 45379 e(this).bind("load", function () { 45380 A(this) && 45381 e(this.contentDocument || this.contentWindow.document).bind(h[0], function (e) { 45382 t(e); 45383 }); 45384 }); 45385 }), 45386 s.attr("tabindex", "0").bind(h[0], function (e) { 45387 t(e); 45388 }); 45389 }, 45390 j = function (t, o, n, i, r) { 45391 function l(e) { 45392 u.snapAmount && (f.scrollAmount = u.snapAmount instanceof Array ? ("x" === f.dir[0] ? u.snapAmount[1] : u.snapAmount[0]) : u.snapAmount); 45393 var o = "stepped" !== f.type, 45394 a = r ? r : e ? (o ? p / 1.5 : g) : 1e3 / 60, 45395 n = e ? (o ? 7.5 : 40) : 2.5, 45396 s = [Math.abs(h[0].offsetTop), Math.abs(h[0].offsetLeft)], 45397 d = [c.scrollRatio.y > 10 ? 10 : c.scrollRatio.y, c.scrollRatio.x > 10 ? 10 : c.scrollRatio.x], 45398 m = "x" === f.dir[0] ? s[1] + f.dir[1] * (d[1] * n) : s[0] + f.dir[1] * (d[0] * n), 45399 v = "x" === f.dir[0] ? s[1] + f.dir[1] * parseInt(f.scrollAmount) : s[0] + f.dir[1] * parseInt(f.scrollAmount), 45400 x = "auto" !== f.scrollAmount ? v : m, 45401 _ = i ? i : e ? (o ? "mcsLinearOut" : "mcsEaseInOut") : "mcsLinear", 45402 w = !!e; 45403 return ( 45404 e && 17 > a && (x = "x" === f.dir[0] ? s[1] : s[0]), 45405 G(t, x.toString(), { dir: f.dir[0], scrollEasing: _, dur: a, onComplete: w }), 45406 e 45407 ? void (f.dir = !1) 45408 : (clearTimeout(f.step), 45409 void (f.step = setTimeout(function () { 45410 l(); 45411 }, a))) 45412 ); 45413 } 45414 function s() { 45415 clearTimeout(f.step), $(f, "step"), Q(t); 45416 } 45417 var c = t.data(a), 45418 u = c.opt, 45419 f = c.sequential, 45420 h = e("#mCSB_" + c.idx + "_container"), 45421 m = "stepped" === f.type, 45422 p = u.scrollInertia < 26 ? 26 : u.scrollInertia, 45423 g = u.scrollInertia < 1 ? 17 : u.scrollInertia; 45424 switch (o) { 45425 case "on": 45426 if (((f.dir = [n === d[16] || n === d[15] || 39 === n || 37 === n ? "x" : "y", n === d[13] || n === d[15] || 38 === n || 37 === n ? -1 : 1]), Q(t), oe(n) && "stepped" === f.type)) return; 45427 l(m); 45428 break; 45429 case "off": 45430 s(), (m || (c.tweenRunning && f.dir)) && l(!0); 45431 } 45432 }, 45433 Y = function (t) { 45434 var o = e(this).data(a).opt, 45435 n = []; 45436 return ( 45437 "function" == typeof t && (t = t()), 45438 t instanceof Array ? (n = t.length > 1 ? [t[0], t[1]] : "x" === o.axis ? [null, t[0]] : [t[0], null]) : ((n[0] = t.y ? t.y : t.x || "x" === o.axis ? null : t), (n[1] = t.x ? t.x : t.
45438y || "y" === o.axis ? null : t)), 45439 "function" == typeof n[0] && (n[0] = n[0]()), 45440 "function" == typeof n[1] && (n[1] = n[1]()), 45441 n 45442 ); 45443 }, 45444 X = function (t, o) { 45445 if (null != t && "undefined" != typeof t) { 45446 var n = e(this), 45447 i = n.data(a), 45448 r = i.opt, 45449 l = e("#mCSB_" + i.idx + "_container"), 45450 s = l.parent(), 45451 c = typeof t; 45452 o || (o = "x" === r.axis ? "x" : "y"); 45453 var d = "x" === o ? l.outerWidth(!1) - s.width() : l.outerHeight(!1) - s.height(), 45454 f = "x" === o ? l[0].offsetLeft : l[0].offsetTop, 45455 h = "x" === o ? "left" : "top"; 45456 switch (c) { 45457 case "function": 45458 return t(); 45459 case "object": 45460 var m = t.jquery ? t : e(t); 45461 if (!m.length) return; 45462 return "x" === o ? ae(m)[1] : ae(m)[0]; 45463 case "string": 45464 case "number": 45465 if (oe(t)) return Math.abs(t); 45466 if (-1 !== t.indexOf("%")) return Math.abs((d * parseInt(t)) / 100); 45467 if (-1 !== t.indexOf("-=")) return Math.abs(f - parseInt(t.split("-=")[1])); 45468 if (-1 !== t.indexOf("+=")) { 45469 var p = f + parseInt(t.split("+=")[1]); 45470 return p >= 0 ? 0 : Math.abs(p); 45471 } 45472 if (-1 !== t.indexOf("px") && oe(t.split("px")[0])) return Math.abs(t.split("px")[0]); 45473 if ("top" === t || "left" === t) return 0; 45474 if ("bottom" === t) return Math.abs(s.height() - l.outerHeight(!1)); 45475 if ("right" === t) return Math.abs(s.width() - l.outerWidth(!1)); 45476 if ("first" === t || "last" === t) { 45477 var m = l.find(":" + t); 45478 return "x" === o ? ae(m)[1] : ae(m)[0]; 45479 } 45480 return e(t).length ? ("x" === o ? ae(e(t))[1] : ae(e(t))[0]) : (l.css(h, t), void u.update.call(null, n[0])); 45481 } 45482 } 45483 }, 45484 N = function (t) { 45485 function o() { 45486 return ( 45487 clearTimeout(f[0].autoUpdate), 45488 0 === l.parents("html").length 45489 ? void (l = null) 45490 : void (f[0].autoUpdate = setTimeout(function () { 45491 return c.advanced.updateOnSelectorChange && ((s.poll.change.n = i()), s.poll.change.n !== s.poll.change.o) 45492 ? ((s.poll.change.o = s.poll.change.n), void r(3)) 45493 : c.advanced.updateOnContentResize && ((s.poll.size.n = l[0].scrollHeight + l[0].scrollWidth + f[0].offsetHeight + l[0].offsetHeight + l[0].offsetWidth), s.poll.size.n !== s.poll.size.o) 45494 ? ((s.poll.size.o = s.poll.size.n), void r(1)) 45495 : !c.advanced.updateOnImageLoad || ("auto" === c.advanced.updateOnImageLoad && "y" === c.axis) || ((s.poll.img.n = f.find("img").length), s.poll.img.n === s.poll.img.o) 45496 ? void ((c.advanced.updateOnSelectorChange || c.advanced.updateOnContentResize || c.advanced.updateOnImageLoad) && o()) 45497 : ((s.poll.img.o = s.poll.img.n), 45498 void f.find("img").each(function () { 45499 n(this); 45500 })); 45501 }, c.advanced.autoUpdateTimeout)) 45502 ); 45503 } 45504 function n(t) { 45505 function o(e, t) { 45506 return function () { 45507 return t.apply(e, arguments); 45508 }; 45509 } 45510 function a() { 45511 (this.onload = null), e(t).addClass(d[2]), r(2); 45512 } 45513 if (e(t).hasClass(d[2])) return void r(); 45514 var n = new Image(); 45515 (n.onload = o(n, a)), (n.src = t.src); 45516 } 45517 function i() { 45518 c.advanced.updateOnSelectorChange === !0 && (c.advanced.updateOnSelectorChange = "*"); 45519 var e = 0, 45520 t = f.find(c.advanced.updateOnSelectorChange); 45521 return ( 45522 c.advanced.updateOnSelectorChange && 45523 t.length > 0 && 45524 t.each(function () { 45525 e += this.offsetHeight + this.offsetWidth; 45526 }), 45527 e 45528 ); 45529 } 45530 function r(e) { 45531 clearTimeout(f[0].autoUpdate), u.update.call(null, l[0], e); 45532 } 45533 var l = e(this), 45534 s = l.data(a), 45535 c = s.opt, 45536 f = e("#mCSB_" + s.idx + "_container"); 45537 return t ? (clearTimeout(f[0].autoUpdate), void $(f[0], "autoUpdate")) : void o(); 45538 }, 45539 V = function (e, t, o) { 45540 return Math.round(e / t) * t - o; 45541 }, 45542 Q = function (t) { 45543 var o = t.data(a), 45544 n = e("#mCSB_" + o.idx + "_container,#mCSB_" + o.idx + "_container_wrapper,#mCSB_" + o.idx + "_dragger_vertical,#mCSB_" + o.idx + "_dragger_horizontal"); 45545 n.each(function () { 45546 Z.call(this); 45547 }); 45548 }, 45549 G = function (t, o, n) { 45550 function i(e) { 45551 return s && c.callbacks[e] && "function" == typeof c.callbacks[e]; 45552 } 45553 function r() { 45554 return [c.callbacks.alwaysTriggerOffsets || w >= S[0] + y, c.callbacks.alwaysTriggerOffsets || -B >= w]; 45555 } 45556 function l() { 45557 var e = [h[0].offsetTop, h[0].offsetLeft], 45558 o = [x[0].offsetTop, x[0].offsetLeft], 45559 a = [h.outerHeight(!1), h.outerWidth(!1)], 45560 i = [f.height(), f.width()]; 45561 t[0].mcs = { 45562 content: h, 45563 top: e[0], 45564 left: e[1], 45565 draggerTop: o[0], 45566 draggerLeft: o[1], 45567 topPct: Math.round((100 * Math.abs(e[0])) / (Math.abs(a[0]) - i[0])), 45568 leftPct: Math.round((100 * Math.abs(e[1])) / (Math.abs(a[1]) - i[1])), 45569 direction: n.dir, 45570 }; 45571 } 45572 var s = t.data(a), 45573 c = s.opt, 45574 d = { trigger: "internal", dir: "y", scrollEasing: "mcsEaseOut", drag: !1, dur: c.scrollInertia, overwrite: "all", callbacks: !0, onStart: !0, onUp
45574date: !0, onComplete: !0 }, 45575 n = e.extend(d, n), 45576 u = [n.dur, n.drag ? 0 : n.dur], 45577 f = e("#mCSB_" + s.idx), 45578 h = e("#mCSB_" + s.idx + "_container"), 45579 m = h.parent(), 45580 p = c.callbacks.onTotalScrollOffset ? Y.call(t, c.callbacks.onTotalScrollOffset) : [0, 0], 45581 g = c.callbacks.onTotalScrollBackOffset ? Y.call(t, c.callbacks.onTotalScrollBackOffset) : [0, 0]; 45582 if ( 45583 ((s.trigger = n.trigger), 45584 (0 === m.scrollTop() && 0 === m.scrollLeft()) || (e(".mCSB_" + s.idx + "_scrollbar").css("visibility", "visible"), m.scrollTop(0).scrollLeft(0)), 45585 "_resetY" !== o || s.contentReset.y || (i("onOverflowYNone") && c.callbacks.onOverflowYNone.call(t[0]), (s.contentReset.y = 1)), 45586 "_resetX" !== o || s.contentReset.x || (i("onOverflowXNone") && c.callbacks.onOverflowXNone.call(t[0]), (s.contentReset.x = 1)), 45587 "_resetY" !== o && "_resetX" !== o) 45588 ) { 45589 if ( 45590 ((!s.contentReset.y && t[0].mcs) || !s.overflowed[0] || (i("onOverflowY") && c.callbacks.onOverflowY.call(t[0]), (s.contentReset.x = null)), 45591 (!s.contentReset.x && t[0].mcs) || !s.overflowed[1] || (i("onOverflowX") && c.callbacks.onOverflowX.call(t[0]), (s.contentReset.x = null)), 45592 c.snapAmount) 45593 ) { 45594 var v = c.snapAmount instanceof Array ? ("x" === n.dir ? c.snapAmount[1] : c.snapAmount[0]) : c.snapAmount; 45595 o = V(o, v, c.snapOffset); 45596 } 45597 switch (n.dir) { 45598 case "x": 45599 var x = e("#mCSB_" + s.idx + "_dragger_horizontal"), 45600 _ = "left", 45601 w = h[0].offsetLeft, 45602 S = [f.width() - h.outerWidth(!1), x.parent().width() - x.width()], 45603 b = [o, 0 === o ? 0 : o / s.scrollRatio.x], 45604 y = p[1], 45605 B = g[1], 45606 T = y > 0 ? y / s.scrollRatio.x : 0, 45607 k = B > 0 ? B / s.scrollRatio.x : 0; 45608 break; 45609 case "y": 45610 var x = e("#mCSB_" + s.idx + "_dragger_vertical"), 45611 _ = "top", 45612 w = h[0].offsetTop, 45613 S = [f.height() - h.outerHeight(!1), x.parent().height() - x.height()], 45614 b = [o, 0 === o ? 0 : o / s.scrollRatio.y], 45615 y = p[0], 45616 B = g[0], 45617 T = y > 0 ? y / s.scrollRatio.y : 0, 45618 k = B > 0 ? B / s.scrollRatio.y : 0; 45619 } 45620 b[1] < 0 || (0 === b[0] && 0 === b[1]) ? (b = [0, 0]) : b[1] >= S[1] ? (b = [S[0], S[1]]) : (b[0] = -b[0]), 45621 t[0].mcs || (l(), i("onInit") && c.callbacks.onInit.call(t[0])), 45622 clearTimeout(h[0].onCompleteTimeout), 45623 J(x[0], _, Math.round(b[1]), u[1], n.scrollEasing), 45624 (!s.tweenRunning && ((0 === w && b[0] >= 0) || (w === S[0] && b[0] <= S[0]))) || 45625 J(h[0], _, Math.round(b[0]), u[0], n.scrollEasing, n.overwrite, { 45626 onStart: function () { 45627 n.callbacks && n.onStart && !s.tweenRunning && (i("onScrollStart") && (l(), c.callbacks.onScrollStart.call(t[0])), (s.tweenRunning = !0), C(x), (s.cbOffsets = r())); 45628 }, 45629 onUpdate: function () { 45630 n.callbacks && n.onUpdate && i("whileScrolling") && (l(), c.callbacks.whileScrolling.call(t[0])); 45631 }, 45632 onComplete: function () { 45633 if (n.callbacks && n.onComplete) { 45634 "yx" === c.axis && clearTimeout(h[0].onCompleteTimeout); 45635 var e = h[0].idleTimer || 0; 45636 h[0].onCompleteTimeout = setTimeout(function () { 45637 i("onScroll") && (l(), c.callbacks.onScroll.call(t[0])), 45638 i("onTotalScroll") && b[1] >= S[1] - T && s.cbOffsets[0] && (l(), c.callbacks.onTotalScroll.call(t[0])), 45639 i("onTotalScrollBack") && b[1] <= k && s.cbOffsets[1] && (l(), c.callbacks.onTotalScrollBack.call(t[0])), 45640 (s.tweenRunning = !1), 45641 (h[0].idleTimer = 0), 45642 C(x, "hide"); 45643 }, e); 45644 } 45645 }, 45646 }); 45647 } 45648 }, 45649 J = function (e, t, o, a, n, i, r) { 45650 function l() { 45651 S.stop || (x || m.call(), (x = K() - v), s(), x >= S.time && ((S.time = x > S.time ? x + f - (x - S.time) : x + f - 1), S.time < x + 1 && (S.time = x + 1)), S.time < a ? (S.id = h(l)) : g.call()); 45652 } 45653 function s() { 45654 a > 0 ? ((S.currVal = u(S.time, _, b, a, n)), (w[t] = Math.round(S.currVal) + "px")) : (w[t] = o + "px"), p.call(); 45655 } 45656 function c() { 45657 (f = 1e3 / 60), 45658 (S.time = x + f), 45659 (h = window.requestAnimationFrame 45660 ? window.requestAnimationFrame 45661 : function (e) { 45662 return s(), setTimeout(e, 0.01); 45663 }), 45664 (S.id = h(l)); 45665 } 45666 function d() { 45667 null != S.id && (window.requestAnimationFrame ? window.cancelAnimationFrame(S.id) : clearTimeout(S.id), (S.id = null)); 45668 } 45669 function u(e, t, o, a, n) { 45670 switch (n) { 45671 case "linear": 45672 case "mcsLinear": 45673 return (o * e) / a + t; 45674 case "mcsLinearOut": 45675 return (e /= a), e--, o * Math.sqrt(1 - e * e) + t; 45676 case "easeInOutSmooth": 45677 return (e /= a / 2), 1 > e ? (o / 2) * e * e + t : (e--, (-o / 2) * (e * (e - 2) - 1) + t); 45678 case "easeInOutStrong": 45679 return (e /= a / 2), 1 > e ? (o / 2) * Math.pow(2, 10 * (e - 1)) + t : (e--, (o / 2) * (-Math.pow(2, -10 * e) + 2) + t); 45680 case "easeInOut": 45681 case "mcsEaseInOut": 45682 return (e /= a / 2), 1 > e ? (o / 2) * e * e * e + t : ((e -= 2), (o / 2) * (e * e * e + 2) + t); 45683 case "easeOutSmooth": 45684 return (e /= a), e--, -o * (e * e * e * e - 1) + t; 45685 case "easeOutStrong": 45686 return o * (-Math.pow(2, (-10 * e) / a) + 1) + t; 45687 case "easeOut": 45688 case "mcsEaseOut": 45689 default: 45690 var i = (e /= a) * e, 45691 r = i * e; 45692 return t + o * (0.499999999999997 * r * i + -2.5 * i * i + 5.5 * r + -6.5 * i + 4 * e); 45693 } 45694 } 45695 e._mTween || (e._mTween = { top: {}, left: {} }); 45696 var f, 45697 h, 45698 r = r || {}, 45699 m = r.onStart || function () {}, 45700 p = r.onUpdate || function () {}, 45701 g = r.onComplete || function () {}, 45702 v = K(), 45703 x = 0, 45704 _ = e.offsetTop, 45705 w = e.style, 45706 S = e._mTween[t]; 45707 "left" === t && (_ = e.offsetLeft); 45708 var b = o - _; 45709 (S.stop = 0), "none" !== i && d(), c(); 45710 }, 45711 K = function () { 45712 return window.performance && window.performance.now ? window.performance.now() : window.performance && window.performance.webkitNow ? window.performance.webkitNow() : Date.now ? Date.now() : new Date().getTime(); 45713 }, 45714 Z = function () { 45715 var e = this; 45716 e._mTween || (e._mTween = { top: {}, left: {} }); 45717 for (var t = ["top", "left"], o = 0; o < t.length; o++) { 45718 var a = t[o]; 45719 e._mTween[a].id && (window.requestAnimationFrame ? window.cancelAnimationFrame(e._mTween[a].id) : clearTimeout(e._mTween[a].id), (e._mTween[a].id = null), (e._mTween[a].stop = 1)); 45720 } 45721 }, 45722 $ = function (e, t) { 45723 try { 45724 delete e[t]; 45725 } catch (o) { 45726 e[t] = null; 45727 } 45728 }, 45729 ee = function (e) { 45730 return !(e.which && 1 !== e.which); 45731 }, 45732 te = function (e) { 45733 var t = e.originalEvent.pointerType; 45734 return !(t && "touch" !== t && 2 !== t); 45735 }, 45736 oe = function (e) { 45737 return !isNaN(parseFloat(e)) && isFinite(e); 45738 }, 45739 ae = function (e) { 45740 var t = e.parents(".mCSB_container"); 45741 return [e.offset().top - t.offset().top, e.offset().left - t.offset().left]; 45742 }, 45743 ne = function () { 45744 function e() { 45745 var e = ["webkit", "moz", "ms", "o"]; 45746 if ("hidden" in document) return "hidden"; 45747 for (var t = 0; t < e.length; t++) if (e[t] + "Hidden" in document) return e[t] + "Hidden"; 45748 return null; 45749 } 45750 var t = e(); 45751 return t ? document[t] : !1; 45752 }; 45753 (e.fn[o] = function (t) { 45754 return u[t] ? u[t].apply(this, Array.prototype.slice.call(arguments, 1)) : "object" != typeof t && t ? void e.error("Method " + t + " does not exist") : u.init.apply(this, arguments); 45755 }), 45756 (e[o] = function (t) { 45757 return u[t] ? u[t].apply(this, Array.prototype.slice.call(arguments, 1)) : "object" != typeof t && t ? void e.error("Method " + t + " does not exist") : u.init.apply(this, arguments); 45758 }), 45759 (e[o].defaults = i), 45760 (window[o] = !0), 45761 e(window).bind("load", function () { 45762 e(n)[o](), 45763 e.extend(e.expr[":"], {
45764 mcsInView: 45765 e.expr[":"].mcsInView || 45766 function (t) { 45767 var o, 45768 a, 45769 n = e(t), 45770 i = n.parents(".mCSB_container"); 45771 if (i.length) 45772 return ( 45773 (o = i.parent()), 45774 (a = [i[0].offsetTop, i[0].offsetLeft]), 45775 a[0] + ae(n)[0] >= 0 && a[0] + ae(n)[0] < o.height() - n.outerHeight(!1) && a[1] + ae(n)[1] >= 0 && a[1] + ae(n)[1] < o.width() - n.outerWidth(!1) 45776 ); 45777 }, 45778 mcsInSight: 45779 e.expr[":"].mcsInSight || 45780 function (t, o, a) { 45781 var n, 45782 i, 45783 r, 45784 l, 45785 s = e(t), 45786 c = s.parents(".mCSB_container"), 45787 d = 45788 "exact" === a[3] 45789 ? [ 45790 [1, 0], 45791 [1, 0], 45792 ] 45793 : [ 45794 [0.9, 0.1], 45795 [0.6, 0.4], 45796 ]; 45797 if (c.length) 45798 return ( 45799 (n = [s.outerHeight(!1), s.outerWidth(!1)]), 45800 (r = [c[0].offsetTop + ae(s)[0], c[0].offsetLeft + ae(s)[1]]), 45801 (i = [c.parent()[0].offsetHeight, c.parent()[0].offsetWidth]), 45802 (l = [n[0] < i[0] ? d[0] : d[1], n[1] < i[1] ? d[0] : d[1]]), 45803 r[0] - i[0] * l[0][0] < 0 && r[0] + n[0] - i[0] * l[0][1] >= 0 && r[1] - i[1] * l[1][0] < 0 && r[1] + n[1] - i[1] * l[1][1] >= 0 45804 ); 45805 }, 45806 mcsOverflow: 45807 e.expr[":"].mcsOverflow || 45808 function (t) { 45809 var o = e(t).data(a); 45810 if (o) return o.overflowed[0] || o.overflowed[1]; 45811 }, 45812 }); 45813 }); 45814 }); 45815}); 45816(function ($, undefined) { 45817 $.fn.extend({ 45818 _aria: function (name, value) { 45819 return this.attr("aria-" + name, value); 45820 }, 45821 _removeAria: function (name) { 45822 return this.removeAttr("aria-" + name); 45823 }, 45824 _enableAria: function (enable) { 45825 return enable == null || enable ? this.removeClass("disabled")._aria("disabled", "false") : this.addClass("disabled")._aria("disabled", "true"); 45826 }, 45827 _showAria: function (show) { 45828 return show == null || show ? this.show()._aria("hidden", "false") : this.hide()._aria("hidden", "true"); 45829 }, 45830 _selectAria: function (select) { 45831 return select == null || select ? this.addClass("current")._aria("selected", "true") : this.removeClass("current")._aria("selected", "false"); 45832 }, 45833 _id: function (id) { 45834 return id ? this.attr("id", id) : this.attr("id"); 45835 }, 45836 }); 45837 if (!String.prototype.format) { 45838 String.prototype.format = function () { 45839 var args = arguments.length === 1 && $.isArray(arguments[0]) ? arguments[0] : arguments; 45840 var formattedString = this; 45841 for (var i = 0; i < args.length; i++) { 45842 var pattern = new RegExp("\\{" + i + "\\}", "gm"); 45843 formattedString = formattedString.replace(pattern, args[i]); 45844 } 45845 return formattedString; 45846 }; 45847 } 45848 var _uniqueId = 0; 45849 var _cookiePrefix = "jQu3ry_5teps_St@te_"; 45850 var _tabSuffix = "-t-"; 45851 var _tabpanelSuffix = "-p-"; 45852 var _titleSuffix = "-h-"; 45853 var _indexOutOfRangeErrorMessage = "Index out of range."; 45854 var _missingCorrespondingElementErrorMessage = "One or more corresponding step {0} are missing."; 45855 function addStepToCache(wizard, step) { 45856 getSteps(wizard).push(step); 45857 } 45858 function analyzeData(wizard, options, state) { 45859 var stepTitles = wizard.children(options.headerTag), 45860 stepContents = wizard.children(options.bodyTag); 45861 if (stepTitles.length > stepContents.length) { 45862 throwError(_missingCorrespondingElementErrorMessage, "contents"); 45863 } else if (stepTitles.length < stepContents.length) { 45864 throwError(_missingCorrespondingElementErrorMessage, "titles"); 45865 } 45866 var startIndex = options.startIndex; 45867 state.stepCount = stepTitles.length; 45868 if (options.saveState && $.cookie) { 45869 var savedState = $.cookie(_cookiePrefix + getUniqueId(wizard)); 45870 var savedIndex = parseInt(savedState, 0); 45871 if (!isNaN(savedIndex) && savedIndex < state.stepCount) { 45872 startIndex = savedIndex; 45873 } 45874 } 45875 state.currentIndex = startIndex; 45876 stepTitles.each(function (index) { 45877 var item = $(this), 45878 content = stepContents.eq(index), 45879 modeData = content.data("mode"), 45880 mode = modeData == null ? contentMode.html : getValidEnumValue(contentMode, /^\s*$/.test(modeData) || isNaN(modeData) ? modeData : parseInt(modeData, 0)), 45881 contentUrl = mode === contentMode.html || content.data("url") === undefined ? "" : content.data("url"), 45882 contentLoaded = mode !== contentMode.html && content.data("loaded") === "1", 45883 step = $.extend({}, stepModel, { title: item.html(), content: mode === contentMode.html ? content.html() : "", contentUrl: contentUrl, contentMode: mode, contentLoaded: contentLoaded }); 45884 addStepToCache(wizard, step); 45885 }); 45886 } 45887 function cancel(wizard) { 45888 wizard.triggerHandler("canceled"); 45889 } 45890 function decreaseCurrentIndexBy(state, decreaseBy) { 45891 return state.currentIndex - decreaseBy; 45892 } 45893 function destroy(wizard, options) { 45894 var eventNamespace = getEventNamespace(wizard); 45895 wizard.unbind(eventNamespace).removeData("uid").removeData("options").removeData("state").removeData("steps").removeData("eventNamespace").find(".actions a").unbind(eventNamespace); 45896 wizard.removeClass(options.clearFixCssClass + " vertical"); 45897 var contents = wizard.find(".content > *"); 45898 contents.removeData("loaded").removeData("mode").removeData("url"); 45899 contents.removeAttr("id").removeAttr("role").removeAttr("tabindex").removeAttr("class").removeAttr("style")._removeAria("labelledby")._removeAria("hidden"); 45900 wizard.find(".content > [data-mode='async'],.content > [data-mode='iframe']").empty(); 45901 var wizardSubstitute = $('<{0} class="{1}"></{0}>'.format(wizard.get(0).tagName, wizard.attr("class"))); 45902 var wizardId = wizard._id(); 45903 if (wizardId != null && wizardId !== "") { 45904 wizardSubstitute._id(wizardId); 45905 } 45906 wizardSubstitute.html(wizard.find(".content").html()); 45907 wizard.after(wizardSubstitute); 45908 wizard.remove(); 45909 return wizardSubstitute; 45910 } 45911 function finishStep(wizard, state) { 45912 var currentStep = wizard.find(".steps li").eq(state.currentIndex); 45913 if (wizard.triggerHandler("finishing", [state.currentIndex])) { 45914 currentStep.addClass("done").removeClass("error"); 45915 wizard.triggerHandler("finished", [state.currentIndex]); 45916 } else { 45917 currentStep.addClass("error"); 45918 } 45919 } 45920 function getEventNamespace(wizard) { 45921 var eventNamespace = wizard.data("eventNamespace"); 45922 if (eventNamespace == null) { 45923 eventNamespace = "." + getUniqueId(wizard); 45924 wizard.data("eventNamespace", eventNamespace); 45925 } 45926 return eventNamespace; 45927 } 45928 function getStepAnchor(wizard, index) { 45929 var uniqueId = getUniqueId(wizard); 45930 return wizard.find("#" + uniqueId + _tabSuffix + index); 45931 } 45932 function getStepPanel(wizard, index) { 45933 var uniqueId = getUniqueId(wizard); 45934 return wizard.find("#" + uniqueId + _tabpanelSuffix + index); 45935 } 45936 function getStepTitle(wizard, index) { 45937 var uniqueId = getUniqueId(wizard); 45938 return wizard.find("#" + uniqueId + _titleSuffix + index); 45939 } 45940 function getOptions(wizard) { 45941 return wizard.data("options"); 45942 } 45943 function getState(wizard) { 45944 return wizard.data("state"); 45945 } 45946 function getSteps(wizard) { 45947 return wizard.data("steps"); 45948 } 45949 function getStep(wizard, index) { 45950 var steps = getSteps(wizard); 45951 if (index < 0 || index >= steps.length) { 45952 throwError(_indexOutOfRangeErrorMessage); 45953 } 45954 return steps[index]; 45955 } 45956 function getUniqueId(wizard) { 45957 var uniqueId = wizard.data("uid"); 45958 if (uniqueId == null) { 45959 uniqueId = wizard._id(); 45960 if (uniqueId == null) { 45961 uniqueId = "steps-uid-".concat(_uniqueId); 45962 wizard._id(uniqueId); 45963 } 45964 _uniqueId++; 45965 wizard.data("uid", uniqueId); 45966 } 45967 return uniqueId; 45968 } 45969 function getValidEnumValue(enumType, keyOrValue) { 45970 validateArgument("enumType", enumType); 45971 validateArgument("keyOrValue", keyOrValue); 45972 if (typeof keyOrValue === "string") { 45973 var value = enumType[keyOrValue]; 45974 if (value === undefined) { 45975 throwError("The enum key '{0}' does not exist.", keyOrValue); 45976 } 45977 return value; 45978 } else if (typeof keyOrValue === "number") { 45979 for (var key in enumType) { 45980 if (enumType[key] === keyOrValue) { 45981 return keyOrValue; 45982 } 45983 } 45984 throwError("Invalid enum value '{0}'.", keyOrValue); 45985 } else { 45986 throwError("Invalid key or value type."); 45987 } 45988 } 45989 function goToNextStep(wizard, options, state) { 45990 return paginationClick(wizard, options, state, increaseCurrentIndexBy(state, 1)); 45991 } 45992 function goToPreviousStep(wizard, options, state) { 45993 return paginationClick(wizard, options, state, decreaseCurrentIndexBy(state, 1)); 45994 } 45995 function goToStep(wizard, options, state, index) { 45996 if (index < 0 || index >= state.stepCount) { 45997 throwError(_indexOutOfRangeErrorMessage); 45998 } 45999 if (options.forceMoveForward && index < state.currentIndex) { 46000 return; 46001 } 46002 var oldIndex = state.currentIndex; 46003 if (wizard.triggerHandler("stepChanging", [state.currentIndex, index])) { 46004 state.currentIndex = index; 46005 saveCurrentStateToCookie(wizard, options, state); 46006 refreshStepNavigation(wizard, options, state, oldIndex); 46007 refreshPagination(wizard, options, state); 46008 loadAsyncContent(wizard, options, state); 46009 startTransitionEffect(wizard, options, state, index, oldIndex, function () { 46010 wizard.triggerHandler("stepChanged", [index, oldIndex]); 46011 }); 46012 } else { 46013 wizard.find(".steps li").eq(oldIndex).addClass("error"); 46014 } 46015 return true; 46016 } 46017 function increaseCurrentIndexBy(state, increaseBy) { 46018 return state.currentIndex + increaseBy; 46019 } 46020 function initialize(options) { 46021 var opts = $.extend(true, {}, defaults, options); 46022 return this.each(function () { 46023 var wizard = $(this); 46024 var state = { currentIndex: opts.startIndex, currentStep: null, stepCount: 0, transitionElement: null }; 46025 wizard.data("options", opts); 46026 wizard.data("state", state); 46027 wizard.data("steps", []); 46028 analyzeData(wizard, opts, state); 46029 render(wizard, opts, state); 46030 registerEvents(wizard, opts); 46031 if (opts.autoFocus && _uniqueId === 0) { 46032 getStepAnchor(wizard, opts.startIndex).focus(); 46033 } 46034 wizard.triggerHandler("init", [opts.startIndex]); 46035 }); 46036 } 46037 function insertStep(wizard, options, state, index, step) { 46038 if (index < 0 || index > state.stepCount) { 46039 throwError(_indexOutOfRangeErrorMessage); 46040 } 46041 step = $.extend({}, stepModel, step); 46042 insertStepToCache(wizard, index, step); 46043 if (state.currentIndex !== state.stepCount && state.currentIndex >= index) { 46044 state.currentIndex++; 46045 saveCurrentStateToCookie(wizard, options, state); 46046 } 46047 state.stepCount++; 46048 var contentContainer = wizard.find(".content"), 46049 header = $("<{0}>{1}</{0}>".format(options.headerTag, step.title)), 46050 body = $("<{0}></{0}>".format(options.bodyTag)); 46051 if (step.contentMode == null || step.contentMode === contentMode.html) { 46052 body.html(step.content); 46053 } 46054 if (index === 0) { 46055 contentContainer.prepend(body).prepend(header); 46056 } else { 46057 getStepPanel(wizard, index - 1) 46058 .after(body) 46059 .after(header); 46060 } 46061 renderBody(wizard, state, body, index); 46062 renderTitle(wizard, options, state, header, index); 46063 refreshSteps(wizard, options, state, index); 46064 if (index === state.currentIndex) { 46065 refreshStepNavigation(wizard, options, state); 46066 } 46067 refreshPagination(wizard, options, state); 46068 return wizard; 46069 } 46070 function insertStepToCache(wizard, index, step) { 46071 getSteps(wizard).splice(index, 0, step); 46072 } 46073 function keyUpHandler(event) { 46074 var wizard = $(this), 46075 options = getOptions(wizard), 46076 state = getState(wizard); 46077 if (options.suppressPaginationOnFocus && wizard.find(":focus").is(":input")) { 46078 event.preventDefault(); 46079 return false;
46080 } 46081 var keyCodes = { left: 37, right: 39 }; 46082 if (event.keyCode === keyCodes.left) { 46083 event.preventDefault(); 46084 goToPreviousStep(wizard, options, state); 46085 } else if (event.keyCode === keyCodes.right) { 46086 event.preventDefault(); 46087 goToNextStep(wizard, options, state); 46088 } 46089 } 46090 function loadAsyncContent(wizard, options, state) { 46091 if (state.stepCount > 0) { 46092 var currentIndex = state.currentIndex, 46093 currentStep = getStep(wizard, currentIndex); 46094 if (!options.enableContentCache || !currentStep.contentLoaded) { 46095 switch (getValidEnumValue(contentMode, currentStep.contentMode)) { 46096 case contentMode.iframe: 46097 wizard 46098 .find(".content > .body") 46099 .eq(state.currentIndex) 46100 .empty() 46101 .html('<iframe src="' + currentStep.contentUrl + '" frameborder="0" scrolling="no" />') 46102 .data("loaded", "1"); 46103 break; 46104 case contentMode.async: 46105 var currentStepContent = getStepPanel(wizard, currentIndex) 46106 ._aria("busy", "true") 46107 .empty() 46108 .append(renderTemplate(options.loadingTemplate, { text: options.labels.loading })); 46109 $.ajax({ url: currentStep.contentUrl, cache: false }).done(function (data) { 46110 currentStepContent.empty().html(data)._aria("busy", "false").data("loaded", "1"); 46111 wizard.triggerHandler("contentLoaded", [currentIndex]); 46112 }); 46113 break; 46114 } 46115 } 46116 } 46117 } 46118 function paginationClick(wizard, options, state, index) { 46119 var oldIndex = state.currentIndex; 46120 if (index >= 0 && index < state.stepCount && !(options.forceMoveForward && index < state.currentIndex)) { 46121 var anchor = getStepAnchor(wizard, index), 46122 parent = anchor.parent(), 46123 isDisabled = parent.hasClass("disabled"); 46124 parent._enableAria(); 46125 anchor.click(); 46126 if (oldIndex === state.currentIndex && isDisabled) { 46127 parent._enableAria(false); 46128 return false; 46129 } 46130 return true; 46131 } 46132 return false; 46133 } 46134 function paginationClickHandler(event) { 46135 event.preventDefault(); 46136 var anchor = $(this), 46137 wizard = anchor.parent().parent().parent().parent(), 46138 options = getOptions(wizard), 46139 state = getState(wizard), 46140 href = anchor.attr("href"); 46141 switch (href.substring(href.lastIndexOf("#") + 1)) { 46142 case "cancel": 46143 cancel(wizard); 46144 break; 46145 case "finish": 46146 finishStep(wizard, state); 46147 break; 46148 case "next": 46149 goToNextStep(wizard, options, state); 46150 break; 46151 case "previous": 46152 goToPreviousStep(wizard, options, state); 46153 break; 46154 } 46155 } 46156 function refreshPagination(wizard, options, state) { 46157 if (options.enablePagination) { 46158 var finish = wizard.find(".actions button[type='submit']").parent(), 46159 next = wizard.find(".actions a[href$='#next']").parent(); 46160 if (!options.forceMoveForward) { 46161 var previous = wizard.find(".actions a[href$='#previous']").parent(); 46162 previous._enableAria(state.currentIndex > 0); 46163 } 46164 if (options.enableFinishButton && options.showFinishButtonAlways) { 46165 finish._enableAria(state.stepCount > 0); 46166 next._enableAria(state.stepCount > 1 && state.stepCount > state.currentIndex + 1); 46167 } else { 46168 finish._showAria(options.enableFinishButton && state.stepCount === state.currentIndex + 1); 46169 next._showAria(state.stepCount === 0 || state.stepCount > state.currentIndex + 1)._enableAria(state.stepCount > state.currentIndex + 1 || !options.enableFinishButton); 46170 } 46171 } 46172 } 46173 function refreshStepNavigation(wizard, options, state, oldIndex) { 46174 var currentOrNewStepAnchor = getStepAnchor(wizard, state.currentIndex), 46175 currentInfo = $(""), 46176 stepTitles = wizard.find(".content > .title"); 46177 if (oldIndex != null) { 46178 var oldStepAnchor = getStepAnchor(wizard, oldIndex); 46179 oldStepAnchor.parent().addClass("done").removeClass("error")._selectAria(false); 46180 stepTitles.eq(oldIndex).removeClass("current").next(".body").removeClass("current"); 46181 currentInfo = oldStepAnchor.find(".current-info"); 46182 currentOrNewStepAnchor.focus(); 46183 } 46184 currentOrNewStepAnchor.prepend(currentInfo).parent()._selectAria().removeClass("done")._enableAria(); 46185 stepTitles.eq(state.currentIndex).addClass("current").next(".body").addClass("current"); 46186 } 46187 function refreshSteps(wizard, options, state, index) { 46188 var uniqueId = getUniqueId(wizard); 46189 for (var i = index; i < state.stepCount; i++) { 46190 var uniqueStepId = uniqueId + _tabSuffix + i, 46191 uniqueBodyId = uniqueId + _tabpanelSuffix + i, 46192 uniqueHeaderId = uniqueId + _titleSuffix + i, 46193 title = wizard.find(".title").eq(i)._id(uniqueHeaderId); 46194 wizard 46195 .find(".steps a") 46196 .eq(i)
46197 ._id(uniqueStepId) 46198 ._aria("controls", uniqueBodyId) 46199 .attr("href", "#" + uniqueHeaderId) 46200 .html(renderTemplate(options.titleTemplate, { index: i + 1, title: title.html() })); 46201 wizard.find(".body").eq(i)._id(uniqueBodyId)._aria("labelledby", uniqueHeaderId); 46202 } 46203 } 46204 function registerEvents(wizard, options) { 46205 var eventNamespace = getEventNamespace(wizard); 46206 wizard.bind("canceled" + eventNamespace, options.onCanceled); 46207 wizard.bind("contentLoaded" + eventNamespace, options.onContentLoaded); 46208 wizard.bind("finishing" + eventNamespace, options.onFinishing); 46209 wizard.bind("finished" + eventNamespace, options.onFinished); 46210 wizard.bind("init" + eventNamespace, options.onInit); 46211 wizard.bind("stepChanging" + eventNamespace, options.onStepChanging); 46212 wizard.bind("stepChanged" + eventNamespace, options.onStepChanged); 46213 if (options.enableKeyNavigation) { 46214 wizard.bind("keyup" + eventNamespace, keyUpHandler); 46215 } 46216 wizard.find(".actions a").bind("click" + eventNamespace, paginationClickHandler); 46217 } 46218 function removeStep(wizard, options, state, index) { 46219 if (index < 0 || index >= state.stepCount || state.currentIndex === index) { 46220 return false; 46221 } 46222 removeStepFromCache(wizard, index); 46223 if (state.currentIndex > index) { 46224 state.currentIndex--; 46225 saveCurrentStateToCookie(wizard, options, state); 46226 } 46227 state.stepCount--; 46228 getStepTitle(wizard, index).remove(); 46229 getStepPanel(wizard, index).remove(); 46230 getStepAnchor(wizard, index).parent().remove(); 46231 if (index === 0) { 46232 wizard.find(".steps li").first().addClass("first"); 46233 } 46234 if (index === state.stepCount) { 46235 wizard.find(".steps li").eq(index).addClass("last"); 46236 } 46237 refreshSteps(wizard, options, state, index); 46238 refreshPagination(wizard, options, state); 46239 return true; 46240 } 46241 function removeStepFromCache(wizard, index) { 46242 getSteps(wizard).splice(index, 1); 46243 } 46244 function render(wizard, options, state) { 46245 var wrapperTemplate = '<{0} class="{1}">{2}</{0}>', 46246 orientation = getValidEnumValue(stepsOrientation, options.stepsOrientation), 46247 verticalCssClass = orientation === stepsOrientation.vertical ? " vertical" : "", 46248 contentWrapper = $(wrapperTemplate.format(options.contentContainerTag, "content " + options.clearFixCssClass, wizard.html())), 46249 stepsWrapper = $(wrapperTemplate.format(options.stepsContainerTag, "steps " + options.clearFixCssClass, '<ul role="tablist"></ul>')), 46250 stepTitles = contentWrapper.children(options.headerTag), 46251 stepContents = contentWrapper.children(options.bodyTag); 46252 wizard 46253 .attr("role", "application") 46254 .empty() 46255 .append(stepsWrapper) 46256 .append(contentWrapper) 46257 .addClass(options.cssClass + " " + options.clearFixCssClass + verticalCssClass); 46258 stepContents.each(function (index) { 46259 renderBody(wizard, state, $(this), index); 46260 }); 46261 stepTitles.each(function (index) { 46262 renderTitle(wizard, options, state, $(this), index); 46263 }); 46264 refreshStepNavigation(wizard, options, state); 46265 renderPagination(wizard, options, state); 46266 } 46267 function renderBody(wizard, state, body, index) { 46268 var uniqueId = getUniqueId(wizard), 46269 uniqueBodyId = uniqueId + _tabpanelSuffix + index, 46270 uniqueHeaderId = uniqueId + _titleSuffix + index; 46271 body._id(uniqueBodyId) 46272 .attr("role", "tabpanel") 46273 ._aria("labelledby", uniqueHeaderId) 46274 .addClass("body") 46275 ._showAria(state.currentIndex === index); 46276 } 46277 function renderPagination(wizard, options, state) { 46278 if (options.enablePagination) { 46279 var pagination = '<{0} class="actions {1}"><ul role="menu" aria-label="{2}">{3}</ul></{0}>', 46280 buttonTemplate = '<li><a href="#{0}" role="menuitem" class=\'btn-primary min-size\'>{1}</a></li>', 46281 buttons = ""; 46282 if (!options.forceMoveForward) { 46283 } 46284 buttons += buttonTemplate.format("next", options.labels.next); 46285 if (options.enableFinishButton) { 46286 buttons += "<li><button type='submit' class='btn-primary min-size' disabled>" + options.labels.finish + "</button></li>"; 46287 } 46288 if (options.enableCancelButton) { 46289 buttons += buttonTemplate.format("cancel", options.labels.cancel); 46290 }
46291 wizard.append(pagination.format(options.actionContainerTag, options.clearFixCssClass, options.labels.pagination, buttons)); 46292 refreshPagination(wizard, options, state); 46293 loadAsyncContent(wizard, options, state); 46294 } 46295 } 46296 function renderTemplate(template, substitutes) { 46297 var matches = template.match(/#([a-z]*)#/gi); 46298 for (var i = 0; i < matches.length; i++) { 46299 var match = matches[i], 46300 key = match.substring(1, match.length - 1); 46301 if (substitutes[key] === undefined) { 46302 throwError("The key '{0}' does not exist in the substitute collection!", key); 46303 } 46304 template = template.replace(match, substitutes[key]); 46305 } 46306 return template; 46307 } 46308 function renderTitle(wizard, options, state, header, index) { 46309 var uniqueId = getUniqueId(wizard), 46310 uniqueStepId = uniqueId + _tabSuffix + index, 46311 uniqueBodyId = uniqueId + _tabpanelSuffix + index, 46312 uniqueHeaderId = uniqueId + _titleSuffix + index, 46313 stepCollection = wizard.find(".steps > ul"), 46314 title = renderTemplate(options.titleTemplate, { index: index + 1, title: header.html() }), 46315 stepItem = $('<li role="tab"><a id="' + uniqueStepId + '" href="#' + uniqueHeaderId + '" aria-controls="' + uniqueBodyId + '">' + title + "</a></li>"); 46316 stepItem._enableAria(options.enableAllSteps || state.currentIndex > index); 46317 if (state.currentIndex > index) { 46318 stepItem.addClass("done"); 46319 } 46320 header._id(uniqueHeaderId).attr("tabindex", "-1").addClass("title"); 46321 if (index === 0) { 46322 stepCollection.prepend(stepItem); 46323 } else { 46324 stepCollection 46325 .find("li") 46326 .eq(index - 1) 46327 .after(stepItem); 46328 } 46329 if (index === 0) { 46330 stepCollection.find("li").removeClass("first").eq(index).addClass("first"); 46331 } 46332 if (index === state.stepCount - 1) { 46333 stepCollection.find("li").removeClass("last").eq(index).addClass("last"); 46334 } 46335 stepItem.children("a").bind("click" + getEventNamespace(wizard), stepClickHandler); 46336 } 46337 function saveCurrentStateToCookie(wizard, options, state) { 46338 if (options.saveState && $.cookie) { 46339 $.cookie(_cookiePrefix + getUniqueId(wizard), state.currentIndex); 46340 } 46341 } 46342 function startTransitionEffect(wizard, options, state, index, oldIndex, doneCallback) { 46343 var stepContents = wizard.find(".content > .body"), 46344 effect = getValidEnumValue(transitionEffect, options.transitionEffect), 46345 effectSpeed = options.transitionEffectSpeed, 46346 newStep = stepContents.eq(index), 46347 currentStep = stepContents.eq(oldIndex); 46348 switch (effect) { 46349 case transitionEffect.fade: 46350 case transitionEffect.slide: 46351 var hide = effect === transitionEffect.fade ? "fadeOut" : "slideUp", 46352 show = effect === transitionEffect.fade ? "fadeIn" : "slideDown"; 46353 state.transitionElement = newStep; 46354 currentStep[hide](effectSpeed, function () { 46355 var wizard = $(this)._showAria(false).parent().parent(), 46356 state = getState(wizard); 46357 if (state.transitionElement) { 46358 state.transitionElement[show](effectSpeed, function () { 46359 $(this)._showAria(); 46360 }) 46361 .promise() 46362 .done(doneCallback); 46363 state.transitionElement = null; 46364 } 46365 }); 46366 break; 46367 case transitionEffect.slideLeft: 46368 var outerWidth = currentStep.outerWidth(true), 46369 posFadeOut = index > oldIndex ? -outerWidth : outerWidth, 46370 posFadeIn = index > oldIndex ? outerWidth : -outerWidth; 46371 $.when( 46372 currentStep.animate({ left: posFadeOut }, effectSpeed, function () { 46373 $(this)._showAria(false); 46374 }), 46375 newStep 46376 .css("left", posFadeIn + "px") 46377 ._showAria() 46378 .animate({ left: 0 }, effectSpeed) 46379 ).done(doneCallback); 46380 break; 46381 default: 46382 $.when(currentStep._showAria(false), newStep._showAria()).done(doneCallback); 46383 break; 46384 } 46385 } 46386 function stepClickHandler(event) { 46387 event.preventDefault(); 46388 var anchor = $(this), 46389 wizard = anchor.parent().parent().parent().parent(), 46390 options = getOptions(wizard), 46391 state = getState(wizard), 46392 oldIndex = state.currentIndex; 46393 if (anchor.parent().is(":not(.disabled):not(.current)")) { 46394 var href = anchor.attr("href"), 46395 position = parseInt(href.substring(href.lastIndexOf("-") + 1), 0); 46396 goToStep(wizard, options, state, position); 46397 } 46398 if (oldIndex === state.currentIndex) { 46399 getStepAnchor(wizard, oldIndex).focus(); 46400 return false;
46401 } 46402 } 46403 function throwError(message) { 46404 if (arguments.length > 1) { 46405 message = message.format(Array.prototype.slice.call(arguments, 1)); 46406 } 46407 throw new Error(message); 46408 } 46409 function validateArgument(argumentName, argumentValue) { 46410 if (argumentValue == null) { 46411 throwError("The argument '{0}' is null or undefined.", argumentName); 46412 } 46413 } 46414 $.fn.steps = function (method) { 46415 if ($.fn.steps[method]) { 46416 return $.fn.steps[method].apply(this, Array.prototype.slice.call(arguments, 1)); 46417 } else if (typeof method === "object" || !method) { 46418 return initialize.apply(this, arguments); 46419 } else { 46420 $.error("Method " + method + " does not exist on jQuery.steps"); 46421 } 46422 }; 46423 $.fn.steps.add = function (step) { 46424 var state = getState(this); 46425 return insertStep(this, getOptions(this), state, state.stepCount, step); 46426 }; 46427 $.fn.steps.destroy = function () { 46428 return destroy(this, getOptions(this)); 46429 }; 46430 $.fn.steps.finish = function () { 46431 finishStep(this, getState(this)); 46432 }; 46433 $.fn.steps.getCurrentIndex = function () { 46434 return getState(this).currentIndex; 46435 }; 46436 $.fn.steps.getCurrentStep = function () { 46437 return getStep(this, getState(this).currentIndex); 46438 }; 46439 $.fn.steps.getStep = function (index) { 46440 return getStep(this, index); 46441 }; 46442 $.fn.steps.insert = function (index, step) { 46443 return insertStep(this, getOptions(this), getState(this), index, step); 46444 }; 46445 $.fn.steps.next = function () { 46446 return goToNextStep(this, getOptions(this), getState(this)); 46447 }; 46448 $.fn.steps.previous = function () { 46449 return goToPreviousStep(this, getOptions(this), getState(this)); 46450 }; 46451 $.fn.steps.remove = function (index) { 46452 return removeStep(this, getOptions(this), getState(this), index); 46453 }; 46454 $.fn.steps.setStep = function (index, step) { 46455 throw new Error("Not yet implemented!"); 46456 }; 46457 $.fn.steps.skip = function (count) { 46458 throw new Error("Not yet implemented!"); 46459 }; 46460 var contentMode = ($.fn.steps.contentMode = { html: 0, iframe: 1, async: 2 }); 46461 var stepsOrientation = ($.fn.steps.stepsOrientation = { horizontal: 0, vertical: 1 }); 46462 var transitionEffect = ($.fn.steps.transitionEffect = { none: 0, fade: 1, slide: 2, slideLeft: 3 }); 46463 var stepModel = ($.fn.steps.stepModel = { title: "", content: "", contentUrl: "", contentMode: contentMode.html, contentLoaded: false }); 46464 var defaults = ($.fn.steps.defaults = { 46465 headerTag: "h1", 46466 bodyTag: "div", 46467 contentContainerTag: "div", 46468 actionContainerTag: "div", 46469 stepsContainerTag: "div", 46470 cssClass: "wizard", 46471 clearFixCssClass: "clearfix", 46472 stepsOrientation: stepsOrientation.horizontal, 46473 titleTemplate: "#title#", 46474 loadingTemplate: '<span class="spinner"></span> #text#', 46475 autoFocus: false, 46476 enableAllSteps: false, 46477 enableKeyNavigation: true, 46478 enablePagination: true, 46479 suppressPaginationOnFocus: true, 46480 enableContentCache: true,
46481 enableCancelButton: false, 46482 enableFinishButton: true, 46483 preloadContent: false, 46484 showFinishButtonAlways: false, 46485 forceMoveForward: false, 46486 saveState: false, 46487 startIndex: 0, 46488 transitionEffect: transitionEffect.none, 46489 transitionEffectSpeed: 200, 46490 onStepChanging: function (event, currentIndex, newIndex) { 46491 return true; 46492 }, 46493 onStepChanged: function (event, currentIndex, priorIndex) {}, 46494 onCanceled: function (event) {}, 46495 onFinishing: function (event, currentIndex) { 46496 return true; 46497 }, 46498 onFinished: function (event, currentIndex) {}, 46499 onContentLoaded: function (event, currentIndex) {}, 46500 onInit: function (event, currentIndex) {}, 46501 labels: { cancel: "Cancel", current: "current step:", pagination: "Pagination", finish: "Submit", next: "Next", previous: "Previous", loading: "Loading ..." }, 46502 }); 46503})(jQuery); 46504!(function (a) { 46505 "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof module && module.exports ? (module.exports = a(require("jquery"))) : a(jQuery); 46506})(function (a) { 46507 a.extend(a.fn, { 46508 validate: function (b) { 46509 if (!this.length) return void (b && b.debug && window.console && console.warn("Nothing selected, can't validate, returning nothing.")); 46510 var c = a.data(this[0], "validator"); 46511 return c 46512 ? c 46513 : (this.attr("novalidate", "novalidate"), 46514 (c = new a.validator(b, this[0])), 46515 a.data(this[0], "validator", c), 46516 c.settings.onsubmit && 46517 (this.on("click.validate", ":submit", function (b) { 46518 (c.submitButton = b.currentTarget), a(this).hasClass("cancel") && (c.cancelSubmit = !0), void 0 !== a(this).attr("formnovalidate") && (c.cancelSubmit = !0); 46519 }), 46520 this.on("submit.validate", function (b) { 46521 function d() { 46522 var d, e; 46523 return ( 46524 c.submitButton && (c.settings.submitHandler || c.formSubmitted) && (d = a("<input type='hidden'/>").attr("name", c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)), 46525 !c.settings.submitHandler || ((e = c.settings.submitHandler.call(c, c.currentForm, b)), d && d.remove(), void 0 !== e && e) 46526 ); 46527 } 46528 return c.settings.debug && b.preventDefault(), c.cancelSubmit ? ((c.cancelSubmit = !1), d()) : c.form() ? (c.pendingRequest ? ((c.formSubmitted = !0), !1) : d()) : (c.focusInvalid(), !1); 46529 })), 46530 c); 46531 }, 46532 valid: function () { 46533 var b, c, d; 46534 return ( 46535 a(this[0]).is("form") 46536 ? (b = this.validate().form()) 46537 : ((d = []), 46538 (b = !0), 46539 (c = a(this[0].form).validate()), 46540 this.each(function () { 46541 (b = c.element(this) && b), b || (d = d.concat(c.errorList)); 46542 }), 46543 (c.errorList = d)), 46544 b 46545 ); 46546 }, 46547 rules: function (b, c) { 46548 var d, 46549 e, 46550 f, 46551 g, 46552 h, 46553 i, 46554 j = this[0]; 46555 if (null != j && (!j.form && j.hasAttribute("contenteditable") && ((j.form = this.closest("form")[0]), (j.name = this.attr("name"))), null != j.form)) { 46556 if (b) 46557 switch (((d = a.data(j.form, "validator").settings), (e = d.rules), (f = a.validator.staticRules(j)), b)) { 46558 case "add": 46559 a.extend(f, a.validator.normalizeRule(c)), delete f.messages, (e[j.name] = f), c.messages && (d.messages[j.name] = a.extend(d.messages[j.name], c.messages)); 46560 break; 46561 case "remove": 46562 return c 46563 ? ((i = {}), 46564 a.each(c.split(/\s/), function (a, b) { 46565 (i[b] = f[b]), delete f[b]; 46566 }), 46567 i) 46568 : (delete e[j.name], f); 46569 } 46570 return ( 46571 (g = a.validator.normalizeRules(a.extend({}, a.validator.classRules(j), a.validator.attributeRules(j), a.validator.dataRules(j), a.validator.staticRules(j)), j)), 46572 g.required && ((h = g.required), delete g.required, (g = a.extend({ required: h }, g))), 46573 g.remote && ((h = g.remote), delete g.remote, (g = a.extend(g, { remote: h }))), 46574 g 46575 ); 46576 } 46577 }, 46578 }), 46579 a.extend(a.expr.pseudos || a.expr[":"], {
46580 blank: function (b) { 46581 return !a.trim("" + a(b).val()); 46582 }, 46583 filled: function (b) { 46584 var c = a(b).val(); 46585 return null !== c && !!a.trim("" + c); 46586 }, 46587 unchecked: function (b) { 46588 return !a(b).prop("checked"); 46589 }, 46590 }), 46591 (a.validator = function (b, c) { 46592 (this.settings = a.extend(!0, {}, a.validator.defaults, b)), (this.currentForm = c), this.init(); 46593 }), 46594 (a.validator.format = function (b, c) { 46595 return 1 === arguments.length 46596 ? function () { 46597 var c = a.makeArray(arguments); 46598 return c.unshift(b), a.validator.format.apply(this, c); 46599 } 46600 : void 0 === c 46601 ? b 46602 : (arguments.length > 2 && c.constructor !== Array && (c = a.makeArray(arguments).slice(1)), 46603 c.constructor !== Array && (c = [c]), 46604 a.each(c, function (a, c) { 46605 b = b.replace(new RegExp("\\{" + a + "\\}", "g"), function () { 46606 return c; 46607 }); 46608 }), 46609 b); 46610 }), 46611 a.extend(a.validator, { 46612 defaults: { 46613 messages: {}, 46614 groups: {}, 46615 rules: {}, 46616 errorClass: "error", 46617 pendingClass: "pending", 46618 validClass: "valid", 46619 errorElement: "label", 46620 focusCleanup: !1, 46621 focusInvalid: !0, 46622 errorContainer: a([]), 46623 errorLabelContainer: a([]), 46624 onsubmit: !0, 46625 ignore: ":hidden", 46626 ignoreTitle: !1, 46627 onfocusin: function (a) { 46628 (this.lastActive = a), this.settings.focusCleanup && (this.settings.unhighlight && this.settings.unhighlight.call(this, a, this.settings.errorClass, this.settings.validClass), this.hideThese(this.errorsFor(a))); 46629 }, 46630 onfocusout: function (a) { 46631 this.checkable(a) || (!(a.name in this.submitted) && this.optional(a)) || this.element(a); 46632 }, 46633 onkeyup: function (b, c) { 46634 var d = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225]; 46635 (9 === c.which && "" === this.elementValue(b)) || a.inArray(c.keyCode, d) !== -1 || ((b.name in this.submitted || b.name in this.invalid) && this.element(b)); 46636 }, 46637 onclick: function (a) { 46638 a.name in this.submitted ? this.element(a) : a.parentNode.name in this.submitted && this.element(a.parentNode); 46639 }, 46640 highlight: function (b, c, d) { 46641 "radio" === b.type ? this.findByName(b.name).addClass(c).removeClass(d) : a(b).addClass(c).removeClass(d); 46642 }, 46643 unhighlight: function (b, c, d) { 46644 "radio" === b.type ? this.findByName(b.name).removeClass(c).addClass(d) : a(b).removeClass(c).addClass(d); 46645 }, 46646 }, 46647 setDefaults: function (b) { 46648 a.extend(a.validator.defaults, b); 46649 }, 46650 messages: { 46651 required: "This field is required.", 46652 remote: "Please fix this field.", 46653 email: "Please enter a valid email address.", 46654 url: "Please enter a valid URL.", 46655 date: "Please enter a valid date.", 46656 dateISO: "Please enter a valid date (ISO).", 46657 number: "Please enter a valid number.", 46658 digits: "Please enter only digits.", 46659 equalTo: "Please enter the same value again.", 46660 maxlength: a.validator.format("Please enter no more than {0} characters."), 46661 minlength: a.validator.format("Please enter at least {0} characters."), 46662 rangelength: a.validator.format("Please enter a value between {0} and {1} characters long."), 46663 range: a.validator.format("Please enter a value between {0} and {1}."), 46664 max: a.validator.format("Please enter a value less than or equal to {0}."), 46665 min: a.validator.format("Please enter a value greater than or equal to {0}."), 46666 step: a.validator.format("Please enter a multiple of {0}."), 46667 }, 46668 autoCreateRanges: !1, 46669 prototype: { 46670 init: function () { 46671 function b(b) { 46672 !this.form && this.hasAttribute("contenteditable") && ((this.form = a(this).closest("form")[0]), (this.name = a(this).attr("name"))); 46673 var c = a.data(this.form, "validator"), 46674 d = "on" + b.type.replace(/^validate/, ""), 46675 e = c.settings; 46676 e[d] && !a(this).is(e.ignore) && e[d].call(c, this, b); 46677 } 46678 (this.labelContainer = a(this.settings.errorLabelContainer)), 46679 (this.errorContext = (this.labelContainer.length && this.labelContainer) || a(this.currentForm)), 46680 (this.containers = a(this.settings.errorContainer).add(this.settings.errorLabelContainer)), 46681 (this.submitted = {}), 46682 (this.valueCache = {}), 46683 (this.pendingRequest = 0), 46684 (this.pending = {}), 46685 (this.invalid = {}), 46686 this.reset(); 46687 var c, 46688 d = (this.groups = {}); 46689 a.each(this.settings.groups, function (b, c) { 46690 "string" == typeof c && (c = c.split(/\s/)), 46691 a.each(c, function (a, c) { 46692 d[c] = b; 46693 }); 46694 }), 46695 (c = this.settings.rules), 46696 a.each(c, function (b, d) { 46697 c[b] = a.validator.normalizeRule(d); 46698 }), 46699 a(this.currentForm) 46700 .on( 46701 "focusin.validate focusout.validate keyup.validate", 46702 ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']", 46703 b 46704 ) 46705 .on("click.validate", "select, option, [type='radio'], [type='checkbox']", b), 46706 this.settings.invalidHandler && a(this.currentForm).on("invalid-form.validate", this.settings.invalidHandler); 46707 }, 46708 form: function () { 46709 return this.checkForm(), a.extend(this.submitted, this.errorMap), (this.invalid = a.extend({}, this.errorMap)), this.valid() || a(this.currentForm).triggerHandler("invalid-form", [this]), this.showErrors(), this.valid(); 46710 }, 46711 checkForm: function () { 46712 this.prepareForm(); 46713 for (var a = 0, b = (this.currentElements = this.elements()); b[a]; a++) this.check(b[a]); 46714 return this.valid(); 46715 }, 46716 element: function (b) { 46717 var c, 46718 d, 46719 e = this.clean(b), 46720 f = this.validationTargetFor(e), 46721 g = this, 46722 h = !0; 46723 return ( 46724 void 0 === f 46725 ? delete this.invalid[e.name] 46726 : (this.prepareElement(f), 46727 (this.currentElements = a(f)), 46728 (d = this.groups[f.name]), 46729 d && 46730 a.each(this.groups, function (a, b) { 46731 b === d && a !== f.name && ((e = g.validationTargetFor(g.clean(g.findByName(a)))), e && e.name in g.invalid && (g.currentElements.push(e), (h = g.check(e) && h))); 46732 }), 46733 (c = this.check(f) !== !1), 46734 (h = h && c), 46735 c ? (this.invalid[f.name] = !1) : (this.invalid[f.name] = !0), 46736 this.numberOfInvalids() || (this.toHide = this.toHide.add(this.containers
46736)), 46737 this.showErrors(), 46738 a(b).attr("aria-invalid", !c)), 46739 h 46740 ); 46741 }, 46742 showErrors: function (b) { 46743 if (b) { 46744 var c = this; 46745 a.extend(this.errorMap, b), 46746 (this.errorList = a.map(this.errorMap, function (a, b) { 46747 return { message: a, element: c.findByName(b)[0] }; 46748 })), 46749 (this.successList = a.grep(this.successList, function (a) { 46750 return !(a.name in b); 46751 })); 46752 } 46753 this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors(); 46754 }, 46755 resetForm: function () { 46756 a.fn.resetForm && a(this.currentForm).resetForm(), (this.invalid = {}), (this.submitted = {}), this.prepareForm(), this.hideErrors(); 46757 var b = this.elements().removeData("previousValue").removeAttr("aria-invalid"); 46758 this.resetElements(b); 46759 }, 46760 resetElements: function (a) { 46761 var b; 46762 if (this.settings.unhighlight) for (b = 0; a[b]; b++) this.settings.unhighlight.call(this, a[b], this.settings.errorClass, ""), this.findByName(a[b].name).removeClass(this.settings.validClass); 46763 else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass); 46764 }, 46765 numberOfInvalids: function () { 46766 return this.objectLength(this.invalid); 46767 }, 46768 objectLength: function (a) { 46769 var b, 46770 c = 0; 46771 for (b in a) void 0 !== a[b] && null !== a[b] && a[b] !== !1 && c++; 46772 return c; 46773 }, 46774 hideErrors: function () { 46775 this.hideThese(this.toHide); 46776 }, 46777 hideThese: function (a) { 46778 a.not(this.containers).text(""), this.addWrapper(a).hide(); 46779 }, 46780 valid: function () { 46781 return 0 === this.size(); 46782 }, 46783 size: function () { 46784 return this.errorList.length; 46785 }, 46786 focusInvalid: function () { 46787 if (this.settings.focusInvalid) 46788 try { 46789 a(this.findLastActive() || (this.errorList.length && this.errorList[0].element) || []) 46790 .filter(":visible") 46791 .focus() 46792 .trigger("focusin"); 46793 } catch (b) {} 46794 }, 46795 findLastActive: function () { 46796 var b = this.lastActive; 46797 return ( 46798 b && 46799 1 === 46800 a.grep(this.errorList, function (a) { 46801 return a.element.name === b.name; 46802 }).length && 46803 b 46804 ); 46805 }, 46806 elements: function () { 46807 var b = this, 46808 c = {}; 46809 return a(this.currentForm) 46810 .find("input, select, textarea, [contenteditable]") 46811 .not(":submit, :reset, :image, :disabled") 46812 .not(this.settings.ignore) 46813 .filter(function () { 46814 var d = this.name || a(this).attr("name"); 46815 return ( 46816 !d && b.settings.debug && window.console && console.error("%o has no name assigned", this), 46817 this.hasAttribute("contenteditable") && ((this.form = a(this).closest("form")[0]), (this.name = d)), 46818 !(d in c || !b.objectLength(a(this).rules())) && ((c[d] = !0), !0) 46819 ); 46820 }); 46821 }, 46822 clean: function (b) { 46823 return a(b)[0]; 46824 }, 46825 errors: function () { 46826 var b = this.settings.errorClass.split(" ").join("."); 46827 return a(this.settings.errorElement + "." + b, this.errorContext); 46828 }, 46829 resetInternals: function () { 46830 (this.successList = []), (this.errorList = []), (this.errorMap = {}), (this.toShow = a([])), (this.toHide = a([])); 46831 }, 46832 reset: function () { 46833 this.resetInternals(), (this.currentElements = a([])); 46834 }, 46835 prepareForm: function () { 46836 this.reset(), (this.toHide = this.errors().add(this.containers
46836)); 46837 }, 46838 prepareElement: function (a) { 46839 this.reset(), (this.toHide = this.errorsFor(a)); 46840 }, 46841 elementValue: function (b) { 46842 var c, 46843 d, 46844 e = a(b), 46845 f = b.type; 46846 return "radio" === f || "checkbox" === f 46847 ? this.findByName(b.name).filter(":checked").val() 46848 : "number" === f && "undefined" != typeof b.validity 46849 ? b.validity.badInput 46850 ? "NaN" 46851 : e.val() 46852 : ((c = b.hasAttribute("contenteditable") ? e.text() : e.val()), 46853 "file" === f 46854 ? "C:\\fakepath\\" === c.substr(0, 12) 46855 ? c.substr(12) 46856 : ((d = c.lastIndexOf("/")), d >= 0 ? c.substr(d + 1) : ((d = c.lastIndexOf("\\")), d >= 0 ? c.substr(d + 1) : c)) 46857 : "string" == typeof c 46858 ? c.replace(/\r/g, "") 46859 : c); 46860 }, 46861 check: function (b) { 46862 b = this.validationTargetFor(this.clean(b)); 46863 var c, 46864 d, 46865 e, 46866 f, 46867 g = a(b).rules(), 46868 h = a.map(g, function (a, b) { 46869 return b; 46870 }).length, 46871 i = !1, 46872 j = this.elementValue(b); 46873 if (("function" == typeof g.normalizer ? (f = g.normalizer) : "function" == typeof this.settings.normalizer && (f = this.settings.normalizer), f)) { 46874 if (((j = f.call(b, j)), "string" != typeof j)) throw new TypeError("The normalizer should return a string value."); 46875 delete g.normalizer; 46876 } 46877 for (d in g) { 46878 e = { method: d, parameters: g[d] }; 46879 try { 46880 if (((c = a.validator.methods[d].call(this, j, b, e.parameters)), "dependency-mismatch" === c && 1 === h)) { 46881 i = !0; 46882 continue; 46883 } 46884 if (((i = !1), "pending" === c)) return void (this.toHide = this.toHide.not(this.errorsFor(b))); 46885 if (!c) return this.formatAndAdd(b, e), !1; 46886 } catch (k) { 46887 throw ( 46888 (this.settings.debug && window.console && console.log("Exception occurred when checking element " + b.id + ", check the '" + e.method + "' method.", k), 46889 k instanceof TypeError && (k.message += ". Exception occurred when checking element " + b.id + ", check the '" + e.method + "' method."), 46890 k) 46891 ); 46892 } 46893 } 46894 if (!i) return this.objectLength(g) && this.successList.push(b), !0; 46895 }, 46896 customDataMessage: function (b, c) { 46897 return a(b).data("msg" + c.charAt(0).toUpperCase() + c.substring(1).toLowerCase()) || a(b).data("msg"); 46898 }, 46899 customMessage: function (a, b) { 46900 var c = this.settings.messages[a]; 46901 return c && (c.constructor === String ? c : c[b]); 46902 }, 46903 findDefined: function () { 46904 for (var a = 0; a < arguments.length; a++) if (void 0 !== arguments[a]) return arguments[a]; 46905 }, 46906 defaultMessage: function (b, c) { 46907 "string" == typeof c && (c = { method: c }); 46908 var d = this.findDefined( 46909 this.customMessage(b.name, c.method), 46910 this.customDataMessage(b, c.method), 46911 (!this.settings.ignoreTitle && b.title) || void 0, 46912 a.validator.messages[c.method], 46913 "<strong>Warning: No message defined for " + b.name + "</strong>" 46914 ), 46915 e = /\$?\{(\d+)\}/g; 46916 return "function" == typeof d ? (d = d.call(this, c.parameters, b)) : e.test(d) && (d = a.validator.format(d.replace(e, "{$1}"), c.parameters)), d; 46917 }, 46918 formatAndAdd: function (a, b) {
46919 var c = this.defaultMessage(a, b); 46920 this.errorList.push({ message: c, element: a, method: b.method }), (this.errorMap[a.name] = c), (this.submitted[a.name] = c); 46921 }, 46922 addWrapper: function (a) { 46923 return this.settings.wrapper && (a = a.add(a.parent(this.settings.wrapper))), a; 46924 }, 46925 defaultShowErrors: function () { 46926 var a, b, c; 46927 for (a = 0; this.errorList[a]; a++) 46928 (c = this.errorList[a]), this.settings.highlight && this.settings.highlight.call(this, c.element, this.settings.errorClass, this.settings.validClass), this.showLabel(c.element, c.message); 46929 if ((this.errorList.length && (this.toShow = this.toShow.add(this.containers)), this.settings.success)) for (a = 0; this.successList[a]; a++) this.showLabel(this.successList[a]); 46930 if (this.settings.unhighlight) for (a = 0, b = this.validElements(); b[a]; a++) this.settings.unhighlight.call(this, b[a], this.settings.errorClass, this.settings.validClass); 46931 (this.toHide = this.toHide.not(this.toShow)), this.hideErrors(), this.addWrapper(this.toShow).show(); 46932 }, 46933 validElements: function () { 46934 return this.currentElements.not(this.invalidElements()); 46935 }, 46936 invalidElements: function () { 46937 return a(this.errorList).map(function () { 46938 return this.element; 46939 }); 46940 }, 46941 showLabel: function (b, c) { 46942 var d, 46943 e, 46944 f, 46945 g, 46946 h = this.errorsFor(b), 46947 i = this.idOrName(b), 46948 j = a(b).attr("aria-describedby"); 46949 h.length 46950 ? (h.removeClass(this.settings.validClass).addClass(this.settings.errorClass), h.html(c)) 46951 : ((h = a("<" + this.settings.errorElement + ">") 46952 .attr("id", i + "-error") 46953 .addClass(this.settings.errorClass) 46954 .html(c || "")), 46955 (d = h), 46956 this.settings.wrapper && 46957 (d = h 46958 .hide() 46959 .show() 46960 .wrap("<" + this.settings.wrapper + "/>") 46961 .parent()), 46962 this.labelContainer.length ? this.labelContainer.append(d) : this.settings.errorPlacement ? this.settings.errorPlacement.call(this, d, a(b)) : d.insertAfter(b), 46963 h.is("label") 46964 ? h.attr("for", i) 46965 : 0 === h.parents("label[for='" + this.escapeCssMeta(i) + "']").length && 46966 ((f = h.attr("id")), 46967 j ? j.match(new RegExp("\\b" + this.escapeCssMeta(f) + "\\b")) || (j += " " + f) : (j = f), 46968 a(b).attr("aria-describedby", j),
46969 (e = this.groups[b.name]), 46970 e && 46971 ((g = this), 46972 a.each(g.groups, function (b, c) { 46973 c === e && a("[name='" + g.escapeCssMeta(b) + "']", g.currentForm).attr("aria-describedby", h.attr("id")); 46974 })))), 46975 !c && this.settings.success && (h.text(""), "string" == typeof this.settings.success ? h.addClass(this.settings.success) : this.settings.success(h, b)), 46976 (this.toShow = this.toShow.add(h)); 46977 }, 46978 errorsFor: function (b) { 46979 var c = this.escapeCssMeta(this.idOrName(b)), 46980 d = a(b).attr("aria-describedby"), 46981 e = "label[for='" + c + "'], label[for='" + c + "'] *"; 46982 return d && (e = e + ", #" + this.escapeCssMeta(d).replace(/\s+/g, ", #")), this.errors().filter(e); 46983 }, 46984 escapeCssMeta: function (a) { 46985 return a.replace(/([\\!"#$%&'()*+,.\/:;<=>?@\[\]^`{|}~])/g, "\\$1"); 46986 }, 46987 idOrName: function (a) { 46988 return this.groups[a.name] || (this.checkable(a) ? a.name : a.id || a.name); 46989 }, 46990 validationTargetFor: function (b) { 46991 return this.checkable(b) && (b = this.findByName(b.name)), a(b).not(this.settings.ignore)[0]; 46992 }, 46993 checkable: function (a) { 46994 return /radio|checkbox/i.test(a.type); 46995 }, 46996 findByName: function (b) { 46997 return a(this.currentForm).find("[name='" + this.escapeCssMeta(b) + "']"); 46998 }, 46999 getLength: function (b, c) { 47000 switch (c.nodeName.toLowerCase()) { 47001 case "select": 47002 return a("option:selected", c).length; 47003 case "input": 47004 if (this.checkable(c)) return this.findByName(c.name).filter(":checked").length; 47005 } 47006 return b.length; 47007 }, 47008 depend: function (a, b) { 47009 return !this.dependTypes[typeof a] || this.dependTypes[typeof a](a, b); 47010 }, 47011 dependTypes: { 47012 boolean: function (a) { 47013 return a; 47014 }, 47015 string: function (b, c) { 47016 return !!a(b, c.form).length; 47017 }, 47018 function: function (a, b) { 47019 return a(b); 47020 }, 47021 }, 47022 optional: function (b) { 47023 var c = this.elementValue(b); 47024 return !a.validator.methods.required.call(this, c, b) && "dependency-mismatch"; 47025 }, 47026 startRequest: function (b) { 47027 this.pending[b.name] || (this.pendingRequest++, a(b).addClass(this.settings.pendingClass), (this.pending[b.name] = !0)); 47028 }, 47029 stopRequest: function (b, c) { 47030 this.pendingRequest--, 47031 this.pendingRequest < 0 && (this.pendingRequest = 0), 47032 delete this.pending[b.name], 47033 a(b).removeClass(this.settings.pendingClass), 47034 c && 0 === this.pendingRequest && this.formSubmitted && this.form() 47035 ? (a(this.currentForm).submit(), this.submitButton && a("input:hidden[name='" + this.submitButton.name + "']", this.currentForm).remove(), (this.formSubmitted = !1)) 47036 : !c && 0 === this.pendingRequest && this.formSubmitted && (a(this.currentForm).triggerHandler("invalid-form", [this]), (this.formSubmitted = !1)); 47037 }, 47038 previousValue: function (b, c) { 47039 return (c = ("string" == typeof c && c) || "remote"), a.data(b, "previousValue") || a.data(b, "previousValue", { old: null, valid: !0, message: this.defaultMessage(b, { method: c }) }); 47040 }, 47041 destroy: function () { 47042 this.resetForm(), a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("val
47042idate-equalTo-blur"); 47043 }, 47044 }, 47045 classRuleSettings: { required: { required: !0 }, email: { email: !0 }, url: { url: !0 }, date: { date: !0 }, dateISO: { dateISO: !0 }, number: { number: !0 }, digits: { digits: !0 }, creditcard: { creditcard: !0 } }, 47046 addClassRules: function (b, c) { 47047 b.constructor === String ? (this.classRuleSettings[b] = c) : a.extend(this.classRuleSettings, b); 47048 }, 47049 classRules: function (b) { 47050 var c = {}, 47051 d = a(b).attr("class"); 47052 return ( 47053 d && 47054 a.each(d.split(" "), function () { 47055 this in a.validator.classRuleSettings && a.extend(c, a.validator.classRuleSettings[this]); 47056 }), 47057 c 47058 ); 47059 }, 47060 normalizeAttributeRule: function (a, b, c, d) { 47061 /min|max|step/.test(c) && (null === b || /number|range|text/.test(b)) && ((d = Number(d)), isNaN(d) && (d = void 0)), d || 0 === d ? (a[c] = d) : b === c && "range" !== b && (a[c] = !0); 47062 }, 47063 attributeRules: function (b) { 47064 var c, 47065 d, 47066 e = {}, 47067 f = a(b), 47068 g = b.getAttribute("type"); 47069 for (c in a.validator.methods) "required" === c ? ((d = b.getAttribute(c)), "" === d && (d = !0), (d = !!d)) : (d = f.attr(c)), this.normalizeAttributeRule(e, g, c, d); 47070 return e.maxlength && /-1|2147483647|524288/.test(e.maxlength) && delete e.maxlength, e; 47071 }, 47072 dataRules: function (b) { 47073 var c, 47074 d, 47075 e = {}, 47076 f = a(b), 47077 g = b.getAttribute("type"); 47078 for (c in a.validator.methods) (d = f.data("rule" + c.charAt(0).toUpperCase() + c.substring(1).toLowerCase())), this.normalizeAttributeRule(e, g, c, d); 47079 return e; 47080 }, 47081 staticRules: function (b) { 47082 var c = {}, 47083 d = a.data(b.form, "validator"); 47084 return d.settings.rules && (c = a.validator.normalizeRule(d.settings.rules[b.name]) || {}), c; 47085 }, 47086 normalizeRules: function (b, c) { 47087 return ( 47088 a.each(b, function (d, e) { 47089 if (e === !1) return void delete b[d]; 47090 if (e.param || e.depends) { 47091 var f = !0; 47092 switch (typeof e.depends) { 47093 case "string": 47094 f = !!a(e.depends, c.form).length; 47095 break; 47096 case "function": 47097 f = e.depends.call(c, c); 47098 } 47099 f ? (b[d] = void 0 === e.param || e.param) : (a.data(c.form, "validator").resetElements(a(c)), delete b[d]); 47100 } 47101 }), 47102 a.each(b, function (d, e) { 47103 b[d] = a.isFunction(e) && "normalizer" !== d ? e(c) : e; 47104 }), 47105 a.each(["minlength", "maxlength"], function () { 47106 b[this] && (b[this] = Number(b[this])); 47107 }), 47108 a.each(["rangelength", "range"], function () { 47109 var c; 47110 b[this] && (a.isArray(b[this]) ? (b[this] = [Number(b[this][0]), Number(b[this][1])]) : "string" == typeof b[this] && ((c = b[this].replace(/[\[\]]/g, "").split(/[\s,]+/)), (b[this] = [Number(c[0]), Number(c[1])]))); 47111 }), 47112 a.validator.autoCreateRanges && 47113 (null != b.min && null != b.max && ((b.range = [b.min, b.max]), delete b.min, delete b.max), 47114 null != b.minlength && null != b.maxlength && ((b.rangelength = [b.minlength, b.maxlength]), delete b.minlength, delete b.maxlength)), 47115 b 47116 ); 47117 }, 47118 normalizeRule: function (b) { 47119 if ("string" == typeof b) { 47120 var c = {}; 47121 a.each(b.split(/\s/), function () { 47122 c[this] = !0; 47123 }), 47124 (b = c); 47125 } 47126 return b; 47127 }, 47128 addMethod: function (b, c, d) { 47129 (a.validator.methods[b] = c), (a.validator.messages[b] = void 0 !== d ? d : a.validator.messages[b]), c.length < 3 && a.validator.addClassRules(b, a.validator.normalizeRule(b)); 47130 }, 47131 methods: { 47132 required: function (b, c, d) { 47133 if (!this.depend(d, c)) return "dependency-mismatch"; 47134 if ("select" === c.nodeName.toLowerCase()) { 47135 var e = a(c).val(); 47136 return e && e.length > 0; 47137 } 47138 return this.checkable(c) ? this.getLength(b, c) > 0 : b.length > 0; 47139 }, 47140 email: function (a, b) { 47141 return this.optional(b) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a); 47142 }, 47143 url: function (a, b) { 47144 return ( 47145 this.optional(b) ||
47146 /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test( 47147 a 47148 ) 47149 ); 47150 }, 47151 date: function (a, b) { 47152 return this.optional(b) || !/Invalid|NaN/.test(new Date(a).toString()); 47153 }, 47154 dateISO: function (a, b) { 47155 return this.optional(b) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a); 47156 }, 47157 number: function (a, b) { 47158 return this.optional(b) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a); 47159 }, 47160 digits: function (a, b) { 47161 return this.optional(b) || /^\d+$/.test(a); 47162 }, 47163 minlength: function (b, c, d) { 47164 var e = a.isArray(b) ? b.length : this.getLength(b, c); 47165 return this.optional(c) || e >= d; 47166 }, 47167 maxlength: function (b, c, d) { 47168 var e = a.isArray(b) ? b.length : this.getLength(b, c); 47169 return this.optional(c) || e <= d; 47170 }, 47171 rangelength: function (b, c, d) { 47172 var e = a.isArray(b) ? b.length : this.getLength(b, c); 47173 return this.optional(c) || (e >= d[0] && e <= d[1]); 47174 }, 47175 min: function (a, b, c) { 47176 return this.optional(b) || a >= c; 47177 }, 47178 max: function (a, b, c) { 47179 return this.optional(b) || a <= c; 47180 }, 47181 range: function (a, b, c) { 47182 return this.optional(b) || (a >= c[0] && a <= c[1]); 47183 }, 47184 step: function (b, c, d) { 47185 var e, 47186 f = a(c).attr("type"), 47187 g = "Step attribute on input type " + f + " is not supported.", 47188 h = ["text", "number", "range"], 47189 i = new RegExp("\\b" + f + "\\b"), 47190 j = f && !i.test(h.join()), 47191 k = function (a) { 47192 var b = ("" + a).match(/(?:\.(\d+))?$/); 47193 return b && b[1] ? b[1].length : 0; 47194 }, 47195 l = function (a) { 47196 return Math.round(a * Math.pow(10, e)); 47197 }, 47198 m = !0; 47199 if (j) throw new Error(g); 47200 return (e = k(d)), (k(b) > e || l(b) % l(d) !== 0) && (m = !1), this.optional(c) || m; 47201 }, 47202 equalTo: function (b, c, d) { 47203 var e = a(d); 47204 return ( 47205 this.settings.onfocusout && 47206 e.not(".validate-equalTo-blur").length && 47207 e.addClass("validate-equalTo-blur").on("blur.validate-equalTo", function () { 47208 a(c).valid(); 47209 }), 47210 b === e.val() 47211 ); 47212 }, 47213 remote: function (b, c, d, e) { 47214 if (this.optional(c)) return "dependency-mismatch"; 47215 e = ("string" == typeof e && e) || "remote"; 47216 var f, 47217 g, 47218 h, 47219 i = this.previousValue(c, e); 47220 return ( 47221 this.settings.messages[c.name] || (this.settings.messages[c.name] = {}), 47222 (i.originalMessage = i.originalMessage || this.settings.messages[c.name][e]), 47223 (this.settings.messages[c.name][e] = i.message), 47224 (d = ("string" == typeof d && { url: d }) || d), 47225 (h = a.param(a.extend({ data: b }, d.data))), 47226 i.old === h
47227 ? i.valid 47228 : ((i.old = h), 47229 (f = this), 47230 this.startRequest(c), 47231 (g = {}), 47232 (g[c.name] = b), 47233 a.ajax( 47234 a.extend( 47235 !0, 47236 { 47237 mode: "abort", 47238 port: "validate" + c.name, 47239 dataType: "json", 47240 data: g, 47241 context: f.currentForm, 47242 success: function (a) { 47243 var d, 47244 g, 47245 h, 47246 j = a === !0 || "true" === a; 47247 (f.settings.messages[c.name][e] = i.originalMessage), 47248 j 47249 ? ((h = f.formSubmitted), f.resetInternals(), (f.toHide = f.errorsFor(c)), (f.formSubmitted = h), f.successList.push(c), (f.invalid[c.name] = !1), f.showErrors()) 47250 : ((d = {}), (g = a || f.defaultMessage(c, { method: e, parameters: b })), (d[c.name] = i.message = g), (f.invalid[c.name] = !0), f.showErrors(d)), 47251 (i.valid = j), 47252 f.stopRequest(c, j); 47253 }, 47254 }, 47255 d 47256 ) 47257 ), 47258 "pending") 47259 ); 47260 }, 47261 }, 47262 }); 47263 var b, 47264 c = {}; 47265 return ( 47266 a.ajaxPrefilter
47267 ? a.ajaxPrefilter(function (a, b, d) { 47268 var e = a.port; 47269 "abort" === a.mode && (c[e] && c[e].abort(), (c[e] = d)); 47270 }) 47271 : ((b = a.ajax), 47272 (a.ajax = function (d) { 47273 var e = ("mode" in d ? d : a.ajaxSettings).mode, 47274 f = ("port" in d ? d : a.ajaxSettings).port; 47275 return "abort" === e ? (c[f] && c[f].abort(), (c[f] = b.apply(this, arguments)), c[f]) : b.apply(this, arguments); 47276 })), 47277 a 47278 ); 47279}); 47280+(function ($) { 47281 "use strict"; 47282 var Modal = function (element, options) { 47283 this.options = options; 47284 this.$body = $(document.body); 47285 this.$element = $(element); 47286 this.$dialog = this.$element.find(".modal-dialog"); 47287 this.$backdrop = null; 47288 this.isShown = null; 47289 this.originalBodyPad = null; 47290 this.scrollbarWidth = 0; 47291 this.ignoreBackdropClick = false; 47292 if (this.options.remote) { 47293 this.$element.find(".modal-content").load( 47294 this.options.remote, 47295 $.proxy(function () { 47296 this.$element.trigger("loaded.bs.modal"); 47297 }, this) 47298 ); 47299 } 47300 }; 47301 Modal.VERSION = "3.3.7"; 47302 Modal.TRANSITION_DURATION = 300; 47303 Modal.BACKDROP_TRANSITION_DURATION = 150; 47304 Modal.DEFAULTS = { backdrop: true, keyboard: true, show: true }; 47305 Modal.prototype.toggle = function (_relatedTarget) { 47306 return this.isShown ? this.hide() : this.show(_relatedTarget); 47307 }; 47308 Modal.prototype.show = function (_relatedTarget) { 47309 var that = this; 47310 var e = $.Event("show.bs.modal", { relatedTarget: _relatedTarget }); 47311 this.$element.trigger(e); 47312 if (this.isShown || e.isDefaultPrevented()) return; 47313 this.isShown = true; 47314 this.checkScrollbar(); 47315 this.setScrollbar(); 47316 this.$body.addClass("modal-open"); 47317 this.escape(); 47318 this.resize(); 47319 this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', $.proxy(this.hide, this)); 47320 this.$dialog.on("mousedown.dismiss.bs.modal", function () { 47321 that.$element.one("mouseup.dismiss.bs.modal", function (e) { 47322 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true; 47323 }); 47324 }); 47325 this.backdrop(function () { 47326 var transition = $.support.transition && that.$element.hasClass("fade"); 47327 if (!that.$element.parent().length) { 47328 that.$element.appendTo(that.$body); 47329 } 47330 that.$element.show().scrollTop(0); 47331 that.adjustDialog(); 47332 if (transition) { 47333 that.$element[0].offsetWidth; 47334 } 47335 that.$element.addClass("in"); 47336 that.enforceFocus(); 47337 var e = $.Event("shown.bs.modal", { relatedTarget: _relatedTarget }); 47338 transition 47339 ? that.$dialog 47340 .one("bsTransitionEnd", function () { 47341 that.$element.trigger("focus").trigger(e); 47342 }) 47343 .emulateTransitionEnd(Modal.TRANSITION_DURATION) 47344 : that.$element.trigger("focus").trigger(e); 47345 }); 47346 }; 47347 Modal.prototype.hide = function (e) { 47348 if (e) e.preventDefault(); 47349 e = $.Event("hide.bs.modal"); 47350 this.$element.trigger(e); 47351 if (!this.isShown || e.isDefaultPrevented()) return; 47352 this.isShown = false; 47353 this.escape(); 47354 this.resize(); 47355 $(document).off("focusin.bs.modal"); 47356 this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"); 47357 this.$dialog.off("mousedown.dismiss.bs.modal"); 47358 $.support.transition && this.$element.hasClass("fade") ? this.$element.one("bsTransitionEnd", $.proxy(this.hideModal, this)).emulateTransitionEnd(Modal.TRANSITION_DURATION) : this.hideModal(); 47359 }; 47360 Modal.prototype.enforceFocus = function () { 47361 $(document) 47362 .off("focusin.bs.modal") 47363 .on( 47364 "focusin.bs.modal", 47365 $.proxy(function (e) { 47366 if (document !== e.target && this.$element[0] !== e.target && !this.$element.has(e.target).length) { 47367 this.$element.trigger("focus"); 47368 } 47369 }, this) 47370 ); 47371 }; 47372 Modal.prototype.escape = function () { 47373 if (this.isShown && this.options.keyboard) { 47374 this.$element.on( 47375 "keydown.dismiss.bs.modal", 47376 $.proxy(function (e) {
47377 e.which == 27 && this.hide(); 47378 }, this) 47379 ); 47380 } else if (!this.isShown) { 47381 this.$element.off("keydown.dismiss.bs.modal"); 47382 } 47383 }; 47384 Modal.prototype.resize = function () { 47385 if (this.isShown) { 47386 $(window).on("resize.bs.modal", $.proxy(this.handleUpdate, this)); 47387 } else { 47388 $(window).off("resize.bs.modal"); 47389 } 47390 }; 47391 Modal.prototype.hideModal = function () { 47392 var that = this; 47393 this.$element.hide(); 47394 this.backdrop(function () { 47395 that.$body.removeClass("modal-open"); 47396 that.resetAdjustments(); 47397 that.resetScrollbar(); 47398 that.$element.trigger("hidden.bs.modal"); 47399 }); 47400 }; 47401 Modal.prototype.removeBackdrop = function () { 47402 this.$backdrop && this.$backdrop.remove(); 47403 this.$backdrop = null; 47404 }; 47405 Modal.prototype.backdrop = function (callback) { 47406 var that = this; 47407 var animate = this.$element.hasClass("fade") ? "fade" : ""; 47408 if (this.isShown && this.options.backdrop) { 47409 var doAnimate = $.support.transition && animate; 47410 this.$backdrop = $(document.createElement("div")) 47411 .addClass("modal-backdrop " + animate) 47412 .appendTo(this.$body); 47413 this.$element.on( 47414 "click.dismiss.bs.modal", 47415 $.proxy(function (e) { 47416 if (this.ignoreBackdropClick) { 47417 this.ignoreBackdropClick = false; 47418 return; 47419 } 47420 if (e.target !== e.currentTarget) return; 47421 this.options.backdrop == "static" ? this.$element[0].focus() : this.hide(); 47422 }, this) 47423 ); 47424 if (doAnimate) this.$backdrop[0].offsetWidth; 47425 this.$backdrop.addClass("in"); 47426 if (!callback) return; 47427 doAnimate ? this.$backdrop.one("bsTransitionEnd", callback).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callback(); 47428 } else if (!this.isShown && this.$backdrop) { 47429 this.$backdrop.removeClass("in"); 47430 var callbackRemove = function () { 47431 that.removeBackdrop(); 47432 callback && callback(); 47433 }; 47434 $.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one("bsTransitionEnd", callbackRemove).emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : callbackRemove(); 47435 } else if (callback) { 47436 callback(); 47437 } 47438 }; 47439 Modal.prototype.handleUpdate = function () { 47440 this.adjustDialog(); 47441 }; 47442 Modal.prototype.adjustDialog = function () { 47443 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight; 47444 this.$element.css({ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : "", paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : "" }); 47445 }; 47446 Modal.prototype.resetAdjustments = function () { 47447 this.$element.css({ paddingLeft: "", paddingRight: "" }); 47448 }; 47449 Modal.prototype.checkScrollbar = function () { 47450 var fullWindowWidth = window.innerWidth; 47451 if (!fullWindowWidth) { 47452 var documentElementRect = document.documentElement.getBoundingClientRect(); 47453 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left); 47454 } 47455 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth; 47456 this.scrollbarWidth = this.measureScrollbar(); 47457 }; 47458 Modal.prototype.setScrollbar = function () { 47459 var bodyPad = parseInt(this.$body.css("padding-right") || 0, 10); 47460 this.originalBodyPad = document.body.style.paddingRight || ""; 47461 if (this.bodyIsOverflowing) this.$body.css("padding-right", bodyPad + this.scrollbarWidth); 47462 }; 47463 Modal.prototype.resetScrollbar = function () { 47464 this.$body.css("padding-right", this.originalBodyPad); 47465 }; 47466 Modal.prototype.measureScrollbar = function () { 47467 var scrollDiv = document.createElement("div");
47468 scrollDiv.className = "modal-scrollbar-measure"; 47469 this.$body.append(scrollDiv); 47470 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; 47471 this.$body[0].removeChild(scrollDiv); 47472 return scrollbarWidth; 47473 }; 47474 function Plugin(option, _relatedTarget) { 47475 return this.each(function () { 47476 var $this = $(this); 47477 var data = $this.data("bs.modal"); 47478 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == "object" && option); 47479 if (!data) $this.data("bs.modal", (data = new Modal(this, options))); 47480 if (typeof option == "string") data[option](_relatedTarget); 47481 else if (options.show) data.show(_relatedTarget); 47482 }); 47483 } 47484 var old = $.fn.modal; 47485 $.fn.modal = Plugin; 47486 $.fn.modal.Constructor = Modal; 47487 $.fn.modal.noConflict = function () { 47488 $.fn.modal = old; 47489 return this; 47490 }; 47491 $(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (e) { 47492 var $this = $(this); 47493 var href = $this.attr("href"); 47494 var $target = $($this.attr("data-target") || (href && href.replace(/.*(?=#[^\s]+$)/, ""))); 47495 var option = $target.data("bs.modal") ? "toggle" : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()); 47496 if ($this.is("a")) e.preventDefault(); 47497 $target.one("show.bs.modal", function (showEvent) { 47498 if (showEvent.isDefaultPrevented()) return; 47499 $target.one("hidden.bs.modal", function () { 47500 $this.is(":visible") && $this.trigger("focus"); 47501 }); 47502 }); 47503 Plugin.call($target, option, this); 47504 }); 47505})(jQuery); 47506//Moment js start here 47507!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var H;function f(){return H.apply(null,arguments)}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function F(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function L(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(c(e,t))return;return 1}function o(e){return void 0===e}function u(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function V(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function G(e,t){for(var n=[],s=e.length,i=0;i<s;++i)n.push(t(e[i],i));return n}function E(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,"toString")&&(e.toString=t.toString),c(t,"valueOf")&&(e.valueOf=t.valueOf),e}function l(e,t,n,s){return Wt(e,t,n,s,!0).utc()}function m(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function A(e){var t,n,s=e._d&&!isNaN(e._d.getTime());return s&&(t=m(e),n=j.call(t.parsedDateParts,function(e){return null!=e}),s=t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n),e._strict&&(s=s&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour)),null!=Object.isFrozen&&Object.isFrozen(e)?s:(e._isValid=s,e._isValid)}function I(e){var t=l(NaN);return null!=e?E(m(t),e):m(t).userInvalidated=!0,t}var j=Array.prototype.some||function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1},Z=f.momentProperties=[],z=!1;function q(e,t){var n,s,i,r=Z.length;if(o(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),o(t._i)||(e._i=t._i),o(t._f)||(e._f=t._f),o(t._l)||(e._l=t._l),o(t._strict)||(e._strict=t._strict),o(t._tzm)||(e._tzm=t._tzm),o(t._isUTC)||(e._isUTC=t._isUTC),o(t._offset)||(e._offset=t._offset),o(t._pf)||(e._pf=m(t)),o(t._locale)||(e._locale=t._locale),0<r)for(n=0;n<r;n++)o(i=t[s=Z[n]])||(e[s]=i);return e}function $(e){q(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===z&&(z=!0,f.updateOffset(this),z=!1)}function d(e){return e instanceof $||null!=e&&null!=e._isAMomentObject}function B(e){!1===f.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function e(r,a){var o=!0;return E(function(){if(null!=f.deprecationHandler&&f.deprecationHandler(null,r),o){for(var e,t,n=[],s=arguments.length,i=0;i<s;i++){if(e="","object"==typeof arguments[i]){for(t in e+="\n["+i+"] ",arguments[0])c(arguments[0],t)&&(e+=t+": "+arguments[0][t]+", ");e=e.slice(0,-2)}else e=arguments[i];n.push(e)}B(r+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),o=!1}return a.apply(this,arguments)},a)}var J={};function Q(e,t){null!=f.deprecationHandler&&f.deprecationHandler(e,t),J[e]||(B(t),J[e]=!0)}function h(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function X(e,t){var n,s=E({},e);for(n in t)c(t,n)&&(F(e[n])&&F(t[n])?(s[n]={},E(s[n],e[n]),E(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)c(e,n)&&!c(t,n)&&F(e[n])&&(s[n]=E({},s[n]));return s}function K(e){null!=e&&this.set(e)}f.suppressDeprecationWarnings=!1,f.deprecationHandler=null;var ee=Object.keys||function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};function r(e,t,n){var s=""+Math.abs(e);return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,t-s.length)).toString().substr(1)+s}var te=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}
vendor: 42,421 bytes, line 47507
47507|x|X|zz?|ZZ?|.)/g,ne=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,se={},ie={};function s(e,t,n,s){var i="string"==typeof s?function(){return this[s]()}:s;e&&(ie[e]=i),t&&(ie[t[0]]=function(){return r(i.apply(this,arguments),t[1],t[2])}),n&&(ie[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function re(e,t){return e.isValid()?(t=ae(t,e.localeData()),se[t]=se[t]||function(s){for(var e,i=s.match(te),t=0,r=i.length;t<r;t++)ie[i[t]]?i[t]=ie[i[t]]:i[t]=(e=i[t]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var t="",n=0;n<r;n++)t+=h(i[n])?i[n].call(e,s):i[n];return t}}(t),se[t](e)):e.localeData().invalidDate()}function ae(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(ne.lastIndex=0;0<=n&&ne.test(e);)e=e.replace(ne,s),ne.lastIndex=0,--n;return e}var oe={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function _(e){return"string"==typeof e?oe[e]||oe[e.toLowerCase()]:void 0}function ue(e){var t,n,s={};for(n in e)c(e,n)&&(t=_(n))&&(s[t]=e[n]);return s}var le={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};var de=/\d/,t=/\d\d/,he=/\d{3}/,ce=/\d{4}/,fe=/[+-]?\d{6}/,n=/\d\d?/,me=/\d\d\d\d?/,_e=/\d\d\d\d\d\d?/,ye=/\d{1,3}/,ge=/\d{1,4}/,we=/[+-]?\d{1,6}/,pe=/\d+/,ke=/[+-]?\d+/,Me=/Z|[+-]\d\d:?\d\d/gi,ve=/Z|[+-]\d\d(?::?\d\d)?/gi,i=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,y=/^[1-9]\d?/,g=/^([1-9]\d|\d)/;function w(e,n,s){Ye[e]=h(n)?n:function(e,t){return e&&s?s:n}}function De(e,t){return c(Ye,e)?Ye[e](t._strict,t._locale):new RegExp(p(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function p(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function k(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function M(e){var e=+e,t=0;return t=0!=e&&isFinite(e)?k(e):t}var Ye={},Se={};function v(e,n){var t,s,i=n;for("string"==typeof e&&(e=[e]),u(n)&&(i=function(e,t){t[n]=M(e)}),s=e.length,t=0;t<s;t++)Se[e[t]]=i}function Oe(e,i){v(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}function be(e){return e%4==0&&e%100!=0||e%400==0}var D=0,Y=1,S=2,O=3,b=4,T=5,Te=6,xe=7,Ne=8;function We(e){return be(e)?366:365}s("Y",0,0,function(){var e=this.year();return e<=9999?r(e,4):"+"+e}),s(0,["YY",2],0,function(){return this.year()%100}),s(0,["YYYY",4],0,"year"),s(0,["YYYYY",5],0,"year"),s(0,["YYYYYY",6,!0],0,"year"),w("Y",ke),w("YY",n,t),w("YYYY",ge,ce),w("YYYYY",we,fe),w("YYYYYY",we,fe),v(["YYYYY","YYYYYY"],D),v("YYYY",function(e,t){t[D]=2===e.length?f.parseTwoDigitYear(e):M(e)}),v("YY",function(e,t){t[D]=f.parseTwoDigitYear(e)}),v("Y",function(e,t){t[D]=parseInt(e,10)}),f.parseTwoDigitYear=function(e){return M(e)+(68<M(e)?1900:2e3)};var x,Pe=Re("FullYear",!0);function Re(t,n){return function(e){return null!=e?(Ue(this,t,e),f.updateOffset(this,n),this):Ce(this,t)}}function Ce(e,t){if(!e.isValid())return NaN;var n=e._d,s=e._isUTC;switch(t){case"Milliseconds":return s?n.getUTCMilliseconds():n.getMilliseconds();case"Seconds":return s?n.getUTCSeconds():n.getSeconds();case"Minutes":return s?n.getUTCMinutes():n.getMinutes();case"Hours":return s?n.getUTCHours():n.getHours();case"Date":return s?n.getUTCDate():n.getDate();case"Day":return s?n.getUTCDay():n.getDay();case"Month":return s?n.getUTCMonth():n.getMonth();case"FullYear":return s?n.getUTCFullYear():n.getFullYear();default:return NaN}}function Ue(e,t,n){var s,i,r;if(e.isValid()&&!isNaN(n)){switch(s=e._d,i=e._isUTC,t){case"Milliseconds":return i?s.setUTCMilliseconds(n):s.setMilliseconds(n);case"Seconds":return i?s.setUTCSeconds(n):s.setSeconds(n);case"Minutes":return i?s.setUTCMinutes(n):s.setMinutes(n);case"Hours":return i?s.setUTCHours(n):s.setHours(n);case"Date":return i?s.setUTCDate(n):s.setDate(n);case"FullYear":break;default:return}t=n,r=e.month(),e=29!==(e=e.date())||1!==r||be(t)?e:28,i?s.setUTCFullYear(t,r,e):s.setFullYear(t,r,e)}}function He(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=(t%(n=12)+n)%n;return e+=(t-n)/12,1==n?be(e)?29:28:31-n%7%2}x=Array.prototype.indexOf||function(e){for(var t=0;t<this.length;++t)if(this[t]===e)return t;return-1},s("M",["MM",2],"Mo",function(){return this.month()+1}),s("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),s("MMMM",0,0,function(e){return this.localeData().months(this,e)}),w("M",n,y),w("MM",n,t),w("MMM",function(e,t){return t.monthsShortRegex(e)}),w("MMMM",function(e,t){return t.monthsRegex(e)}),v(["M","MM"],function(e,t){t[Y]=M(e)-1}),v(["MMM","MMMM"],function(e,t,n,s){s=n._locale.monthsParse(e,s,n._strict);null!=s?t[Y]=s:m(n).invalidMonth=e});var Fe="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Le="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ve=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ge=i,Ee=i;function Ae(e,t){if(e.isValid()){if("string"==typeof t)if(/^\d+$/.test(t))t=M(t);else if(!u(t=e.localeData().monthsParse(t)))return;var n=(n=e.date())<29?n:Math.min(n,He(e.year(),t));e._isUTC?e._d.setUTCMonth(t,n):e._d.setMonth(t,n)}}function Ie(e){return null!=e?(Ae(this,e),f.updateOffset(this,!0),this):Ce(this,"Month")}function je(){function e(e,t){return t.length-e.length}for(var t,n,s=[],i=[],r=[],a=0;a<12;a++)n=l([2e3,a]),t=p(this.monthsShort(n,"")),n=p(this.months(n,"")),s.push(t),i.push(n),r.push(n),r.push(t);s.sort(e),i.sort(e),r.sort(e),this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Ze(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}function ze(e){var t;return e<100&&0<=e?((t=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,t)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function qe(e,t,n){n=7+t-n;return n-(7+ze(e,0,n).getUTCDay()-t)%7-1}function $e(e,t,n,s,i){var r,t=1+7*(t-1)+(7+n-s)%7+qe(e,s,i),n=t<=0?We(r=e-1)+t:t>We(e)?(r=e+1,t-We(e)):(r=e,t);return{year:r,dayOfYear:n}}function Be(e,t,n){var s,i,r=qe(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+N(i=e.year()-1,t,n):r>N(e.year(),t,n)?(s=r-N(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function N(e,t,n){var s=qe(e,t,n),t=qe(e+1,t,n);return(We(e)-s+t)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),w("w",n,y),w("ww",n,t),w("W",n,y),w("WW",n,t),Oe(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=M(e)});function Je(e,t){return e.slice(t,7).concat(e.slice(0,t))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),w("d",n),w("e",n),w("E",n),w("dd",function(e,t){return t.weekdaysMinRegex(e)}),w("ddd",function(e,t){return t.weekdaysShortRegex(e)}),w("dddd",function(e,t){return t.weekdaysRegex(e)}),Oe(["dd","ddd","dddd"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:m(n).invalidWeekday=e}),Oe(["d","e","E"],function(e,t,n,s){t[s]=M(e)});var Qe="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Xe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ke="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),et=i,tt=i,nt=i;function st(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=p(this.weekdaysMin(s,"")),n=p(this.weekdaysShort(s,"")),s=p(this.weekdays(s,"")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function it(){return this.hours()%12||12}function rt(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function at(e,t){return t._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,it),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+it.apply(this)+r(this.minutes(),2)}),s("hmmss",0,0,function(){return""+it.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+r(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),rt("a",!0),rt("A",!1),w("a",at),w("A",at),w("H",n,g),w("h",n,y),w("k",n,y),w("HH",n,t),w("hh",n,t),w("kk",n,t),w("hmm",me),w("hmmss",_e),w("Hmm",me),w("Hmmss",_e),v(["H","HH"],O),v(["k","kk"],function(e,t,n){e=M(e);t[O]=24===e?0:e}),v(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),v(["h","hh"],function(e,t,n){t[O]=M(e),m(n).bigHour=!0}),v("hmm",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s)),m(n).bigHour=!0}),v("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i)),m(n).bigHour=!0}),v("Hmm",function(e,t,n){var s=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s))}),v("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[O]=M(e.substr(0,s)),t[b]=M(e.substr(s,2)),t[T]=M(e.substr(i))});i=Re("Hours",!0);var ot,ut={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Fe,monthsShort:Le,week:{dow:0,doy:6},weekdays:Qe,weekdaysMin:Ke,weekdaysShort:Xe,meridiemParse:/[ap]\.?m?\.?/i},W={},lt={};function dt(e){return e&&e.toLowerCase().replace("_","-")}function ht(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=dt(e[r]).split("-")).length,n=(n=dt(e[r+1]))?n.split("-"):null;0<t;){if(s=ct(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s<n;s+=1)if(e[s]!==t[s])return s;return n}(i,n)>=t-1)break;t--}r++}return ot}function ct(t){var e,n;if(void 0===W[t]&&"undefined"!=typeof module&&module&&module.exports&&((n=t)&&n.match("^[^/\\\\]*$")))try{e=ot._abbr,require("./locale/"+t),ft(e)}catch(e){W[t]=null}return W[t]}function ft(e,t){return e&&((t=o(t)?P(e):mt(e,t))?ot=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ot._abbr}function mt(e,t){if(null===t)return delete W[e],null;var n,s=ut;if(t.abbr=e,null!=W[e])Q("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=W[e]._config;else if(null!=t.parentLocale)if(null!=W[t.parentLocale])s=W[t.parentLocale]._config;else{if(null==(n=ct(t.parentLocale)))return lt[t.parentLocale]||(lt[t.parentLocale]=[]),lt[t.parentLocale].push({name:e,config:t}),null;s=n._config}return W[e]=new K(X(s,t)),lt[e]&<[e].forEach(function(e){mt(e.name,e.config)}),ft(e),W[e]}function P(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return ot;if(!a(e)){if(t=ct(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===m(e).overflow&&(t=t[Y]<0||11<t[Y]?Y:t[S]<1||t[S]>He(t[D],t[Y])?S:t[O]<0||24<t[O]||24===t[O]&&(0!==t[b]||0!==t[T]||0!==t[Te])?O:t[b]<0||59<t[b]?b:t[T]<0||59<t[T]?T:t[Te]<0||999<t[Te]?Te:-1,m(e)._overflowDayOfYear&&(t<D||S<t)&&(t=S),m(e)._overflowWeeks&&-1===t&&(t=xe),m(e)._overflowWeekday&&-1===t&&(t=Ne),m(e).overflow=t),e}var yt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,gt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wt=/Z|[+-]\d\d(?::?\d\d)?/,pt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],kt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Mt=/^\/?Date\((-?\d+)/i,vt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Dt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Yt(e){var t,n,s,i,r,a,o=e._i,u=yt.exec(o)||gt.exec(o),o=pt.length,l=kt.length;if(u){for(m(e).iso=!0,t=0,n=o;t<n;t++)if(pt[t][1].exec(u[1])){i=pt[t][0],s=!1!==pt[t][2];break}if(null==i)e._isValid=!1;else{if(u[3]){for(t=0,n=l;t<n;t++)if(kt[t][1].exec(u[3])){r=(u[2]||" ")+kt[t][0];break}if(null==r)return void(e._isValid=!1)}if(s||null==r){if(u[4]){if(!wt.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),xt(e)}else e._isValid=!1}}else e._isValid=!1}function St(e,t,n,s,i,r){e=[function(e){e=parseInt(e,10);{if(e<=49)return 2e3+e;if(e<=999)return 1900+e}return e}(e),Le.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&e.push(parseInt(r,10)),e}function Ot(e){var t,n,s,i,r=vt.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));r?(t=St(r[4],r[3],r[2],r[5],r[6],r[7]),n=r[1],s=t,i=e,n&&Xe.indexOf(n)!==new Date(s[0],s[1],s[2]).getDay()?(m(i).weekdayMismatch=!0,i._isValid=!1):(e._a=t,e._tzm=(n=r[8],s=r[9],i=r[10],n?Dt[n]:s?0:60*(((n=parseInt(i,10))-(s=n%100))/100)+s),e._d=ze.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),m(e).rfc2822=!0)):e._isValid=!1}function bt(e,t,n){return null!=e?e:null!=t?t:n}function Tt(e){var t,n,s,i,r,a,o,u,l,d,h,c=[];if(!e._d){for(s=e,i=new Date(f.now()),n=s._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()],e._w&&null==e._a[S]&&null==e._a[Y]&&(null!=(i=(s=e)._w).GG||null!=i.W||null!=i.E?(u=1,l=4,r=bt(i.GG,s._a[D],Be(R(),1,4).year),a=bt(i.W,1),((o=bt(i.E,1))<1||7<o)&&(d=!0)):(u=s._locale._week.dow,l=s._locale._week.doy,h=Be(R(),u,l),r=bt(i.gg,s._a[D],h.year),a=bt(i.w,h.week),null!=i.d?((o=i.d)<0||6<o)&&(d=!0):null!=i.e?(o=i.e+u,(i.e<0||6<i.e)&&(d=!0)):o=u),a<1||a>N(r,u,l)?m(s)._overflowWeeks=!0:null!=d?m(s)._overflowWeekday=!0:(h=$e(r,a,o,u,l),s._a[D]=h.year,s._dayOfYear=h.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[D],n[D]),(e._dayOfYear>We(i)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),d=ze(i,0,e._dayOfYear),e._a[Y]=d.getUTCMonth(),e._a[S]=d.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[O]&&0===e._a[b]&&0===e._a[T]&&0===e._a[Te]&&(e._nextDay=!0,e._a[O]=0),e._d=(e._useUTC?ze:Ze).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[O]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(m(e).weekdayMismatch=!0)}}function xt(e){if(e._f===f.ISO_8601)Yt(e);else if(e._f===f.RFC_2822)Ot(e);else{e._a=[],m(e).empty=!0;for(var t,n,s,i,r,a=""+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],d=l.length,h=0;h<d;h++)n=l[h],(t=(a.match(De(n,e))||[])[0])&&(0<(s=a.substr(0,a.indexOf(t))).length&&m(e).unusedInput.push(s),a=a.slice(a.indexOf(t)+t.length),u+=t.length),ie[n]?(t?m(e).empty=!1:m(e).unusedTokens.push(n),s=n,r=e,null!=(i=t)&&c(Se,s)&&Se[s](i,r._a,r,s)):e._strict&&!t&&m(e).unusedTokens.push(n);m(e).charsLeftOver=o-u,0<a.length&&m(e).unusedInput.push(a),e._a[O]<=12&&!0===m(e).bigHour&&0<e._a[O]&&(m(e).bigHour=void 0),m(e).parsedDateParts=e._a.slice(0),m(e).meridiem=e._meridiem,e._a[O]=function(e,t,n){if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((e=e.isPM(n))&&t<12&&(t+=12),t=e||12!==t?t:0):t}(e._locale,e._a[O],e._meridiem),null!==(o=m(e).era)&&(e._a[D]=e._locale.erasConvertYear(o,e._a[D])),Tt(e),_t(e)}}function Nt(e){var t,n,s,i=e._i,r=e._f;if(e._locale=e._locale||P(e._l),null===i||void 0===r&&""===i)return I({nullInput:!0});if("string"==typeof i&&(e._i=i=e._locale.preparse(i)),d(i))return new $(_t(i));if(V(i))e._d=i;else if(a(r))!function(e){var t,n,s,i,r,a,o=!1,u=e._f.length;if(0===u)return m(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<u;i++)r=0,a=!1,t=q({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],xt(t),A(t)&&(a=!0),r=(r+=m(t).charsLeftOver)+10*m(t).unusedTokens.length,m(t).score=r,o?r<s&&(s=r,n=t):(null==s||r<s||a)&&(s=r,n=t,a&&(o=!0));E(e,n||t)}(e);else if(r)xt(e);else if(o(r=(i=e)._i))i._d=new Date(f.now());else V(r)?i._d=new Date(r.valueOf()):"string"==typeof r?(n=i,null!==(t=Mt.exec(n._i))?n._d=new Date(+t[1]):(Yt(n),!1===n._isValid&&(delete n._isValid,Ot(n),!1===n._isValid&&(delete n._isValid,n._strict?n._isValid=!1:f.createFromInputFallback(n))))):a(r)?(i._a=G(r.slice(0),function(e){return parseInt(e,10)}),Tt(i)):F(r)?(t=i)._d||(s=void 0===(n=ue(t._i)).day?n.date:n.day,t._a=G([n.year,n.month,s,n.hour,n.minute,n.second,n.millisecond],function(e){return e&&parseInt(e,10)}),Tt(t)):u(r)?i._d=new Date(r):f.createFromInputFallback(i);return A(e)||(e._d=null),e}function Wt(e,t,n,s,i){var r={};return!0!==t&&!1!==t||(s=t,t=void 0),!0!==n&&!1!==n||(s=n,n=void 0),(F(e)&&L(e)||a(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=i,r._l=n,r._i=e,r._f=t,r._strict=s,(i=new $(_t(Nt(i=r))))._nextDay&&(i.add(1,"d"),i._nextDay=void 0),i}function R(e,t,n,s){return Wt(e,t,n,s,!1)}f.createFromInputFallback=e("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),f.ISO_8601=function(){},f.RFC_2822=function(){};me=e("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=R.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:I()}),_e=e("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=R.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:I()});function Pt(e,t){var n,s;if(!(t=1===t.length&&a(t[0])?t[0]:t).length)return R();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Rt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ct(e){var e=ue(e),t=e.year||0,n=e.quarter||0,s=e.month||0,i=e.week||e.isoWeek||0,r=e.day||0,a=e.hour||0,o=e.minute||0,u=e.second||0,l=e.millisecond||0;this._isValid=function(e){var t,n,s=!1,i=Rt.length;for(t in e)if(c(e,t)&&(-1===x.call(Rt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<i;++n)if(e[Rt[n]]){if(s)return!1;parseFloat(e[Rt[n]])!==M(e[Rt[n]])&&(s=!0)}return!0}(e),this._milliseconds=+l+1e3*u+6e4*o+1e3*a*60*60,this._days=+r+7*i,this._months=+s+3*n+12*t,this._data={},this._locale=P(),this._bubble()}function Ut(e){return e instanceof Ct}function Ht(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){s(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+r(~~(e/60),2)+n+r(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),w("Z",ve),w("ZZ",ve),v(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Vt(ve,e)});var Lt=/([\+\-]|\d\d)/gi;function Vt(e,t){var t=(t||"").match(e);return null===t?null:0===(t=60*(e=((t[t.length-1]||[])+"").match(Lt)||["-",0,0])[1]+M(e[2]))?0:"+"===e[0]?t:-t}function Gt(e,t){var n;return t._isUTC?(t=t.clone(),n=(d(e)||V(e)?e:R(e)).valueOf()-t.valueOf(),t._d.setTime(t._d.valueOf()+n),f.updateOffset(t,!1),t):R(e).local()}function Et(e){return-Math.round(e._d.getTimezoneOffset())}function At(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}f.updateOffset=function(){};var It=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,jt=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function C(e,t){var n,s=e,i=null;return Ut(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:u(e)||!isNaN(+e)?(s={},t?s[t]=+e:s.milliseconds=+e):(i=It.exec(e))?(n="-"===i[1]?-1:1,s={y:0,d:M(i[S])*n,h:M(i[O])*n,m:M(i[b])*n,s:M(i[T])*n,ms:M(Ht(1e3*i[Te]))*n}):(i=jt.exec(e))?(n="-"===i[1]?-1:1,s={y:Zt(i[2],n),M:Zt(i[3],n),w:Zt(i[4],n),d:Zt(i[5],n),h:Zt(i[6],n),m:Zt(i[7],n),s:Zt(i[8],n)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(t=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Gt(t,e),e.isBefore(t)?n=zt(e,t):((n=zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(R(s.from),R(s.to)),(s={}).ms=t.milliseconds,s.M=t.months),i=new Ct(s),Ut(e)&&c(e,"_locale")&&(i._locale=e._locale),Ut(e)&&c(e,"_isValid")&&(i._isValid=e._isValid),i}function Zt(e,t){e=e&&parseFloat(e.replace(",","."));return(isNaN(e)?0:e)*t}function zt(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function qt(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(Q(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),$t(this,C(e,t),s),this}}function $t(e,t,n,s){var i=t._milliseconds,r=Ht(t._days),t=Ht(t._months);e.isValid()&&(s=null==s||s,t&&Ae(e,Ce(e,"Month")+t*n),r&&Ue(e,"Date",Ce(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&f.updateOffset(e,r||t))}C.fn=Ct.prototype,C.invalid=function(){return C(NaN)};Fe=qt(1,"add"),Qe=qt(-1,"subtract");function Bt(e){return"string"==typeof e||e instanceof String}function Jt(e){return d(e)||V(e)||Bt(e)||u(e)||function(t){var e=a(t),n=!1;e&&(n=0===t.filter(function(e){return!u(e)&&Bt(t)}).length);return e&&n}(e)||function(e){var t,n,s=F(e)&&!L(e),i=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],a=r.length;for(t=0;t<a;t+=1)n=r[t],i=i||c(e,n);return s&&i}(e)||null==e}function Qt(e,t){if(e.date()<t.date())return-Qt(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,"months"),t=t-s<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(1+n,"months")-s);return-(n+t)||0}function Xt(e){return void 0===e?this._locale._abbr:(null!=(e=P(e))&&(this._locale=e),this)}f.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",f.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";Ke=e("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}var en=126227808e5;function tn(e,t){return(e%t+t)%t}function nn(e,t,n){return e<100&&0<=e?new Date(e+400,t,n)-en:new Date(e,t,n).valueOf()}function sn(e,t,n){return e<100&&0<=e?Date.UTC(e+400,t,n)-en:Date.UTC(e,t,n)}function rn(e,t){return t.erasAbbrRegex(e)}function an(){for(var e,t,n,s=[],i=[],r=[],a=[],o=this.eras(),u=0,l=o.length;u<l;++u)e=p(o[u].name),t=p(o[u].abbr),n=p(o[u].narrow),i.push(e),s.push(t),r.push(n),a.push(e),a.push(t),a.push(n);this._erasRegex=new RegExp("^("+a.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+i.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+r.join("|")+")","i")}function on(e,t){s(0,[e,e.length],0,t)}function un(e,t,n,s,i){var r;return null==e?Be(this,s,i).year:(r=N(e,s,i),function(e,t,n,s,i){e=$e(e,t,n,s,i),t=ze(e.year,0,e.dayOfYear);return this.year(t.getUTCFullYear()),this.month(t.getUTCMonth()),this.date(t.getUTCDate()),this}.call(this,e,t=r<t?r:t,n,s,i))}s("N",0,0,"eraAbbr"),s("NN",0,0,"eraAbbr"),s("NNN",0,0,"eraAbbr"),s("NNNN",0,0,"eraName"),s("NNNNN",0,0,"eraNarrow"),s("y",["y",1],"yo","eraYear"),s("y",["yy",2],0,"eraYear"),s("y",["yyy",3],0,"eraYear"),s("y",["yyyy",4],0,"eraYear"),w("N",rn),w("NN",rn),w("NNN",rn),w("NNNN",function(e,t){return t.erasNameRegex(e)}),w("NNNNN",function(e,t){return t.erasNarrowRegex(e)}),v(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,s){s=n._locale.erasParse(e,s,n._strict);s?m(n).era=s:m(n).invalidEra=e}),w("y",pe),w("yy",pe),w("yyy",pe),w("yyyy",pe),w("yo",function(e,t){return t._eraYearOrdinalRegex||pe}),v(["y","yy","yyy","yyyy"],D),v(["yo"],function(e,t,n,s){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[D]=n._locale.eraYearOrdinalParse(e,i):t[D]=parseInt(e,10)}),s(0,["gg",2],0,function(){return this.weekYear()%100}),s(0,["GG",2],0,function(){return this.isoWeekYear()%100}),on("gggg","weekYear"),on("ggggg","weekYear"),on("GGGG","isoWeekYear"),on("GGGGG","isoWeekYear"),w("G",ke),w("g",ke),w("GG",n,t),w("gg",n,t),w("GGGG",ge,ce),w("gggg",ge,ce),w("GGGGG",we,fe),w("ggggg",we,fe),Oe(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=M(e)}),Oe(["gg","GG"],function(e,t,n,s){t[s]=f.parseTwoDigitYear(e)}),s("Q",0,"Qo","quarter"),w("Q",de),v("Q",function(e,t){t[Y]=3*(M(e)-1)}),s("D",["DD",2],"Do","date"),w("D",n,y),w("DD",n,t),w("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),v(["D","DD"],S),v("Do",function(e,t){t[S]=M(e.match(n)[0])});ge=Re("Date",!0);s("DDD",["DDDD",3],"DDDo","dayOfYear"),w("DDD",ye),w("DDDD",he),v(["DDD","DDDD"],function(e,t,n){n._dayOfYear=M(e)}),s("m",["mm",2],0,"minute"),w("m",n,g),w("mm",n,t),v(["m","mm"],b);var ln,ce=Re("Minutes",!1),we=(s("s",["ss",2],0,"second"),w("s",n,g),w("ss",n,t),v(["s","ss"],T),Re("Seconds",!1));for(s("S",0,0,function(){return~~(this.millisecond()/100)}),s(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),s(0,["SSS",3],0,"millisecond"),s(0,["SSSS",4],0,function(){return 10*this.millisecond()}),s(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),s(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),s(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),s(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),s(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),w("S",ye,de),w("SS",ye,t),w("SSS",ye,he),ln="SSSS";ln.length<=9;ln+="S")w(ln,pe);function dn(e,t){t[Te]=M(1e3*("0."+e))}for(ln="S";ln.length<=9;ln+="S")v(ln,dn);fe=Re("Milliseconds",!1),s("z",0,0,"zoneAbbr"),s("zz",0,0,"zoneName");y=$.prototype;function hn(e){return e}y.add=Fe,y.calendar=function(e,t){1===arguments.length&&(arguments[0]?Jt(arguments[0])?(e=arguments[0],t=void 0):function(e){for(var t=F(e)&&!L(e),n=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],i=0;i<s.length;i+=1)n=n||c(e,s[i]);return t&&n}(arguments[0])&&(t=arguments[0],e=void 0):t=e=void 0);var e=e||R(),n=Gt(e,this).startOf("day"),n=f.calendarFormat(this,n)||"sameElse",t=t&&(h(t[n])?t[n].call(this,e):t[n]);return this.format(t||this.localeData().calendar(n,this,R(e)))},y.clone=function(){return new $(this)},y.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Gt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=_(t)){case"year":r=Qt(this,s)/12;break;case"month":r=Qt(this,s);break;case"quarter":r=Qt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:k(r)},y.endOf=function(e){var t,n;if(void 0===(e=_(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?sn:nn,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-tn(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-tn(t,1e3)-1}return this._d.setTime(t),f.updateOffset(this,!0),this},y.format=function(e){return e=e||(this.isUtc()?f.defaultFormatUtc:f.defaultFormat),e=re(this,e),this.localeData().postformat(e)},y.from=function(e,t){return this.isValid()&&(d(e)&&e.isValid()||R(e).isValid())?C({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},y.fromNow=function(e){return this.from(R(),e)},y.to=function(e,t){return this.isValid()&&(d(e)&&e.isValid()||R(e).isValid())?C({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},y.toNow=function(e){return this.to(R(),e)},y.get=function(e){return h(this[e=_(e)])?this[e]():this},y.invalidAt=function(){return m(this).overflow},y.isAfter=function(e,t){return e=d(e)?e:R(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(t=_(t)||"millisecond")?this.valueOf()>e.valueOf():e.valueOf()<this.clone().startOf(t).valueOf())},y.isBefore=function(e,t){return e=d(e)?e:R(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(t=_(t)||"millisecond")?this.valueOf()<e.valueOf():this.clone().endOf(t).valueOf()<e.valueOf())},y.isBetween=function(e,t,n,s){return e=d(e)?e:R(e),t=d(t)?t:R(t),!!(this.isValid()&&e.isValid()&&t.isValid())&&(("("===(s=s||"()")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===s[1]?this.isBefore(t,n):!this.isAfter(t,n)))},y.isSame=function(e,t){var e=d(e)?e:R(e);return!(!this.isValid()||!e.isValid())&&("millisecond"===(t=_(t)||"millisecond")?this.valueOf()===e.valueOf():(e=e.valueOf(),this.clone().startOf(t).valueOf()<=e&&e<=this.clone().endOf(t).valueOf()))},y.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},y.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},y.isValid=function(){return A(this)},y.lang=Ke,y.locale=Xt,y.localeData=Kt,y.max=_e,y.min=me,y.parsingFlags=function(){return E({},m(this))},y.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t,n=[];for(t in e)c(e,t)&&n.push({unit:t,priority:le[t]});return n.sort(function(e,t){return e.priority-t.priority}),n}(e=ue(e)),s=n.length,i=0;i<s;i++)this[n[i].unit](e[n[i].unit]);else if(h(this[e=_(e)]))return this[e](t);return this},y.startOf=function(e){var t,n;if(void 0===(e=_(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?sn:nn,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=tn(t,6e4);break;case"second":t=this._d.valueOf(),t-=tn(t,1e3)}return this._d.setTime(t),f.updateOffset(this,!0),this},y.subtract=Qe,y.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},y.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},y.toDate=function(){return new Date(this.valueOf())},y.toISOString=function(e){if(!this.isValid())return null;var t=(e=!0!==e)?this.clone().utc():this;return t.year()<0||9999<t.year()?re(t,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):h(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",re(t,"Z")):re(t,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},y.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t="moment",n="";return this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",n="Z"),t="["+t+'("]',e=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(t+e+"-MM-DD[T]HH:mm:ss.SSS"+(n+'[")]'))},"undefined"!=typeof Symbol&&null!=Symbol.for&&(y[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},y.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},y.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].name;if(t[n].until<=e&&e<=t[n].since)return t[n].name}return""},y.eraNarrow=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].narrow;if(t[n].until<=e&&e<=t[n].since)return t[n].narrow}return""},y.eraAbbr=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].abbr;if(t[n].until<=e&&e<=t[n].since)return t[n].abbr}return""},y.eraYear=function(){for(var e,t,n=this.localeData().eras(),s=0,i=n.length;s<i;++s)if(e=n[s].since<=n[s].until?1:-1,t=this.clone().startOf("day").valueOf(),n[s].since<=t&&t<=n[s].until||n[s].until<=t&&t<=n[s].since)return(this.year()-f(n[s].since).year())*e+n[s].offset;return this.year()},y.year=Pe,y.isLeapYear=function(){return be(this.year())},y.weekYear=function(e){return un.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)},y.isoWeekYear=function(e){return un.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},y.quarter=y.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},y.month=Ie,y.daysInMonth=function(){return He(this.year(),this.month())},y.week=y.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},y.isoWeek=y.isoWeeks=function(e){var t=Be(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},y.weeksInYear=function(){var e=this.localeData()._week;return N(this.year(),e.dow,e.doy)},y.weeksInWeekYear=function(){var e=this.localeData()._week;return N(this.weekYear(),e.dow,e.doy)},y.isoWeeksInYear=function(){return N(this.year(),1,4)},y.isoWeeksInISOWeekYear=function(){return N(this.isoWeekYear(),1,4)},y.date=ge,y.day=y.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=Ce(this,"Day");return null!=e?(t=e,n=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,"d")):s},y.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},y.isoWeekday=function(e){return this.isValid()?null!=e?(t=e,n=this.localeData(),n="string"==typeof t?n.weekdaysParse(t)%7||7:isNaN(t)?null:t,this.day(this.day()%7?n:n-7)):this.day()||7:null!=e?this:NaN;var t,n},y.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},y.hour=y.hours=i,y.minute=y.minutes=ce,y.second=y.seconds=we,y.millisecond=y.milliseconds=fe,y.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?i:Et(this);if("string"==typeof e){if(null===(e=Vt(ve,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Et(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?$t(this,C(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,f.updateOffset(this,!0),this._changeInProgress=null)),this},y.utc=function(e){return this.utcOffset(0,e)},y.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Et(this),"m")),this},y.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Vt(Me,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},y.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?R(e).utcOffset():0,(this.utcOffset()-e)%60==0)},y.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},y.isLocal=function(){return!!this.isValid()&&!this._isUTC},y.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},y.isUtc=At,y.isUTC=At,y.zoneAbbr=function(){return this._isUTC?"UTC":""},y.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},y.dates=e("dates accessor is deprecated. Use date instead.",ge),y.months=e("months accessor is deprecated. Use month instead",Ie),y.years=e("years accessor is deprecated. Use year instead",Pe),y.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,t),this):-this.utcOffset()}),y.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return q(t,this),(t=Nt(t))._a?(e=(t._isUTC?l:R)(t._a),this._isDSTShifted=this.isValid()&&0<function(e,t,n){for(var s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),r=0,a=0;a<s;a++)(n&&e[a]!==t[a]||!n&&M(e[a])!==M(t[a]))&&r++;return r+i}(t._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});g=K.prototype;function cn(e,t,n,s){var i=P(),s=l().set(s,t);return i[n](s,e)}function fn(e,t,n){if(u(e)&&(t=e,e=void 0),e=e||"",null!=t)return cn(e,t,n,"month");for(var s=[],i=0;i<12;i++)s[i]=cn(e,i,n,"month");return s}function mn(e,t,n,s){t=("boolean"==typeof e?u(t)&&(n=t,t=void 0):(t=e,e=!1,u(n=t)&&(n=t,t=void 0)),t||"");var i,r=P(),a=e?r._week.dow:0,o=[];if(null!=n)return cn(t,(n+a)%7,s,"day");for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,"day");return o}g.calendar=function(e,t,n){return h(e=this._calendar[e]||this._calendar.sameElse)?e.call(t,n):e},g.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(te).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},g.invalidDate=function(){return this._invalidDate},g.ordinal=function(e){return this._ordinal.replace("%d",e)},g.preparse=hn,g.postformat=hn,g.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return h(i)?i(e,t,n,s):i.replace(/%d/i,e)},g.pastFuture=function(e,t){return h(e=this._relativeTime[0<e?"future":"past"])?e(t):e.replace(/%s/i,t)},g.set=function(e){var t,n;for(n in e)c(e,n)&&(h(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},g.eras=function(e,t){for(var n,s=this._eras||P("en")._eras,i=0,r=s.length;i<r;++i)switch("string"==typeof s[i].since&&(n=f(s[i].since).startOf("day"),s[i].since=n.valueOf()),typeof s[i].until){case"undefined":s[i].until=1/0;break;case"string":n=f(s[i].until).startOf("day").valueOf(),s[i].until=n.valueOf()}return s},g.erasParse=function(e,t,n){var s,i,r,a,o,u=this.eras();for(e=e.toUpperCase(),s=0,i=u.length;s<i;++s)if(r=u[s].name.toUpperCase(),a=u[s].abbr.toUpperCase(),o=u[s].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(a===e)return u[s];break;case"NNNN":if(r===e)return u[s];break;case"NNNNN":if(o===e)return u[s]}else if(0<=[r,a,o].indexOf(e))return u[s]},g.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?f(e.since).year():f(e.since).year()+(t-e.offset)*n},g.erasAbbrRegex=function(e){return c(this,"_erasAbbrRegex")||an.call(this),e?this._erasAbbrRegex:this._erasRegex},g.erasNameRegex=function(e){return c(this,"_erasNameRegex")||an.call(this),e?this._erasNameRegex:this._erasRegex},g.erasNarrowRegex=function(e){return c(this,"_erasNarrowRegex")||an.call(this),e?this._erasNarrowRegex:this._erasRegex}
vendor: 11,815 bytes, line 47507
47507,g.months=function(e,t){return e?(a(this._months)?this._months:this._months[(this._months.isFormat||Ve).test(t)?"format":"standalone"])[e.month()]:a(this._months)?this._months:this._months.standalone},g.monthsShort=function(e,t){return e?(a(this._monthsShort)?this._monthsShort:this._monthsShort[Ve.test(t)?"format":"standalone"])[e.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},g.monthsParse=function(e,t,n){var s,i;if(this._monthsParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=l([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=x.call(this._shortMonthsParse,e))?i:null:-1!==(i=x.call(this._longMonthsParse,e))?i:null:"MMM"===t?-1!==(i=x.call(this._shortMonthsParse,e))||-1!==(i=x.call(this._longMonthsParse,e))?i:null:-1!==(i=x.call(this._longMonthsParse,e))||-1!==(i=x.call(this._shortMonthsParse,e))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=l([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(i="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},g.monthsRegex=function(e){return this._monthsParseExact?(c(this,"_monthsRegex")||je.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,"_monthsRegex")||(this._monthsRegex=Ee),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},g.monthsShortRegex=function(e){return this._monthsParseExact?(c(this,"_monthsRegex")||je.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,"_monthsShortRegex")||(this._monthsShortRegex=Ge),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},g.week=function(e){return Be(e,this._week.dow,this._week.doy).week},g.firstDayOfYear=function(){return this._week.doy},g.firstDayOfWeek=function(){return this._week.dow},g.weekdays=function(e,t){return t=a(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"],!0===e?Je(t,this._week.dow):e?t[e.day()]:t},g.weekdaysMin=function(e){return!0===e?Je(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},g.weekdaysShort=function(e){return!0===e?Je(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},g.weekdaysParse=function(e,t,n){var s,i;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=l([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=x.call(this._weekdaysParse,e))?i:null:"ddd"===t?-1!==(i=x.call(this._shortWeekdaysParse,e))?i:null:-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:"dddd"===t?-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._shortWeekdaysParse,e))||-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:"ddd"===t?-1!==(i=x.call(this._shortWeekdaysParse,e))||-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._minWeekdaysParse,e))?i:null:-1!==(i=x.call(this._minWeekdaysParse,e))||-1!==(i=x.call(this._weekdaysParse,e))||-1!==(i=x.call(this._shortWeekdaysParse,e))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=l([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(i="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},g.weekdaysRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||st.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=et),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},g.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||st.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=tt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},g.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||st.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=nt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},g.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},g.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},ft("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===M(e%100/10)?"th":1==t?"st":2==t?"nd":3==t?"rd":"th")}}),f.lang=e("moment.lang is deprecated. Use moment.locale instead.",ft),f.langData=e("moment.langData is deprecated. Use moment.localeData instead.",P);var _n=Math.abs;function yn(e,t,n,s){t=C(t,n);return e._milliseconds+=s*t._milliseconds,e._days+=s*t._days,e._months+=s*t._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function wn(e){return 4800*e/146097}function pn(e){return 146097*e/4800}function kn(e){return function(){return this.as(e)}}de=kn("ms"),t=kn("s"),ye=kn("m"),he=kn("h"),Fe=kn("d"),_e=kn("w"),me=kn("M"),Qe=kn("Q"),i=kn("y"),ce=de;function Mn(e){return function(){return this.isValid()?this._data[e]:NaN}}var we=Mn("milliseconds"),fe=Mn("seconds"),ge=Mn("minutes"),Pe=Mn("hours"),g=Mn("days"),vn=Mn("months"),Dn=Mn("years");var Yn=Math.round,Sn={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function On(e,t,n,s){var i=C(e).abs(),r=Yn(i.as("s")),a=Yn(i.as("m")),o=Yn(i.as("h")),u=Yn(i.as("d")),l=Yn(i.as("M")),d=Yn(i.as("w")),i=Yn(i.as("y")),r=(r<=n.ss?["s",r]:r<n.s&&["ss",r])||a<=1&&["m"]||a<n.m&&["mm",a]||o<=1&&["h"]||o<n.h&&["hh",o]||u<=1&&["d"]||u<n.d&&["dd",u];return(r=(r=null!=n.w?r||d<=1&&["w"]||d<n.w&&["ww",d]:r)||l<=1&&["M"]||l<n.M&&["MM",l]||i<=1&&["y"]||["yy",i])[2]=t,r[3]=0<+e,r[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,r)}var bn=Math.abs;function Tn(e){return(0<e)-(e<0)||+e}function xn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,s,i,r,a,o=bn(this._milliseconds)/1e3,u=bn(this._days),l=bn(this._months),d=this.asSeconds();return d?(e=k(o/60),t=k(e/60),o%=60,e%=60,n=k(l/12),l%=12,s=o?o.toFixed(3).replace(/\.?0+$/,""):"",i=Tn(this._months)!==Tn(d)?"-":"",r=Tn(this._days)!==Tn(d)?"-":"",a=Tn(this._milliseconds)!==Tn(d)?"-":"",(d<0?"-":"")+"P"+(n?i+n+"Y":"")+(l?i+l+"M":"")+(u?r+u+"D":"")+(t||e||o?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(o?a+s+"S":"")):"P0D"}var U=Ct.prototype;return U.isValid=function(){return this._isValid},U.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},U.add=function(e,t){return yn(this,e,t,1)},U.subtract=function(e,t){return yn(this,e,t,-1)},U.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=_(e))||"quarter"===e||"year"===e)switch(t=this._days+s/864e5,n=this._months+wn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(pn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},U.asMilliseconds=de,U.asSeconds=t,U.asMinutes=ye,U.asHours=he,U.asDays=Fe,U.asWeeks=_e,U.asMonths=me,U.asQuarters=Qe,U.asYears=i,U.valueOf=ce,U._bubble=function(){var e=this._milliseconds,t=this._days,n=this._months,s=this._data;return 0<=e&&0<=t&&0<=n||e<=0&&t<=0&&n<=0||(e+=864e5*gn(pn(n)+t),n=t=0),s.milliseconds=e%1e3,e=k(e/1e3),s.seconds=e%60,e=k(e/60),s.minutes=e%60,e=k(e/60),s.hours=e%24,t+=k(e/24),n+=e=k(wn(t)),t-=gn(pn(e)),e=k(n/12),n%=12,s.days=t,s.months=n,s.years=e,this},U.clone=function(){return C(this)},U.get=function(e){return e=_(e),this.isValid()?this[e+"s"]():NaN},U.milliseconds=we,U.seconds=fe,U.minutes=ge,U.hours=Pe,U.days=g,U.weeks=function(){return k(this.days()/7)},U.months=vn,U.years=Dn,U.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n=!1,s=Sn;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(n=e),"object"==typeof t&&(s=Object.assign({},Sn,t),null!=t.s&&null==t.ss&&(s.ss=t.s-1)),e=this.localeData(),t=On(this,!n,s,e),n&&(t=e.pastFuture(+this,t)),e.postformat(t)},U.toISOString=xn,U.toString=xn,U.toJSON=xn,U.locale=Xt,U.localeData=Kt,U.toIsoString=e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",xn),U.lang=Ke,s("X",0,0,"unix"),s("x",0,0,"valueOf"),w("x",ke),w("X",/[+-]?\d+(\.\d{1,3})?/),v("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e))}),v("x",function(e,t,n){n._d=new Date(M(e))}),f.version="2.30.1",H=R,f.fn=y,f.min=function(){return Pt("isBefore",[].slice.call(arguments,0))},f.max=function(){return Pt("isAfter",[].slice.call(arguments,0))},f.now=function(){return Date.now?Date.now():+new Date},f.utc=l,f.unix=function(e){return R(1e3*e)},f.months=function(e,t){return fn(e,t,"months")},f.isDate=V,f.locale=ft,f.invalid=I,f.duration=C,f.isMoment=d,f.weekdays=function(e,t,n){return mn(e,t,n,"weekdays")},f.parseZone=function(){return R.apply(null,arguments).parseZone()},f.localeData=P,f.isDuration=Ut,f.monthsShort=function(e,t){return fn(e,t,"monthsShort")},f.weekdaysMin=function(e,t,n){return mn(e,t,n,"weekdaysMin")},f.defineLocale=mt,f.updateLocale=function(e,t){var n,s;return null!=t?(s=ut,null!=W[e]&&null!=W[e].parentLocale?W[e].set(X(W[e]._config,t)):(t=X(s=null!=(n=ct(e))?n._config:s,t),null==n&&(t.abbr=e),(s=new K(t)).parentLocale=W[e],W[e]=s),ft(e)):null!=W[e]&&(null!=W[e].parentLocale?(W[e]=W[e].parentLocale,e===ft()&&ft(e)):null!=W[e]&&delete W[e]),W[e]},f.locales=function(){return ee(W)},f.weekdaysShort=function(e,t,n){return mn(e,t,n,"weekdaysShort")},f.normalizeUnits=_,f.relativeTimeRounding=function(e){return void 0===e?Yn:"function"==typeof e&&(Yn=e,!0)},f.relativeTimeThreshold=function(e,t){return void 0!==Sn[e]&&(void 0===t?Sn[e]:(Sn[e]=t,"
47507s"===e&&(Sn.ss=t-1),!0))},f.calendarFormat=function(e,t){return(e=e.diff(t,"days",!0))<-6?"sameElse":e<-1?"lastWeek":e<0?"lastDay":e<1?"sameDay":e<2?"nextDay":e<7?"nextWeek":"sameElse"},f.prototype=y,f.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},f}); 47508//moment js end here 47509!(function (a, b) { 47510 "use strict"; 47511 "function" == typeof define && define.amd ? define(["moment"], b) : "object" == typeof module && module.exports ? (module.exports = b(require("moment"))) : b(a.moment); 47512})(this, function (a) { 47513 "use strict"; 47514 function b(a) { 47515 return a > 96 ? a - 87 : a > 64 ? a - 29 : a - 48; 47516 } 47517 function c(a) { 47518 var c, 47519 d = 0, 47520 e = a.split("."), 47521 f = e[0], 47522 g = e[1] || "", 47523 h = 1, 47524 i = 0, 47525 j = 1; 47526 for (45 === a.charCodeAt(0) && ((d = 1), (j = -1)), d; d < f.length; d++) (c = b(f.charCodeAt(d))), (i = 60 * i + c); 47527 for (d = 0; d < g.length; d++) (h /= 60), (c = b(g.charCodeAt(d))), (i += c * h); 47528 return i * j; 47529 } 47530 function d(a) { 47531 for (var b = 0; b < a.length; b++) a[b] = c(a[b]); 47532 } 47533 function e(a, b) { 47534 for (var c = 0; c < b; c++) a[c] = Math.round((a[c - 1] || 0) + 6e4 * a[c]); 47535 a[b - 1] = 1 / 0; 47536 } 47537 function f(a, b) { 47538 var c, 47539 d = []; 47540 for (c = 0; c < b.length; c++) d[c] = a[b[c]]; 47541 return d; 47542 } 47543 function g(a) { 47544 var b = a.split("|"), 47545 c = b[2].split(" "), 47546 g = b[3].split(""), 47547 h = b[4].split(" "); 47548 return d(c), d(g), d(h), e(h, g.length), { name: b[0], abbrs: f(b[1].split(" "), g), offsets: f(c, g), untils: h, population: 0 | b[5] }; 47549 } 47550 function h(a) { 47551 a && this._set(g(a)); 47552 } 47553 function i(a) { 47554 var b = a.toTimeString(), 47555 c = b.match(/\([a-z ]+\)/i); 47556 c && c[0] ? ((c = c[0].match(/[A-Z]/g)), (c = c ? c.join("") : void 0)) : ((c = b.match(/[A-Z]{3,5}/g)), (c = c ? c[0] : void 0)), "GMT" === c && (c = void 0), (this.at = +a), (this.abbr = c), (this.offset = a.getTimezoneOffset()); 47557 } 47558 function j(a) { 47559 (this.zone = a), (this.offsetScore = 0), (this.abbrScore = 0); 47560 } 47561 function k(a, b) { 47562 for (var c, d; (d = 6e4 * (((b.at - a.at) / 12e4) | 0)); ) (c = new i(new Date(a.at + d))), c.offset === a.offset ? (a = c) : (b = c); 47563 return a; 47564 } 47565 function l() { 47566 var a, 47567 b, 47568 c, 47569 d = new Date().getFullYear() - 2, 47570 e = new i(new Date(d, 0, 1)), 47571 f = [e]; 47572 for (c = 1; c < 48; c++) (b = new i(new Date(d, c, 1))), b.offset !== e.offset && ((a = k(e, b)), f.push(a), f.push(new i(new Date(a.at + 6e4)))), (e = b); 47573 for (c = 0; c < 4; c++) f.push(new i(new Date(d + c, 0, 1))), f.push(new i(new Date(d + c, 6, 1))); 47574 return f; 47575 } 47576 function m(a, b) { 47577 return a.offsetScore !== b.offsetScore ? a.offsetScore - b.offsetScore : a.abbrScore !== b.abbrScore ? a.abbrScore - b.abbrScore : b.zone.population - a.zone.population; 47578 } 47579 function n(a, b) { 47580 var c, e; 47581 for (d(b), c = 0; c < b.length; c++) (e = b[c]), (I[e] = I[e] || {}), (I[e][a] = !0); 47582 } 47583 function o(a) { 47584 var b, 47585 c, 47586 d, 47587 e = a.length, 47588 f = {}, 47589 g = []; 47590 for (b = 0; b < e; b++) { 47591 d = I[a[b].offset] || {}; 47592 for (c in d) d.hasOwnProperty(c) && (f[c] = !0); 47593 } 47594 for (b in f) f.hasOwnProperty(b) && g.push(H[b]); 47595 return g; 47596 } 47597 function p() { 47598 try { 47599 var a = Intl.DateTimeFormat().resolvedOptions().timeZone; 47600 if (a) { 47601 var b = H[r(a)]; 47602 if (b) return b; 47603 z("Moment Timezone found " + a + " from the Intl api, but did not have that data loaded."); 47604 } 47605 } catch (c) {} 47606 var d, 47607 e, 47608 f, 47609 g = l(), 47610 h = g.length, 47611 i = o(g), 47612 k = []; 47613 for (e = 0; e < i.length; e++) { 47614 for (d = new j(t(i[e]), h), f = 0; f < h; f++) d.scoreOffsetAt(g[f]); 47615 k.push(d); 47616 } 47617 return k.sort(m), k.length >
47617 0 ? k[0].zone.name : void 0; 47618 } 47619 function q(a) { 47620 return (D && !a) || (D = p()), D; 47621 } 47622 function r(a) { 47623 return (a || "").toLowerCase().replace(/\//g, "_"); 47624 } 47625 function s(a) { 47626 var b, c, d, e; 47627 for ("string" == typeof a && (a = [a]), b = 0; b < a.length; b++) (d = a[b].split("|")), (c = d[0]), (e = r(c)), (F[e] = a[b]), (H[e] = c), d[5] && n(e, d[2].split(" ")); 47628 } 47629 function t(a, b) { 47630 a = r(a); 47631 var c, 47632 d = F[a]; 47633 return d instanceof h ? d : "string" == typeof d ? ((d = new h(d)), (F[a] = d), d) : G[a] && b !== t && (c = t(G[a], t)) ? ((d = F[a] = new h()), d._set(c), (d.name = H[a]), d) : null; 47634 } 47635 function u() { 47636 var a, 47637 b = []; 47638 for (a in H) H.hasOwnProperty(a) && (F[a] || F[G[a]]) && H[a] && b.push(H[a]); 47639 return b.sort(); 47640 } 47641 function v(a) { 47642 var b, c, d, e; 47643 for ("string" == typeof a && (a = [a]), b = 0; b < a.length; b++) (c = a[b].split("|")), (d = r(c[0])), (e = r(c[1])), (G[d] = e), (H[d] = c[0]), (G[e] = d), (H[e] = c[1]); 47644 } 47645 function w(a) { 47646 s(a.zones), v(a.links), (A.dataVersion = a.version); 47647 } 47648 function x(a) { 47649 return x.didShowError || ((x.didShowError = !0), z("moment.tz.zoneExists('" + a + "') has been deprecated in favor of !moment.tz.zone('" + a + "')")), !!t(a); 47650 } 47651 function y(a) { 47652 return !(!a._a || void 0 !== a._tzm); 47653 } 47654 function z(a) { 47655 "undefined" != typeof console && "function" == typeof console.error && console.error(a); 47656 } 47657 function A(b) { 47658 var c = Array.prototype.slice.call(arguments, 0, -1), 47659 d = arguments[arguments.length - 1], 47660 e = t(d), 47661 f = a.utc.apply(null, c); 47662 return e && !a.isMoment(b) && y(f) && f.add(e.parse(f), "minutes"), f.tz(d), f; 47663 } 47664 function B(a) { 47665 return function () { 47666 return this._z ? this._z.abbr(this) : a.call(this); 47667 }; 47668 } 47669 function C(a) { 47670 return function () { 47671 return (this._z = null), a.apply(this, arguments); 47672 }; 47673 } 47674 var D, 47675 E = "0.5.13", 47676 F = {}, 47677 G = {}, 47678 H = {}, 47679 I = {}, 47680 J = a.version.split("."), 47681 K = +J[0], 47682 L = +J[1]; 47683 (K < 2 || (2 === K && L < 6)) && z("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js " + a.version + ". See momentjs.com"), 47684 (h.prototype = { 47685 _set: function (a) { 47686 (this.name = a.name), (this.abbrs = a.abbrs), (this.untils = a.untils), (this.offsets = a.offsets), (this.population = a.population); 47687 }, 47688 _index: function (a) { 47689 var b, 47690 c = +a, 47691 d = this.untils; 47692 for (b = 0; b < d.length; b++) if (c < d[b]) return b; 47693 }, 47694 parse: function (a) { 47695 var b, 47696 c, 47697 d, 47698 e, 47699 f = +a, 47700 g = this.offsets, 47701 h = this.untils, 47702 i = h.length - 1; 47703 for (e = 0; e < i; e++) if (((b = g[e]), (c = g[e + 1]), (d = g[e ? e - 1 : e]), b < c && A.moveAmbiguousForward ? (b = c) : b > d && A.moveInvalidForward && (b = d), f < h[e] - 6e4 * b)) return g[e]; 47704 return g[i]; 47705 }, 47706 abbr: function (a) { 47707 return this.abbrs[this._index(a)]; 47708 }, 47709 offset: function (a) { 47710 return this.offsets[this._index(a)]; 47711 }, 47712 }), 47713 (j.prototype.scoreOffsetAt = function (a) { 47714 (this.offsetScore += Math.abs(this.zone.offset(a.at) - a.offset)), this.zone.abbr(a.at).replace(/[^A-Z]/g, "") !== a.abbr && this.abbrScore++; 47715 }), 47716 (A.version = E), 47717 (A.dataVersion = ""), 47718 (A._zones = F), 47719 (A._links = G), 47720 (A._names = H), 47721 (A.add = s), 47722 (A.link = v), 47723 (A.load = w), 47724 (A.zone = t), 47725 (A.zoneExists = x), 47726 (A.guess = q), 47727 (A.names = u), 47728 (A.Zone = h), 47729 (A.unpack = g), 47730 (A.unpackBase60 = c), 47731 (A.needsOffset = y), 47732 (A.moveInvalidForward = !0), 47733 (A.moveAmbiguousForward = !1); 47734 var M = a.fn; 47735 (a.tz = A), 47736 (a.defaultZone = null),
47737 (a.updateOffset = function (b, c) { 47738 var d, 47739 e = a.defaultZone; 47740 void 0 === b._z && (e && y(b) && !b._isUTC && ((b._d = a.utc(b._a)._d), b.utc().add(e.parse(b), "minutes")), (b._z = e)), 47741 b._z && ((d = b._z.offset(b)), Math.abs(d) < 16 && (d /= 60), void 0 !== b.utcOffset ? b.utcOffset(-d, c) : b.zone(d, c)); 47742 }), 47743 (M.tz = function (b) { 47744 return b ? ((this._z = t(b)), this._z ? a.updateOffset(this) : z("Moment Timezone has no data for " + b + ". See http://momentjs.com/timezone/docs/#/data-loading/."), this) : this._z ? this._z.name : void 0; 47745 }), 47746 (M.zoneName = B(M.zoneName)), 47747 (M.zoneAbbr = B(M.zoneAbbr)), 47748 (M.utc = C(M.utc)), 47749 (a.tz.setDefault = function (b) { 47750 return (K < 2 || (2 === K && L < 9)) && z("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js " + a.version + "."), (a.defaultZone = b ? t(b) : null), a; 47751 }); 47752 var N = a.momentProperties; 47753 return ( 47754 "[object Array]" === Object.prototype.toString.call(N) ? (N.push("_z"), N.push("_a")) : N && (N._z = null), 47755 w({ 47756 version: "2017b", 47757 zones: [ 47758 "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5", 47759 "Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5", 47760 "Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5", 47761 "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5", 47762 "Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6", 47763 "Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldWV.E 2xonV.E|39e4", 47764 "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5", 47765 "Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", 47766 "Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e
4776600 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5", 47767 "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3", 47768 "Africa/El_Aaiun|LMT -01 WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e
4776800 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4", 47769 "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5", 47770 "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|01212121212121212121212121212121213|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|51e5", 47771 "Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5", 47772 "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5", 47773 "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5", 47774 "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5", 47775 "Africa/Windhoek|+0130 SAST SAST CAT WAT WAST|-1u -20 -30 -20 -10 -20|012134545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2GJdu 1Ajdu 1cL0 1SqL0 9NA0 11D0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0|32e4", 47776 "America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", 47777 "America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", 47778 "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3", 47779 "America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4", 47780 "America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0", 47781 "America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0", 47782 "America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0", 47783 "America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0", 47784 "America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0", 47785 "America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0", 47786 "America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0", 47787 "America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0", 47788 "America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0", 47789 "America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0", 47790 "America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0", 47791 "America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0", 47792 "America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4", 47793 "America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5", 47794 "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2", 47795 "America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5", 47796 "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 8
477960 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3", 47797 "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4", 47798 "America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5", 47799 "America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|012121212121212
4779912121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3", 47800 "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2", 47801 "America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2", 47802 "America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5", 47803 "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4", 47804 "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2", 47805 "America/Campo_Grande|LMT -04 -03|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|77e4", 47806 "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", 47807 "America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5", 47808 "America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3", 47809 "America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5", 47810 "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", 47811 "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 de
47811L0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", 47812 "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5", 47813 "America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2", 47814 "America/Cuiaba|LMT -04 -03|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|54e4", 47815 "America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8", 47816 "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2", 47817 "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3", 47818 "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", 47819 "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 Jy10 SL0 dnB0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5", 47820 "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5", 47821 "America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3", 47822 "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5", 47823 "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5", 47824 "America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", 47825 "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47826 "America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5", 47827 "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", 47828 "America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", 47829 "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|01023232323232324523232323232323232323232323232323232323232676767676767676767676767676767676767676767676867676
478297676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", 47830 "America/Grand_Turk|KMT EST EDT AST|57.b 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212123|-2l1uQ.N 2HHBQ.N 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", 47831 "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5", 47832 "America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5", 47833 "America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4", 47834 "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", 47835 "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", 47836 "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 8
478360 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4", 47837 "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47838 "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47839 "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47840 "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47841 "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47842 "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47843 "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47844 "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2", 47845 "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2", 47846 "America/Jamaica|KMT EST EDT|57.b 50 40|0121212121212121212121|-2l1uQ.N 2uM1Q.N 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4", 47847 "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3", 47848 "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47849 "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47850 "America/La_Paz|CMT BOST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5", 47851 "America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6", 47852 "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", 47853 "America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4", 47854 "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5", 47855 "America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5", 47856 "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4", 47857 "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4", 47858 "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 8
478580 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4", 47859 "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2", 47860 "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5", 47861 "America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", 47862 "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", 47863 "America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", 47864 "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3", 47865 "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5", 47866 "America/Montevideo|MMT -0330 -03 -02 -0230|3I.I 3u 30 20 2u|012121212121212121212121213232323232324242423243232323232323232323232323232323232323232|-20UIf.g 8jzJ.g 1cLu 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1qMu WLu 1qMu 11zu 1o0u 11zu NAu 11bu 2iMu zWu Dq10 19X0 pd0 jz0 cm10 19X0 1fB0 1on0 11d0 1oL0 1nB0 1fzu 1aou 1fzu 1aou 1fzu 3nAu Jb0 3MN0 1SLu 4jzu 2PB0 Lb0 3Dd0 1pb0 ixd0 An0 1MN0 An0 1wp0 On0 1wp0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", 47867 "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5", 47868 "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4",
47869 "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", 47870 "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2", 47871 "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2", 47872 "America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2", 47873 "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47874 "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47875 "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 47876 "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 de
47876L0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", 47877 "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", 47878 "America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4", 47879 "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5", 47880 "America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", 47881 "America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4", 47882 "America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4", 47883 "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5", 47884 "America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0", 47885 "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842", 47886 "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2", 47887 "America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5", 47888 "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4", 47889 "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229", 47890 "America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4", 47891 "America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5", 47892 "America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5", 47893 "America/Sao_Paulo|LMT -03 -02|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|20e6", 47894 "America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452", 47895 "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2",
47896 "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", 47897 "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3", 47898 "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5", 47899 "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656", 47900 "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", 47901 "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", 47902 "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", 47903 "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4", 47904 "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642", 47905 "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", 47906 "Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212|-2q00 1DjS0 T90 40P0 KL0 blz0|10", 47907 "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70", 47908 "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80", 47909 "Antarctica/Macquarie|AEST AEDT -00 +11|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1", 47910 "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60", 47911 "Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|010202020202
4791102020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5", 47912 "Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|01212121212131212121212121212121212121212121212121212121212
4791212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40", 47913 "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130", 47914 "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20", 47915 "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", 47916 "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25", 47917 "Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4", 47918 "Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5", 47919 "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5", 47920 "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5", 47921 "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3", 47922 "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4", 47923 "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4", 47924 "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4", 47925 "Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0", 47926 "Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5",
47927 "Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4", 47928 "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", 47929 "Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6", 47930 "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", 47931 "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", 47932 "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4", 47933 "Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4", 47934 "Asia/Kolkata|HMT +0630 IST|-5R.k -6u -5u|01212|-18LFR.k 1unn.k HB0 7zX0|15e6", 47935 "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4", 47936 "Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3", 47937 "Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6", 47938 "Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5", 47939 "Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6", 47940 "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5", 47941 "Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4", 47942 "Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5", 47943 "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4", 47944 "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0", 47945 "Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18
47945N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5", 47946 "Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4", 47947 "Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5", 47948 "Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5", 47949 "Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3", 47950 "Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", 47951 "Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", 47952 "Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6", 47953 "Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4", 47954 "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b
479540 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", 47955 "Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5", 47956 "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4", 47957 "Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6", 47958 "Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5", 47959 "Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5", 47960 "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2", 47961 "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", 47962 "Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5", 47963 "Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4", 47964 "Asia/Macau|LMT CST CDT|-7y.k -80 -90|012121212121212121212121212121212121212121|-2le7y.k 1XO34.k 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0|57e4", 47965 "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3", 47966 "Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5", 47967 "Asia/Manila|+08 +09|-80 -90|010101010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6", 47968 "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4", 47969 "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4", 47970 "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5", 47971 "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5", 47972 "Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4", 47973 "Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4", 47974 "Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|01231|-2um8n 97XR 1lTzu 2Onc0|29e5", 47975 "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4", 47976 "Asia/Rangoon|RMT +0630 +09|-6o.E -6u -90|0121|-21Jio.E SmnS.E 7j9u|48e5", 47977 "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4", 47978 "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4", 47979 "Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -9u -a0|0123141414141414135353|-2um8r.Q 97XV.Q 1m1zu kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6", 47980 "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2", 47981 "Asia/Taipei|CST JST CDT|-80 -90 -90|010202020202
4798102020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5", 47982 "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5", 47983 "Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5", 47984 "Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6", 47985 "Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3", 47986 "Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJH0 QL0 1lB0 13X0 1zB0 NX0 1zB0 NX0|38e6", 47987 "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5", 47988 "Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5", 47989 "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2", 47990 "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", 47991 "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4", 47992 "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5", 47993 "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5", 47994 "Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW5.s aPX5.s Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", 47995 "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3",
47996 "Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", 47997 "Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2xomp.U 1qOMp.U 7zX0 1djf0|50e4", 47998 "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3", 47999 "Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldWQ.o aPWQ.o Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4", 48000 "Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4", 48001 "Atlantic/South_Georgia|-02|20|0||30", 48002 "Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2", 48003 "Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5", 48004 "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5", 48005 "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5", 48006 "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3", 48007 "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746", 48008 "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4", 48009 "Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368", 48010 "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4", 48011 "Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu
480111cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347", 48012 "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10", 48013 "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5", 48014 "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5", 48015 "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", 48016 "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 48017 "Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2", 48018 "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", 48019 "EST|EST|50|0|", 48020 "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 48021 "Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g5X0 14p0 1wn0 17d0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", 48022 "Etc/GMT+0|GMT|0|0|", 48023 "Etc/GMT+1|-01|10|0|", 48024 "Etc/GMT+10|-10|a0|0|", 48025 "Etc/GMT+11|-11|b0|0|", 48026 "Etc/GMT+12|-12|c0|0|", 48027 "Etc/GMT+3|-03|30|0|", 48028 "Etc/GMT+4|-04|40|0|", 48029 "Etc/GMT+5|-05|50|0|", 48030 "Etc/GMT+6|-06|60|0|", 48031 "Etc/GMT+7|-07|70|0|", 48032 "Etc/GMT+8|-08|80|0|", 48033 "Etc/GMT+9|-09|90|0|", 48034 "Etc/GMT-1|+01|-10|0|", 48035 "Pacific/Port_Moresby|+10|-a0|0||25e4", 48036 "Pacific/Pohnpei|+11|-b0|0||34e3", 48037 "Pacific/Tarawa|+12|-c0|0||29e3", 48038 "Etc/GMT-13|+13|-d0|0|", 48039 "Etc/GMT-14|+14|-e0|0|", 48040 "Etc/GMT-2|+02|-20|0|", 48041 "Etc/GMT-3|+03|-30|0|", 48042 "Etc/GMT-4|+04|-40|0|", 48043 "Etc/GMT-5|+05|-50|0|", 48044 "Etc/GMT-6|+06|-60|0|", 48045 "Indian/Christmas|+07|-70|0||21e2", 48046 "Etc/GMT-8|+08|-80|0|", 48047 "Pacific/Palau|+09|-90|0||21e3", 48048 "Etc/UCT|UCT|0|0|", 48049 "Etc/UTC|UTC|0|0|", 48050 "Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 U
48050o0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5", 48051 "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3", 48052 "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", 48053 "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", 48054 "Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", 48055 "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", 48056 "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5", 48057 "Europe/Prague|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 16M0 1lc0 1tA0 17A0 11c0 1io0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5", 48058 "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5", 48059 "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5", 48060 "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", 48061 "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4", 48062 "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", 48063 "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", 48064 "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3", 48065 "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", 48066 "Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4", 48067 "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5", 48068 "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4", 48069 "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0
48069-10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ldXn.f aPWn.f Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", 48070 "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", 48071 "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5", 48072 "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", 48073 "Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5", 48074 "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3", 48075 "Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6", 48076 "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", 48077 "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -2
480770 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4", 48078 "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5", 48079 "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5", 48080 "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810", 48081 "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", 48082 "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", 48083 "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5", 48084 "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4", 48085 "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", 48086 "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0", 48087 "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4", 48088 "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5", 48089 "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", 48090 "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", 48091 "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", 48092 "Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4", 48093 "HST|HST|a0|0|", 48094 "Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2", 48095 "Indian/Cocos|+0630|-6u|0||596", 48096 "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130", 48097 "Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3", 48098 "Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4", 48099 "Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4", 48100 "Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4", 48101 "Pacific/Kwajalein|+11 -12 +12|-b0 c0 -c0|012|-AX0 W9X0|14e3", 48102 "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", 48103 "MST|MST|70|0|", 48104 "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 48105 "Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600", 48106 "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", 48107 "Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3", 48108 "Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4", 48109 "
48109Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3", 48110 "Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B8n0|1", 48111 "Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483", 48112 "Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|88e4", 48113 "Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3", 48114 "Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125", 48115 "Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4", 48116 "Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4", 48117 "Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4", 48118 "Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B8nk|51e2", 48119 "Pacific/Kosrae|+11 +12|-b0 -c0|010|-AX0 1bdz0|66e2", 48120 "Pacific/Majuro|+11 +12|-b0 -c0|01|-AX0|28e3", 48121 "Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2", 48122 "Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2", 48123 "Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3", 48124 "Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2", 48125 "Pacific/Norfolk|+1112 +1130 +1230 +11|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4", 48126 "Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3", 48127 "Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56", 48128 "Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3", 48129 "Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4", 48130 "Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121212121212121212121212121212121212121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|75e3", 48131 "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", 48132 ], 48133 links: [ 48134 "Africa/Abidjan|Africa/Bamako", 48135 "Africa/Abidjan|Africa/Banjul", 48136 "Africa/Abidjan|Africa/Conakry", 48137 "Africa/Abidjan|Africa/Dakar", 48138 "Africa/Abidjan|Africa/Freetown", 48139 "Africa/Abidjan|Africa/Lome", 48140 "Africa/Abidjan|Africa/Nouakchott", 48141 "Africa/Abidjan|Africa/Ouagadougou", 48142 "Africa/Abidjan|Africa/Sao_Tome", 48143 "Africa/Abidjan|Africa/Timbuktu", 48144 "Africa/Abidjan|Atlantic/St_Helena", 48145 "Africa/Cairo|Egypt", 48146 "Africa/Johannesburg|Africa/Maseru", 48147 "Africa/Johannesburg|Africa/Mbabane", 48148 "Africa/Khartoum|Africa/Juba", 48149 "Africa/Lagos|Africa/Bangui", 48150 "Africa/Lagos|Africa/Brazzaville", 48151 "Africa/Lagos|Africa/Douala", 48152 "Africa/Lagos|Africa/Kinshasa", 48153 "Africa/Lagos|Africa/Libreville", 48154 "Africa/Lagos|Africa/Luanda", 48155 "Africa/Lagos|Africa/Malabo", 48156 "Africa/Lagos|Africa/Niamey", 48157 "Africa/Lagos|Africa/Porto-Novo", 48158 "Africa/Maputo|Africa/Blantyre", 48159 "Africa/Maputo|Africa/Bujumbura", 48160 "Africa/Maputo|Africa/Gaborone", 48161 "Africa/Maputo|Africa/Harare",
48162 "Africa/Maputo|Africa/Kigali", 48163 "Africa/Maputo|Africa/Lubumbashi", 48164 "Africa/Maputo|Africa/Lusaka", 48165 "Africa/Nairobi|Africa/Addis_Ababa", 48166 "Africa/Nairobi|Africa/Asmara", 48167 "Africa/Nairobi|Africa/Asmera", 48168 "Africa/Nairobi|Africa/Dar_es_Salaam", 48169 "Africa/Nairobi|Africa/Djibouti", 48170 "Africa/Nairobi|Africa/Kampala", 48171 "Africa/Nairobi|Africa/Mogadishu", 48172 "Africa/Nairobi|Indian/Antananarivo", 48173 "Africa/Nairobi|Indian/Comoro", 48174 "Africa/Nairobi|Indian/Mayotte", 48175 "Africa/Tripoli|Libya", 48176 "America/Adak|America/Atka", 48177 "America/Adak|US/Aleutian", 48178 "America/Anchorage|US/Alaska", 48179 "America/Argentina/Buenos_Aires|America/Buenos_Aires", 48180 "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", 48181 "America/Argentina/Catamarca|America/Catamarca", 48182 "America/Argentina/Cordoba|America/Cordoba", 48183 "America/Argentina/Cordoba|America/Rosario", 48184 "America/Argentina/Jujuy|America/Jujuy", 48185 "America/Argentina/Mendoza|America/Mendoza", 48186 "America/Atikokan|America/Coral_Harbour", 48187 "America/Chicago|US/Central", 48188 "America/Curacao|America/Aruba", 48189 "America/Curacao|America/Kralendijk", 48190 "America/Curacao|America/Lower_Princes", 48191 "America/Denver|America/Shiprock", 48192 "America/Denver|Navajo", 48193 "America/Denver|US/Mountain", 48194 "America/Detroit|US/Michigan", 48195 "America/Edmonton|Canada/Mountain", 48196 "America/Fort_Wayne|America/Indiana/Indianapolis", 48197 "America/Fort_Wayne|America/Indianapolis", 48198 "America/Fort_Wayne|US/East-Indiana", 48199 "America/Halifax|Canada/Atlantic", 48200 "America/Havana|Cuba", 48201 "America/Indiana/Knox|America/Knox_IN", 48202 "America/Indiana/Knox|US/Indiana-Starke", 48203 "America/Jamaica|Jamaica", 48204 "America/Kentucky/Louisville|America/Louisville", 48205 "America/Los_Angeles|US/Pacific", 48206 "America/Los_Angeles|US/Pacific-New", 48207 "America/Manaus|Brazil/West", 48208 "America/Mazatlan|Mexico/BajaSur", 48209 "America/Mexico_City|Mexico/General", 48210 "America/New_York|US/Eastern", 48211 "America/Noronha|Brazil/DeNoronha", 48212 "America/Panama|America/Cayman", 48213 "America/Phoenix|US/Arizona", 48214 "America/Port_of_Spain|America/Anguilla", 48215 "America/Port_of_Spain|America/Antigua", 48216 "America/Port_of_Spain|America/Dominica", 48217 "America/Port_of_Spain|America/Grenada", 48218 "America/Port_of_Spain|America/Guadeloupe", 48219 "America/Port_of_Spain|America/Marigot", 48220 "America/Port_of_Spain|America/Montserrat", 48221 "America/Port_of_Spain|America/St_Barthelemy", 48222 "America/Port_of_Spain|America/St_Kitts", 48223 "America/Port_of_Spain|America/St_Lucia", 48224 "America/Port_of_Spain|America/St_Thomas", 48225 "America/Port_of_Spain|America/St_Vincent", 48226 "America/Port_of_Spain|America/Tortola", 48227 "America/Port_of_Spain|America/Virgin", 48228 "America/Regina|Canada/East-Saskatchewan", 48229 "America/Regina|Canada/Saskatchewan", 48230 "America/Rio_Branco|America/Porto_Acre", 48231 "America/Rio_Branco|Brazil/Acre", 48232 "America/Santiago|Chile/Continental", 48233 "America/Sao_Paulo|Brazil/East",
48234 "America/St_Johns|Canada/Newfoundland", 48235 "America/Tijuana|America/Ensenada", 48236 "America/Tijuana|America/Santa_Isabel", 48237 "America/Tijuana|Mexico/BajaNorte", 48238 "America/Toronto|America/Montreal", 48239 "America/Toronto|Canada/Eastern", 48240 "America/Vancouver|Canada/Pacific", 48241 "America/Whitehorse|Canada/Yukon", 48242 "America/Winnipeg|Canada/Central", 48243 "Asia/Ashgabat|Asia/Ashkhabad", 48244 "Asia/Bangkok|Asia/Phnom_Penh", 48245 "Asia/Bangkok|Asia/Vientiane", 48246 "Asia/Dhaka|Asia/Dacca", 48247 "Asia/Dubai|Asia/Muscat", 48248 "Asia/Ho_Chi_Minh|Asia/Saigon", 48249 "Asia/Hong_Kong|Hongkong", 48250 "Asia/Jerusalem|Asia/Tel_Aviv", 48251 "Asia/Jerusalem|Israel", 48252 "Asia/Kathmandu|Asia/Katmandu", 48253 "Asia/Kolkata|Asia/Calcutta", 48254 "Asia/Kuala_Lumpur|Asia/Singapore", 48255 "Asia/Kuala_Lumpur|Singapore", 48256 "Asia/Macau|Asia/Macao", 48257 "Asia/Makassar|Asia/Ujung_Pandang", 48258 "Asia/Nicosia|Europe/Nicosia", 48259 "Asia/Qatar|Asia/Bahrain", 48260 "Asia/Rangoon|Asia/Yangon", 48261 "Asia/Riyadh|Asia/Aden", 48262 "Asia/Riyadh|Asia/Kuwait", 48263 "Asia/Seoul|ROK", 48264 "Asia/Shanghai|Asia/Chongqing", 48265 "Asia/Shanghai|Asia/Chungking", 48266 "Asia/Shanghai|Asia/Harbin", 48267 "Asia/Shanghai|PRC", 48268 "Asia/Taipei|ROC", 48269 "Asia/Tehran|Iran", 48270 "Asia/Thimphu|Asia/Thimbu", 48271 "Asia/Tokyo|Japan", 48272 "Asia/Ulaanbaatar|Asia/Ulan_Bator", 48273 "Asia/Urumqi|Asia/Kashgar", 48274 "Atlantic/Faroe|Atlantic/Faeroe", 48275 "Atlantic/Reykjavik|Iceland", 48276 "Atlantic/South_Georgia|Etc/GMT+2", 48277 "Australia/Adelaide|Australia/South", 48278 "Australia/Brisbane|Australia/Queensland", 48279 "Australia/Broken_Hill|Australia/Yancowinna", 48280 "Australia/Darwin|Australia/North", 48281 "Australia/Hobart|Australia/Tasmania", 48282 "Australia/Lord_Howe|Australia/LHI", 48283 "Australia/Melbourne|Australia/Victoria", 48284 "Australia/Perth|Australia/West", 48285 "Australia/Sydney|Australia/ACT", 48286 "Australia/Sydney|Australia/Canberra", 48287 "Australia/Sydney|Australia/NSW", 48288 "Etc/GMT+0|Etc/GMT", 48289 "Etc/GMT+0|Etc/GMT-0", 48290 "Etc/GMT+0|Etc/GMT0", 48291 "Etc/GMT+0|Etc/Greenwich", 48292 "Etc/GMT+0|GMT", 48293 "Etc/GMT+0|GMT+0", 48294 "Etc/GMT+0|GMT-0", 48295 "Etc/GMT+0|GMT0", 48296 "Etc/GMT+0|Greenwich", 48297 "Etc/UCT|UCT", 48298 "Etc/UTC|Etc/Universal", 48299 "Etc/UTC|Etc/Zulu", 48300 "Etc/UTC|UTC", 48301 "Etc/UTC|Universal", 48302 "Etc/UTC|Zulu", 48303 "Europe/Belgrade|Europe/Ljubljana", 48304 "Europe/Belgrade|Europe/Podgorica", 48305 "Europe/Belgrade|Europe/Sarajevo", 48306 "Europe/Belgrade|Europe/Skopje", 48307 "Europe/Belgrade|Europe/Zagreb", 48308 "Europe/Chisinau|Europe/Tiraspol", 48309 "Europe/Dublin|Eire", 48310 "Europe/Helsinki|Europe/Mariehamn", 48311 "Europe/Istanbul|Asia/Istanbul", 48312 "Europe/Istanbul|Turkey", 48313 "Europe/Lisbon|Portugal", 48314 "Europe/London|Europe/Belfast", 48315 "Europe/London|Europe/Guernsey", 48316 "Europe/London|Europe/Isle_of_Man", 48317 "Europe/London|Europe/Jersey", 48318 "Europe/London|GB", 48319 "Europe/London|GB-Eire", 48320 "Europe/Moscow|W-SU", 48321 "Europe/Oslo|Arctic/Longyearbyen", 48322 "Europe/Oslo|Atlantic/Jan_Mayen", 48323 "Europe/Prague|Europe/Bratislava", 48324 "Europe/Rome|Europe/San_Marino", 48325 "Europe/Rome|Europe/Vatican", 48326 "Europe/Warsaw|Poland", 48327 "Europe/Zurich|Europe/Busingen", 48328 "Europe/Zurich|Europe/Vaduz", 48329 "Indian/Christmas|Etc/GMT-7", 48330 "Pacific/Auckland|Antarctica/McMurdo", 48331 "Pacific/Auckland|Antarctica/South_Pole", 48332 "Pacific/Auckland|NZ", 48333 "Pacific/Chatham|NZ-CHAT", 48334 "Pacific/Easter|Chile/EasterIsland", 48335 "Pacific/Guam|Pacific/Saipan", 48336 "Pacific/Honolulu|Pacific/Johnston", 48337 "Pacific/Honolulu|US/Hawaii", 48338 "Pacific/Kwajalein|Kwajalein", 48339 "Pacific/Pago_Pago|Pacific/Midway", 48340 "Pacific/Pago_Pago|Pacific/Samoa", 48341 "Pacific/Pago_Pago|US/Samoa", 48342 "Pacific/Palau|Etc/GMT-9", 48343 "Pacific/Pohnpei|Etc/GMT-11", 48344 "Pacific/Pohnpei|Pacific/Ponape", 48345 "Pacific/Port_Moresby|Etc/GMT-10", 48346 "Pacific/Port_Moresby|Pacific/Chuuk", 48347 "Pacific/Port_Moresby|Pacific/Truk", 48348 "Pacific/Port_Moresby|Pacific/Yap", 48349 "Pacific/Tarawa|Etc/GMT-12", 48350 "Pacific/Tarawa|Pacific/Funafuti", 48351 "Pacific/Tarawa|Pacific/Wake", 48352 "Pacific/Tarawa|Pacific/Wallis", 48353 ], 48354 }), 48355 a 48356 ); 48357}); 48358(function (jQuery) { 48359 jQuery.fn.cyclotron = function (options) { 48360 return this.each(function () { 48361 var container = jQuery(this), 48362 sx, 48363 dx = 0, 48364 armed, 48365 offset = 0, 48366 tick, 48367 prev, 48368 h = [], 48369 max = 0, 48370 min = 0; 48371 var settings = jQuery.extend({ dampingFactor: 0.93, historySize: 5, autorotation: 0, continuous: 1 }, options); 48372 var checkOffset = function () { 48373 if (settings.continuous === 0) { 48374 if (-offset < min) { 48375 dx = settings.autorotation === 1 ? -dx : 0; 48376 offset = -min; 48377 } 48378 if (-offset > max) { 48379 dx = settings.autorotation === 1 ? -dx : 0; 48380 offset = -max; 48381 } 48382 } 48383 }; 48384 var tick = function () { 48385 if (!armed && dx !== 0) { 48386 dx *= settings.dampingFactor; 48387 offset -= dx; 48388 checkOffset(); 48389 container.css("background-position", offset); 48390 if (Math.abs(dx) < 0.001) { 48391 dx = 0; 48392 } 48393 } 48394 }; 48395 if (settings.dampingFactor > 1 || settings.dampingFactor < 0) { 48396 if (typeof console === "object") { 48397 console.log("dampingFactor out of range " + settings.dampingFactor); 48398 } 48399 settings.dampingFactor = 0.93; 48400 } 48401 if (settings.continuous === 1 && container.hasClass("nonContinuous")) { 48402 settings.continuous = 0; 48403 } 48404 if (settings.continuous === 0) { 48405 var image = new Image(), 48406 src = container.css("background-image").replace(/url\((['"])?(.*?)\1\)/gi, "$2"), 48407 cssSize = container.css("background-size").split(" "), 48408 elemDim = [container.width(), container.height()], 48409 imagesize = [], 48410 ratio = 1; 48411 jQuery(image).one("load", function () { 48412 ratio = image.width > image.height ? image.width / image.height : image.height / image.width; 48413 imagesize[0] = cssSize[0]; 48414 imagesize[1] = cssSize.length > 1 ? cssSize[1] : "auto"; 48415 if (imagesize[0] === "auto" && imagesize[1] === "auto") { 48416 imagesize[0] = image.width; 48417 } else { 48418 if (cssSize[0] === "cover") { 48419 if (elemDim[0] > elemDim[1]) { 48420 if (elemDim[0] / elemDim[1] >= ratio) { 48421 return elemDim[0]; 48422 } else { 48423 imagesize[0] = "auto"; 48424 imagesize[1] = elemDim[1]; 48425 } 48426 } else { 48427 imagesize[0] = "auto"; 48428 imagesize[1] = elemDim[1]; 48429 } 48430 } else if (cssSize[0] === "contain") { 48431 if (elemDim[0] < elemDim[1]) { 48432 imagesize[0] = elemDim[0]; 48433 } else { 48434 if (elemDim[0] / elemDim[1] >= ratio) { 48435 imagesize[0] = "auto"; 48436 imagesize[1] = elemDim[1]; 48437 } else { 48438 imagesize[1] = "auto"; 48439 imagesize[0] = elemDim[0]; 48440 } 48441 } 48442 } else { 48443 for (var i = cssSize.length; i--; ) { 48444 if (cssSize[i].indexOf("px") > -1) { 48445 imagesize[i] = cssSize[i].replace("px", ""); 48446 } else if (cssSize[i].indexOf("%") > -1) { 48447 imagesize[i] = elemDim[i] * (cssSize[i].replace("%", "") / 100); 48448 } 48449 } 48450 } 48451 ratio = imagesize[0] === "auto" ? image.height / imagesize[1] : image.width / imagesize[0]; 48452 imagesize[0] = imagesize[0] === "auto" ? image.width / ratio : imagesize[0]; 48453 } 48454 max = imagesize[0] - container.width(); 48455 }); 48456 image.src = src; 48457 } 48458 if (settings.autorotation != 0) { 48459 armed = false;
48460 dx = settings.autorotation; 48461 } 48462 container.on("touchstart mousedown", function (e) { 48463 var px = e.pageX > 0 ? e.pageX : e.originalEvent.touches[0].pageX; 48464 sx = px - offset; 48465 armed = true; 48466 e.preventDefault(); 48467 }); 48468 container.on("touchmove mousemove", function (e) { 48469 if (armed) { 48470 var px = e.pageX > 0 ? e.pageX : e.originalEvent.touches[0].pageX; 48471 if (typeof prev === "undefined") { 48472 prev = px; 48473 } 48474 offset = px - sx; 48475 if (h.length > settings.historySize) { 48476 h.shift(); 48477 } 48478 h.push(prev - px); 48479 checkOffset(); 48480 container.css("background-position", offset); 48481 prev = px; 48482 } 48483 }); 48484 container.on("mouseleave mouseup touchend", function () { 48485 if (armed) { 48486 var len = h.length, 48487 v = h[len - 1]; 48488 for (var i = 0; i < len; i++) { 48489 v = (v * len + h[i]) / (len + 1); 48490 } 48491 dx = v; 48492 } 48493 armed = false; 48494 }); 48495 window.requestAnimFrame = (function () { 48496 return ( 48497 window.requestAnimationFrame || 48498 window.webkitRequestAnimationFrame || 48499 window.mozRequestAnimationFrame || 48500 window.oRequestAnimationFrame || 48501 window.msRequestAnimationFrame || 48502 function (callback) { 48503 window.setTimeout(callback, 100 / 6); 48504 } 48505 ); 48506 })(); 48507 (function animloop() { 48508 requestAnimFrame(animloop); 48509 tick(); 48510 })(); 48511 }); 48512 }; 48513})(jQuery); 48514(function (factory) { 48515 if (typeof define == "function" && define.amd) define("picker", ["jquery"], factory); 48516 else if (typeof exports == "object") module.exports = factory(require("jquery")); 48517 else this.Picker = factory(jQuery); 48518})(function ($) { 48519 var $window = $(window); 48520 var $document = $(document); 48521 var $html = $(document.documentElement); 48522 var supportsTransitions = document.documentElement.style.transition != null; 48523 function PickerConstructor(ELEMENT, NAME, COMPONENT, OPTIONS) { 48524 if (!ELEMENT) return PickerConstructor; 48525 var IS_DEFAULT_THEME = false, 48526 STATE = { id: ELEMENT.id || "P" + Math.abs(~~(Math.random() * new Date())) }, 48527 SETTINGS = COMPONENT ? $.extend(true, {}, COMPONENT.defaults, OPTIONS) : OPTIONS || {}, 48528 CLASSES = $.extend({}, PickerConstructor.klasses(), SETTINGS.klass), 48529 $ELEMENT = $(ELEMENT), 48530 PickerInstance = function () { 48531 return this.start(); 48532 }, 48533 P = (PickerInstance.prototype = { 48534 constructor: PickerInstance, 48535 $node: $ELEMENT, 48536 start: function () { 48537 if (STATE && STATE.start) return P; 48538 STATE.methods = {}; 48539 STATE.start = true; 48540 STATE.open = false; 48541 STATE.type = ELEMENT.type; 48542 ELEMENT.autofocus = ELEMENT == getActiveElement(); 48543 ELEMENT.readOnly = !SETTINGS.editable; 48544 ELEMENT.id = ELEMENT.id || STATE.id; 48545 if (ELEMENT.type != "text") { 48546 ELEMENT.type = "text"; 48547 } 48548 P.component = new COMPONENT(P, SETTINGS); 48549 P.$root = $('<div class="' + CLASSES.picker + '" id="' + ELEMENT.id + '_root" />'); 48550 prepareElementRoot(); 48551 P.$holder = $(createWrappedComponent()).appendTo(P.$root); 48552 prepareElementHolder(); 48553 if (SETTINGS.formatSubmit) { 48554 prepareElementHidden(); 48555 } 48556 prepareElement(); 48557 if (SETTINGS.containerHidden) $(SETTINGS.containerHidden).append(P._hidden); 48558 else $ELEMENT.after(P._hidden); 48559 if (SETTINGS.container) $(SETTINGS.container).append(P.$root); 48560 else $ELEMENT.after(P.$root); 48561 P.on({ start: P.component.onStart, render: P.component.onRender, stop: P.component.onStop, open: P.component.onOpen, close: P.component.onClose, set: P.component.onSet }).on({ 48562 start: SETTINGS.onStart, 48563 render: SETTINGS.onRender, 48564 stop: SETTINGS.onStop, 48565 open: SETTINGS.onOpen, 48566 close: SETTINGS.onClose, 48567 set: SETTINGS.onSet, 48568 }); 48569 IS_DEFAULT_THEME = isUsingDefaultTheme(P.$holder[0]); 48570 if (ELEMENT.autofocus) { 48571 P.open(); 48572 } 48573 return P.trigger("start").trigger("render"); 48574 }, 48575 render: function (entireComponent) { 48576 if (entireComponent) { 48577 P.$holder = $(createWrappedComponent()); 48578 prepareElementHolder(); 48579 P.$root.html(P.$holder); 48580 } else P.$root.find("." + CLASSES.box).html(P.component.nodes(STATE.open)); 48581 return P.trigger("render"); 48582 }, 48583 stop: function () { 48584 if (!STATE.start) return P; 48585 P.close(); 48586 if (P._hidden) { 48587 P._hidden.parentNode.removeChild(P._hidden); 48588 } 48589 P.$root.remove(); 48590 $ELEMENT.removeClass(CLASSES.input).removeData(NAME); 48591 setTimeout(function () { 48592 $ELEMENT.off("." + STATE.id); 48593 }, 0); 48594 ELEMENT.type = STATE.type; 48595 ELEMENT.readOnly = false;
48596 P.trigger("stop"); 48597 STATE.methods = {}; 48598 STATE.start = false; 48599 return P; 48600 }, 48601 open: function (dontGiveFocus) { 48602 if (STATE.open) return P; 48603 $ELEMENT.addClass(CLASSES.active); 48604 aria(ELEMENT, "expanded", true); 48605 setTimeout(function () { 48606 P.$root.addClass(CLASSES.opened); 48607 aria(P.$root[0], "hidden", false); 48608 }, 0); 48609 if (dontGiveFocus !== false) { 48610 STATE.open = true; 48611 if (IS_DEFAULT_THEME) { 48612 $html.css("overflow", "hidden").css("padding-right", "+=" + getScrollbarWidth()); 48613 } 48614 focusPickerOnceOpened(); 48615 $document 48616 .on("click." + STATE.id + " focusin." + STATE.id, function (event) { 48617 var target = event.target; 48618 if (target != ELEMENT && target != document && event.which != 3) { 48619 P.close(target === P.$holder[0]); 48620 } 48621 }) 48622 .on("keydown." + STATE.id, function (event) { 48623 var keycode = event.keyCode, 48624 keycodeToMove = P.component.key[keycode], 48625 target = event.target; 48626 if (keycode == 27) { 48627 P.close(true); 48628 } else if (target == P.$holder[0] && (keycodeToMove || keycode == 13)) { 48629 event.preventDefault(); 48630 if (keycodeToMove) { 48631 PickerConstructor._.trigger(P.component.key.go, P, [PickerConstructor._.trigger(keycodeToMove)]); 48632 } else if (!P.$root.find("." + CLASSES.highlighted).hasClass(CLASSES.disabled)) { 48633 P.set("select", P.component.item.highlight); 48634 if (SETTINGS.closeOnSelect) { 48635 P.close(true); 48636 } 48637 } 48638 } else if ($.contains(P.$root[0], target) && keycode == 13) { 48639 event.preventDefault(); 48640 target.click(); 48641 } 48642 }); 48643 } 48644 return P.trigger("open"); 48645 }, 48646 close: function (giveFocus) { 48647 if (giveFocus) { 48648 if (SETTINGS.editable) { 48649 ELEMENT.focus(); 48650 } else { 48651 P.$holder.off("focus.toOpen").focus(); 48652 setTimeout(function () { 48653 P.$holder.on("focus.toOpen", handleFocusToOpenEvent); 48654 }, 0); 48655 } 48656 } 48657 $ELEMENT.removeClass(CLASSES.active); 48658 aria(ELEMENT, "expanded", false); 48659 setTimeout(function () { 48660 P.$root.removeClass(CLASSES.opened + " " + CLASSES.focused); 48661 aria(P.$root[0], "hidden", true); 48662 }, 0); 48663 if (!STATE.open) return P; 48664 STATE.open = false; 48665 if (IS_DEFAULT_THEME) { 48666 $html.css("overflow", "").css("padding-right", "-=" + getScrollbarWidth()); 48667 } 48668 $document.off("." + STATE.id); 48669 return P.trigger("close"); 48670 }, 48671 clear: function (options) { 48672 return P.set("clear", null, options); 48673 }, 48674 set: function (thing, value, options) { 48675 var thingItem, 48676 thingValue, 48677 thingIsObject = $.isPlainObject(thing), 48678 thingObject = thingIsObject ? thing : {}; 48679 options = thingIsObject && $.isPlainObject(value) ? value : options || {}; 48680 if (thing) { 48681 if (!thingIsObject) { 48682 thingObject[thing] = value; 48683 } 48684 for (thingItem in thingObject) { 48685 thingValue = thingObject[thingItem]; 48686 if (thingItem in P.component.item) { 48687 if (thingValue === undefined) thingValue = null; 48688 P.component.set(thingItem, thingValue, options); 48689 } 48690 if (thingItem == "select" || thingItem == "clear") { 48691 $ELEMENT.val(thingItem == "clear" ? "" : P.get(thingItem, SETTINGS.format)).trigger("change"); 48692 } 48693 } 48694 P.render(); 48695 } 48696 return options.muted ? P : P.trigger("set", thingObject); 48697 }, 48698 get: function (thing, format) { 48699 thing = thing || "value"; 48700 if (STATE[thing] != null) { 48701 return STATE[thing]; 48702 } 48703 if (thing == "valueSubmit") { 48704 if (P._hidden) { 48705 return P._hidden.value; 48706 } 48707 thing = "value"; 48708 } 48709 if (thing == "value") { 48710 return ELEMENT.value; 48711 } 48712 if (thing in P.component.item) { 48713 if (typeof format == "string") { 48714 var thingValue = P.component.get(thing); 48715 return thingValue ? PickerConstructor._.trigger(P.component.formats.toString, P.component, [format, thingValue]) : ""; 48716 } 48717 return P.component.get(thing); 48718 } 48719 }, 48720 on: function (thing, method, internal) { 48721 var thingName, 48722 thingMethod, 48723 thingIsObject = $.isPlainObject(thing), 48724 thingObject = thingIsObject ? thing : {}; 48725 if (thing) { 48726 if (!thingIsObject) { 48727 thingObject[thing] = method; 48728 } 48729 for (thingName in thingObject) { 48730 thingMethod = thingObject[thingName]; 48731 if (internal) { 48732 thingName = "_" + thingName; 48733 } 48734 STATE.methods[thingName] = STATE.methods[thingName] || []; 48735 STATE.methods[thingName].push(thingMethod); 48736 } 48737 } 48738 return P; 48739 }, 48740 off: function () { 48741 var i, 48742 thingName, 48743 names = arguments; 48744 for (i = 0, namesCount = names.length; i < namesCount; i += 1) { 48745 thingName = names[i]; 48746 if (thingName in STATE.methods) { 48747 delete STATE.methods[thingName]; 48748 } 48749 } 48750 return P; 48751 }, 48752 trigger: function (name, data) { 48753 var _trigger = function (name) { 48754 var methodList = STATE.methods[name]; 48755 if (methodList) { 48756 methodList.map(function (method) { 48757 PickerConstructor._.trigger(method, P, [data]); 48758 }); 48759 } 48760 }; 48761 _trigger("_" + name); 48762 _trigger(name); 48763 return P; 48764 }, 48765 }); 48766 function createWrappedComponent() { 48767 return PickerConstructor._.node( 48768 "div", 48769 PickerConstructor._.node("div", PickerConstructor._.node("div", PickerConstructor._.node("div", P.component.nodes(STATE.open), CLASSES.box), CLASSES.wrap), CLASSES.frame), 48770 CLASSES.holder, 48771 'tabindex="-1"' 48772 ); 48773 } 48774 function prepareElement() { 48775 $ELEMENT 48776 .data(NAME, P) 48777 .addClass(CLASSES.input) 48778 .val($ELEMENT.data("value") ? P.get("select", SETTINGS.format) : ELEMENT.value); 48779 if (!SETTINGS.editable) { 48780 $ELEMENT 48781 .on("focus." + STATE.id + " click." + STATE.id, function (event) { 48782 event.preventDefault(); 48783 P.open(); 48784 })
48785 .on("keydown." + STATE.id, handleKeydownEvent); 48786 } 48787 aria(ELEMENT, { haspopup: true, expanded: false, readonly: false, owns: ELEMENT.id + "_root" }); 48788 } 48789 function prepareElementRoot() { 48790 aria(P.$root[0], "hidden", true); 48791 } 48792 function prepareElementHolder() { 48793 P.$holder 48794 .on({ 48795 keydown: handleKeydownEvent, 48796 "focus.toOpen": handleFocusToOpenEvent, 48797 blur: function () { 48798 $ELEMENT.removeClass(CLASSES.target); 48799 }, 48800 focusin: function (event) { 48801 P.$root.removeClass(CLASSES.focused); 48802 event.stopPropagation(); 48803 }, 48804 "mousedown click": function (event) { 48805 var target = event.target; 48806 if (target != P.$holder[0]) { 48807 event.stopPropagation(); 48808 if (event.type == "mousedown" && !$(target).is("input, select, textarea, button, option")) { 48809 event.preventDefault(); 48810 P.$holder[0].focus(); 48811 } 48812 } 48813 }, 48814 }) 48815 .on("click", "[data-pick], [data-nav], [data-clear], [data-close]", function () { 48816 var $target = $(this), 48817 targetData = $target.data(), 48818 targetDisabled = $target.hasClass(CLASSES.navDisabled) || $target.hasClass(CLASSES.disabled), 48819 activeElement = getActiveElement(); 48820 activeElement = activeElement && (activeElement.type || activeElement.href); 48821 if (targetDisabled || (activeElement && !$.contains(P.$root[0], activeElement))) { 48822 P.$holder[0].focus(); 48823 } 48824 if (!targetDisabled && targetData.nav) { 48825 P.set("highlight", P.component.item.highlight, { nav: targetData.nav }); 48826 } else if (!targetDisabled && "pick" in targetData) { 48827 P.set("select", targetData.pick); 48828 if (SETTINGS.closeOnSelect) { 48829 P.close(true); 48830 } 48831 } else if (targetData.clear) { 48832 P.clear(); 48833 if (SETTINGS.closeOnClear) { 48834 P.close(true); 48835 } 48836 } else if (targetData.close) { 48837 P.close(true); 48838 } 48839 }); 48840 } 48841 function prepareElementHidden() { 48842 var name; 48843 if (SETTINGS.hiddenName === true) { 48844 name = ELEMENT.name; 48845 ELEMENT.name = ""; 48846 } else { 48847 name = [typeof SETTINGS.hiddenPrefix == "string" ? SETTINGS.hiddenPrefix : "", typeof SETTINGS.hiddenSuffix == "string" ? SETTINGS.hiddenSuffix : "_submit"]; 48848 name = name[0] + ELEMENT.name + name[1]; 48849 } 48850 P._hidden = $("<input " + "type=hidden " + 'name="' + name + '"' + ($ELEMENT.data("value") || ELEMENT.value ? ' value="' + P.get("select", SETTINGS.formatSubmit) + '"' : "") + ">")[0]; 48851 $ELEMENT.on("change." + STATE.id, function () { 48852 P._hidden.value = ELEMENT.value ? P.get("select", SETTINGS.formatSubmit) : ""; 48853 }); 48854 } 48855 function focusPickerOnceOpened() { 48856 if (IS_DEFAULT_THEME && supportsTransitions) { 48857 P.$holder.find("." + CLASSES.frame).one("transitionend", function () { 48858 P.$holder[0].focus(); 48859 }); 48860 } else { 48861 P.$holder[0].focus(); 48862 } 48863 } 48864 function handleFocusToOpenEvent(event) { 48865 event.stopPropagation(); 48866 $ELEMENT.addClass(CLASSES.target); 48867 P.$root.addClass(CLASSES.focused); 48868 P.open(); 48869 } 48870 function handleKeydownEvent(event) { 48871 var keycode = event.keyCode, 48872 isKeycodeDelete = /^(8|46)$/.test(keycode); 48873 if (keycode == 27) { 48874 P.close(true); 48875 return false;
48876 } 48877 if (keycode == 32 || isKeycodeDelete || (!STATE.open && P.component.key[keycode])) { 48878 event.preventDefault(); 48879 event.stopPropagation(); 48880 if (isKeycodeDelete) { 48881 P.clear().close(); 48882 } else { 48883 P.open(); 48884 } 48885 } 48886 } 48887 return new PickerInstance(); 48888 } 48889 PickerConstructor.klasses = function (prefix) { 48890 prefix = prefix || "picker"; 48891 return { 48892 picker: prefix, 48893 opened: prefix + "--opened", 48894 focused: prefix + "--focused", 48895 input: prefix + "__input", 48896 active: prefix + "__input--active", 48897 target: prefix + "__input--target", 48898 holder: prefix + "__holder", 48899 frame: prefix + "__frame", 48900 wrap: prefix + "__wrap", 48901 box: prefix + "__box", 48902 }; 48903 }; 48904 function isUsingDefaultTheme(element) { 48905 var theme, 48906 prop = "position"; 48907 if (element.currentStyle) { 48908 theme = element.currentStyle[prop]; 48909 } else if (window.getComputedStyle) { 48910 theme = getComputedStyle(element)[prop]; 48911 } 48912 return theme == "fixed"; 48913 } 48914 function getScrollbarWidth() { 48915 if ($html.height() <= $window.height()) { 48916 return 0; 48917 } 48918 var $outer = $('<div style="visibility:hidden;width:100px" />').appendTo("body"); 48919 var widthWithoutScroll = $outer[0].offsetWidth; 48920 $outer.css("overflow", "scroll"); 48921 var $inner = $('<div style="width:100%" />').appendTo($outer); 48922 var widthWithScroll = $inner[0].offsetWidth; 48923 $outer.remove(); 48924 return widthWithoutScroll - widthWithScroll; 48925 } 48926 PickerConstructor._ = { 48927 group: function (groupObject) { 48928 var loopObjectScope, 48929 nodesList = "", 48930 counter = PickerConstructor._.trigger(groupObject.min, groupObject); 48931 for (; counter <= PickerConstructor._.trigger(groupObject.max, groupObject, [counter]); counter += groupObject.i) { 48932 loopObjectScope = PickerConstructor._.trigger(groupObject.item, groupObject, [counter]); 48933 nodesList += PickerConstructor._.node(groupObject.node, loopObjectScope[0], loopObjectScope[1], loopObjectScope[2]); 48934 } 48935 return nodesList; 48936 }, 48937 node: function (wrapper, item, klass, attribute) { 48938 if (!item) return ""; 48939 item = $.isArray(item) ? item.join("") : item; 48940 klass = klass ? ' class="' + klass + '"' : ""; 48941 attribute = attribute ? " " + attribute : ""; 48942 return "<" + wrapper + klass + attribute + ">" + item + "</" + wrapper + ">"; 48943 }, 48944 lead: function (number) { 48945 return (number < 10 ? "0" : "") + number; 48946 }, 48947 trigger: function (callback, scope, args) { 48948 return typeof callback == "function" ? callback.apply(scope, args || []) : callback; 48949 }, 48950 digits: function (string) { 48951 return /\d/.test(string[1]) ? 2 : 1; 48952 }, 48953 isDate: function (value) { 48954 return {}.toString.call(value).indexOf("Date") > -1 && this.isInteger(value.getDate()); 48955 }, 48956 isInteger: function (value) { 48957 return {}.toString.call(value).indexOf("Number") > -1 && value % 1 === 0; 48958 }, 48959 ariaAttr: ariaAttr, 48960 }; 48961 PickerConstructor.extend = function (name, Component) { 48962 $.fn[name] = function (options, action) { 48963 var componentData = this.data(name); 48964 if (options == "picker") { 48965 return componentData; 48966 } 48967 if (componentData && typeof options == "string") { 48968 return PickerConstructor._.trigger(componentData[options], componentData, [action]); 48969 } 48970 return this.each(function () { 48971 var $this = $(this); 48972 if (!$this.data(name)) { 48973 new PickerConstructor(this, name, Component, options); 48974 } 48975 }); 48976 }; 48977 $.fn[name].defaults = Component.defaults; 48978 }; 48979 function aria(element, attribute, value) { 48980 if ($.isPlainObject(attribute)) { 48981 for (var key in attribute) { 48982 ariaSet(element, key, attribute[key]); 48983 } 48984 } else { 48985 ariaSet(element, attribute, value); 48986 } 48987 } 48988 function ariaSet(element, attribute, value) { 48989 element.setAttribute((attribute == "role" ? "" : "aria-") + attribute, value); 48990 } 48991 function ariaAttr(attribute, data) { 48992 if (!$.isPlainObject(attribute)) { 48993 attribute = { attribute: data }; 48994 } 48995 data = ""; 48996 for (var key in attribute) { 48997 var attr = (key == "role" ? "" : "aria-") + key, 48998 attrVal = attribute[key]; 48999 data += attrVal == null ? "" : attr + '="' + attribute[key] + '"'; 49000 } 49001 return data; 49002 } 49003 function getActiveElement() { 49004 try { 49005 return document.activeElement; 49006 } catch (err) {} 49007 } 49008 return PickerConstructor; 49009}); 49010(function (factory) { 49011 if (typeof define == "function" && define.amd) define(["picker", "jquery"], factory); 49012 else if (typeof exports == "object") module.exports = factory(require("./picker.js"), require("jquery")); 49013 else factory(Picker, jQuery); 49014})(function (Picker, $) { 49015 var DAYS_IN_WEEK = 7, 49016 WEEKS_IN_CALENDAR = 6, 49017 _ = Picker._; 49018 function DatePicker(picker, settings) { 49019 var calendar = this, 49020 element = picker.$node[0], 49021 elementValue = element.value, 49022 elementDataValue = picker.$node.data("value"), 49023 valueString = elementDataValue || elementValue, 49024 formatString = elementDataValue ? settings.formatSubmit : settings.format, 49025 isRTL = function () { 49026 return element.currentStyle ? element.currentStyle.direction == "rtl" : getComputedStyle(picker.$root[0]).direction == "rtl"; 49027 }; 49028 calendar.settings = settings; 49029 calendar.$node = picker.$node; 49030 calendar.queue = { 49031 min: "measure create", 49032 max: "measure create", 49033 now: "now create", 49034 select: "parse create validate", 49035 highlight: "parse navigate create validate", 49036 view: "parse create validate viewset", 49037 disable: "deactivate", 49038 enable: "activate", 49039 }; 49040 calendar.item = {}; 49041 calendar.item.clear = null; 49042 calendar.item.disable = (settings.disable || []).slice(0); 49043 calendar.item.enable = -(function (collectionDisabled) { 49044 return collectionDisabled[0] === true ? collectionDisabled.shift() : -1; 49045 })(calendar.item.disable); 49046 calendar.set("min", settings.min).set("max", settings.max).set("now"); 49047 if (valueString) { 49048 calendar.set("select", valueString, { format: formatString, defaultValue: true }); 49049 } else { 49050 calendar.set("select", null).set("highlight", calendar.item.now); 49051 } 49052 calendar.key = { 49053 40: 7, 49054 38: -7, 49055 39: function () { 49056 return isRTL() ? -1 : 1; 49057 }, 49058 37: function () { 49059 return isRTL() ? 1 : -1; 49060 }, 49061 go: function (timeChange) { 49062 var highlightedObject = calendar.item.highlight, 49063 targetDate = new Date(highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange); 49064 calendar.set("highlight", targetDate, { interval: timeChange }); 49065 this.render(); 49066 }, 49067 }; 49068 picker 49069 .on( 49070 "render", 49071 function () { 49072 picker.$root.find("." + settings.klass.selectMonth).on("change", function () { 49073 var value = this.value; 49074 if (value) { 49075 picker.set("highlight", [picker.get("view").year, value, picker.get("highlight").date]); 49076 picker.$root.find("." + settings.klass.selectMonth).trigger("focus"); 49077 } 49078 }); 49079 picker.$root.find("." + settings.klass.selectYear).on("change", function () { 49080 var value = this.value; 49081 if (value) { 49082 picker.set("highlight", [value, picker.get("view").month, picker.get("highlight").date]); 49083 picker.$root.find("." + settings.klass.selectYear).trigger("focus"); 49084 } 49085 }); 49086 }, 49087 1 49088 ) 49089 .on( 49090 "open", 49091 function () { 49092 var includeToday = ""; 49093 if (calendar.disabled(calendar.get("now"))) { 49094 includeToday = ":not(." + settings.klass.buttonToday + ")"; 49095 } 49096 picker.$root.find("button" + includeToday + ", select").attr("disabled", false); 49097 }, 49098 1 49099 ) 49100 .on( 49101 "close", 49102 function () { 49103 picker.$root.find("button, select").attr("disabled", true); 49104 }, 49105 1 49106 ); 49107 } 49108 DatePicker.prototype.set = function (type, value, options) { 49109 var calendar = this, 49110 calendarItem = calendar.item; 49111 if (value === null) { 49112 if (type == "clear") type = "select"; 49113 calendarItem[type] = value; 49114 return calendar; 49115 } 49116 calendarItem[type == "enable" ? "disable" : type == "flip" ? "enable" : type] = calendar.queue[type] 49117 .split(" ") 49118 .map(function (method) { 49119 value = calendar[method](type, value, options); 49120 return value; 49121 }) 49122 .pop(); 49123 if (type == "select") { 49124 calendar.set("highlight", calendarItem.select, options); 49125 } else if (type == "highlight") { 49126 calendar.set("view", calendarItem.highlight, options); 49127 } else if (type.match(/^(flip|min|max|disable|enable)$/)) { 49128 if (calendarItem.select && calendar.disabled(calendarItem.select)) { 49129 calendar.set("select", calendarItem.select, options); 49130 } 49131 if (calendarItem.highlight && calendar.disabled(calendarItem.highlight)) { 49132 calendar.set("highlight", calendarItem.highlight, options); 49133 } 49134 } 49135 return calendar; 49136 }; 49137 DatePicker.prototype.get = function (type) { 49138 return this.item[type]; 49139 }; 49140 DatePicker.prototype.create = function (type, value, options) { 49141 var isInfiniteValue, 49142 calendar = this; 49143 value = value === undefined ? type : value; 49144 if (value == -Infinity || value == Infinity) { 49145 isInfiniteValue = value; 49146 } else if ($.isPlainObject(value) && _.isInteger(value.pick)) { 49147 value = value.obj; 49148 } else if ($.isArray(value)) { 49149 value = new Date(value[0], value[1], value[2]); 49150 value = _.isDate(value) ? value : calendar.create().obj; 49151 } else if (_.isInteger(value) || _.isDate(value)) { 49152 value = calendar.normalize(new Date(value), options); 49153 } else { 49154 value = calendar.now(type, value, options); 49155 } 49156 return { 49157 year: isInfiniteValue || value.getFullYear(), 49158 month: isInfiniteValue || value.getMonth(), 49159 date: isInfiniteValue || value.getDate(), 49160 day: isInfiniteValue || value.getDay(), 49161 obj: isInfiniteValue || value, 49162 pick: isInfiniteValue || value.getTime(), 49163 }; 49164 }; 49165 DatePicker.prototype.createRange = function (from, to) { 49166 var calendar = this, 49167 createDate = function (date) { 49168 if (date === true || $.isArray(date) || _.isDate(date)) { 49169 return calendar.create(date); 49170 } 49171 return date; 49172 }; 49173 if (!_.isInteger(from)) { 49174 from = createDate(from); 49175 } 49176 if (!_.isInteger(to)) { 49177 to = createDate(to); 49178 } 49179 if (_.isInteger(from) && $.isPlainObject(to)) { 49180 from = [to.year, to.month, to.date + from]; 49181 } else if (_.isInteger(to) && $.isPlainObject(from)) { 49182 to = [from.year, from.month, from.date + to]; 49183 } 49184 return { from: createDate(from), to: createDate(to) }; 49185 }; 49186 DatePicker.prototype.withinRange = function (range, dateUnit) { 49187 range = this.createRange(range.from, range.to); 49188 return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick; 49189 }; 49190 DatePicker.prototype.overlapRanges = function (one, two) { 49191 var calendar = this; 49192 one = calendar.createRange(one.from, one.to); 49193 two = calendar.createRange(two.from, two.to); 49194 return calendar.withinRange(one, two.from) || calendar.withinRange(one, two.to) || calendar.withinRange(two, one.from) || calendar.withinRange(two, one.to); 49195 }; 49196 DatePicker.prototype.now = function (type, value, options) { 49197 value = new Date(); 49198 if (options && options.rel) { 49199 value.setDate(value.getDate() + options.rel); 49200 } 49201 return this.normalize(value, options); 49202 }; 49203 DatePicker.prototype.navigate = function (type, value, options) { 49204 var targetDateObject, 49205 targetYear, 49206 targetMonth, 49207 targetDate, 49208 isTargetArray = $.isArray(value),
49209 isTargetObject = $.isPlainObject(value), 49210 viewsetObject = this.item.view; 49211 if (isTargetArray || isTargetObject) { 49212 if (isTargetObject) { 49213 targetYear = value.year; 49214 targetMonth = value.month; 49215 targetDate = value.date; 49216 } else { 49217 targetYear = +value[0]; 49218 targetMonth = +value[1]; 49219 targetDate = +value[2]; 49220 } 49221 if (options && options.nav && viewsetObject && viewsetObject.month !== targetMonth) { 49222 targetYear = viewsetObject.year; 49223 targetMonth = viewsetObject.month; 49224 } 49225 targetDateObject = new Date(targetYear, targetMonth + (options && options.nav ? options.nav : 0), 1); 49226 targetYear = targetDateObject.getFullYear(); 49227 targetMonth = targetDateObject.getMonth(); 49228 while (new Date(targetYear, targetMonth, targetDate).getMonth() !== targetMonth) { 49229 targetDate -= 1; 49230 } 49231 value = [targetYear, targetMonth, targetDate]; 49232 } 49233 return value; 49234 }; 49235 DatePicker.prototype.normalize = function (value) { 49236 value.setHours(0, 0, 0, 0); 49237 return value; 49238 }; 49239 DatePicker.prototype.measure = function (type, value) { 49240 var calendar = this; 49241 if (!value) { 49242 value = type == "min" ? -Infinity : Infinity; 49243 } else if (typeof value == "string") { 49244 value = calendar.parse(type, value); 49245 } else if (_.isInteger(value)) { 49246 value = calendar.now(type, value, { rel: value }); 49247 } 49248 return value; 49249 }; 49250 DatePicker.prototype.viewset = function (type, dateObject) { 49251 return this.create([dateObject.year, dateObject.month, 1]); 49252 }; 49253 DatePicker.prototype.validate = function (type, dateObject, options) { 49254 var calendar = this, 49255 originalDateObject = dateObject, 49256 interval = options && options.interval ? options.interval : 1, 49257 isFlippedBase = calendar.item.enable === -1, 49258 hasEnabledBeforeTarget, 49259 hasEnabledAfterTarget, 49260 minLimitObject = calendar.item.min, 49261 maxLimitObject = calendar.item.max, 49262 reachedMin, 49263 reachedMax, 49264 hasEnabledWeekdays = 49265 isFlippedBase && 49266 calendar.item.disable.filter(function (value) { 49267 if ($.isArray(value)) { 49268 var dateTime = calendar.create(value).pick; 49269 if (dateTime < dateObject.pick) hasEnabledBeforeTarget = true; 49270 else if (dateTime > dateObject.pick) hasEnabledAfterTarget = true; 49271 } 49272 return _.isInteger(value); 49273 }).length; 49274 if (!options || (!options.nav && !options.defaultValue)) 49275 if ( 49276 (!isFlippedBase && calendar.disabled(dateObject)) || 49277 (isFlippedBase && calendar.disabled(dateObject) && (hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget)) || 49278 (!isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick)) 49279 ) { 49280 if (isFlippedBase && !hasEnabledWeekdays && ((!hasEnabledAfterTarget && interval > 0) || (!hasEnabledBeforeTarget && interval < 0))) { 49281 interval *= -1; 49282 } 49283 while (calendar.disabled(dateObject)) { 49284 if (Math.abs(interval) > 1 && (dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month)) { 49285 dateObject = originalDateObject; 49286 interval = interval > 0 ? 1 : -1; 49287 } 49288 if (dateObject.pick <= minLimitObject.pick) { 49289 reachedMin = true; 49290 interval = 1; 49291 dateObject = calendar.create([minLimitObject.year, minLimitObject.month, minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)]); 49292 } else if (dateObject.pick >= maxLimitObject.pick) { 49293 reachedMax = true; 49294 interval = -1; 49295 dateObject = calendar.create([maxLimitObject.year, maxLimitObject.month, maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)]); 49296 } 49297 if (reachedMin && reachedMax) { 49298 break; 49299 } 49300 dateObject = calendar.create([dateObject.year, dateObject.month, dateObject.date + interval]); 49301 } 49302 } 49303 return dateObject; 49304 }; 49305 DatePicker.prototype.disabled = function (dateToVerify) { 49306 var calendar = this, 49307 isDisabledMatch = calendar.item.disable.filter(function (dateToDisable) { 49308 if (_.isInteger(dateToDisable)) { 49309 return dateToVerify.day === (calendar.settings.firstDay ? dateToDisable : dateToDisable - 1) % 7; 49310 } 49311 if ($.isArray(dateToDisable) || _.isDate(dateToDisable)) { 49312 return dateToVerify.pick === calendar.create(dateToDisable).pick; 49313 } 49314 if ($.isPlainObject(dateToDisable)) { 49315 return calendar.withinRange(dateToDisable, dateToVerify); 49316 } 49317 }); 49318 isDisabledMatch = 49319 isDisabledMatch.length && 49320 !isDisabledMatch.filter(function (dateToDisable) { 49321 return ($.isArray(dateToDisable) && dateToDisable[3] == "inverted") || ($.isPlainObject(dateToDisable) && dateToDisable.inverted); 49322 }).length; 49323 return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch || dateToVerify.pick < calendar.item.min.pick || dateToVerify.pick > calendar.item.max.pick; 49324 }; 49325 DatePicker.prototype.parse = function (type, value, options) { 49326 var calendar = this, 49327 parsingObject = {}; 49328 if (!value || typeof value != "string") { 49329 return value; 49330 } 49331 if (!(options && options.format)) { 49332 options = options || {}; 49333 options.format = calendar.settings.format; 49334 } 49335 calendar.formats.toArray(options.format).map(function (label) { 49336 var formattingLabel = calendar.formats[label], 49337 formatLength = formattingLabel ? _.trigger(formattingLabel, calendar, [value, parsingObject]) : label.replace(/^!/, "").length; 49338 if (formattingLabel) { 49339 parsingObject[label] = value.substr(0, formatLength); 49340 } 49341 value = value.substr(formatLength); 49342 }); 49343 return [parsingObject.yyyy || parsingObject.yy, +(parsingObject.mm || parsingObject.m) - 1, parsingObject.dd || parsingObject.d]; 49344 }; 49345 DatePicker.prototype.formats = (function () { 49346 function getWordLengthFromCollection(string, collection, dateObject) { 49347 var word = string.match(/[^\x00-\x7F]+|\w+/)[0]; 49348 if (!dateObject.mm && !dateObject.m) { 49349 dateObject.m = collection.indexOf(word) + 1; 49350 } 49351 return word.length; 49352 } 49353 function getFirstWordLength(string) { 49354 return string.match(/\w+/)[0].length; 49355 } 49356 return { 49357 d: function (string, dateObject) { 49358 return string ? _.digits(string) : dateObject.date; 49359 }, 49360 dd: function (string, dateObject) { 49361 return string ? 2 : _.lead(dateObject.date); 49362 }, 49363 ddd: function (string, dateObject) { 49364 return string ? getFirstWordLength(string) : this.settings.weekdaysShort[dateObject.day]; 49365 }, 49366 dddd: function (string, dateObject) { 49367 return string ? getFirstWordLength(string) : this.settings.weekdaysFull[dateObject.day]; 49368 }, 49369 m: function (string, dateObject) { 49370 return string ? _.digits(string) : dateObject.month + 1; 49371 }, 49372 mm: function (string, dateObject) { 49373 return string ? 2 : _.lead(dateObject.month + 1); 49374 }, 49375 mmm: function (string, dateObject) { 49376 var collection = this.settings.monthsShort; 49377 return string ? getWordLengthFromCollection(string, collection, dateObject) : collection[dateObject.month]; 49378 }, 49379 mmmm: function (string, dateObject) { 49380 var collection = this.settings.monthsFull; 49381 return string ? getWordLengthFromCollection(string, collection, dateObject) : collection[dateObject.month]; 49382 }, 49383 yy: function (string, dateObject) { 49384 return string ? 2 : ("" + dateObject.year).slice(2); 49385 }, 49386 yyyy: function (string, dateObject) { 49387 return string ? 4 : dateObject.year; 49388 }, 49389 toArray: function (formatString) { 49390 return formatString.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g); 49391 }, 49392 toString: function (formatString, itemObject) { 49393 var calendar = this; 49394 return calendar.formats 49395 .toArray(formatString) 49396 .map(function (label) { 49397 return _.trigger(calendar.formats[label], calendar, [0, itemObject]) || label.replace(/^!/, ""); 49398 }) 49399 .join(""); 49400 }, 49401 }; 49402 })(); 49403 DatePicker.prototype.isDateExact = function (one, two) { 49404 var calendar = this; 49405 if ((_.isInteger(one) && _.isInteger(two)) || (typeof one == "boolean" && typeof two == "boolean")) { 49406 return one === two; 49407 } 49408 if ((_.isDate(one) || $.isArray(one)) && (_.isDate(two) || $.isArray(two))) { 49409 return calendar.create(one).pick === calendar.create(two).pick; 49410 } 49411 if ($.isPlainObject(one) && $.isPlainObject(two)) { 49412 return calendar.isDateExact(one.from, two.from) && calendar.isDateExact(one.to, two.to); 49413 } 49414 return false;
49415 }; 49416 DatePicker.prototype.isDateOverlap = function (one, two) { 49417 var calendar = this, 49418 firstDay = calendar.settings.firstDay ? 1 : 0; 49419 if (_.isInteger(one) && (_.isDate(two) || $.isArray(two))) { 49420 one = (one % 7) + firstDay; 49421 return one === calendar.create(two).day + 1; 49422 } 49423 if (_.isInteger(two) && (_.isDate(one) || $.isArray(one))) { 49424 two = (two % 7) + firstDay; 49425 return two === calendar.create(one).day + 1; 49426 } 49427 if ($.isPlainObject(one) && $.isPlainObject(two)) { 49428 return calendar.overlapRanges(one, two); 49429 } 49430 return false; 49431 }; 49432 DatePicker.prototype.flipEnable = function (val) { 49433 var itemObject = this.item; 49434 itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1); 49435 }; 49436 DatePicker.prototype.deactivate = function (type, datesToDisable) { 49437 var calendar = this, 49438 disabledItems = calendar.item.disable.slice(0); 49439 if (datesToDisable == "flip") { 49440 calendar.flipEnable(); 49441 } else if (datesToDisable === false) { 49442 calendar.flipEnable(1); 49443 disabledItems = []; 49444 } else if (datesToDisable === true) { 49445 calendar.flipEnable(-1); 49446 disabledItems = []; 49447 } else { 49448 datesToDisable.map(function (unitToDisable) { 49449 var matchFound; 49450 for (var index = 0; index < disabledItems.length; index += 1) { 49451 if (calendar.isDateExact(unitToDisable, disabledItems[index])) { 49452 matchFound = true; 49453 break; 49454 } 49455 } 49456 if (!matchFound) { 49457 if (_.isInteger(unitToDisable) || _.isDate(unitToDisable) || $.isArray(unitToDisable) || ($.isPlainObject(unitToDisable) && unitToDisable.from && unitToDisable.to)) { 49458 disabledItems.push(unitToDisable); 49459 } 49460 } 49461 }); 49462 } 49463 return disabledItems; 49464 }; 49465 DatePicker.prototype.activate = function (type, datesToEnable) { 49466 var calendar = this, 49467 disabledItems = calendar.item.disable, 49468 disabledItemsCount = disabledItems.length; 49469 if (datesToEnable == "flip") { 49470 calendar.flipEnable(); 49471 } else if (datesToEnable === true) { 49472 calendar.flipEnable(1); 49473 disabledItems = []; 49474 } else if (datesToEnable === false) { 49475 calendar.flipEnable(-1); 49476 disabledItems = []; 49477 } else { 49478 datesToEnable.map(function (unitToEnable) { 49479 var matchFound, disabledUnit, index, isExactRange; 49480 for (index = 0; index < disabledItemsCount; index += 1) { 49481 disabledUnit = disabledItems[index]; 49482 if (calendar.isDateExact(disabledUnit, unitToEnable)) { 49483 matchFound = disabledItems[index] = null; 49484 isExactRange = true; 49485 break; 49486 } else if (calendar.isDateOverlap(disabledUnit, unitToEnable)) { 49487 if ($.isPlainObject(unitToEnable)) { 49488 unitToEnable.inverted = true; 49489 matchFound = unitToEnable; 49490 } else if ($.isArray(unitToEnable)) { 49491 matchFound = unitToEnable; 49492 if (!matchFound[3]) matchFound.push("inverted"); 49493 } else if (_.isDate(unitToEnable)) { 49494 matchFound = [unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), "inverted"]; 49495 } 49496 break; 49497 } 49498 } 49499 if (matchFound) 49500 for (index = 0; index < disabledItemsCount; index += 1) { 49501 if (calendar.isDateExact(disabledItems[index], unitToEnable)) { 49502 disabledItems[index] = null; 49503 break; 49504 } 49505 } 49506 if (isExactRange) 49507 for (index = 0; index < disabledItemsCount; index += 1) { 49508 if (calendar.isDateOverlap(disabledItems[index], unitToEnable)) { 49509 disabledItems[index] = null; 49510 break; 49511 } 49512 } 49513 if (matchFound) { 49514 disabledItems.push(matchFound); 49515 } 49516 }); 49517 } 49518 return disabledItems.filter(function (val) { 49519 return val != null; 49520 }); 49521 }; 49522 DatePicker.prototype.nodes = function (isOpen) { 49523 var calendar = this, 49524 settings = calendar.settings, 49525 calendarItem = calendar.item, 49526 nowObject = calendarItem.now, 49527 selectedObject = calendarItem.select, 49528 highlightedObject = calendarItem.highlight, 49529 viewsetObject = calendarItem.view, 49530 disabledCollection = calendarItem.disable, 49531 minLimitObject = calendarItem.min, 49532 maxLimitObject = calendarItem.max, 49533 tableHead = (function (collection, fullCollection) { 49534 if (settings.firstDay) { 49535 collection.push(collection.shift()); 49536 fullCollection.push(fullCollection.shift()); 49537 }
49538 return _.node( 49539 "thead", 49540 _.node( 49541 "tr", 49542 _.group({ 49543 min: 0, 49544 max: DAYS_IN_WEEK - 1, 49545 i: 1, 49546 node: "th", 49547 item: function (counter) { 49548 return [collection[counter], settings.klass.weekdays, 'scope=col title="' + fullCollection[counter] + '"']; 49549 }, 49550 }) 49551 ) 49552 ); 49553 })((settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort).slice(0), settings.weekdaysFull.slice(0)), 49554 createMonthNav = function (next) { 49555 return _.node( 49556 "div", 49557 " ", 49558 settings.klass["nav" + (next ? "Next" : "Prev")] + 49559 ((next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month) || (!next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month) 49560 ? " " + settings.klass.navDisabled 49561 : ""), 49562 "data-nav=" + (next || -1) + " " + _.ariaAttr({ role: "button", controls: calendar.$node[0].id + "_table" }) + " " + 'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev) + '"' 49563 ); 49564 }, 49565 createMonthLabel = function () { 49566 var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull; 49567 if (settings.selectMonths) { 49568 return _.node( 49569 "select", 49570 _.group({ 49571 min: 0, 49572 max: 11, 49573 i: 1, 49574 node: "option", 49575 item: function (loopedMonth) { 49576 return [ 49577 monthsCollection[loopedMonth], 49578 0, 49579 "value=" + 49580 loopedMonth + 49581 (viewsetObject.month == loopedMonth ? " selected" : "") + 49582 ((viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month) || (viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month) ? " disabled" : ""), 49583 ]; 49584 }, 49585 }), 49586 settings.klass.selectMonth, 49587 (isOpen ? "" : "disabled") + " " + _.ariaAttr({ controls: calendar.$node[0].id + "_table" }) + " " + 'title="' + settings.labelMonthSelect + '"' 49588 ); 49589 } 49590 return _.node("div", monthsCollection[viewsetObject.month], settings.klass.month); 49591 }, 49592 createYearLabel = function () { 49593 var focusedYear = viewsetObject.year, 49594 numberYears = settings.selectYears === true ? 5 : ~~(settings.selectYears / 2); 49595 if (numberYears) { 49596 var minYear = minLimitObject.year, 49597 maxYear = maxLimitObject.year, 49598 lowestYear = focusedYear - numberYears, 49599 highestYear = focusedYear + numberYears; 49600 if (minYear > lowestYear) { 49601 highestYear += minYear - lowestYear; 49602 lowestYear = minYear; 49603 } 49604 if (maxYear < highestYear) { 49605 var availableYears = lowestYear - minYear, 49606 neededYears = highestYear - maxYear; 49607 lowestYear -= availableYears > neededYears ? neededYears : availableYears; 49608 highestYear = maxYear; 49609 }
49610 return _.node( 49611 "select", 49612 _.group({ 49613 min: lowestYear, 49614 max: highestYear, 49615 i: 1, 49616 node: "option", 49617 item: function (loopedYear) { 49618 return [loopedYear, 0, "value=" + loopedYear + (focusedYear == loopedYear ? " selected" : "")]; 49619 }, 49620 }), 49621 settings.klass.selectYear, 49622 (isOpen ? "" : "disabled") + " " + _.ariaAttr({ controls: calendar.$node[0].id + "_table" }) + " " + 'title="' + settings.labelYearSelect + '"' 49623 ); 49624 } 49625 return _.node("div", focusedYear, settings.klass.year); 49626 }; 49627 return ( 49628 _.node("div", (settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel()) + createMonthNav() + createMonthNav(1), settings.klass.header) + 49629 _.node( 49630 "table", 49631 tableHead + 49632 _.node( 49633 "tbody", 49634 _.group({ 49635 min: 0, 49636 max: WEEKS_IN_CALENDAR - 1, 49637 i: 1, 49638 node: "tr", 49639 item: function (rowCounter) { 49640 var shiftDateBy = settings.firstDay && calendar.create([viewsetObject.year, viewsetObject.month, 1]).day === 0 ? -7 : 0; 49641 return [ 49642 _.group({ 49643 min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, 49644 max: function () { 49645 return this.min + DAYS_IN_WEEK - 1; 49646 }, 49647 i: 1, 49648 node: "td", 49649 item: function (targetDate) { 49650 targetDate = calendar.create([viewsetObject.year, viewsetObject.month, targetDate + (settings.firstDay ? 1 : 0)]); 49651 var isSelected = selectedObject && selectedObject.pick == targetDate.pick, 49652 isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick, 49653 isDisabled = (disabledCollection && calendar.disabled(targetDate)) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick, 49654 formattedDate = _.trigger(calendar.formats.toString, calendar, [settings.format, targetDate]); 49655 return [ 49656 _.node( 49657 "div", 49658 targetDate.date, 49659 (function (klasses) { 49660 klasses.push(viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus); 49661 if (nowObject.pick == targetDate.pick) { 49662 klasses.push(settings.klass.now); 49663 } 49664 if (isSelected) { 49665 klasses.push(settings.klass.selected); 49666 } 49667 if (isHighlighted) { 49668 klasses.push(settings.klass.highlighted); 49669 } 49670 if (isDisabled) { 49671 klasses.push(settings.klass.disabled); 49672 } 49673 return klasses.join(" "); 49674 })([settings.klass.day]), 49675 "data-pick=" + 49676 targetDate.pick + 49677 " " + 49678 _.ariaAttr({ 49679 role: "gridcell", 49680 label: formattedDate, 49681 selected: isSelected && calendar.$node.val() === formattedDate ? true : null, 49682 activedescendant: isHighlighted ? true : null, 49683 disabled: isDisabled ? true : null, 49684 }) 49685 ), 49686 "", 49687 _.ariaAttr({ role: "presentation" }), 49688 ]; 49689 }, 49690 }), 49691 ]; 49692 }, 49693 }) 49694 ), 49695 settings.klass.table, 49696 'id="' + calendar.$node[0].id + "_table" + '" ' + _.ariaAttr({ role: "grid", controls: calendar.$node[0].id, readonly: true }) 49697 ) + 49698 _.node( 49699 "div", 49700 _.node("button", settings.today, settings.klass.buttonToday, "type=button data-
49700pick=" + nowObject.pick + (isOpen && !calendar.disabled(nowObject) ? "" : " disabled") + " " + _.ariaAttr({ controls: calendar.$node[0].id })) + 49701 _.node("button", settings.clear, settings.klass.buttonClear, "type=button data-clear=1" + (isOpen ? "" : " disabled") + " " + _.ariaAttr({ controls: calendar.$node[0].id })) + 49702 _.node("button", settings.close, settings.klass.buttonClose, "type=button data-close=true " + (isOpen ? "" : " disabled") + " " + _.ariaAttr({ controls: calendar.$node[0].id })), 49703 settings.klass.footer 49704 ) 49705 ); 49706 }; 49707 DatePicker.defaults = (function (prefix) { 49708 return { 49709 labelMonthNext: "Next month", 49710 labelMonthPrev: "Previous month", 49711 labelMonthSelect: "Select a month", 49712 labelYearSelect: "Select a year", 49713 monthsFull: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], 49714 monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], 49715 weekdaysFull: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], 49716 weekdaysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 49717 today: "Today", 49718 clear: "Clear", 49719 close: "Close", 49720 closeOnSelect: true, 49721 closeOnClear: true, 49722 format: "d mmmm, yyyy", 49723 klass: { 49724 table: prefix + "table", 49725 header: prefix + "header", 49726 navPrev: prefix + "nav--prev", 49727 navNext: prefix + "nav--next", 49728 navDisabled: prefix + "nav--disabled", 49729 month: prefix + "month", 49730 year: prefix + "year", 49731 selectMonth: prefix + "select--month", 49732 selectYear: prefix + "select--year", 49733 weekdays: prefix + "weekday", 49734 day: prefix + "day", 49735 disabled: prefix + "day--disabled", 49736 selected: prefix + "day--selected", 49737 highlighted: prefix + "day--highlighted", 49738 now: prefix + "day--today", 49739 infocus: prefix + "day--infocus", 49740 outfocus: prefix + "day--outfocus", 49741 footer: prefix + "footer", 49742 buttonClear: prefix + "button--clear", 49743 buttonToday: prefix + "button--today", 49744 buttonClose: prefix + "button--close", 49745 }, 49746 }; 49747 })(Picker.klasses().picker + "__"); 49748 Picker.extend("pickadate", DatePicker); 49749}); 49750(function (factory) { 49751 if (typeof define == "function" && define.amd) define(["picker", "jquery"], factory); 49752 else if (typeof exports == "object") module.exports = factory(require("./picker.js"), require("jquery")); 49753 else factory(Picker, jQuery); 49754})(function (Picker, $) { 49755 var HOURS_IN_DAY = 24, 49756 MINUTES_IN_HOUR = 60, 49757 HOURS_TO_NOON = 12, 49758 MINUTES_IN_DAY = HOURS_IN_DAY * MINUTES_IN_HOUR, 49759 _ = Picker._; 49760 function TimePicker(picker, settings) { 49761 var clock = this, 49762 elementValue = picker.$node[0].value, 49763 elementDataValue = picker.$node.data("value"), 49764 valueString = elementDataValue || elementValue, 49765 formatString = elementDataValue ? settings.formatSubmit : settings.format; 49766 clock.settings = settings; 49767 clock.$node = picker.$node; 49768 clock.queue = { 49769 interval: "i", 49770 min: "measure create", 49771 max: "measure create", 49772 now: "now create", 49773 select: "parse create validate", 49774 highlight: "parse create validate", 49775 view: "parse create validate", 49776 disable: "deactivate", 49777 enable: "activate", 49778 }; 49779 clock.item = {}; 49780 clock.item.clear = null; 49781 clock.item.interval = settings.interval || 30; 49782 clock.item.disable = (settings.disable || []).slice(0); 49783 clock.item.enable = -(function (collectionDisabled) { 49784 return collectionDisabled[0] === true ? collectionDisabled.shift() : -1; 49785 })(clock.item.disable); 49786 clock.set("min", settings.min).set("max", settings.max).set("now"); 49787 if (valueString) { 49788 clock.set("select", valueString, { format: formatString }); 49789 } else { 49790 clock.set("select", null).set("highlight", clock.item.now); 49791 } 49792 clock.key = { 49793 40: 1, 49794 38: -1, 49795 39: 1, 49796 37: -1, 49797 go: function (timeChange) { 49798 clock.set("highlight", clock.item.highlight.pick + timeChange * clock.item.interval, { interval: timeChange * clock.item.interval }); 49799 this.render(); 49800 }, 49801 }; 49802 picker 49803 .on( 49804 "render", 49805 function () { 49806 var $pickerHolder = picker.$root.children(), 49807 $viewset = $pickerHolder.find("." + settings.klass.viewset), 49808 vendors = function (prop) { 49809 return ["webkit", "moz", "ms", "o", ""].map(function (vendor) { 49810 return (vendor ? "-" + vendor + "-" : "") + prop; 49811 }); 49812 }, 49813 animations = function ($el, state) { 49814 vendors("transform").map(function (prop) { 49815 $el.css(prop, state); 49816 }); 49817 vendors("transition").map(function (prop) { 49818 $el.css(prop, state); 49819 }); 49820 }; 49821 if ($viewset.length) { 49822 animations($pickerHolder, "none"); 49823 $pickerHolder[0].scrollTop = ~~$viewset.position().top - $viewset[0].clientHeight * 2; 49824 animations($pickerHolder, ""); 49825 } 49826 }, 49827 1 49828 ) 49829 .on( 49830 "open", 49831 function () { 49832 picker.$root.find("button").attr("disabled", false); 49833 }, 49834 1 49835 ) 49836 .on( 49837 "close", 49838 function () { 49839 picker.$root.find("button").attr("disabled", true); 49840 }, 49841 1 49842 ); 49843 } 49844 TimePicker.prototype.set = function (type, value, options) { 49845 var clock = this, 49846 clockItem = clock.item; 49847 if (value === null) { 49848 if (type == "clear") type = "select"; 49849 clockItem[type] = value; 49850 return clock; 49851 } 49852 clockItem[type == "enable" ? "disable" : type == "flip" ? "enable" : type] = clock.queue[type] 49853 .split(" ") 49854 .map(function (method) { 49855 value = clock[method](type, value, options); 49856 return value; 49857 }) 49858 .pop(); 49859 if (type == "select") { 49860 clock.set("highlight", clockItem.select, options); 49861 } else if (type == "highlight") { 49862 clock.set("view", clockItem.highlight, options); 49863 } else if (type == "interval") { 49864 clock.set("min", clockItem.min, options).set("max", clockItem.max, options); 49865 } else if (type.match(/^(flip|min|max|disable|enable)$/)) { 49866 if (clockItem.select && clock.disabled(clockItem.select)) { 49867 clock.set("select", value, options); 49868 } 49869 if (clockItem.highlight && clock.disabled(clockItem.highlight)) { 49870 clock.set("highlight", value, options); 49871 } 49872 if (type == "min") { 49873 clock.set("max", clockItem.max, options); 49874 } 49875 } 49876 return clock; 49877 }; 49878 TimePicker.prototype.get = function (type) { 49879 return this.item[type]; 49880 }; 49881 TimePicker.prototype.create = function (type, value, options) { 49882 var clock = this; 49883 value = value === undefined ? type : value; 49884 if (_.isDate(value)) { 49885 value = [value.getHours(), value.getMinutes()]; 49886 } 49887 if ($.isPlainObject(value) && _.isInteger(value.pick)) { 49888 value = value.pick; 49889 } else if ($.isArray(value)) { 49890 value = +value[0] * MINUTES_IN_HOUR + +value[1]; 49891 } else if (!_.isInteger(value)) { 49892 value = clock.now(type, value, options); 49893 } 49894 if (type == "max" && value < clock.item.min.pick) { 49895 value += MINUTES_IN_DAY; 49896 } 49897 if (type != "min" && type != "max" && (value - clock.item.min.pick) % clock.item.interval !== 0) { 49898 value += clock.item.interval; 49899 } 49900 value = clock.normalize(type, value, options); 49901 return { hour: ~~(HOURS_IN_DAY + value / MINUTES_IN_HOUR) % HOURS_IN_DAY, mins: (MINUTES_IN_HOUR + (value % MINUTES_IN_HOUR)) % MINUTES_IN_HOUR, time: (MINUTES_IN_DAY + value) % MINUTES_IN_DAY, pick: value % MINUTES_IN_DAY }; 49902 }; 49903 TimePicker.prototype.createRange = function (from, to) { 49904 var clock = this, 49905 createTime = function (time) { 49906 if (time === true || $.isArray(time) || _.isDate(time)) { 49907 return clock.create(time); 49908 } 49909 return time; 49910 }; 49911 if (!_.isInteger(from)) { 49912 from = createTime(from); 49913 } 49914 if (!_.isInteger(to)) { 49915 to = createTime(to); 49916 } 49917 if (_.isInteger(from) && $.isPlainObject(to)) { 49918 from = [to.hour, to.mins + from * clock.settings.interval]; 49919 } else if (_.isInteger(to) && $.isPlainObject(from)) { 49920 to = [from.hour, from.mins + to * clock.settings.interval]; 49921 } 49922 return { from: createTime(from), to: createTime(to) }; 49923 }; 49924 TimePicker.prototype.withinRange = function (range, timeUnit) { 49925 range = this.createRange(range.from, range.to); 49926 return timeUnit.pick >= range.from.pick && timeUnit.pick <= range.to.pick; 49927 }; 49928 TimePicker.prototype.overlapRanges = function (one, two) { 49929 var clock = this; 49930 one = clock.createRange(one.from, one.to); 49931 two = clock.createRange(two.from, two.to); 49932 return clock.withinRange(one, two.from) || clock.withinRange(one, two.to) || clock.withinRange(two, one.from) || clock.withinRange(two, one.to); 49933 }; 49934 TimePicker.prototype.now = function (type, value) { 49935 var interval = this.item.interval, 49936 date = new Date(), 49937 nowMinutes = date.getHours() * MINUTES_IN_HOUR + date.getMinutes(), 49938 isValueInteger = _.isInteger(value), 49939 isBelowInterval; 49940 nowMinutes -= nowMinutes % interval; 49941 isBelowInterval = value < 0 && interval * value + nowMinutes <= -interval; 49942 nowMinutes += type == "min" && isBelowInterval ? 0 : interval; 49943 if (isValueInteger) { 49944 nowMinutes += interval * (isBelowInterval && type != "max" ? value + 1 : value); 49945 } 49946 return nowMinutes; 49947 }; 49948 TimePicker.prototype.normalize = function (type, value) { 49949 var interval = this.item.interval, 49950 minTime = (this.item.min && this.item.min.pick) || 0; 49951 value -= type == "min" ? 0 : (value - minTime) % interval; 49952 return value; 49953 }; 49954 TimePicker.prototype.measure = function (type, value, options) { 49955 var clock = this; 49956 if (!value) { 49957 value = type == "min" ? [0, 0] : [HOURS_IN_DAY - 1, MINUTES_IN_HOUR - 1]; 49958 } 49959 if (typeof value == "string") { 49960 value = clock.parse(type, value); 49961 } else if (value === true || _.isInteger(value)) { 49962 value = clock.now(type, value, options); 49963 } else if ($.isPlainObject(value) && _.isInteger(value.pick)) { 49964 value = clock.normalize(type, value.pick, options); 49965 } 49966 return value; 49967 }; 49968 TimePicker.prototype.validate = function (type, timeObject, options) { 49969 var clock = this, 49970 interval = options && options.interval ? options.interval : clock.item.interval; 49971 if (clock.disabled(timeObject)) { 49972 timeObject = clock.shift(timeObject, interval); 49973 } 49974 timeObject = clock.scope(timeObject); 49975 if (clock.disabled(timeObject)) { 49976 timeObject = clock.shift(timeObject, interval * -1); 49977 } 49978 return timeObject; 49979 }; 49980 TimePicker.prototype.disabled = function (timeToVerify) { 49981 var clock = this, 49982 isDisabledMatch = clock.item.disable.filter(function (timeToDisable) { 49983 if (_.isInteger(timeToDisable)) { 49984 return timeToVerify.hour == timeToDisable; 49985 } 49986 if ($.isArray(timeToDisable) || _.isDate(timeToDisable)) { 49987 return timeToVerify.pick == clock.create(timeToDisable).pick; 49988 } 49989 if ($.isPlainObject(timeToDisable)) { 49990 return clock.withinRange(timeToDisable, timeToVerify); 49991 } 49992 }); 49993 isDisabledMatch = 49994 isDisabledMatch.length && 49995 !isDisabledMatch.filter(function (timeToDisable) { 49996 return ($.isArray(timeToDisable) && timeToDisable[2] == "inverted") || ($.isPlainObject(timeToDisable) && timeToDisable.inverted); 49997 }).length; 49998 return clock.item.enable === -1 ? !isDisabledMatch : isDisabledMatch || timeToVerify.pick < clock.item.min.pick || timeToVerify.pick > clock.item.max.pick; 49999 }; 50000 TimePicker.prototype.shift = function (timeObject, interval) { 50001 var clock = this, 50002 minLimit = clock.item.min.pick, 50003 maxLimit = clock.item.max.pick; 50004 interval = interval || clock.item.interval; 50005 while (clock.disabled(timeObject)) { 50006 timeObject = clock.create((timeObject.pick += interval)); 50007 if (timeObject.pick <= minLimit || timeObject.pick >= maxLimit) { 50008 break; 50009 } 50010 } 50011 return timeObject; 50012 }; 50013 TimePicker.prototype.scope = function (timeObject) { 50014 var minLimit = this.item.min.pick, 50015 maxLimit = this.item.max.pick; 50016 return this.create(timeObject.pick > maxLimit ? maxLimit : timeObject.pick < minLimit ? minLimit : timeObject); 50017 }; 50018 TimePicker.prototype.parse = function (type, value, options) { 50019 var hour, 50020 minutes, 50021 isPM, 50022 item, 50023 parseValue, 50024 clock = this, 50025 parsingObject = {}; 50026 if (!value || typeof value != "string") { 50027 return value; 50028 } 50029 if (!(options && options.format)) { 50030 options = options || {}; 50031 options.format = clock.settings.format; 50032 } 50033 clock.formats.toArray(options.format).map(function (label) { 50034 var substring, 50035 formattingLabel = clock.formats[label], 50036 formatLength = formattingLabel ? _.trigger(formattingLabel, clock, [value, parsingObject]) : label.replace(/^!/, "").length; 50037 if (formattingLabel) { 50038 substring = value.substr(0, formatLength); 50039 parsingObject[label] = substring.match(/^\d+$/) ? +sub
50039string : substring; 50040 } 50041 value = value.substr(formatLength); 50042 }); 50043 for (item in parsingObject) { 50044 parseValue = parsingObject[item]; 50045 if (_.isInteger(parseValue)) { 50046 if (item.match(/^(h|hh)$/i)) { 50047 hour = parseValue; 50048 if (item == "h" || item == "hh") { 50049 hour %= 12; 50050 } 50051 } else if (item == "i") { 50052 minutes = parseValue; 50053 } 50054 } else if (item.match(/^a$/i) && parseValue.match(/^p/i) && ("h" in parsingObject || "hh" in parsingObject)) { 50055 isPM = true; 50056 } 50057 } 50058 return (isPM ? hour + 12 : hour) * MINUTES_IN_HOUR + minutes; 50059 }; 50060 TimePicker.prototype.formats = { 50061 h: function (string, timeObject) { 50062 return string ? _.digits(string) : timeObject.hour % HOURS_TO_NOON || HOURS_TO_NOON; 50063 }, 50064 hh: function (string, timeObject) { 50065 return string ? 2 : _.lead(timeObject.hour % HOURS_TO_NOON || HOURS_TO_NOON); 50066 }, 50067 H: function (string, timeObject) { 50068 return string ? _.digits(string) : "" + (timeObject.hour % 24); 50069 }, 50070 HH: function (string, timeObject) { 50071 return string ? _.digits(string) : _.lead(timeObject.hour % 24); 50072 }, 50073 i: function (string, timeObject) { 50074 return string ? 2 : _.lead(timeObject.mins); 50075 }, 50076 a: function (string, timeObject) { 50077 return string ? 4 : MINUTES_IN_DAY / 2 > timeObject.time % MINUTES_IN_DAY ? "a.m." : "p.m."; 50078 }, 50079 A: function (string, timeObject) { 50080 return string ? 2 : MINUTES_IN_DAY / 2 > timeObject.time % MINUTES_IN_DAY ? "AM" : "PM"; 50081 }, 50082 toArray: function (formatString) { 50083 return formatString.split(/(h{1,2}|H{1,2}|i|a|A|!.)/g); 50084 }, 50085 toString: function (formatString, itemObject) { 50086 var clock = this; 50087 return clock.formats 50088 .toArray(formatString) 50089 .map(function (label) { 50090 return _.trigger(clock.formats[label], clock, [0, itemObject]) || label.replace(/^!/, ""); 50091 }) 50092 .join(""); 50093 }, 50094 }; 50095 TimePicker.prototype.isTimeExact = function (one, two) { 50096 var clock = this; 50097 if ((_.isInteger(one) && _.isInteger(two)) || (typeof one == "boolean" && typeof two == "boolean")) { 50098 return one === two; 50099 } 50100 if ((_.isDate(one) || $.isArray(one)) && (_.isDate(two) || $.isArray(two))) { 50101 return clock.create(one).pick === clock.create(two).pick; 50102 } 50103 if ($.isPlainObject(one) && $.isPlainObject(two)) { 50104 return clock.isTimeExact(one.from, two.from) && clock.isTimeExact(one.to, two.to); 50105 } 50106 return false; 50107 }; 50108 TimePicker.prototype.isTimeOverlap = function (one, two) { 50109 var clock = this; 50110 if (_.isInteger(one) && (_.isDate(two) || $.isArray(two))) { 50111 return one === clock.create(two).hour; 50112 } 50113 if (_.isInteger(two) && (_.isDate(one) || $.isArray(one))) { 50114 return two === clock.create(one).hour; 50115 } 50116 if ($.isPlainObject(one) && $.isPlainObject(two)) { 50117 return clock.overlapRanges(one, two); 50118 } 50119 return false; 50120 }; 50121 TimePicker.prototype.flipEnable = function (val) { 50122 var itemObject = this.item; 50123 itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1); 50124 }; 50125 TimePicker.prototype.deactivate = function (type, timesToDisable) { 50126 var clock = this, 50127 disabledItems = clock.item.disable.slice(0); 50128 if (timesToDisable == "flip") { 50129 clock.flipEnable(); 50130 } else if (timesToDisable === false) { 50131 clock.flipEnable(1); 50132 disabledItems = []; 50133 } else if (timesToDisable === true) { 50134 clock.flipEnable(-1); 50135 disabledItems = []; 50136 } else { 50137 timesToDisable.map(function (unitToDisable) { 50138 var matchFound; 50139 for (var index = 0; index < disabledItems.length; index += 1) { 50140 if (clock.isTimeExact(unitToDisable, disabledItems[index])) { 50141 matchFound = true; 50142 break; 50143 } 50144 } 50145 if (!matchFound) { 50146 if (_.isInteger(unitToDisable) || _.isDate(unitToDisable) || $.isArray(unitToDisable) || ($.isPlainObject(unitToDisable) && unitToDisable.from && unitToDisable.to)) { 50147 disabledItems.push(unitToDisable); 50148 } 50149 } 50150 }); 50151 } 50152 return disabledItems; 50153 }; 50154 TimePicker.prototype.activate = function (type, timesToEnable) { 50155 var clock = this, 50156 disabledItems = clock.item.disable, 50157 disabledItemsCount = disabledItems.length; 50158 if (timesToEnable == "flip") { 50159 clock.flipEnable(); 50160 } else if (timesToEnable === true) { 50161 clock.flipEnable(1); 50162 disabledItems = []; 50163 } else if (timesToEnable === false) { 50164 clock.flipEnable(-1); 50165 disabledItems = []; 50166 } else { 50167 timesToEnable.map(function (unitToEnable) { 50168 var matchFound, disabledUnit, index, isRangeMatched; 50169 for (index = 0; index < disabledItemsCount; index += 1) { 50170 disabledUnit = disabledItems[index]; 50171 if (clock.isTimeExact(disabledUnit, unitToEnable)) { 50172 matchFound = disabledItems[index] = null; 50173 isRangeMatched = true; 50174 break; 50175 } else if (clock.isTimeOverlap(disabledUnit, unitToEnable)) { 50176 if ($.isPlainObject(unitToEnable)) { 50177 unitToEnable.inverted = true; 50178 matchFound = unitToEnable; 50179 } else if ($.isArray(unitToEnable)) { 50180 matchFound = unitToEnable; 50181 if (!matchFound[2]) matchFound.push("inverted"); 50182 } else if (_.isDate(unitToEnable)) { 50183 matchFound = [unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), "inverted"]; 50184 } 50185 break; 50186 } 50187 } 50188 if (matchFound) 50189 for (index = 0; index < disabledItemsCount; index += 1) { 50190 if (clock.isTimeExact(disabledItems[index], unitToEnable)) { 50191 disabledItems[index] = null; 50192 break; 50193 } 50194 } 50195 if (isRangeMatched) 50196 for (index = 0; index < disabledItemsCount; index += 1) { 50197 if (clock.isTimeOverlap(disabledItems[index], unitToEnable)) { 50198 disabledItems[index] = null; 50199 break; 50200 } 50201 } 50202 if (matchFound) { 50203 disabledItems.push(matchFound); 50204 } 50205 }); 50206 } 50207 return disabledItems.filter(function (val) { 50208 return val != null; 50209 }); 50210 }; 50211 TimePicker.prototype.i = function (type, value) { 50212 return _.isInteger(value) && value > 0 ? value : this.item.interval; 50213 }; 50214 TimePicker.prototype.nodes = function (isOpen) { 50215 var clock = this, 50216 settings = clock.settings, 50217 selectedObject = clock.item.select, 50218 highlightedObject = clock.item.highlight, 50219 viewsetObject = clock.item.view, 50220 disabledCollection = clock.item.disable;
50221 return _.node( 50222 "ul", 50223 _.group({ 50224 min: clock.item.min.pick, 50225 max: clock.item.max.pick, 50226 i: clock.item.interval, 50227 node: "li", 50228 item: function (loopedTime) { 50229 loopedTime = clock.create(loopedTime); 50230 var timeMinutes = loopedTime.pick, 50231 isSelected = selectedObject && selectedObject.pick == timeMinutes, 50232 isHighlighted = highlightedObject && highlightedObject.pick == timeMinutes, 50233 isDisabled = disabledCollection && clock.disabled(loopedTime), 50234 formattedTime = _.trigger(clock.formats.toString, clock, [settings.format, loopedTime]); 50235 return [ 50236 _.trigger(clock.formats.toString, clock, [_.trigger(settings.formatLabel, clock, [loopedTime]) || settings.format, loopedTime]), 50237 (function (klasses) { 50238 if (isSelected) { 50239 klasses.push(settings.klass.selected); 50240 } 50241 if (isHighlighted) { 50242 klasses.push(settings.klass.highlighted); 50243 } 50244 if (viewsetObject && viewsetObject.pick == timeMinutes) { 50245 klasses.push(settings.klass.viewset); 50246 } 50247 if (isDisabled) { 50248 klasses.push(settings.klass.disabled); 50249 } 50250 return klasses.join(" "); 50251 })([settings.klass.listItem]), 50252 "data-pick=" + 50253 loopedTime.pick + 50254 " " + 50255 _.ariaAttr({ role: "option", label: formattedTime, selected: isSelected && clock.$node.val() === formattedTime ? true : null, activedescendant: isHighlighted ? true : null, disabled: isDisabled ? true : null }), 50256 ]; 50257 }, 50258 }) + 50259 _.node( 50260 "li", 50261 _.node("button", settings.clear, settings.klass.buttonClear, "type=button data-clear=1" + (isOpen ? "" : " disabled") + " " + _.ariaAttr({ controls: clock.$node[0].id })), 50262 "", 50263 _.ariaAttr({ role: "presentation" }) 50264 ), 50265 settings.klass.list, 50266 _.ariaAttr({ role: "listbox", controls: clock.$node[0].id }) 50267 ); 50268 }; 50269 TimePicker.defaults = (function (prefix) { 50270 return { 50271 clear: "Clear", 50272 format: "h:i A", 50273 interval: 30, 50274 closeOnSelect: true, 50275 closeOnClear: true, 50276 klass: { 50277 picker: prefix + " " + prefix + "--time", 50278 holder: prefix + "__holder", 50279 list: prefix + "__list", 50280 listItem: prefix + "__list-item", 50281 disabled: prefix + "__list-item--disabled", 50282 selected: prefix + "__list-item--selected", 50283 highlighted: prefix + "__list-item--highlighted", 50284 viewset: prefix + "__list-item--viewset", 50285 now: prefix + "__list-item--now", 50286 buttonClear: prefix + "__button--clear", 50287 }, 50288 }; 50289 })(Picker.klasses().picker); 50290 Picker.extend("pickatime", TimePicker); 50291}); 50292if (![].map) { 50293 Array.prototype.map = function (callback, self) { 50294 var array = this, 50295 len = array.length, 50296 newArray = new Array(len); 50297 for (var i = 0; i < len; i++) { 50298 if (i in array) { 50299 newArray[i] = callback.call(self, array[i], i, array); 50300 } 50301 } 50302 return newArray; 50303 }; 50304} 50305if (![].filter) { 50306 Array.prototype.filter = function (callback) { 50307 if (this == null) throw new TypeError(); 50308 var t = Object(this), 50309 len = t.length >>> 0; 50310 if (typeof callback != "function") throw new TypeError(); 50311 var newArray = [], 50312 thisp = arguments[1]; 50313 for (var i = 0; i < len; i++) { 50314 if (i in t) { 50315 var val = t[i]; 50316 if (callback.call(thisp, val, i, t)) newArray.push(val); 50317 } 50318 } 50319 return newArray; 50320 }; 50321} 50322if (![].indexOf) { 50323 Array.prototype.indexOf = function (searchElement) { 50324 if (this == null) throw new TypeError(); 50325 var t = Object(this), 50326 len = t.length >>> 0; 50327 if (len === 0) return -1; 50328 var n = 0; 50329 if (arguments.length > 1) { 50330 n = Number(arguments[1]); 50331 if (n != n) { 50332 n = 0; 50333 } else if (n !== 0 && n != Infinity && n != -Infinity) { 50334 n = (n > 0 || -1) * Math.floor(Math.abs(n)); 50335 } 50336 } 50337 if (n >= len) return -1; 50338 var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 50339 for (; k < len; k++) { 50340 if (k in t && t[k] === searchElement) return k; 50341 } 50342 return -1; 50343 }; 50344} 50345var nativeSplit = String.prototype.split, 50346 compliantExecNpcg = /()??/.exec("")[1] === undefined; 50347String.prototype.split = function (separator, limit) { 50348 var str = this; 50349 if (Object.prototype.toString.call(separator) !== "[object RegExp]") { 50350 return nativeSplit.call(str, separator, limit); 50351 } 50352 var output = [], 50353 flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + (separator.sticky ? "y" : ""), 50354 lastLastIndex = 0, 50355 separator2, 50356 match, 50357 lastIndex, 50358 lastLength; 50359 separator = new RegExp(separator.source, flags + "g"); 50360 str += ""; 50361 if (!compliantExecNpcg) { 50362 separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags); 50363 } 50364 limit = limit === undefined ? -1 >>> 0 : limit >>> 0; 50365 while ((match = separator.exec(str))) { 50366 lastIndex = match.index + match[0].length; 50367 if (lastIndex > lastLastIndex) { 50368 output.push(str.slice(lastLastIndex, match.index)); 50369 if (!compliantExecNpcg && match.length > 1) { 50370 match[0].replace(separator2, function () { 50371 for (var i = 1; i < arguments.length - 2; i++) { 50372 if (arguments[i] === undefined) { 50373 match[i] = undefined; 50374 } 50375 } 50376 }); 50377 } 50378 if (match.length > 1 && match.index < str.length) { 50379 Array.prototype.push.apply(output, match.slice(1)); 50380 } 50381 lastLength = match[0].length; 50382 lastLastIndex = lastIndex; 50383 if (output.length >= limit) { 50384 break; 50385 } 50386 } 50387 if (separator.lastIndex === match.index) { 50388 separator.lastIndex++; 50389 } 50390 } 50391 if (lastLastIndex === str.length) { 50392 if (lastLength || !separator.test("")) { 50393 output.push(""); 50394 } 50395 } else { 50396 output.push(str.slice(lastLastIndex)); 50397 } 50398 return output.length > limit ? output.slice(0, limit) : output; 50399}; 50400var _self = typeof window !== "undefined" ? window : typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope ? self : {}; 50401var Prism = (function () { 50402 var lang = /\blang(?:uage)?-(\w+)\b/i; 50403 var uniqueId = 0; 50404 var _ = (_self.Prism = { 50405 manual: _self.Prism && _self.Prism.manual, 50406 util: { 50407 encode: function (tokens) { 50408 if (tokens instanceof Token) { 50409 return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); 50410 } else if (_.util.type(tokens) === "Array") { 50411 return tokens.map(_.util.encode); 50412 } else { 50413 return tokens 50414 .replace(/&/g, "&") 50415 .replace(/</g, "<") 50416 .replace(/\u00a0/g, " "); 50417 } 50418 }, 50419 type: function (o) { 50420 return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[
504201]; 50421 }, 50422 objId: function (obj) { 50423 if (!obj["__id"]) { 50424 Object.defineProperty(obj, "__id", { value: ++uniqueId }); 50425 } 50426 return obj["__id"]; 50427 }, 50428 clone: function (o) { 50429 var type = _.util.type(o); 50430 switch (type) { 50431 case "Object": 50432 var clone = {}; 50433 for (var key in o) { 50434 if (o.hasOwnProperty(key)) { 50435 clone[key] = _.util.clone(o[key]); 50436 } 50437 } 50438 return clone; 50439 case "Array": 50440 return o.map(function (v) { 50441 return _.util.clone(v); 50442 }); 50443 } 50444 return o; 50445 }, 50446 }, 50447 languages: { 50448 extend: function (id, redef) { 50449 var lang = _.util.clone(_.languages[id]); 50450 for (var key in redef) { 50451 lang[key] = redef[key]; 50452 } 50453 return lang; 50454 }, 50455 insertBefore: function (inside, before, insert, root) { 50456 root = root || _.languages; 50457 var grammar = root[inside]; 50458 if (arguments.length == 2) { 50459 insert = arguments[1]; 50460 for (var newToken in insert) { 50461 if (insert.hasOwnProperty(newToken)) { 50462 grammar[newToken] = insert[newToken]; 50463 } 50464 } 50465 return grammar; 50466 } 50467 var ret = {}; 50468 for (var token in grammar) { 50469 if (grammar.hasOwnProperty(token)) { 50470 if (token == before) { 50471 for (var newToken in insert) { 50472 if (insert.hasOwnProperty(newToken)) { 50473 ret[newToken] = insert[newToken]; 50474 } 50475 } 50476 } 50477 ret[token] = grammar[token]; 50478 } 50479 } 50480 _.languages.DFS(_.languages, function (key, value) { 50481 if (value === root[inside] && key != inside) { 50482 this[key] = ret; 50483 } 50484 }); 50485 return (root[inside] = ret); 50486 }, 50487 DFS: function (o, callback, type, visited) { 50488 visited = visited || {}; 50489 for (var i in o) { 50490 if (o.hasOwnProperty(i)) { 50491 callback.call(o, i, o[i], type || i); 50492 if (_.util.type(o[i]) === "Object" && !visited[_.util.objId(o[i])]) { 50493 visited[_.util.objId(o[i])] = true; 50494 _.languages.DFS(o[i], callback, null, visited); 50495 } else if (_.util.type(o[i]) === "Array" && !visited[_.util.objId(o[i])]) { 50496 visited[_.util.objId(o[i])] = true; 50497 _.languages.DFS(o[i], callback, i, visited); 50498 } 50499 } 50500 } 50501 }, 50502 }, 50503 plugins: {}, 50504 highlightAll: function (async, callback) { 50505 var env = { callback: callback, selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code' }; 50506 _.hooks.run("before-highlightall", env); 50507 var elements = env.elements || document.querySelectorAll(env.selector); 50508 for (var i = 0, element; (element = elements[i++]); ) { 50509 _.highlightElement(element, async === true, env.callback); 50510 } 50511 }, 50512 highlightElement: function (element, async, callback) { 50513 var language, 50514 grammar, 50515 parent = element; 50516 while (parent && !lang.test(parent.className)) { 50517 parent = parent.parentNode; 50518 } 50519 if (parent) { 50520 language = (parent.className.match(lang) || [, ""])[1].toLowerCase(); 50521 grammar = _.languages[language]; 50522 } 50523 element.className = element.className.replace(lang, "").replace(/\s+/g, " ") + " language-" + language; 50524 parent = element.parentNode; 50525 if (/pre/i.test(parent.nodeName)) { 50526 parent.className = parent.className.replace(lang, "").replace(/\s+/g, " ") + " language-" + language; 50527 } 50528 var code = element.textContent; 50529 var env = { element: element, language: language, grammar: grammar, code: code }; 50530 _.hooks.run("before-sanity-check", env); 50531 if (!env.code || !env.grammar) { 50532 if (env.code) { 50533 _.hooks.run("before-highlight", env); 50534 env.element.textContent = env.code; 50535 _.hooks.run("after-highlight", env); 50536 } 50537 _.hooks.run("complete", env); 50538 return; 50539 } 50540 _.hooks.run("before-highlight", env); 50541 if (async && _self.Worker) { 50542 var worker = new Worker(_.filename); 50543 worker.onmessage = function (evt) { 50544 env.highlightedCode = evt.data; 50545 _.hooks.run("before-insert", env); 50546 env.element.innerHTML = env.highlightedCode; 50547 callback && callback.call(env.element); 50548 _.hooks.run("after-highlight", env); 50549 _.hooks.run("complete", env); 50550 }; 50551 worker.postMessage(JSON.stringify({ language: env.language, code: env.code, immediateClose: true })); 50552 } else { 50553 env.highlightedCode = _.highlight(env.code, env.grammar, env.language); 50554 _.hooks.run("before-insert", env); 50555 env.element.innerHTML = env.highlightedCode; 50556 callback && callback.call(element); 50557 _.hooks.run("after-highlight", env); 50558 _.hooks.run("complete", env); 50559 } 50560 }, 50561 highlight: function (text, grammar, language) { 50562 var tokens = _.tokenize(text, grammar); 50563 return Token.stringify(_.util.encode(tokens), language); 50564 }, 50565 matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target) { 50566 var Token = _.Token; 50567 for (var token in grammar) { 50568 if (!grammar.hasOwnProperty(token) || !grammar[token]) { 50569 continue; 50570 } 50571 if (token == target) { 50572 return; 50573 } 50574 var patterns = grammar[token]; 50575 patterns = _.util.type(patterns) === "Array" ? patterns : [patterns]; 50576 for (var j = 0; j < patterns.length; ++j) { 50577 var pattern = patterns[j], 50578 inside = pattern.inside, 50579 lookbehind = !!pattern.lookbehind, 50580 greedy = !!pattern.greedy, 50581 lookbehindLength = 0, 50582 alias = pattern.alias; 50583 if (greedy && !pattern.pattern.global) { 50584 var flags = pattern.pattern.toString().match(/[imuy]*$/)[0]; 50585 pattern.pattern = RegExp(pattern.pattern.source, flags + "g"); 50586 } 50587 pattern = pattern.pattern || pattern; 50588 for (var i = index, pos = startPos; i < strarr.length; pos += strarr[i].length, ++i) { 50589 var str = strarr[i]; 50590 if (strarr.length > text.length) { 50591 return; 50592 } 50593 if (str instanceof Token) { 50594 continue; 50595 } 50596 pattern.lastIndex = 0; 50597 var match = pattern.exec(str), 50598 delNum = 1; 50599 if (!match && greedy && i != strarr.length - 1) { 50600 pattern.lastIndex = pos; 50601 match = pattern.exec(text); 50602 if (!match) { 50603 break; 50604 } 50605 var from = match.index + (lookbehind ? match[1].length : 0), 50606 to = match.index + match[0].length, 50607 k = i, 50608 p = pos; 50609 for (var len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) { 50610 p += strarr[k].length; 50611 if (from >= p) { 50612 ++i; 50613 pos = p; 50614 } 50615 } 50616 if (strarr[i] instanceof Token || strarr[k - 1].greedy) { 50617 continue; 50618 } 50619 delNum = k - i; 50620 str = text.slice(pos, p); 50621 match.index -= pos; 50622 } 50623 if (!match) { 50624 if (oneshot) { 50625 break; 50626 } 50627 continue; 50628 } 50629 if (lookbehind) { 50630 lookbehindLength = match[1].length; 50631 } 50632 var from = match.index + lookbehindLength,
50633 match = match[0].slice(lookbehindLength), 50634 to = from + match.length, 50635 before = str.slice(0, from), 50636 after = str.slice(to); 50637 var args = [i, delNum]; 50638 if (before) { 50639 ++i; 50640 pos += before.length; 50641 args.push(before); 50642 } 50643 var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy); 50644 args.push(wrapped); 50645 if (after) { 50646 args.push(after); 50647 } 50648 Array.prototype.splice.apply(strarr, args); 50649 if (delNum != 1) _.matchGrammar(text, strarr, grammar, i, pos, true, token); 50650 if (oneshot) break; 50651 } 50652 } 50653 } 50654 }, 50655 tokenize: function (text, grammar, language) { 50656 var strarr = [text]; 50657 var rest = grammar.rest; 50658 if (rest) { 50659 for (var token in rest) { 50660 grammar[token] = rest[token]; 50661 } 50662 delete grammar.rest; 50663 } 50664 _.matchGrammar(text, strarr, grammar, 0, 0, false); 50665 return strarr; 50666 }, 50667 hooks: { 50668 all: {}, 50669 add: function (name, callback) { 50670 var hooks = _.hooks.all; 50671 hooks[name] = hooks[name] || []; 50672 hooks[name].push(callback); 50673 }, 50674 run: function (name, env) { 50675 var callbacks = _.hooks.all[name]; 50676 if (!callbacks || !callbacks.length) { 50677 return; 50678 } 50679 for (var i = 0, callback; (callback = callbacks[i++]); ) { 50680 callback(env); 50681 } 50682 }, 50683 }, 50684 }); 50685 var Token = (_.Token = function (type, content, alias, matchedStr, greedy) { 50686 this.type = type; 50687 this.content = content; 50688 this.alias = alias; 50689 this.length = (matchedStr || "").length | 0; 50690 this.greedy = !!greedy; 50691 }); 50692 Token.stringify = function (o, language, parent) { 50693 if (typeof o == "string") { 50694 return o; 50695 } 50696 if (_.util.type(o) === "Array") { 50697 return o 50698 .map(function (element) { 50699 return Token.stringify(element, language, o); 50700 }) 50701 .join(""); 50702 } 50703 var env = { type: o.type, content: Token.stringify(o.content, language, parent), tag: "span", classes: ["token", o.type], attributes: {}, language: language, parent: parent }; 50704 if (env.type == "comment") { 50705 env.attributes["spellcheck"] = "true"; 50706 } 50707 if (o.alias) { 50708 var aliases = _.util.type(o.alias) === "Array" ? o.alias : [o.alias]; 50709 Array.prototype.push.apply(env.classes, aliases); 50710 } 50711 _.hooks.run("wrap", env); 50712 var attributes = Object.keys(env.attributes) 50713 .map(function (name) { 50714 return name + '="' + (env.attributes[name] || "").replace(/"/g, """) + '"'; 50715 }) 50716 .join(" "); 50717 return "<" + env.tag + ' class="' + env.classes.join(" ") + '"' + (attributes ? " " + attributes : "") + ">" + env.content + "</" + env.tag + ">"; 50718 }; 50719 if (!_self.document) { 50720 if (!_self.addEventListener) { 50721 return _self.Prism; 50722 } 50723 _self.addEventListener( 50724 "message", 50725 function (evt) { 50726 var message = JSON.parse(evt.data), 50727 lang = message.language, 50728 code = message.code, 50729 immediateClose = message.immediateClose; 50730 _self.postMessage(_.highlight(code, _.languages[lang], lang)); 50731 if (immediateClose) { 50732 _self.close(); 50733 } 50734 }, 50735 false 50736 ); 50737 return _self.Prism; 50738 } 50739 var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop(); 50740 if (script) { 50741 _.filename = script.src; 50742 if (!_.manual && !script.hasAttribute("data-manual")) { 50743 if (document.readyState !== "loading") { 50744 if (window.requestAnimationFrame) { 50745 window.requestAnimationFrame(_.highlightAll); 50746 } else { 50747 window.setTimeout(_.highlightAll, 16); 50748 } 50749 } else { 50750 document.addEventListener("DOMContentLoaded", _.highlightAll); 50751 } 50752 } 50753 } 50754 return _self.Prism; 50755})(); 50756if (typeof module !== "undefined" && module.exports) { 50757 module.exports = Prism; 50758} 50759if (typeof global !== "undefined") { 50760 global.Prism = Prism; 50761} 50762Prism.languages.markup = { 50763 comment: /<!--[\s\S]*?-->/, 50764 prolog: /<\?[\s\S]+?\?>/, 50765 doctype: /<!DOCTYPE[\s\S]+?>/i, 50766 cdata: /<!\[CDATA\[[\s\S]*?]]>/i, 50767 tag: { 50768 pattern: /<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\s\S])*\1|[^\s'">=]+))?)*\s*\/?>/i, 50769 inside: { 50770 tag: { pattern: /^<\/?[^\s>\/]+/i, inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ } },
50771 "attr-value": { pattern: /=(?:('|")[\s\S]*?(\1)|[^\s>]+)/i, inside: { punctuation: /[=>"']/ } }, 50772 punctuation: /\/?>/, 50773 "attr-name": { pattern: /[^\s>\/]+/, inside: { namespace: /^[^\s>\/:]+:/ } }, 50774 }, 50775 }, 50776 entity: /&#?[\da-z]{1,8};/i, 50777}; 50778Prism.languages.markup["tag"].inside["attr-value"].inside["entity"] = Prism.languages.markup["entity"]; 50779Prism.hooks.add("wrap", function (env) { 50780 if (env.type === "entity") { 50781 env.attributes["title"] = env.content.replace(/&/, "&"); 50782 } 50783}); 50784Prism.languages.xml = Prism.languages.markup; 50785Prism.languages.html = Prism.languages.markup; 50786Prism.languages.mathml = Prism.languages.markup; 50787Prism.languages.svg = Prism.languages.markup; 50788Prism.languages.css = { 50789 comment: /\/\*[\s\S]*?\*\//, 50790 atrule: { pattern: /@[\w-]+?.*?(;|(?=\s*\{))/i, inside: { rule: /@[\w-]+/ } }, 50791 url: /url\((?:(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|.*?)\)/i, 50792 selector: /[^\{\}\s][^\{\};]*?(?=\s*\{)/, 50793 string: { pattern: /("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, greedy: true }, 50794 property: /(\b|\B)[\w-]+(?=\s*:)/i, 50795 important: /\B!important\b/i, 50796 function: /[-a-z0-9]+(?=\()/i, 50797 punctuation: /[(){};:]/, 50798}; 50799Prism.languages.css["atrule"].inside.rest = Prism.util.clone(Prism.languages.css); 50800if (Prism.languages.markup) { 50801 Prism.languages.insertBefore("markup", "tag", { style: { pattern: /(<style[\s\S]*?>)[\s\S]*?(?=<\/style>)/i, lookbehind: true, inside: Prism.languages.css, alias: "language-css" } }); 50802 Prism.languages.insertBefore( 50803 "inside", 50804 "attr-value", 50805 { 50806 "style-attr": { 50807 pattern: /\s*style=("|').*?\1/i, 50808 inside: { "attr-name": { pattern: /^\s*style/i, inside: Prism.languages.markup.tag.inside }, punctuation: /^\s*=\s*['"]|['"]\s*$/, "attr-value": { pattern: /.+/i, inside: Prism.languages.css } }, 50809 alias: "language-css", 50810 }, 50811 }, 50812 Prism.languages.markup.tag 50813 ); 50814} 50815Prism.languages.clike = { 50816 comment: [ 50817 { pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: true }, 50818 { pattern: /(^|[^\\:])\/\/.*/, lookbehind: true }, 50819 ], 50820 string: { pattern: /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, greedy: true }, 50821 "class-name": { pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, lookbehind: true, inside: { punctuation: /(\.|\\)/ } }, 50822 keyword: /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, 50823 boolean: /\b(true|false)\b/, 50824 function: /[a-z0-9_]+(?=\()/i, 50825 number: /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i, 50826 operator: /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, 50827 punctuation: /[{}[\];(),.:]/, 50828}; 50829Prism.languages.javascript = Prism.languages.extend("clike", { 50830 keyword: /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, 50831 number: /\b-?(0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, 50832 function: /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i, 50833 operator: /-[-=]?|\+[+=]?|!=?=?|<<?=?|>>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/, 50834}); 50835Prism.languages.insertBefore("javascript", "keyword", { regex: { pattern: /(^|[^/])\/(?!\/)(\[[^\]\r\n]+]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, lookbehind: true, greedy: true } }); 50836Prism.languages.insertBefore("javascript", "string", { 50837 "template-string": { 50838 pattern: /`(?:\\\\|\\?[^\\])*?`/, 50839 greedy: true, 50840 inside: { interpolation: { pattern: /\$\{[^}]+\}/, inside: { "interpolation-punctuation": { pattern: /^\$\{|\}$/, alias: "punctuation" }, rest: Prism.languages.javascript } }, string: /[\s\S]+/ }, 50841 }, 50842}); 50843if (Prism.languages.markup) { 50844 Prism.languages.insertBefore("markup", "tag", { script: { pattern: /(<script[\s\S]*?>)[\s\S]*?(?=<\/script>)/i, lookbehind: true, inside: Prism.languages.javascript, alias: "language-javascript" } }); 50845} 50846Prism.languages.js = Prism.languages.javascript; 50847(function () { 50848 var assign = 50849 Object.assign || 50850 function (obj1, obj2) { 50851 for (var name in obj2) { 50852 if (obj2.hasOwnProperty(name)) obj1[name] = obj2[name]; 50853 } 50854 return obj1; 50855 }; 50856 function NormalizeWhitespace(defaults) { 50857 this.defaults = assign({}, defaults); 50858 } 50859 function toCamelCase(value) { 50860 return value.replace(/-(\w)/g, function (match, firstChar) { 50861 return firstChar.toUpperCase(); 50862 }); 50863 } 50864 function tabLen(str) { 50865 var res = 0; 50866 for (var i = 0; i < str.length; ++i) { 50867 if (str.charCodeAt(i) == "\t".charCodeAt(0)) res += 3; 50868 } 50869 return str.length + res; 50870 } 50871 NormalizeWhitespace.prototype = { 50872 setDefaults: function (defaults) { 50873 this.defaults = assign(this.defaults, defaults); 50874 }, 50875 normalize: function (input, settings) { 50876 settings = assign(this.defaults, settings); 50877 for (var name in settings) { 50878 var methodName = toCamelCase(name); 50879 if (name !== "normalize" && methodName !== "setDefaults" && settings[name] && this[methodName]) { 50880 input = this[methodName].call(this, input, settings[name]); 50881 } 50882 } 50883 return input; 50884 }, 50885 leftTrim: function (input) { 50886 return input.replace(/^\s+/, ""); 50887 }, 50888 rightTrim: function (input) { 50889 return input.replace(/\s+$/, ""); 50890 }, 50891 tabsToSpaces: function (input, spaces) {
50892 spaces = spaces | 0 || 4; 50893 return input.replace(/\t/g, new Array(++spaces).join(" ")); 50894 }, 50895 spacesToTabs: function (input, spaces) { 50896 spaces = spaces | 0 || 4; 50897 return input.replace(new RegExp(" {" + spaces + "}", "g"), "\t"); 50898 }, 50899 removeTrailing: function (input) { 50900 return input.replace(/\s*?$/gm, ""); 50901 }, 50902 removeInitialLineFeed: function (input) { 50903 return input.replace(/^(?:\r?\n|\r)/, ""); 50904 }, 50905 removeIndent: function (input) { 50906 var indents = input.match(/^[^\S\n\r]*(?=\S)/gm); 50907 if (!indents || !indents[0].length) return input; 50908 indents.sort(function (a, b) { 50909 return a.length - b.length; 50910 }); 50911 if (!indents[0].length) return input; 50912 return input.replace(new RegExp("^" + indents[0], "gm"), ""); 50913 }, 50914 indent: function (input, tabs) { 50915 return input.replace(/^[^\S\n\r]*(?=\S)/gm, new Array(++tabs).join("\t") + "$&"); 50916 }, 50917 breakLines: function (input, characters) { 50918 characters = characters === true ? 80 : characters | 0 || 80; 50919 var lines = input.split("\n"); 50920 for (var i = 0; i < lines.length; ++i) { 50921 if (tabLen(lines[i]) <= characters) continue; 50922 var line = lines[i].split(/(\s+)/g), 50923 len = 0; 50924 for (var j = 0; j < line.length; ++j) { 50925 var tl = tabLen(line[j]); 50926 len += tl; 50927 if (len > characters) { 50928 line[j] = "\n" + line[j]; 50929 len = tl; 50930 } 50931 } 50932 lines[i] = line.join(""); 50933 } 50934 return lines.join("\n"); 50935 }, 50936 }; 50937 if (typeof module !== "undefined" && module.exports) { 50938 module.exports = NormalizeWhitespace; 50939 } 50940 if (typeof Prism === "undefined") { 50941 return; 50942 } 50943 Prism.plugins.NormalizeWhitespace = new NormalizeWhitespace({ "remove-trailing": true, "remove-indent": true, "left-trim": true, "right-trim": true }); 50944 Prism.hooks.add("before-sanity-check", function (env) { 50945 var Normalizer = Prism.plugins.NormalizeWhitespace; 50946 if (env.settings && env.settings["whitespace-normalization"] === false) { 50947 return; 50948 } 50949 if ((!env.element || !env.element.parentNode) && env.code) { 50950 env.code = Normalizer.normalize(env.code, env.settings); 50951 return; 50952 } 50953 var pre = env.element.parentNode; 50954 var clsReg = /\bno-whitespace-normalization\b/; 50955 if (!env.code || !pre || pre.nodeName.toLowerCase() !== "pre" || clsReg.test(pre.className) || clsReg.test(env.element.className)) return; 50956 var children = pre.childNodes, 50957 before = "", 50958 after = "", 50959 codeFound = false; 50960 for (var i = 0; i < children.length; ++i) { 50961 var node = children[i]; 50962 if (node == env.element) { 50963 codeFound = true; 50964 } else if (node.nodeName === "#text") { 50965 if (codeFound) { 50966 after += node.nodeValue; 50967 } else { 50968 before += node.nodeValue; 50969 } 50970 pre.removeChild(node); 50971 --i; 50972 } 50973 } 50974 if (!env.element.children.length || !Prism.plugins.KeepMarkup) { 50975 env.code = before + env.code + after; 50976 env.code = Normalizer.normalize(env.code, env.settings); 50977 } else { 50978 var html = before + env.element.innerHTML + after; 50979 env.element.innerHTML = Normalizer.normalize(html, env.settings); 50980 env.code = env.element.textContent; 50981 } 50982 }); 50983})(); 50984(function (factory) { 50985 "use strict"; 50986 if (typeof define === "function" && define.amd) { 50987 define(["jquery"], factory); 50988 } else if (typeof exports !== "undefined") { 50989 module.exports = factory(require("jquery")); 50990 } else { 50991 factory(jQuery); 50992 } 50993})(function ($) { 50994 "use strict"; 50995 var Slick = window.Slick || {}; 50996 Slick = (function () { 50997 var instanceUid = 0; 50998 function Slick(element, settings) { 50999 var _ = this, 51000 dataSettings; 51001 _.defaults = { 51002 accessibility: true, 51003 adaptiveHeight: false, 51004 appendArrows: $(element), 51005 appendDots: $(element), 51006 arrows: true, 51007 asNavFor: null, 51008 prevArrow: '<button class="slick-prev" aria-label="Previous" type="button"></button>', 51009 nextArrow: '<button class="slick-next" aria-label="Next" type="button"></button>', 51010 autoplay: true, 51011 autoplaySpeed: 3000, 51012 centerMode: false, 51013 centerPadding: "50px", 51014 cssEase: "ease", 51015 customPaging: function (slider, i) { 51016 return $('<button type="button" />').text(i + 1); 51017 }, 51018 dots: false, 51019 dotsClass: "slick-dots", 51020 draggable: true, 51021 easing: "linear", 51022 edgeFriction: 0.35, 51023 fade: false, 51024 focusOnSelect: false, 51025 focusOnChange: false, 51026 infinite: true, 51027 initialSlide: 0, 51028 lazyLoad: "ondemand", 51029 mobileFirst: false, 51030 pauseOnHover: true, 51031 pauseOnFocus: true, 51032 pauseOnDotsHover: false, 51033 respondTo: "window", 51034 responsive: null, 51035 rows: 1, 51036 rtl: false, 51037 slide: "", 51038 slidesPerRow: 1, 51039 slidesToShow: 1, 51040 slidesToScroll: 1, 51041 speed: 500, 51042 swipe: true, 51043 swipeToSlide: false, 51044 touchMove: true, 51045 touchThreshold: 5, 51046 useCSS: true, 51047 useTransform: true, 51048 variableWidth: false, 51049 vertical: false, 51050 verticalSwiping: false, 51051 waitForAnimate: true, 51052 zIndex: 1000, 51053 }; 51054 _.initials = { 51055 animating: false, 51056 dragging: false, 51057 autoPlayTimer: null, 51058 currentDirection: 0, 51059 currentLeft: null, 51060 currentSlide: 0, 51061 direction: 1, 51062 $dots: null, 51063 listWidth: null, 51064 listHeight: null, 51065 loadIndex: 0, 51066 $nextArrow: null, 51067 $prevArrow: null, 51068 scrolling: false, 51069 slideCount: null, 51070 slideWidth: null, 51071 $slideTrack: null, 51072 $slides: null, 51073 sliding: false, 51074 slideOffset: 0, 51075 swipeLeft: null, 51076 swiping: false, 51077 $list: null, 51078 touchObject: {}, 51079 transformsEnabled: false,
51080 unslicked: false, 51081 }; 51082 $.extend(_, _.initials); 51083 _.activeBreakpoint = null; 51084 _.animType = null; 51085 _.animProp = null; 51086 _.breakpoints = []; 51087 _.breakpointSettings = []; 51088 _.cssTransitions = false; 51089 _.focussed = false; 51090 _.interrupted = false; 51091 _.hidden = "hidden"; 51092 _.paused = true; 51093 _.positionProp = null; 51094 _.respondTo = null; 51095 _.rowCount = 1; 51096 _.shouldClick = true; 51097 _.$slider = $(element); 51098 _.$slidesCache = null; 51099 _.transformType = null; 51100 _.transitionType = null; 51101 _.visibilityChange = "visibilitychange"; 51102 _.windowWidth = 0; 51103 _.windowTimer = null; 51104 dataSettings = $(element).data("slick") || {}; 51105 _.options = $.extend({}, _.defaults, settings, dataSettings); 51106 _.currentSlide = _.options.initialSlide; 51107 _.originalSettings = _.options; 51108 if (typeof document.mozHidden !== "undefined") { 51109 _.hidden = "mozHidden"; 51110 _.visibilityChange = "mozvisibilitychange"; 51111 } else if (typeof document.webkitHidden !== "undefined") { 51112 _.hidden = "webkitHidden"; 51113 _.visibilityChange = "webkitvisibilitychange"; 51114 } 51115 _.autoPlay = $.proxy(_.autoPlay, _); 51116 _.autoPlayClear = $.proxy(_.autoPlayClear, _); 51117 _.autoPlayIterator = $.proxy(_.autoPlayIterator, _); 51118 _.changeSlide = $.proxy(_.changeSlide, _); 51119 _.clickHandler = $.proxy(_.clickHandler, _); 51120 _.selectHandler = $.proxy(_.selectHandler, _); 51121 _.setPosition = $.proxy(_.setPosition, _); 51122 _.swipeHandler = $.proxy(_.swipeHandler, _); 51123 _.dragHandler = $.proxy(_.dragHandler, _); 51124 _.keyHandler = $.proxy(_.keyHandler, _); 51125 _.instanceUid = instanceUid++; 51126 _.htmlExpr = /^(?:\s*(<[\w\W]+>)[^>]*)$/; 51127 _.registerBreakpoints(); 51128 _.init(true); 51129 } 51130 return Slick; 51131 })(); 51132 Slick.prototype.activateADA = function () { 51133 var _ = this; 51134 _.$slideTrack.find(".slick-active").attr({ "aria-hidden": "false" }).find("a, input, button, select").attr({ tabindex: "0" }); 51135 }; 51136 Slick.prototype.addSlide = Slick.prototype.slickAdd = function (markup, index, addBefore) { 51137 var _ = this; 51138 if (typeof index === "boolean") { 51139 addBefore = index; 51140 index = null; 51141 } else if (index < 0 || index >= _.slideCount) { 51142 return false; 51143 } 51144 _.unload(); 51145 if (typeof index === "number") { 51146 if (index === 0 && _.$slides.length === 0) { 51147 $(markup).appendTo(_.$slideTrack); 51148 } else if (addBefore) { 51149 $(markup).insertBefore(_.$slides.eq(index)); 51150 } else { 51151 $(markup).insertAfter(_.$slides.eq(index)); 51152 } 51153 } else { 51154 if (addBefore === true) { 51155 $(markup).prependTo(_.$slideTrack); 51156 } else { 51157 $(markup).appendTo(_.$slideTrack); 51158 } 51159 } 51160 _.$slides = _.$slideTrack.children(this.options.slide); 51161 _.$slideTrack.children(this.options.slide).detach(); 51162 _.$slideTrack.append(_.$slides); 51163 _.$slides.each(function (index, element) { 51164 $(element).attr("data-slick-index", index); 51165 }); 51166 _.$slidesCache = _.$slides; 51167 _.reinit(); 51168 }; 51169 Slick.prototype.animateHeight = function () { 51170 var _ = this; 51171 if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) { 51172 var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true); 51173 _.$list.animate({ height: targetHeight }, _.options.speed); 51174 } 51175 }; 51176 Slick.prototype.animateSlide = function (targetLeft, callback) { 51177 var animProps = {}, 51178 _ = this; 51179 _.animateHeight(); 51180 if (_.options.rtl === true && _.options.vertical === false) { 51181 targetLeft = -targetLeft; 51182 } 51183 if (_.transformsEnabled === false) { 51184 if (_.options.vertical === false) { 51185 _.$slideTrack.animate({ left: targetLeft }, _.options.speed, _.options.easing, callback); 51186 } else { 51187 _.$slideTrack.animate({ top: targetLeft }, _.options.speed, _.options.easing, callback); 51188 } 51189 } else { 51190 if (_.cssTransitions === false) { 51191 if (_.options.rtl === true) { 51192 _.currentLeft = -_.currentLeft; 51193 } 51194 $({ animStart: _.currentLeft }).animate( 51195 { animStart: targetLeft }, 51196 { 51197 duration: _.options.speed, 51198 easing: _.options.easing, 51199 step: function (now) { 51200 now = Math.ceil(now); 51201 if (_.options.vertical === false) { 51202 animProps[_.animType] = "translate(" + now + "px, 0px)"; 51203 _.$slideTrack.css(animProps); 51204 } else { 51205 animProps[_.animType] = "translate(0px," + now + "px)"; 51206 _.$slideTrack.css(animProps); 51207 } 51208 }, 51209 complete: function () { 51210 if (callback) { 51211 callback.call(); 51212 } 51213 }, 51214 } 51215 ); 51216 } else { 51217 _.applyTransition();
51218 targetLeft = Math.ceil(targetLeft); 51219 targetLeft = targetLeft - 20; 51220 // console.log("traleft", targetLeft) 51221 if (_.options.vertical === false) { 51222 animProps[_.animType] = "translate3d(" + targetLeft + "px, 0px, 0px)"; 51223 } else { 51224 animProps[_.animType] = "translate3d(0px," + targetLeft + "px, 0px)"; 51225 } 51226 _.$slideTrack.css(animProps); 51227 if (callback) { 51228 setTimeout(function () { 51229 _.disableTransition(); 51230 callback.call(); 51231 }, _.options.speed); 51232 } 51233 } 51234 } 51235 }; 51236 Slick.prototype.getNavTarget = function () { 51237 var _ = this, 51238 asNavFor = _.options.asNavFor; 51239 if (asNavFor && asNavFor !== null) { 51240 asNavFor = $(asNavFor).not(_.$slider); 51241 } 51242 return asNavFor; 51243 }; 51244 Slick.prototype.asNavFor = function (index) { 51245 var _ = this, 51246 asNavFor = _.getNavTarget(); 51247 if (asNavFor !== null && typeof asNavFor === "object") { 51248 asNavFor.each(function () { 51249 var target = $(this).slick("getSlick"); 51250 if (!target.unslicked) { 51251 target.slideHandler(index, true); 51252 } 51253 }); 51254 } 51255 }; 51256 Slick.prototype.applyTransition = function (slide) { 51257 var _ = this, 51258 transition = {}; 51259 if (_.options.fade === false) { 51260 transition[_.transitionType] = _.transformType + " " + _.options.speed + "ms " + _.options.cssEase; 51261 } else { 51262 transition[_.transitionType] = "opacity " + _.options.speed + "ms " + _.options.cssEase; 51263 } 51264 if (_.options.fade === false) { 51265 _.$slideTrack.css(transition); 51266 } else { 51267 _.$slides.eq(slide).css(transition); 51268 } 51269 }; 51270 Slick.prototype.autoPlay = function () { 51271 var _ = this; 51272 _.autoPlayClear(); 51273 if (_.slideCount > _.options.slidesToShow) { 51274 _.autoPlayTimer = setInterval(_.autoPlayIterator, _.options.autoplaySpeed); 51275 } 51276 }; 51277 Slick.prototype.autoPlayClear = function () { 51278 var _ = this; 51279 if (_.autoPlayTimer) { 51280 clearInterval(_.autoPlayTimer); 51281 } 51282 }; 51283 Slick.prototype.autoPlayIterator = function () { 51284 var _ = this, 51285 slideTo = _.currentSlide + _.options.slidesToScroll; 51286 if(slideTo==_.slideCount){ 51287 slideTo=0; 51288 } 51289 _.slideHandler(slideTo); 51290 }; 51291 Slick.prototype.buildArrows = function () { 51292 var _ = this; 51293 if (_.options.arrows === true) { 51294 _.$prevArrow = $(_.options.prevArrow).addClass("slick-arrow"); 51295 _.$nextArrow = $(_.options.nextArrow).addClass("slick-arrow"); 51296 if (_.slideCount > _.options.slidesToShow) { 51297 _.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"); 51298 _.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"); 51299 if (_.htmlExpr.test(_.options.prevArrow)) { 51300 _.$prevArrow.prependTo(_.options.appendArrows); 51301 } 51302 if (_.htmlExpr.test(_.options.nextArrow)) { 51303 _.$nextArrow.appendTo(_.options.appendArrows); 51304 } 51305 if (_.options.infinite !== true) { 51306 _.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"); 51307 } 51308 } else { 51309 _.$prevArrow.add(_.$nextArrow).addClass("slick-hidden").attr({ "aria-disabled": "true", tabindex: "-1" }); 51310 } 51311 } 51312 }; 51313 Slick.prototype.buildDots = function () { 51314 var _ = this, 51315 i, 51316 dot; 51317 if (_.options.dots === true) { 51318 _.$slider.addClass("slick-dotted"); 51319 dot = $("<ul />").addClass(_.options.dotsClass); 51320 for (i = 0; i <= _.getDotCount(); i += 1) { 51321 dot.append($("<li />").append(_.options.customPaging.call(this, _, i))); 51322 } 51323 _.$dots = dot.appendTo(_.options.appendDots); 51324 _.$dots.find("li").first().addClass("slick-active"); 51325 } 51326 }; 51327 Slick.prototype.buildOut = function () { 51328 var _ = this; 51329 _.$slides = _.$slider.children(_.options.slide + ":not(.slick-cloned)").addClass("slick-slide"); 51330 _.slideCount = _.$slides.length; 51331 _.$slides.each(function (index, element) { 51332 $(element) 51333 .attr("data-slick-index", index) 51334 .data("originalStyling", $(element).attr("style") || ""); 51335 }); 51336 _.$slider.addClass("slick-slider"); 51337 _.$slideTrack = _.slideCount === 0 ? $('<div class="slick-track"/>').appendTo(_.$slider) : _.$slides.wrapAll('<div class="slick-track"/>').parent(); 51338 _.$list = _.$slideTrack.wrap('<div class="slick-list"/>').parent(); 51339 _.$slideTrack.css("opacity", 0); 51340 if (_.options.centerMode === true || _.options.swipeToSlide === true) {
51341 _.options.slidesToScroll = 1; 51342 } 51343 $("img[data-lazy]", _.$slider).not("[src]").addClass("slick-loading"); 51344 _.setupInfinite(); 51345 _.buildArrows(); 51346 _.buildDots(); 51347 _.updateDots(); 51348 _.setSlideClasses(typeof _.currentSlide === "number" ? _.currentSlide : 0); 51349 if (_.options.draggable === true) { 51350 _.$list.addClass("draggable"); 51351 } 51352 }; 51353 Slick.prototype.buildRows = function () { 51354 var _ = this, 51355 a, 51356 b, 51357 c, 51358 newSlides, 51359 numOfSlides, 51360 originalSlides, 51361 slidesPerSection; 51362 newSlides = document.createDocumentFragment(); 51363 originalSlides = _.$slider.children(); 51364 if (_.options.rows > 1) { 51365 slidesPerSection = _.options.slidesPerRow * _.options.rows; 51366 numOfSlides = Math.ceil(originalSlides.length / slidesPerSection); 51367 for (a = 0; a < numOfSlides; a++) { 51368 var slide = document.createElement("div"); 51369 for (b = 0; b < _.options.rows; b++) { 51370 var row = document.createElement("div"); 51371 for (c = 0; c < _.options.slidesPerRow; c++) { 51372 var target = a * slidesPerSection + (b * _.options.slidesPerRow + c); 51373 if (originalSlides.get(target)) { 51374 row.appendChild(originalSlides.get(target)); 51375 } 51376 } 51377 slide.appendChild(row); 51378 } 51379 newSlides.appendChild(slide); 51380 } 51381 _.$slider.empty().append(newSlides); 51382 _.$slider 51383 .children() 51384 .children() 51385 .children() 51386 .css({ width: 100 / _.options.slidesPerRow + "%", display: "inline-block" }); 51387 } 51388 }; 51389 Slick.prototype.checkResponsive = function (initial, forceUpdate) { 51390 var _ = this, 51391 breakpoint, 51392 targetBreakpoint, 51393 respondToWidth, 51394 triggerBreakpoint = false; 51395 var sliderWidth = _.$slider.width(); 51396 var windowWidth = window.innerWidth || $(window).width(); 51397 if (_.respondTo === "window") { 51398 respondToWidth = windowWidth; 51399 } else if (_.respondTo === "slider") { 51400 respondToWidth = sliderWidth; 51401 } else if (_.respondTo === "min") { 51402 respondToWidth = Math.min(windowWidth, sliderWidth); 51403 } 51404 if (_.options.responsive && _.options.responsive.length && _.options.responsive !== null) { 51405 targetBreakpoint = null; 51406 for (breakpoint in _.breakpoints) { 51407 if (_.breakpoints.hasOwnProperty(breakpoint)) { 51408 if (_.originalSettings.mobileFirst === false) { 51409 if (respondToWidth < _.breakpoints[breakpoint]) { 51410 targetBreakpoint = _.breakpoints[breakpoint]; 51411 } 51412 } else { 51413 if (respondToWidth > _.breakpoints[breakpoint]) { 51414 targetBreakpoint = _.breakpoints[breakpoint]; 51415 } 51416 } 51417 } 51418 } 51419 if (targetBreakpoint !== null) { 51420 if (_.activeBreakpoint !== null) { 51421 if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) { 51422 _.activeBreakpoint = targetBreakpoint; 51423 if (_.breakpointSettings[targetBreakpoint] === "unslick") { 51424 _.unslick(targetBreakpoint); 51425 } else { 51426 _.options = $.extend({}, _.originalSettings, _.breakpointSettings[targetBreakpoint]); 51427 if (initial === true) { 51428 _.currentSlide = _.options.initialSlide; 51429 } 51430 _.refresh(initial); 51431 } 51432 triggerBreakpoint = targetBreakpoint; 51433 } 51434 } else {
51435 _.activeBreakpoint = targetBreakpoint; 51436 if (_.breakpointSettings[targetBreakpoint] === "unslick") { 51437 _.unslick(targetBreakpoint); 51438 } else { 51439 _.options = $.extend({}, _.originalSettings, _.breakpointSettings[targetBreakpoint]); 51440 if (initial === true) { 51441 _.currentSlide = _.options.initialSlide; 51442 } 51443 _.refresh(initial); 51444 } 51445 triggerBreakpoint = targetBreakpoint; 51446 } 51447 } else { 51448 if (_.activeBreakpoint !== null) { 51449 _.activeBreakpoint = null; 51450 _.options = _.originalSettings; 51451 if (initial === true) { 51452 _.currentSlide = _.options.initialSlide; 51453 } 51454 _.refresh(initial); 51455 triggerBreakpoint = targetBreakpoint; 51456 } 51457 } 51458 if (!initial && triggerBreakpoint !== false) { 51459 _.$slider.trigger("breakpoint", [_, triggerBreakpoint]); 51460 } 51461 } 51462 }; 51463 Slick.prototype.changeSlide = function (event, dontAnimate) { 51464 var _ = this, 51465 $target = $(event.currentTarget), 51466 indexOffset, 51467 slideOffset, 51468 unevenOffset; 51469 if ($target.is("a")) { 51470 event.preventDefault(); 51471 } 51472 if (!$target.is("li")) { 51473 $target = $target.closest("li"); 51474 } 51475 unevenOffset = _.slideCount % _.options.slidesToScroll !== 0; 51476 indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll; 51477 switch (event.data.message) { 51478 case "previous": 51479 slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset; 51480 if (_.slideCount > _.options.slidesToShow) { 51481 if(_.currentSlide - slideOffset === -1){ 51482 _.currentSlide=_.slideCount; 51483 } 51484 _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate); 51485 } 51486 break; 51487 case "next": 51488 slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset; 51489 if (_.slideCount > _.options.slidesToShow) { 51490 if(_.currentSlide + slideOffset === _.slideCount){ 51491 _.currentSlide=-1; 51492 } 51493 _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate); 51494 } 51495 break; 51496 case "index": 51497 var index = event.data.index === 0 ? 0 : event.data.index || $target.index() * _.options.slidesToScroll; 51498 _.slideHandler(_.checkNavigable(index), false, dontAnimate); 51499 $target.children().trigger("focus"); 51500 break; 51501 default: 51502 return; 51503 } 51504 }; 51505 Slick.prototype.checkNavigable = function (index) { 51506 var _ = this, 51507 navigables, 51508 prevNavigable; 51509 navigables = _.getNavigableIndexes(); 51510 prevNavigable = 0; 51511 if (index > navigables[navigables.length - 1]) { 51512 index = navigables[navigables.length - 1]; 51513 } else { 51514 for (var n in navigables) { 51515 if (index < navigables[n]) { 51516 index = prevNavigable; 51517 break; 51518 } 51519 prevNavigable = navigables[n]; 51520 } 51521 } 51522 return index; 51523 }; 51524 Slick.prototype.cleanUpEvents = function () { 51525 var _ = this; 51526 if (_.options.dots && _.$dots !== null) { 51527 $("li", _.$dots).off("click.slick", _.changeSlide).off("mouseenter.slick", $.proxy(_.interrupt, _, true)).off("mouseleave.slick", $.proxy(_.interrupt, _, false)); 51528 if (_.options.accessibility === true) { 51529 _.$dots.off("keydown.slick", _.keyHandler); 51530 } 51531 } 51532 _.$slider.off("focus.slick blur.slick"); 51533 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 51534 _.$prevArrow && _.$prevArrow.off("click.slick", _.changeSlide); 51535 _.$nextArrow && _.$nextArrow.off("click.slick", _.changeSlide); 51536 if (_.options.accessibility === true) { 51537 _.$prevArrow && _.$prevArrow.off("keydown.slick", _.keyHandler); 51538 _.$nextArrow && _.$nextArrow.off("keydown.slick", _.keyHandler); 51539 } 51540 } 51541 _.$list.off("touchstart.slick mousedown.slick", _.swipeHandler); 51542 _.$list.off("touchmove.slick mousemove.slick", _.swipeHandler); 51543 _.$list.off("touchend.slick mouseup.slick", _.swipeHandler);
51544 _.$list.off("touchcancel.slick mouseleave.slick", _.swipeHandler); 51545 _.$list.off("click.slick", _.clickHandler); 51546 $(document).off(_.visibilityChange, _.visibility); 51547 _.cleanUpSlideEvents(); 51548 if (_.options.accessibility === true) { 51549 _.$list.off("keydown.slick", _.keyHandler); 51550 } 51551 if (_.options.focusOnSelect === true) { 51552 $(_.$slideTrack).children().off("click.slick", _.selectHandler); 51553 } 51554 $(window).off("orientationchange.slick.slick-" + _.instanceUid, _.orientationChange); 51555 $(window).off("resize.slick.slick-" + _.instanceUid, _.resize); 51556 $("[draggable!=true]", _.$slideTrack).off("dragstart", _.preventDefault); 51557 $(window).off("load.slick.slick-" + _.instanceUid, _.setPosition); 51558 }; 51559 Slick.prototype.cleanUpSlideEvents = function () { 51560 var _ = this; 51561 _.$list.off("mouseenter.slick", $.proxy(_.interrupt, _, true)); 51562 _.$list.off("mouseleave.slick", $.proxy(_.interrupt, _, false)); 51563 }; 51564 Slick.prototype.cleanUpRows = function () { 51565 var _ = this, 51566 originalSlides; 51567 if (_.options.rows > 1) { 51568 originalSlides = _.$slides.children().children(); 51569 originalSlides.removeAttr("style"); 51570 _.$slider.empty().append(originalSlides); 51571 } 51572 }; 51573 Slick.prototype.clickHandler = function (event) { 51574 var _ = this; 51575 if (_.shouldClick === false) { 51576 event.stopImmediatePropagation(); 51577 event.stopPropagation(); 51578 event.preventDefault(); 51579 } 51580 }; 51581 Slick.prototype.destroy = function (refresh) { 51582 var _ = this; 51583 _.autoPlayClear(); 51584 _.touchObject = {}; 51585 _.cleanUpEvents(); 51586 $(".slick-cloned", _.$slider).detach(); 51587 if (_.$dots) { 51588 _.$dots.remove(); 51589 } 51590 if (_.$prevArrow && _.$prevArrow.length) { 51591 _.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""); 51592 if (_.htmlExpr.test(_.options.prevArrow)) { 51593 _.$prevArrow.remove(); 51594 } 51595 } 51596 if (_.$nextArrow && _.$nextArrow.length) { 51597 _.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display", ""); 51598 if (_.htmlExpr.test(_.options.nextArrow)) { 51599 _.$nextArrow.remove(); 51600 } 51601 } 51602 if (_.$slides) { 51603 _.$slides 51604 .removeClass("slick-slide slick-active slick-center slick-visible slick-current") 51605 .removeAttr("aria-hidden") 51606 .removeAttr("data-slick-index") 51607 .each(function () { 51608 $(this).attr("style", $(this).data("originalStyling")); 51609 }); 51610 _.$slideTrack.children(this.options.slide).detach(); 51611 _.$slideTrack.detach(); 51612 _.$list.detach(); 51613 _.$slider.append(_.$slides); 51614 } 51615 _.cleanUpRows(); 51616 _.$slider.removeClass("slick-slider"); 51617 _.$slider.removeClass("slick-initialized"); 51618 _.$slider.removeClass("slick-dotted"); 51619 _.unslicked = true; 51620 if (!refresh) { 51621 _.$slider.trigger("destroy", [_]); 51622 } 51623 }; 51624 Slick.prototype.disableTransition = function (slide) { 51625 var _ = this, 51626 transition = {}; 51627 transition[_.transitionType] = ""; 51628 if (_.options.fade === false) { 51629 _.$slideTrack.css(transition); 51630 } else { 51631 _.$slides.eq(slide).css(transition); 51632 } 51633 }; 51634 Slick.prototype.fadeSlide = function (slideIndex, callback) { 51635 var _ = this; 51636 if (_.cssTransitions === false) { 51637 _.$slides.eq(slideIndex).css({ zIndex: _.options.zIndex }); 51638 _.$slides.eq(slideIndex).animate({ opacity: 1 }, _.options.speed, _.options.easing, callback); 51639 } else { 51640 _.applyTransition(slideIndex); 51641 _.$slides.eq(slideIndex).css({ opacity: 1, zIndex: _.options.zIndex }); 51642 if (callback) { 51643 setTimeout(function () { 51644 _.disableTransition(slideIndex); 51645 callback.call(); 51646 }, _.options.speed); 51647 } 51648 } 51649 }; 51650 Slick.prototype.fadeSlideOut = function (slideIndex) { 51651 var _ = this; 51652 if (_.cssTransitions === false) { 51653 _.$slides.eq(slideIndex).animate({ opacity: 0, zIndex: _.options.zIndex - 2 }, _.options.speed, _.options.easing); 51654 } else { 51655 _.applyTransition(slideIndex); 51656 _.$slides.eq(slideIndex).css({ opacity: 0, zIndex: _.options.zIndex - 2 }); 51657 } 51658 };
51659 Slick.prototype.filterSlides = Slick.prototype.slickFilter = function (filter) { 51660 var _ = this; 51661 if (filter !== null) { 51662 _.$slidesCache = _.$slides; 51663 _.unload(); 51664 _.$slideTrack.children(this.options.slide).detach(); 51665 _.$slidesCache.filter(filter).appendTo(_.$slideTrack); 51666 _.reinit(); 51667 } 51668 }; 51669 Slick.prototype.focusHandler = function () { 51670 var _ = this; 51671 _.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick", "*", function (event) { 51672 event.stopImmediatePropagation(); 51673 var $sf = $(this); 51674 setTimeout(function () { 51675 if (_.options.pauseOnFocus) { 51676 _.focussed = $sf.is(":focus"); 51677 _.autoPlay(); 51678 } 51679 }, 0); 51680 }); 51681 }; 51682 Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function () { 51683 var _ = this; 51684 return _.currentSlide; 51685 }; 51686 Slick.prototype.getDotCount = function () { 51687 var _ = this; 51688 var breakPoint = 0; 51689 var counter = 0; 51690 var pagerQty = 0; 51691 if (_.options.infinite === true) { 51692 if (_.slideCount <= _.options.slidesToShow) { 51693 ++pagerQty; 51694 } else { 51695 while (breakPoint < _.slideCount) { 51696 ++pagerQty; 51697 breakPoint = counter + _.options.slidesToScroll; 51698 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow; 51699 } 51700 } 51701 } else if (_.options.centerMode === true) { 51702 pagerQty = _.slideCount; 51703 } else if (!_.options.asNavFor) { 51704 pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll); 51705 } else { 51706 while (breakPoint < _.slideCount) { 51707 ++pagerQty; 51708 breakPoint = counter + _.options.slidesToScroll; 51709 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow; 51710 } 51711 } 51712 return pagerQty - 1; 51713 }; 51714 Slick.prototype.getLeft = function (slideIndex) { 51715 var _ = this, 51716 targetLeft, 51717 verticalHeight, 51718 verticalOffset = 0, 51719 targetSlide, 51720 coef; 51721 _.slideOffset = 0; 51722 verticalHeight = _.$slides.first().outerHeight(true); 51723 if (_.options.infinite === true) { 51724 if (_.slideCount > _.options.slidesToShow) { 51725 _.slideOffset = _.slideWidth * _.options.slidesToShow * -1; 51726 coef = -1; 51727 if (_.options.vertical === true && _.options.centerMode === true) { 51728 if (_.options.slidesToShow === 2) { 51729 coef = -1.5; 51730 } else if (_.options.slidesToShow === 1) { 51731 coef = -2; 51732 } 51733 } 51734 verticalOffset = verticalHeight * _.options.slidesToShow * coef; 51735 } 51736 if (_.slideCount % _.options.slidesToScroll !== 0) { 51737 if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) { 51738 if (slideIndex > _.slideCount) { 51739 _.slideOffset = (_.options.slidesToShow - (sl
51739ideIndex - _.slideCount)) * _.slideWidth * -1; 51740 verticalOffset = (_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight * -1; 51741 } else { 51742 _.slideOffset = (_.slideCount % _.options.slidesToScroll) * _.slideWidth * -1; 51743 verticalOffset = (_.slideCount % _.options.slidesToScroll) * verticalHeight * -1; 51744 } 51745 } 51746 } 51747 } else { 51748 if (slideIndex + _.options.slidesToShow > _.slideCount) { 51749 _.slideOffset = (slideIndex + _.options.slidesToShow - _.slideCount) * _.slideWidth; 51750 verticalOffset = (slideIndex + _.options.slidesToShow - _.slideCount) * verticalHeight; 51751 } 51752 } 51753 if (_.slideCount <= _.options.slidesToShow) { 51754 _.slideOffset = 0; 51755 verticalOffset = 0; 51756 } 51757 if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) { 51758 _.slideOffset = (_.slideWidth * Math.floor(_.options.slidesToShow)) / 2 - (_.slideWidth * _.slideCount) / 2; 51759 } else if (_.options.centerMode === true && _.options.infinite === true) { 51760 _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth; 51761 } else if (_.options.centerMode === true) { 51762 _.slideOffset = 0; 51763 _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2); 51764 } 51765 if (_.options.vertical === false) { 51766 targetLeft = slideIndex * _.slideWidth * -1 + _.slideOffset; 51767 } else { 51768 targetLeft = slideIndex * verticalHeight * -1 + verticalOffset; 51769 } 51770 if (_.options.variableWidth === true) {
51771 if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) { 51772 targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex); 51773 } else { 51774 targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex + _.options.slidesToShow); 51775 } 51776 if (_.options.rtl === true) { 51777 if (targetSlide[0]) { 51778 targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1; 51779 } else { 51780 targetLeft = 0; 51781 } 51782 } else { 51783 targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0; 51784 } 51785 if (_.options.centerMode === true) { 51786 if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) { 51787 targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex); 51788 } else { 51789 targetSlide = _.$slideTrack.children(".slick-slide").eq(slideIndex + _.options.slidesToShow + 1); 51790 } 51791 if (_.options.rtl === true) { 51792 if (targetSlide[0]) { 51793 targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1; 51794 } else { 51795 targetLeft = 0; 51796 } 51797 } else { 51798 targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0; 51799 } 51800 targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2; 51801 } 51802 } 51803 return targetLeft; 51804 }; 51805 Slick.prototype.getOption = Slick.prototype.slickGetOption = function (option) { 51806 var _ = this; 51807 return _.options[option]; 51808 }; 51809 Slick.prototype.getNavigableIndexes = function () { 51810 var _ = this, 51811 breakPoint = 0, 51812 counter = 0, 51813 indexes = [], 51814 max; 51815 if (_.options.infinite === false) { 51816 max = _.slideCount; 51817 } else { 51818 breakPoint = _.options.slidesToScroll * -1; 51819 counter = _.options.slidesToScroll * -1; 51820 max = _.slideCount * 2; 51821 } 51822 while (breakPoint < max) { 51823 indexes.push(breakPoint); 51824 breakPoint = counter + _.options.slidesToScroll; 51825 counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow; 51826 } 51827 return indexes; 51828 }; 51829 Slick.prototype.getSlick = function () { 51830 return this; 51831 }; 51832 Slick.prototype.getSlideCount = function () { 51833 var _ = this, 51834 slidesTraversed, 51835 swipedSlide, 51836 centerOffset; 51837 centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0; 51838 if (_.options.swipeToSlide === true) { 51839 _.$slideTrack.find(".slick-slide").each(function (index, slide) { 51840 if (slide.offsetLeft - centerOffset + $(slide).outerWidth() / 2 > _.swipeLeft * -1) { 51841 swipedSlide = slide; 51842 return false; 51843 } 51844 }); 51845 slidesTraversed = Math.abs($(swipedSlide).attr("data-slick-index") - _.currentSlide) || 1; 51846 return slidesTraversed; 51847 } else { 51848 return _.options.slidesToScroll; 51849 } 51850 }; 51851 Slick.prototype.goTo = Slick.prototype.slickGoTo = function (slide, dontAnimate) { 51852 var _ = this; 51853 _.changeSlide({ data: { message: "index", index: parseInt(slide) } }, dontAnimate); 51854 }; 51855 Slick.prototype.init = function (creation) { 51856 var _ = this; 51857 if (!$(_.$slider).hasClass("slick-initialized")) { 51858 $(_.$slider).addClass("slick-initialized"); 51859 _.buildRows(); 51860 _.buildOut(); 51861 _.setProps(); 51862 _.startLoad(); 51863 _.loadSlider(); 51864 _.initializeEvents(); 51865 _.updateArrows(); 51866 _.updateDots(); 51867 _.checkResponsive(true); 51868 _.focusHandler(); 51869 } 51870 if (creation) { 51871 _.$slider.trigger("init", [_]); 51872 } 51873 if (_.options.accessibility === true) { 51874 _.initADA(); 51875 } 51876 if (_.options.autoplay) { 51877 _.paused = false;
51878 _.autoPlay(); 51879 } 51880 }; 51881 Slick.prototype.initADA = function () { 51882 var _ = this, 51883 numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow), 51884 tabControlIndexes = _.getNavigableIndexes().filter(function (val) { 51885 return val >= 0 && val < _.slideCount; 51886 }); 51887 _.$slides.add(_.$slideTrack.find(".slick-cloned")).attr({ "aria-hidden": "true", tabindex: "-1" }).find("a, input, button, select").attr({ tabindex: "-1" }); 51888 if (_.$dots !== null) { 51889 _.$slides.not(_.$slideTrack.find(".slick-cloned")).each(function (i) { 51890 var slideControlIndex = tabControlIndexes.indexOf(i); 51891 $(this).attr({ role: "tabpanel", id: "slick-slide" + _.instanceUid + i, tabindex: -1 }); 51892 if (slideControlIndex !== -1) { 51893 $(this).attr({ "aria-describedby": "slick-slide-control" + _.instanceUid + slideControlIndex }); 51894 } 51895 }); 51896 _.$dots 51897 .attr("role", "tablist") 51898 .find("li") 51899 .each(function (i) { 51900 var mappedSlideIndex = tabControlIndexes[i]; 51901 $(this).attr({ role: "presentation" }); 51902 $(this) 51903 .find("button") 51904 .first() 51905 .attr({ 51906 role: "tab", 51907 id: "slick-slide-control" + _.instanceUid + i, 51908 "aria-controls": "slick-slide" + _.instanceUid + mappedSlideIndex, 51909 "aria-label": i + 1 + " of " + numDotGroups, 51910 "aria-selected": null, 51911 tabindex: "-1", 51912 }); 51913 }) 51914 .eq(_.currentSlide) 51915 .find("button") 51916 .attr({ "aria-selected": "true", tabindex: "0" }) 51917 .end(); 51918 } 51919 for (var i = _.currentSlide, max = i + _.options.slidesToShow; i < max; i++) { 51920 _.$slides.eq(i).attr("tabindex", 0); 51921 } 51922 _.activateADA(); 51923 }; 51924 Slick.prototype.initArrowEvents = function () { 51925 var _ = this; 51926 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 51927 _.$prevArrow.off("click.slick").on("click.slick", { message: "previous" }, _.changeSlide); 51928 _.$nextArrow.off("click.slick").on("click.slick", { message: "next" }, _.changeSlide); 51929 if (_.options.accessibility === true) { 51930 _.$prevArrow.on("keydown.slick", _.keyHandler); 51931 _.$nextArrow.on("keydown.slick", _.keyHandler); 51932 } 51933 } 51934 }; 51935 Slick.prototype.initDotEvents = function () { 51936 var _ = this; 51937 if (_.options.dots === true) { 51938 $("li", _.$dots).on("click.slick", { message: "index" }, _.changeSlide); 51939 if (_.options.accessibility === true) { 51940 _.$dots.on("keydown.slick", _.keyHandler); 51941 } 51942 } 51943 if (_.options.dots === true && _.options.pauseOnDotsHover === true) { 51944 $("li", _.$dots).on("mouseenter.slick", $.proxy(_.interrupt, _, true)).on("mouseleave.slick", $.proxy(_.interrupt, _, false)); 51945 } 51946 }; 51947 Slick.prototype.initSlideEvents = function () { 51948 var _ = this; 51949 if (_.options.pauseOnHover) { 51950 _.$list.on("mouseenter.slick", $.proxy(_.interrupt, _, true)); 51951 _.$list.on("mouseleave.slick", $.proxy(_.interrupt, _, false)); 51952 } 51953 }; 51954 Slick.prototype.initializeEvents = function () { 51955 var _ = this; 51956 _.initArrowEvents(); 51957 _.initDotEvents(); 51958 _.initSlideEvents(); 51959 _.$list.on("touchstart.slick mousedown.slick", { action: "start" }, _.swipeHandler); 51960 _.$list.on("touchmove.slick mousemove.slick", { action: "move" }, _.swipeHandler); 51961 _.$list.on("touchend.slick mouseup.slick", { action: "end" }, _.swipeHandler);
51962 _.$list.on("touchcancel.slick mouseleave.slick", { action: "end" }, _.swipeHandler); 51963 _.$list.on("click.slick", _.clickHandler); 51964 $(document).on(_.visibilityChange, $.proxy(_.visibility, _)); 51965 if (_.options.accessibility === true) { 51966 _.$list.on("keydown.slick", _.keyHandler); 51967 } 51968 if (_.options.focusOnSelect === true) { 51969 $(_.$slideTrack).children().on("click.slick", _.selectHandler); 51970 } 51971 $(window).on("orientationchange.slick.slick-" + _.instanceUid, $.proxy(_.orientationChange, _)); 51972 $(window).on("resize.slick.slick-" + _.instanceUid, $.proxy(_.resize, _)); 51973 $("[draggable!=true]", _.$slideTrack).on("dragstart", _.preventDefault); 51974 $(window).on("load.slick.slick-" + _.instanceUid, _.setPosition); 51975 $(_.setPosition); 51976 }; 51977 Slick.prototype.initUI = function () { 51978 var _ = this; 51979 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 51980 _.$prevArrow.show(); 51981 _.$nextArrow.show(); 51982 } 51983 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { 51984 _.$dots.show(); 51985 } 51986 }; 51987 Slick.prototype.keyHandler = function (event) { 51988 var _ = this; 51989 if (!event.target.tagName.match("TEXTAREA|INPUT|SELECT")) { 51990 if (event.keyCode === 37 && _.options.accessibility === true) { 51991 _.changeSlide({ data: { message: _.options.rtl === true ? "next" : "previous" } }); 51992 } else if (event.keyCode === 39 && _.options.accessibility === true) { 51993 _.changeSlide({ data: { message: _.options.rtl === true ? "previous" : "next" } }); 51994 } 51995 } 51996 }; 51997 Slick.prototype.lazyLoad = function () { 51998 var _ = this, 51999 loadRange, 52000 cloneRange, 52001 rangeStart, 52002 rangeEnd; 52003 function loadImages(imagesScope) { 52004 $("img[data-lazy]", imagesScope).each(function () { 52005 var image = $(this), 52006 imageSource = $(this).attr("data-lazy"), 52007 imageSrcSet = $(this).attr("data-srcset"), 52008 imageSizes = $(this).attr("data-sizes") || _.$slider.attr("data-sizes"), 52009 imageToLoad = document.createElement("img"); 52010 imageToLoad.onload = function () { 52011 image.animate({ opacity: 0 }, 100, function () { 52012 if (imageSrcSet) { 52013 image.attr("srcset", imageSrcSet); 52014 if (imageSizes) { 52015 image.attr("sizes", imageSizes); 52016 } 52017 } 52018 image.attr("src", imageSource).animate({ opacity: 1 }, 200, function () { 52019 image.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"); 52020 }); 52021 _.$slider.trigger("lazyLoaded", [_, image, imageSource]); 52022 }); 52023 }; 52024 imageToLoad.onerror = function () { 52025 image.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"); 52026 _.$slider.trigger("lazyLoadError", [_, image, imageSource]); 52027 }; 52028 imageToLoad.src = imageSource; 52029 }); 52030 } 52031 if (_.options.centerMode === true) { 52032 if (_.options.infinite === true) { 52033 rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1); 52034 rangeEnd = rangeStart + _.options.slidesToShow + 2; 52035 } else { 52036 rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1)); 52037 rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide; 52038 } 52039 } else { 52040 rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide; 52041 rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow); 52042 if (_.options.fade === true) { 52043 if (rangeStart > 0) rangeStart--; 52044 if (rangeEnd <= _.slideCount) rangeEnd++; 52045 } 52046 } 52047 loadRange = _.$slider.find(".slick-slide").slice(rangeStart, rangeEnd); 52048 if (_.options.lazyLoad === "anticipated") { 52049 var prevSlide = rangeStart - 1, 52050 nextSlide = rangeEnd, 52051 $slides = _.$slider.find(".slick-slide"); 52052 for (var i = 0; i < _.options.slidesToScroll; i++) { 52053 if (prevSlide < 0) prevSlide = _.slideCount - 1; 52054 loadRange = loadRange.add($slides.eq(prevSlide)); 52055 loadRange = loadRange.add($slides.eq(nextSlide)); 52056 prevSlide--; 52057 nextSlide++; 52058 } 52059 } 52060 loadImages(loadRange); 52061 if (_.slideCount <= _.options.slidesToShow) { 52062 cloneRange = _.$slider.find(".slick-slide"); 52063 loadImages(cloneRange); 52064 } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow) { 52065 cloneRange = _.$slider.find(".slick-cloned").slice(0, _.options.slidesToShow); 52066 loadImages(cloneRange); 52067 } else if (_.currentSlide === 0) { 52068 cloneRange = _.$slider.find(".slick-cloned").slice(_.options.slidesToShow * -1); 52069 loadImages(cloneRange); 52070 } 52071 }; 52072 Slick.prototype.loadSlider = function () { 52073 var _ = this; 52074 _.setPosition(); 52075 _.$slideTrack.css({ opacity: 1 }); 52076 _.$slider.removeClass("slick-loading"); 52077 _.initUI(); 52078 if (_.options.lazyLoad === "progressive") { 52079 _.progressiveLazyLoad(); 52080 } 52081 }; 52082 Slick.prototype.next = Slick.prototype.slickNext = function () { 52083 var _ = this; 52084 _.changeSlide({ data: { message: "next" } }); 52085 }; 52086 Slick.prototype.orientationChange = function () { 52087 var _ = this; 52088 _.checkResponsive(); 52089 _.setPosition(); 52090 }; 52091 Slick.prototype.pause = Slick.prototype.slickPause = function () { 52092 var _ = this; 52093 _.autoPlayClear(); 52094 _.paused = true; 52095 }; 52096 Slick.prototype.play = Slick.prototype.slickPlay = function () { 52097 var _ = this; 52098 _.autoPlay();
52099 _.options.autoplay = true; 52100 _.paused = false; 52101 _.focussed = false; 52102 _.interrupted = false; 52103 }; 52104 Slick.prototype.postSlide = function (index) { 52105 var _ = this; 52106 if (!_.unslicked) { 52107 _.$slider.trigger("afterChange", [_, index]); 52108 _.animating = false; 52109 if (_.slideCount > _.options.slidesToShow) { 52110 _.setPosition(); 52111 } 52112 _.swipeLeft = null; 52113 if (_.options.autoplay) { 52114 _.autoPlay(); 52115 } 52116 if (_.options.accessibility === true) { 52117 _.initADA(); 52118 if (_.options.focusOnChange) { 52119 var $currentSlide = $(_.$slides.get(_.currentSlide)); 52120 $currentSlide.attr("tabindex", 0).focus(); 52121 } 52122 } 52123 } 52124 }; 52125 Slick.prototype.prev = Slick.prototype.slickPrev = function () { 52126 var _ = this; 52127 _.changeSlide({ data: { message: "previous" } }); 52128 }; 52129 Slick.prototype.preventDefault = function (event) { 52130 event.preventDefault(); 52131 }; 52132 Slick.prototype.progressiveLazyLoad = function (tryCount) { 52133 tryCount = tryCount || 1; 52134 var _ = this, 52135 $imgsToLoad = $("img[data-lazy]", _.$slider), 52136 image, 52137 imageSource, 52138 imageSrcSet, 52139 imageSizes, 52140 imageToLoad; 52141 if ($imgsToLoad.length) { 52142 image = $imgsToLoad.first(); 52143 imageSource = image.attr("data-lazy"); 52144 imageSrcSet = image.attr("data-srcset"); 52145 imageSizes = image.attr("data-sizes") || _.$slider.attr("data-sizes"); 52146 imageToLoad = document.createElement("img"); 52147 imageToLoad.onload = function () { 52148 if (imageSrcSet) { 52149 image.attr("srcset", imageSrcSet); 52150 if (imageSizes) { 52151 image.attr("sizes", imageSizes); 52152 } 52153 } 52154 image.attr("src", imageSource).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"); 52155 if (_.options.adaptiveHeight === true) { 52156 _.setPosition(); 52157 } 52158 _.$slider.trigger("lazyLoaded", [_, image, imageSource]); 52159 _.progressiveLazyLoad(); 52160 }; 52161 imageToLoad.onerror = function () { 52162 if (tryCount < 3) { 52163 setTimeout(function () { 52164 _.progressiveLazyLoad(tryCount + 1); 52165 }, 500); 52166 } else { 52167 image.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"); 52168 _.$slider.trigger("lazyLoadError", [_, image, imageSource]); 52169 _.progressiveLazyLoad(); 52170 } 52171 }; 52172 imageToLoad.src = imageSource; 52173 } else { 52174 _.$slider.trigger("allImagesLoaded", [_]); 52175 } 52176 }; 52177 Slick.prototype.refresh = function (initializing) { 52178 var _ = this, 52179 currentSlide, 52180 lastVisibleIndex; 52181 lastVisibleIndex = _.slideCount - _.options.slidesToShow; 52182 if (!_.options.infinite && _.currentSlide > lastVisibleIndex) { 52183 _.currentSlide = lastVisibleIndex; 52184 } 52185 if (_.slideCount <= _.options.slidesToShow) { 52186 _.currentSlide = 0; 52187 } 52188 currentSlide = _.currentSlide; 52189 _.destroy(true); 52190 $.extend(_, _.initials, { currentSlide: currentSlide }); 52191 _.init(); 52192 if (!initializing) { 52193 _.changeSlide({ data: { message: "index", index: currentSlide } }, false); 52194 } 52195 }; 52196 Slick.prototype.registerBreakpoints = function () { 52197 var _ = this, 52198 breakpoint, 52199 currentBreakpoint, 52200 l, 52201 responsiveSettings = _.options.responsive || null; 52202 if ($.type(responsiveSettings) === "array" && responsiveSettings.length) { 52203 _.respondTo = _.options.respondTo || "window"; 52204 for (breakpoint in responsiveSettings) { 52205 l = _.breakpoints.length - 1; 52206 if (responsiveSettings.hasOwnProperty(breakpoint)) { 52207 currentBreakpoint = responsiveSettings[breakpoint].breakpoint; 52208 while (l >= 0) { 52209 if (_.breakpoints[l] && _.breakpoints[l] === currentBreakpoint) { 52210 _.breakpoints.splice(l, 1); 52211 } 52212 l--; 52213 } 52214 _.breakpoints.push(currentBreakpoint); 52215 _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings; 52216 } 52217 } 52218 _.breakpoints.sort(function (a, b) { 52219 return _.options.mobileFirst ? a - b : b - a; 52220 }); 52221 } 52222 }; 52223 Slick.prototype.reinit = function () { 52224 var _ = this; 52225 _.$slides = _.$slideTrack.children(_.options.slide).addClass("slick-slide"); 52226 _.slideCount = _.$slides.length; 52227 if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) { 52228 _.currentSlide = _.currentSlide - _.options.slidesToScroll; 52229 } 52230 if (_.slideCount <= _.options.slidesToShow) { 52231 _.currentSlide = 0; 52232 } 52233 _.registerBreakpoints(); 52234 _.setProps(); 52235 _.setupInfinite(); 52236 _.buildArrows(); 52237 _.updateArrows(); 52238 _.initArrowEvents(); 52239 _.buildDots(); 52240 _.updateDots(); 52241 _.initDotEvents(); 52242 _.cleanUpSlideEvents(); 52243 _.initSlideEvents(); 52244 _.checkResponsive(false, true); 52245 if (_.options.focusOnSelect === true) { 52246 $(_.$slideTrack).children().on("click.slick", _.selectHandler); 52247 } 52248 _.setSlideClasses(typeof _.currentSlide === "number" ? _.currentSlide : 0); 52249 _.setPosition(); 52250 _.focusHandler(); 52251 _.paused = !_.options.autoplay; 52252 _.autoPlay(); 52253 _.$slider.trigger("reInit", [_]); 52254 }; 52255 Slick.prototype.resize = function () { 52256 var _ = this; 52257 if ($(window).width() !== _.windowWidth) { 52258 clearTimeout(_.windowDelay); 52259 _.windowDelay = window.setTimeout(function () { 52260 _.windowWidth = $(window).width(); 52261 _.checkResponsive(); 52262 if (!_.unslicked) { 52263 _.setPosition(); 52264 } 52265 }, 50); 52266 } 52267 }; 52268 Slick.prototype.removeSlide = Slick.prototype.slickRemove = function (index, removeBefore, removeAll) { 52269 var _ = this; 52270 if (typeof index === "boolean") { 52271 removeBefore = index; 52272 index = removeBefore === true ? 0 : _.slideCount - 1; 52273 } else { 52274 index = removeBefore === true ? --index : index; 52275 } 52276 if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) { 52277 return false;
52278 } 52279 _.unload(); 52280 if (removeAll === true) { 52281 _.$slideTrack.children().remove(); 52282 } else { 52283 _.$slideTrack.children(this.options.slide).eq(index).remove(); 52284 } 52285 _.$slides = _.$slideTrack.children(this.options.slide); 52286 _.$slideTrack.children(this.options.slide).detach(); 52287 _.$slideTrack.append(_.$slides); 52288 _.$slidesCache = _.$slides; 52289 _.reinit(); 52290 }; 52291 Slick.prototype.setCSS = function (position) { 52292 var _ = this, 52293 positionProps = {}, 52294 x, 52295 y; 52296 if (_.options.rtl === true) { 52297 position = -position; 52298 } 52299 x = _.positionProp == "left" ? Math.ceil(position) + "px" : "0px"; 52300 y = _.positionProp == "top" ? Math.ceil(position) + "px" : "0px"; 52301 positionProps[_.positionProp] = position; 52302 if (_.transformsEnabled === false) { 52303 _.$slideTrack.css(positionProps); 52304 } else { 52305 positionProps = {}; 52306 if (_.cssTransitions === false) { 52307 positionProps[_.animType] = "translate(" + x + ", " + y + ")"; 52308 _.$slideTrack.css(positionProps); 52309 } else { 52310 positionProps[_.animType] = "translate3d(" + x + ", " + y + ", 0px)"; 52311 _.$slideTrack.css(positionProps); 52312 } 52313 } 52314 }; 52315 Slick.prototype.setDimensions = function () { 52316 var _ = this; 52317 if (_.options.vertical === false) { 52318 if (_.options.centerMode === true) { 52319 _.$list.css({ padding: "0px " + _.options.centerPadding }); 52320 } 52321 } else { 52322 _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow); 52323 if (_.options.centerMode === true) { 52324 _.$list.css({ padding: _.options.centerPadding + " 0px" }); 52325 } 52326 } 52327 _.listWidth = _.$list.width(); 52328 _.listHeight = _.$list.height(); 52329 if (_.options.vertical === false && _.options.variableWidth === false) { 52330 _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow); 52331 _.$slideTrack.width(Math.ceil(_.slideWidth * _.$slideTrack.children(".slick-slide").length)); 52332 } else if (_.options.variableWidth === true) { 52333 _.$slideTrack.width(5000 * _.slideCount); 52334 } else { 52335 _.slideWidth = Math.ceil(_.listWidth); 52336 _.$slideTrack.height(Math.ceil(_.$slides.first().outerHeight(true) * _.$slideTrack.children(".slick-slide").length)); 52337 } 52338 var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width(); 52339 if (_.options.variableWidth === false) _.$slideTrack.children(".slick-slide").width(_.slideWidth - offset); 52340 }; 52341 Slick.prototype.setFade = function () { 52342 var _ = this, 52343 targetLeft; 52344 _.$slides.each(function (index, element) { 52345 targetLeft = _.slideWidth * index * -1; 52346 if (_.options.rtl === true) { 52347 $(element).css({ position: "relative", right: targetLeft, top: 0, zIndex: _.options.zIndex - 2, opacity: 0 }); 52348 } else { 52349 $(element).css({ position: "relative", left: targetLeft, top: 0, zIndex: _.options.zIndex - 2, opacity: 0 }); 52350 } 52351 }); 52352 _.$slides.eq(_.currentSlide).css({ zIndex: _.options.zIndex - 1, opacity: 1 }); 52353 }; 52354 Slick.prototype.setHeight = function () { 52355 var _ = this; 52356 if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) { 52357 var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true); 52358 _.$list.css("height", targetHeight); 52359 } 52360 }; 52361 Slick.prototype.setOption = Slick.prototype.slickSetOption = function () { 52362 var _ = this, 52363 l, 52364 item, 52365 option, 52366 value, 52367 refresh = false, 52368 type; 52369 if ($.type(arguments[0]) === "object") { 52370 option = arguments[0]; 52371 refresh = arguments[1]; 52372 type = "multiple"; 52373 } else if ($.type(arguments[0]) === "string") { 52374 option = arguments[0]; 52375 value = arguments[1]; 52376 refresh = arguments[2]; 52377 if (arguments[0] === "responsive" && $.type(arguments[1]) === "array") { 52378 type = "responsive";
52379 } else if (typeof arguments[1] !== "undefined") { 52380 type = "single"; 52381 } 52382 } 52383 if (type === "single") { 52384 _.options[option] = value; 52385 } else if (type === "multiple") { 52386 $.each(option, function (opt, val) { 52387 _.options[opt] = val; 52388 }); 52389 } else if (type === "responsive") { 52390 for (item in value) { 52391 if ($.type(_.options.responsive) !== "array") { 52392 _.options.responsive = [value[item]]; 52393 } else { 52394 l = _.options.responsive.length - 1; 52395 while (l >= 0) { 52396 if (_.options.responsive[l].breakpoint === value[item].breakpoint) { 52397 _.options.responsive.splice(l, 1); 52398 } 52399 l--; 52400 } 52401 _.options.responsive.push(value[item]); 52402 } 52403 } 52404 } 52405 if (refresh) { 52406 _.unload(); 52407 _.reinit(); 52408 } 52409 }; 52410 Slick.prototype.setPosition = function () { 52411 var _ = this; 52412 _.setDimensions(); 52413 _.setHeight(); 52414 if (_.options.fade === false) { 52415 _.setCSS(_.getLeft(_.currentSlide)); 52416 } else { 52417 _.setFade(); 52418 } 52419 _.$slider.trigger("setPosition", [_]); 52420 }; 52421 Slick.prototype.setProps = function () { 52422 var _ = this, 52423 bodyStyle = document.body.style; 52424 _.positionProp = _.options.vertical === true ? "top" : "left"; 52425 if (_.positionProp === "top") { 52426 _.$slider.addClass("slick-vertical"); 52427 } else { 52428 _.$slider.removeClass("slick-vertical"); 52429 } 52430 if (bodyStyle.WebkitTransition !== undefined || bodyStyle.MozTransition !== undefined || bodyStyle.msTransition !== undefined) { 52431 if (_.options.useCSS === true) { 52432 _.cssTransitions = true; 52433 } 52434 } 52435 if (_.options.fade) { 52436 if (typeof _.options.zIndex === "number") { 52437 if (_.options.zIndex < 3) { 52438 _.options.zIndex = 3; 52439 } 52440 } else { 52441 _.options.zIndex = _.defaults.zIndex; 52442 } 52443 } 52444 if (bodyStyle.OTransform !== undefined) { 52445 _.animType = "OTransform"; 52446 _.transformType = "-o-transform"; 52447 _.transitionType = "OTransition"; 52448 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;
52449 } 52450 if (bodyStyle.MozTransform !== undefined) { 52451 _.animType = "MozTransform"; 52452 _.transformType = "-moz-transform"; 52453 _.transitionType = "MozTransition"; 52454 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false; 52455 } 52456 if (bodyStyle.webkitTransform !== undefined) { 52457 _.animType = "webkitTransform"; 52458 _.transformType = "-webkit-transform"; 52459 _.transitionType = "webkitTransition"; 52460 if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false; 52461 } 52462 if (bodyStyle.msTransform !== undefined) { 52463 _.animType = "msTransform"; 52464 _.transformType = "-ms-transform"; 52465 _.transitionType = "msTransition"; 52466 if (bodyStyle.msTransform === undefined) _.animType = false; 52467 } 52468 if (bodyStyle.transform !== undefined && _.animType !== false) { 52469 _.animType = "transform"; 52470 _.transformType = "transform"; 52471 _.transitionType = "transition"; 52472 } 52473 _.transformsEnabled = _.options.useTransform && _.animType !== null && _.animType !== false; 52474 }; 52475 Slick.prototype.setSlideClasses = function (index) { 52476 var _ = this, 52477 centerOffset, 52478 allSlides, 52479 indexOffset, 52480 remainder; 52481 allSlides = _.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden", "true"); 52482 _.$slides.eq(index).addClass("slick-current"); 52483 if (_.options.centerMode === true) { 52484 var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0; 52485 centerOffset = Math.floor(_.options.slidesToShow / 2); 52486 if (_.options.infinite === true) { 52487 if (index >= centerOffset && index <= _.slideCount - 1 - centerOffset) { 52488 _.$slides 52489 .slice(index - centerOffset + evenCoef, index + centerOffset + 1) 52490 .addClass("slick-active") 52491 .attr("aria-hidden", "false"); 52492 } else { 52493 indexOffset = _.options.slidesToShow + index; 52494 allSlides 52495 .slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2) 52496 .addClass("slick-active") 52497 .attr("aria-hidden", "false"); 52498 } 52499 if (index === 0) { 52500 allSlides.eq(allSlides.length - 1 - _.options.slidesToShow).addClass("slick-center"); 52501 } else if (index === _.slideCount - 1) { 52502 allSlides.eq(_.options.slidesToShow).addClass("slick-center"); 52503 } 52504 } 52505 _.$slides.eq(index).addClass("slick-center"); 52506 } else { 52507 if (index >= 0 && index <= _.slideCount - _.options.slidesToShow) { 52508 _.$slides 52509 .slice(index, index + _.options.slidesToShow) 52510 .addClass("slick-active") 52511 .attr("aria-hidden", "false"); 52512 } else if (allSlides.length <= _.options.slidesToShow) { 52513 allSlides.addClass("slick-active").attr("aria-hidden", "false"); 52514 } else { 52515 remainder = _.slideCount % _.options.slidesToShow; 52516 indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index; 52517 if (_.options.slidesToShow == _.options.slidesToScroll && _.slideCount - index < _.options.slidesToShow) { 52518 allSlides 52519 .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder) 52520 .addClass("slick-active") 52521 .attr("aria-hidden", "false"); 52522 } else { 52523 allSlides 52524 .slice(indexOffset, indexOffset + _.options.slidesToShow) 52525 .addClass("slick-active") 52526 .attr("aria-hidden", "false"); 52527 } 52528 } 52529 } 52530 if (_.options.lazyLoad === "ondemand" || _.options.lazyLoad === "anticipated") { 52531 _.lazyLoad(); 52532 } 52533 }; 52534 Slick.prototype.setupInfinite = function () { 52535 var _ = this, 52536 i, 52537 slideIndex, 52538 infiniteCount; 52539 if (_.options.fade === true) {
52540 _.options.centerMode = false; 52541 } 52542 if (_.options.infinite === true && _.options.fade === false) { 52543 slideIndex = null; 52544 if (_.slideCount > _.options.slidesToShow) { 52545 if (_.options.centerMode === true) { 52546 infiniteCount = _.options.slidesToShow + 1; 52547 } else { 52548 infiniteCount = _.options.slidesToShow; 52549 } 52550 for (i = _.slideCount; i > _.slideCount - infiniteCount; i -= 1) { 52551 slideIndex = i - 1; 52552 $(_.$slides[slideIndex]) 52553 .clone(true) 52554 .attr("id", "") 52555 .attr("data-slick-index", slideIndex - _.slideCount) 52556 .prependTo(_.$slideTrack) 52557 .addClass("slick-cloned"); 52558 } 52559 for (i = 0; i < infiniteCount + _.slideCount; i += 1) { 52560 slideIndex = i; 52561 $(_.$slides[slideIndex]) 52562 .clone(true) 52563 .attr("id", "") 52564 .attr("data-slick-index", slideIndex + _.slideCount) 52565 .appendTo(_.$slideTrack) 52566 .addClass("slick-cloned"); 52567 } 52568 _.$slideTrack 52569 .find(".slick-cloned") 52570 .find("[id]") 52571 .each(function () { 52572 $(this).attr("id", ""); 52573 }); 52574 } 52575 } 52576 }; 52577 Slick.prototype.interrupt = function (toggle) { 52578 var _ = this; 52579 if (!toggle) { 52580 _.autoPlay(); 52581 } 52582 _.interrupted = toggle; 52583 }; 52584 Slick.prototype.selectHandler = function (event) { 52585 var _ = this; 52586 var targetElement = $(event.target).is(".slick-slide") ? $(event.target) : $(event.target).parents(".slick-slide"); 52587 var index = parseInt(targetElement.attr("data-slick-index")); 52588 if (!index) index = 0; 52589 if (_.slideCount <= _.options.slidesToShow) { 52590 _.slideHandler(index, false, true); 52591 return; 52592 } 52593 _.slideHandler(index); 52594 }; 52595 Slick.prototype.slideHandler = function (index, sync, dontAnimate) { 52596 var targetSlide, 52597 animSlide, 52598 oldSlide, 52599 slideLeft, 52600 targetLeft = null, 52601 _ = this, 52602 navTarget; 52603 sync = sync || false; 52604 if (_.animating === true && _.options.waitForAnimate === true) { 52605 return; 52606 } 52607 if (_.options.fade === true && _.currentSlide === index) { 52608 return; 52609 } 52610 if (sync === false) { 52611 _.asNavFor(index); 52612 } 52613 targetSlide = index; 52614 targetLeft = _.getLeft(targetSlide); 52615 slideLeft = _.getLeft(_.currentSlide); 52616 _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft; 52617 if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) { 52618 if (_.options.fade === false) { 52619 targetSlide = _.currentSlide; 52620 if (dontAnimate !== true) { 52621 _.animateSlide(slideLeft, function () { 52622 _.postSlide(targetSlide); 52623 }); 52624 } else { 52625 _.postSlide(targetSlide); 52626 } 52627 } 52628 return; 52629 } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > _.slideCount - _.options.slidesToScroll)) { 52630 if (_.options.fade === false) { 52631 targetSlide = _.currentSlide; 52632 if (dontAnimate !== true) { 52633 _.animateSlide(slideLeft, function () { 52634 _.postSlide(targetSlide); 52635 }); 52636 } else { 52637 _.postSlide(targetSlide); 52638 } 52639 } 52640 return; 52641 } 52642 if (_.options.autoplay) { 52643 clearInterval(_.autoPlayTimer); 52644 }
52645 if (targetSlide < 0) { 52646 if (_.slideCount % _.options.slidesToScroll !== 0) { 52647 animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll); 52648 } else { 52649 animSlide = _.slideCount + targetSlide; 52650 } 52651 } else if (targetSlide >= _.slideCount) { 52652 if (_.slideCount % _.options.slidesToScroll !== 0) { 52653 animSlide = 0; 52654 } else { 52655 animSlide = targetSlide - _.slideCount; 52656 } 52657 } else { 52658 animSlide = targetSlide; 52659 } 52660 _.animating = true; 52661 _.$slider.trigger("beforeChange", [_, _.currentSlide, animSlide]); 52662 oldSlide = _.currentSlide; 52663 _.currentSlide = animSlide; 52664 _.setSlideClasses(_.currentSlide); 52665 if (_.options.asNavFor) { 52666 navTarget = _.getNavTarget(); 52667 navTarget = navTarget.slick("getSlick"); 52668 if (navTarget.slideCount <= navTarget.options.slidesToShow) { 52669 navTarget.setSlideClasses(_.currentSlide); 52670 } 52671 } 52672 _.updateDots(); 52673 _.updateArrows(); 52674 if (_.options.fade === true) { 52675 if (dontAnimate !== true) { 52676 _.fadeSlideOut(oldSlide); 52677 _.fadeSlide(animSlide, function () { 52678 _.postSlide(animSlide); 52679 }); 52680 } else { 52681 _.postSlide(animSlide); 52682 } 52683 _.animateHeight(); 52684 return; 52685 } 52686 if (dontAnimate !== true) { 52687 _.animateSlide(targetLeft, function () { 52688 _.postSlide(animSlide); 52689 }); 52690 } else { 52691 _.postSlide(animSlide); 52692 } 52693 }; 52694 Slick.prototype.startLoad = function () { 52695 var _ = this; 52696 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) { 52697 _.$prevArrow.hide(); 52698 _.$nextArrow.hide(); 52699 } 52700 if (_.options.dots === true && _.slideCount > _.options.slidesToShow) { 52701 _.$dots.hide(); 52702 } 52703 _.$slider.addClass("slick-loading"); 52704 }; 52705 Slick.prototype.swipeDirection = function () { 52706 var xDist, 52707 yDist, 52708 r, 52709 swipeAngle, 52710 _ = this; 52711 xDist = _.touchObject.startX - _.touchObject.curX; 52712 yDist = _.touchObject.startY - _.touchObject.curY; 52713 r = Math.atan2(yDist, xDist); 52714 swipeAngle = Math.round((r * 180) / Math.PI); 52715 if (swipeAngle < 0) { 52716 swipeAngle = 360 - Math.abs(swipeAngle); 52717 } 52718 if (swipeAngle <= 45 && swipeAngle >= 0) { 52719 return _.options.rtl === false ? "left" : "right"; 52720 } 52721 if (swipeAngle <= 360 && swipeAngle >= 315) { 52722 return _.options.rtl === false ? "left" : "right"; 52723 } 52724 if (swipeAngle >= 135 && swipeAngle <= 225) { 52725 return _.options.rtl === false ? "right" : "left"; 52726 } 52727 if (_.options.verticalSwiping === true) { 52728 if (swipeAngle >= 35 && swipeAngle <= 135) { 52729 return "down"; 52730 } else { 52731 return "up"; 52732 } 52733 } 52734 return "vertical"; 52735 }; 52736 Slick.prototype.swipeEnd = function (event) { 52737 var _ = this, 52738 slideCount, 52739 direction; 52740 _.dragging = false; 52741 _.swiping = false; 52742 if (_.scrolling) { 52743 _.scrolling = false; 52744 return false; 52745 } 52746 _.interrupted = false; 52747 _.shouldClick = _.touchObject.swipeLength > 10 ? false : true; 52748 if (_.touchObject.curX === undefined) { 52749 return false; 52750 } 52751 if (_.touchObject.edgeHit === true) { 52752 _.$slider.trigger("edge", [_, _.swipeDirection()]); 52753 } 52754 if (_.touchObject.swipeLength >= _.touchObject.minSwipe) { 52755 direction = _.swipeDirection(); 52756 switch (direction) { 52757 case "left": 52758 case "down": 52759 slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide + _.getSlideCount()) : _.currentSlide + _.getSlideCount(); 52760 _.currentDirection = 0; 52761 break; 52762 case "right": 52763 case "up": 52764 slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide - _.getSlideCount()) : _.currentSlide - _.getSlideCount(); 52765 _.currentDirection = 1; 52766 break; 52767 default: 52768 } 52769 if (direction != "vertical") { 52770 _.slideHandler(slideCount); 52771 _.touchObject = {}; 52772 _.$slider.trigger("swipe", [_, direction]); 52773 } 52774 } else { 52775 if (_.touchObject.startX !== _.touchObject.curX) { 52776 _.slideHandler(_.currentSlide); 52777 _.touchObject = {}; 52778 } 52779 } 52780 }; 52781 Slick.prototype.swipeHandler = function (event) { 52782 var _ = this; 52783 if (_.options.swipe === false || ("ontouchend" in document && _.options.swipe === false)) { 52784 return; 52785 } else if (_.options.draggable === false && event.type.indexOf("mou
52785se") !== -1) { 52786 return; 52787 } 52788 _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ? event.originalEvent.touches.length : 1; 52789 _.touchObject.minSwipe = _.listWidth / _.options.touchThreshold; 52790 if (_.options.verticalSwiping === true) { 52791 _.touchObject.minSwipe = _.listHeight / _.options.touchThreshold; 52792 } 52793 switch (event.data.action) { 52794 case "start": 52795 _.swipeStart(event); 52796 break; 52797 case "move": 52798 _.swipeMove(event); 52799 break; 52800 case "end": 52801 _.swipeEnd(event); 52802 break; 52803 } 52804 }; 52805 Slick.prototype.swipeMove = function (event) { 52806 var _ = this, 52807 edgeWasHit = false, 52808 curLeft, 52809 swipeDirection, 52810 swipeLength, 52811 positionOffset, 52812 touches, 52813 verticalSwipeLength; 52814 touches = event.originalEvent !== undefined ? event.originalEvent.touches : null; 52815 if (!_.dragging || _.scrolling || (touches && touches.length !== 1)) { 52816 return false; 52817 } 52818 curLeft = _.getLeft(_.currentSlide); 52819 _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX; 52820 _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY; 52821 _.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(_.touchObject.curX - _.touchObject.startX, 2))); 52822 verticalSwipeLength = Math.round(Math.sqrt(Math.pow(_.touchObject.curY - _.touchObject.startY, 2))); 52823 if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) { 52824 _.scrolling = true; 52825 return false; 52826 } 52827 if (_.options.verticalSwiping === true) { 52828 _.touchObject.swipeLength = verticalSwipeLength; 52829 } 52830 swipeDirection = _.swipeDirection(); 52831 if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) { 52832 _.swiping = true; 52833 event.preventDefault(); 52834 } 52835 positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1); 52836 if (_.options.verticalSwiping === true) { 52837 positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1; 52838 } 52839 swipeLength = _.touchObject.swipeLength; 52840 _.touchObject.edgeHit = false; 52841 if (_.options.infinite === false) { 52842 if ((_.currentSlide === 0 && swipeDirection === "right") || (_.currentSlide >= _.getDotCount() && swipeDirection === "left")) { 52843 swipeLength = _.touchObject.swipeLength * _.options.edgeFriction; 52844 _.touchObject.edgeHit = true; 52845 } 52846 } 52847 if (_.options.vertical === false) { 52848 _.swipeLeft = curLeft + swipeLength * positionOffset; 52849 } else { 52850 _.swipeLeft = curLeft + swipeLength * (_.$list.height() / _.listWidth) * positionOffset; 52851 } 52852 if (_.options.verticalSwiping === true) { 52853 _.swipeLeft = curLeft + swipeLength * positionOffset; 52854 } 52855 if (_.options.fade === true || _.options.touchMove === false) { 52856 return false; 52857 } 52858 if (_.animating === true) { 52859 _.swipeLeft = null; 52860 return false; 52861 } 52862 _.setCSS(_.swipeLeft); 52863 }; 52864 Slick.prototype.swipeStart = function (event) { 52865 var _ = this, 52866 touches; 52867 _.interrupted = true; 52868 if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) { 52869 _.touchObject = {}; 52870 return false; 52871 } 52872 if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) { 52873 touches = event.originalEvent.touches[0]; 52874 } 52875 _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX; 52876 _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY; 52877 _.dragging = true; 52878 }; 52879 Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function () { 52880 var _ = this; 52881 if (_.$slidesCache !== null) { 52882 _.unload(); 52883 _.$slideTrack.children(this.options.slide).detach(); 52884 _.$slidesCache.appendTo(_.$slideTrack); 52885 _.reinit(); 52886 } 52887 }; 52888 Slick.prototype.unload = function () { 52889 var _ = this; 52890 $(".slick-cloned", _.$slider).remove(); 52891 if (_.$dots) { 52892 _.$dots.remove(); 52893 } 52894 if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) { 52895 _.$prevArrow.remove(); 52896 } 52897 if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) { 52898 _.$nextArrow.remove(); 52899 } 52900 _.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden", "true").css("width", ""); 52901 };
52902 Slick.prototype.unslick = function (fromBreakpoint) { 52903 var _ = this; 52904 _.$slider.trigger("unslick", [_, fromBreakpoint]); 52905 _.destroy(); 52906 }; 52907 Slick.prototype.updateArrows = function () { 52908 var _ = this, 52909 centerOffset; 52910 centerOffset = Math.floor(_.options.slidesToShow / 2); 52911 if (_.options.arrows === true && _.slideCount > _.options.slidesToShow && !_.options.infinite) { 52912 _.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"); 52913 _.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"); 52914 if (_.currentSlide === 0) { 52915 _.$prevArrow.addClass("slick-disabled").attr("aria-disabled", "true"); 52916 _.$nextArrow.removeClass("slick-disabled").attr("aria-disabled", "false"); 52917 } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) { 52918 _.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"); 52919 _.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"); 52920 } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) { 52921 _.$nextArrow.addClass("slick-disabled").attr("aria-disabled", "true"); 52922 _.$prevArrow.removeClass("slick-disabled").attr("aria-disabled", "false"); 52923 } 52924 } 52925 }; 52926 Slick.prototype.updateDots = function () { 52927 var _ = this; 52928 if (_.$dots !== null) { 52929 _.$dots.find("li").removeClass("slick-active").end(); 52930 _.$dots 52931 .find("li") 52932 .eq(Math.floor(_.currentSlide / _.options.slidesToScroll)) 52933 .addClass("slick-active"); 52934 } 52935 }; 52936 Slick.prototype.visibility = function () { 52937 var _ = this; 52938 if (_.options.autoplay) { 52939 if (document[_.hidden]) { 52940 _.interrupted = true; 52941 } else { 52942 _.interrupted = false; 52943 } 52944 } 52945 }; 52946 $.fn.slick = function () { 52947 var _ = this, 52948 opt = arguments[0], 52949 args = Array.prototype.slice.call(arguments, 1), 52950 l = _.length, 52951 i, 52952 ret; 52953 for (i = 0; i < l; i++) { 52954 if (typeof opt == "object" || typeof opt == "undefined") _[i].slick = new Slick(_[i], opt); 52955 else ret = _[i].slick[opt].apply(_[i].slick, args); 52956 if (typeof ret != "undefined") return ret; 52957 } 52958 return _; 52959 }; 52960}); 52961/*! modernizr 3.6.0 (Custom Build) | MIT * 52962 * https://modernizr.com/download/?-applicationcache-audio-backgroundsize-borderimage-borderradius-boxshadow-canvas-canvastext-cssanimations-csscolumns-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-flexbox-flexboxlegacy-fontface-generatedcontent-geolocation-hashchange-history-hsla-indexeddb-inlinesvg-input-inputtypes-localstorage-multiplebgs-opacity-postmessage-rgba-sessionstorage-smil-svg-svgclippaths-textshadow-touchevents-video-webgl-websockets-websqldatabase-webworkers-domprefixes-hasevent-mq-prefixes-setclasses-shiv-testallprops-testprop-teststyles !*/ 52963 !function(e,t,n){function r(e,t){return typeof e===t}function a(){var e,t,n,a,o,i,s;for(var c in w)if(w.hasOwnProperty(c)){if(e=[],t=w[c],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;n<t.options.aliases.length;n++)e.push(t.options.aliases[n].toLowerCase());for(a=r(t.fn,"function")?t.fn():t.fn,o=0;o<e.length;o++)i=e[o],s=i.split("."),1===s.length?Modernizr[s[0]]=a:(!Modernizr[s[0]]||Modernizr[s[0]]instanceof Boolean||(Modernizr[s[0]]=new Boolean(Modernizr[s[0]])),Modernizr[s[0]][s[1]]=a),T.push((a?"":"no-")+s.join("-"))}}function o(e){var t=_.className,n=Modernizr._config.classPrefix||"";if(P&&(t=t.baseVal),Modernizr._config.enableJSClass){var r=new RegExp("(^|\\s)"+n+"no-js(\\s|$)");t=t.replace(r,"$1"+n+"js$2")}Modernizr._config.enableClasses&&(t+=" "+n+e.join(" "+n),P?_.className.baseVal=t:_.className=t)}function i(){return"function"!=typeof t.createElement?t.createElement(arguments[0]):P?t.createElementNS.call(t,"http://www.w3.org/2000/svg",arguments[0]):t.createElement.apply(t,arguments)}function s(e,t){return!!~(""+e).indexOf(t)}function c(){var e=t.body;return e||(e=i(P?"svg":"body"),e.fake=!0),e}function l(e,n,r,a){var o,s,l,d,u="modernizr",f=i("div"),p=c();if(parseInt(r,10))for(;r--;)l=i("div"),l.id=a?a[r]:u+(r+1),f.appendChild(l);return o=i("style"),o.type="text/css",o.id="s"+u,(p.fake?p:f).appendChild(o),p.appendChild(f),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(t.createTextNode(e)),f.id=u,p.fake&&(p.style.background="",p.style.overflow="hidden",d=_.style.overflow,_.style.overflow="hidden",_.appendChild(p)),s=n(f,e),p.fake?(p.parentNode.removeChild(p),_.style.overflow=d,_.offsetHeight):f.parentNode.removeChild(f),!!s}function d(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")}function u(e,t){if("object"==typeof e)for(var n in e)q(e,n)&&u(n,e[n]);else{e=e.toLowerCase();var r=e.split("."),a=Modernizr[r[0]];if(2==r.length&&(a=a[r[1]]),"undefined"!=typeof a)return Modernizr;t="function"==typeof t?t():t,1==r.length?Modernizr[r[0]]=t:(!Modernizr[r[0]]||Modernizr[r[0]]instanceof Boolean||(Modernizr[r[0]]=new Boolean(Modernizr[r[0]])),Modernizr[r[0]][r[1]]=t),o([(t&&0!=t?"":"no-")+r.join("-")]),Modernizr._trigger(e,t)}return Modernizr}function f(e,t){return function(){return e.apply(t,arguments)}}function p(e,t,n){var a;for(var o in e)if(e[o]in t)return n===!1?e[o]:(a=t[e[o]],r(a,"function")?f(a,n||t):a);return!1}function m(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function g(t,n,r){var a;if("getComputedStyle"in e){a=getComputedStyle.call(e,t,n);var o=e.console;if(null!==a)r&&(a=a.getPropertyValue(r));else if(o){var i=o.error?"error":"log";o[i].call(o,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}}else a=!n&&t.currentStyle&&t.currentStyle[r];return a}function h(t,r){var a=t.length;if("CSS"in e&&"supports"in e.CSS){for(;a--;)if(e.CSS.supports(m(t[a]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var o=[];a--;)o.push("("+m(t[a])+":"+r+")");return o=o.join(" or "),l("@supports ("+o+") { #modernizr { position: absolute; } }",function(e){return"absolute"==g(e,null,"position")})}return n}function v(e,t,a,o){function c(){u&&(delete G.style,delete G.modElem)}if(o=r(o,"undefined")?!1:o,!r(a,"undefined")){var l=h(e,a);if(!r(l,"undefined"))return l}for(var u,f,p,m,g,v=["modernizr","tspan","samp"];!G.style&&v.length;)u=!0,G.modElem=i(v.shift()),G.style=G.modElem.style;for(p=e.length,f=0;p>f;f++)if(m=e[f],g=G.style[m],s(m,"-")&&(m=d(m)),G.style[m]!==n){if(o||r(a,"undefined"))return c(),"pfx"==t?m:!0;try{G.style[m]=a}catch(y){}if(G.style[m]!=g)return c(),"pfx"==t?m:!0}return c(),!1}function y(e,t,n,a,o){var i=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+W.join(i+" ")+i).split(" ");return r(t,"string")||r(t,"undefined")?v(s,t,a,o):(s=(e+" "+j.join(i+" ")+i).split(" "),p(s,t,n))}function b(e,t,r){return y(e,n,n,t,r)}function x(e,t){var n=e.deleteDatabase(t);n.onsuccess=function(){u("indexeddb.deletedatabase",!0)},n.onerror=function(){u("indexeddb.deletedatabase",!1)}}var T=[],w=[],S={_version:"3.6.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){w.push({name:e,fn:t,options:n})},addAsyncTest:function(e){w.push({name:null,fn:e})}},C=S._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "):["",""];S._prefixes=C;var Modernizr=function(){};Modernizr.prototype=S,Modernizr=new Modernizr,Modernizr.addTest("geolocation","geolocation"in navigator),Modernizr.addTest("postmessage","postMessage"in e),Modernizr.addTest("applicationcache","applicationCache"in e),Modernizr.addTest("history",function(){var t=navigator.userAgent;return-1===t.indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone")||"file:"===location.protocol?e.history&&"pushState"in e.history:!1}),Modernizr.addTest("svg",!!t.createElementNS&&!!t.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect),Modernizr.addTest("sessionstorage",function(){var e="modernizr";try{return sessionStorage.setItem(e,e),sessionStorage.removeItem(e),!0}catch(t){return!1}}),Modernizr.addTest("localstorage",function(){var e="modernizr";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}}
52963),Modernizr.addTest("webworkers","Worker"in e),Modernizr.addTest("websqldatabase","openDatabase"in e);var E=!1;try{E="WebSocket"in e&&2===e.WebSocket.CLOSING}catch(k){}Modernizr.addTest("websockets",E);var _=t.documentElement,P="svg"===_.nodeName.toLowerCase();P||!function(e,t){function n(e,t){var n=e.createElement("p"),r=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x<style>"+t+"</style>",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=b.elements;return"string"==typeof e?e.split(" "):e}function a(e,t){var n=b.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),b.elements=n+" "+e,l(t)}function o(e){var t=y[e[h]];return t||(t={},v++,e[h]=v,y[v]=t),t}function i(e,n,r){if(n||(n=t),u)return n.createElement(e);r||(r=o(n));var a;return a=r.cache[e]?r.cache[e].cloneNode():g.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!a.canHaveChildren||m.test(e)||a.tagUrn?a:r.frag.appendChild(a)}function s(e,n){if(e||(e=t),u)return e.createDocumentFragment();n=n||o(e);for(var a=n.frag.cloneNode(),i=0,s=r(),c=s.length;c>i;i++)a.createElement(s[i]);return a}function c(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return b.shivMethods?i(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(b,t.frag)}function l(e){e||(e=t);var r=o(e);return!b.shivCSS||d||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),u||c(e,r),e}var d,u,f="3.7.3",p=e.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,g=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,h="_html5shiv",v=0,y={};!function(){try{var e=t.createElement("a");e.innerHTML="<xyz></xyz>",d="hidden"in e,u=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){d=!0,u=!0}}();var b={elements:p.elements||"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",version:f,shivCSS:p.shivCSS!==!1,supportsUnknownElements:u,shivMethods:p.shivMethods!==!1,type:"default",shivDocument:l,createElement:i,createDocumentFragment:s,addElements:a};e.html5=b,l(t),"object"==typeof module&&module.exports&&(module.exports=b)}("undefined"!=typeof e?e:this,t),Modernizr.addTest("audio",function(){var e=i("audio"),t=!1;try{t=!!e.canPlayType,t&&(t=new Boolean(t),t.ogg=e.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),t.mp3=e.canPlayType('audio/mpeg; codecs="mp3"').replace(/^no$/,""),t.opus=e.canPlayType('audio/ogg; codecs="opus"')||e.canPlayType('audio/webm; codecs="opus"').replace(/^no$/,""),t.wav=e.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),t.m4a=(e.canPlayType("audio/x-m4a;")||e.canPlayType("audio/aac;")).replace(/^no$/,""))}catch(n){}return t}),Modernizr.addTest("canvas",function(){var e=i("canvas");return!(!e.getContext||!e.getContext("2d"))});var z=function(){function e(e,t){var a;return e?(t&&"string"!=typeof t||(t=i(t||"div")),e="on"+e,a=e in t,!a&&r&&(t.setAttribute||(t=i("div")),t.setAttribute(e,""),a="function"==typeof t[e],t[e]!==n&&(t[e]=n),t.removeAttribute(e)),a):!1}var r=!("onblur"in t.documentElement);return e}();S.hasEvent=z,Modernizr.addTest("hashchange",function(){return z("hashchange",e)===!1?!1:t.documentMode===n||t.documentMode>7}),Modernizr.addTest("canvastext",function(){return Modernizr.canvas===!1?!1:"function"==typeof i("canvas").getContext("2d").fillText}),Modernizr.addTest("webgl",function(){var t=i("canvas"),n="probablySupportsContext"in t?"probablySupportsContext":"supportsContext";return n in t?t[n]("webgl")||t[n]("experimental-webgl"):"WebGLRenderingContext"in e}),Modernizr.addTest("video",function(){var e=i("video"),t=!1;try{t=!!e.canPlayType,t&&(t=new Boolean(t),t.ogg=e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),t.h264=e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),t.webm=e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,""),t.vp9=e.canPlayType('video/webm; codecs="vp9"').replace(/^no$/,""),t.hls=e.canPlayType('application/x-mpegURL; codecs="avc1.42E01E"').replace(/^no$/,""))}catch(n){}return t}),Modernizr.addTest("rgba",function(){var e=i("a").style;return e.cssText="background-color:rgba(150,255,150,.5)",(""+e.backgroundColor).indexOf("rgba")>-1}),Modernizr.addTest("cssgradients",function(){for(var e,t="background-image:",n="gradient(linear,left top,right bottom,from(#9f9),to(white));",r="",a=0,o=C.length-1;o>a;a++)e=0===a?"to ":"",r+=t+C[a]+"linear-gradient("+e+"left top, #9f9, white);";Modernizr._config.usePrefixes&&(r+=t+"-webkit-"+n);
52963var s=i("a"),c=s.style;return c.cssText=r,(""+c.backgroundImage).indexOf("gradient")>-1}),Modernizr.addTest("multiplebgs",function(){var e=i("a").style;return e.cssText="background:url(https://),url(https://),red url(https://)",/(url\s*\(.*?){3}/.test(e.background)}),Modernizr.addTest("opacity",function(){var e=i("a").style;return e.cssText=C.join("opacity:.55;"),/^0.55$/.test(e.opacity)}),Modernizr.addTest("inlinesvg",function(){var e=i("div");return e.innerHTML="<svg/>","http://www.w3.org/2000/svg"==("undefined"!=typeof SVGRect&&e.firstChild&&e.firstChild.namespaceURI)});var N=i("input"),A="search tel url email datetime date month week time datetime-local number range color".split(" "),R={};Modernizr.inputtypes=function(e){for(var r,a,o,i=e.length,s="1)",c=0;i>c;c++)N.setAttribute("type",r=e[c]),o="text"!==N.type&&"style"in N,o&&(N.value=s,N.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(r)&&N.style.WebkitAppearance!==n?(_.appendChild(N),a=t.defaultView,o=a.getComputedStyle&&"textfield"!==a.getComputedStyle(N,null).WebkitAppearance&&0!==N.offsetHeight,_.removeChild(N)):/^(search|tel)$/.test(r)||(o=/^(url|email)$/.test(r)?N.checkValidity&&N.checkValidity()===!1:N.value!=s)),R[e[c]]=!!o;return R}(A);var $="autocomplete autofocus list placeholder max min multiple pattern required step".split(" "),M={};Modernizr.input=function(t){for(var n=0,r=t.length;r>n;n++)M[t[n]]=!!(t[n]in N);return M.list&&(M.list=!(!i("datalist")||!e.HTMLDataListElement)),M}($);var O="Moz O ms Webkit",j=S._config.usePrefixes?O.toLowerCase().split(" "):[];S._domPrefixes=j;var L="CSS"in e&&"supports"in e.CSS,B="supportsCSS"in e;Modernizr.addTest("supports",L||B);var D={}.toString;Modernizr.addTest("svgclippaths",function(){return!!t.createElementNS&&/SVGClipPath/.test(D.call(t.createElementNS("http://www.w3.org/2000/svg","clipPath")))}),Modernizr.addTest("smil",function(){return!!t.createElementNS&&/SVGAnimate/.test(D.call(t.createElementNS("http://www.w3.org/2000/svg","animate")))}),Modernizr.addTest("hsla",function(){var e=i("a").style;return e.cssText="background-color:hsla(120,40%,100%,.5)",s(e.backgroundColor,"rgba")||s(e.backgroundColor,"hsla")});var F=function(){var t=e.matchMedia||e.msMatchMedia;return t?function(e){var n=t(e);return n&&n.matches||!1}:function(t){var n=!1;return l("@media "+t+" { #modernizr { position: absolute; } }",function(t){n="absolute"==(e.getComputedStyle?e.getComputedStyle(t,null):t.currentStyle).position}),n}}();S.mq=F;var I=S.testStyles=l;Modernizr.addTest("touchevents",function(){var n;if("ontouchstart"in e||e.DocumentTouch&&t instanceof DocumentTouch)n=!0;else{var r=["@media (",C.join("touch-enabled),("),"heartz",")","{#modernizr{top:9px;position:absolute}}"].join("");I(r,function(e){n=9===e.offsetTop})}return n});var V=function(){var e=navigator.userAgent,t=e.match(/w(eb)?osbrowser/gi),n=e.match(/windows phone/gi)&&e.match(/iemobile\/([0-9])+/gi)&&parseFloat(RegExp.$1)>=9;return t||n}();V?Modernizr.addTest("fontface",!1):I('@font-face {font-family:"font";src:url("https://")}',function(e,n){var r=t.getElementById("smodernizr"),a=r.sheet||r.styleSheet,o=a?a.cssRules&&a.cssRules[0]?a.cssRules[0].cssText:a.cssText||"":"",i=/src/i.test(o)&&0===o.indexOf(n.split(" ")[0]);Modernizr.addTest("fontface",i)}),I('#modernizr{font:0/0 a}#modernizr:after{content:":)";visibility:hidden;font:7px/1 a}',function(e){Modernizr.addTest("generatedcontent",e.offsetHeight>=6)});var q;!function(){var e={}.hasOwnProperty;q=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),S._l={},S.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),Modernizr.hasOwnProperty(e)&&setTimeout(function(){Modernizr._trigger(e,Modernizr[e])},0)},S._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,r;for(e=0;e<n.length;e++)(r=n[e])(t)},0),delete this._l[e]}},Modernizr._q.push(function(){S.addTest=u});var W=S._config.usePrefixes?O.split(" "):[];S._cssomPrefixes=W;var U=function(t){var r,a=C.length,o=e.CSSRule;if("undefined"==typeof o)return n;if(!t)return!1;if(t=t.replace(/^@/,""),r=t.replace(/-/g,"_").toUpperCase()+"_RULE",r in o)return"@"+t;for(var i=0;a>i;i++){var s=C[i],c=s.toUpperCase()+"_"+r;if(c in o)return"@-"+s.toLowerCase()+"-"+t}return!1};S.atRule=U;var H={elem:i("modernizr")};Modernizr._q.push(function(){delete H.elem});var G={style:H.elem.style};Modernizr._q.unshift(function(){delete G.style});var J=S.testProp=function(e,t,r){return v([e],n,t,r)};Modernizr.addTest("textshadow",J("textShadow","1px 1px")),S.testAllProps=y,S.testAllProps=b,Modernizr.addTest("csstransforms",function(){return-1===navigator.userAgent.indexOf("Android 2.")&&b("transform","scale(1)",!0)}),Modernizr.addTest("csstransitions",b("transition","all",!0)),Modernizr.addTest("backgroundsize",b("backgroundSize","100%",!0)),Modernizr.addTest("cssreflections",b("boxReflect","above",!0)),Modernizr.addTest("flexboxlegacy",b("boxDirection","reverse",!0)),function(){Modernizr.addTest("csscolumns",function(){var e=!1,t=b("columnCount");try{e=!!t,e&&(e=new Boolean(e))}catch(n){}return e});for(var e,t,n=["Width","Span","Fill","Gap","Rule","RuleColor","RuleStyle","RuleWidth","BreakBefore","BreakAfter","BreakInside"],r=0;r<n.length;r++)e=n[r].toLowerCase(),t=b("column"+n[r]),("breakbefore"===e||"breakafter"===e||"breakinside"==e)&&(t=t||b(n[r])),Modernizr.addTest("csscolumns."+e,t)}(),Modernizr.addTest("cssanimations",b("animationName","a",!0)),Modernizr.addTest("borderimage",b("borderImage","url() 1",!0)),Modernizr.addTest("csstransforms3d",function(){return!!b("perspective","1px",!0)}
52963),Modernizr.addTest("borderradius",b("borderRadius","0px",!0)),Modernizr.addTest("flexbox",b("flexBasis","1px",!0)),Modernizr.addTest("boxshadow",b("boxShadow","1px 1px",!0));var Z=S.prefixed=function(e,t,n){return 0===e.indexOf("@")?U(e):(-1!=e.indexOf("-")&&(e=d(e)),t?y(e,t,n):y(e,"pfx"))};Modernizr.addAsyncTest(function(){var t;try{t=Z("indexedDB",e)}catch(n){}if(t){var r="modernizr-"+Math.random(),a=t.open(r);a.onerror=function(){a.error&&"InvalidStateError"===a.error.name?u("indexeddb",!1):(u("indexeddb",!0),x(t,r))},a.onsuccess=function(){u("indexeddb",!0),x(t,r)}}else u("indexeddb",!1)}),a(),o(T),delete S.addTest,delete S.addAsyncTest;for(var K=0;K<Modernizr._q.length;K++)Modernizr._q[K]();e.Modernizr=Modernizr}(window,document); 52964!(function (t, e) { 52965 "function" == typeof define && define.amd 52966 ? define("jquery-bridget/jquery-bridget", ["jquery"], function (i) { 52967 return e(t, i); 52968 }) 52969 : "object" == typeof module && module.exports 52970 ? (module.exports = e(t, require("jquery"))) 52971 : (t.jQueryBridget = e(t, t.jQuery)); 52972})(window, function (t, e) { 52973 "use strict"; 52974 function i(i, s, a) { 52975 function u(t, e, o) { 52976 var n, 52977 s = "$()." + i + '("' + e + '")'; 52978 return ( 52979 t.each(function (t, u) { 52980 var h = a.data(u, i); 52981 if (!h) return void r(i + " not initialized. Cannot call methods, i.e. " + s); 52982 var d = h[e]; 52983 if (!d || "_" == e.charAt(0)) return void r(s + " is not a valid method"); 52984 var l = d.apply(h, o); 52985 n = void 0 === n ? l : n; 52986 }), 52987 void 0 !== n ? n : t 52988 ); 52989 } 52990 function h(t, e) { 52991 t.each(function (t, o) { 52992 var n = a.data(o, i); 52993 n ? (n.option(e), n._init()) : ((n = new s(o, e)), a.data(o, i, n)); 52994 }); 52995 } 52996 (a = a || e || t.jQuery), 52997 a && 52998 (s.prototype.option || 52999 (s.prototype.option = function (t) { 53000 a.isPlainObject(t) && (this.options = a.extend(!0, this.options, t)); 53001 }), 53002 (a.fn[i] = function (t) { 53003 if ("string" == typeof t) { 53004 var e = n.call(arguments, 1); 53005 return u(this, t, e); 53006 } 53007 return h(this, t), this; 53008 }), 53009 o(a)); 53010 } 53011 function o(t) { 53012 !t || (t && t.bridget) || (t.bridget = i); 53013 } 53014 var n = Array.prototype.slice, 53015 s = t.console, 53016 r = 53017 "undefined" == typeof s 53018 ? function () {} 53019 : function (t) { 53020 s.error(t); 53021 }; 53022 return o(e || t.jQuery), i; 53023}), 53024 (function (t, e) { 53025 "function" == typeof define && define.amd ? define("ev-emitter/ev-emitter", e) : "object" == typeof module && module.exports ? (module.exports = e()) : (t.EvEmitter = e()); 53026 })("undefined" != typeof window ? window : this, function () { 53027 function t() {} 53028 var e = t.prototype; 53029 return ( 53030 (e.on = function (t, e) { 53031 if (t && e) { 53032 var i = (this._events = this._events || {}), 53033 o = (i[t] = i[t] || []); 53034 return o.indexOf(e) == -1 && o.push(e), this; 53035 } 53036 }), 53037 (e.once = function (t, e) { 53038 if (t && e) { 53039 this.on(t, e); 53040 var i = (this._onceEvents = this._onceEvents || {}), 53041 o = (i[t] = i[t] || {}); 53042 return (o[e] = !0), this; 53043 } 53044 }), 53045 (e.off = function (t, e) { 53046 var i = this._events && this._events[t]; 53047 if (i && i.length) { 53048 var o = i.indexOf(e); 53049 return o != -1 && i.splice(o, 1), this; 53050 } 53051 }), 53052 (e.emitEvent = function (t, e) { 53053 var i = this._events && this._events[t]; 53054 if (i && i.length) { 53055 (i = i.slice(0)), (e = e || []); 53056 for (var o = this._onceEvents && this._onceEvents[t], n = 0; n < i.length; n++) { 53057 var s = i[n], 53058 r = o && o[s]; 53059 r && (this.off(t, s), delete o[s]), s.apply(this, e); 53060 } 53061 return this; 53062 } 53063 }), 53064 (e.allOff = function () { 53065 delete this._events, delete this._onceEvents; 53066 }), 53067 t 53068 ); 53069 }), 53070 (function (t, e) { 53071 "function" == typeof define && define.amd ? define("get-size/get-size", e) : "object" == typeof module && module.exports ? (module.exports = e()) : (t.getSize = e()); 53072 })(window, function () { 53073 "use strict"; 53074 function t(t) { 53075 var e = parseFloat(t), 53076 i = t.indexOf("%") == -1 && !isNaN(e); 53077 return i && e; 53078 } 53079 function e() {} 53080 function i() { 53081 for (var t = { width: 0, height: 0, innerWidth: 0, innerHeight: 0, outerWidth: 0, outerHeight: 0 }, e = 0; e < h; e++) { 53082 var i = u[e]; 53083 t[i] = 0; 53084 } 53085 return t; 53086 } 53087 function o(t) { 53088 var e = getComputedStyle(t); 53089 return e || a("Style returned " + e + ". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"), e; 53090 } 53091 function n() { 53092 if (!d) { 53093 d = !0; 53094 var e = document.createElement("div"); 53095 (e.style.width = "200px"), (e.style.padding = "1px 2px 3px 4px"), (e.style.borderStyle = "solid"), (e.style.borderWidth = "1px 2px 3px 4px"), (e.style.boxSizing = "border-box"); 53096 var i = document.body || document.documentElement; 53097 i.appendChild(e); 53098 var n = o(e); 53099 (r = 200 == Math.round(t(n.width))), (s.isBoxSizeOuter = r), i.removeChild(e); 53100 } 53101 } 53102 function s(e) { 53103 if ((n(), "string" == typeof e && (e = document.querySelector(e)), e && "object" == typeof e && e.nodeType)) { 53104 var s = o(e); 53105 if ("none" == s.display) return i(); 53106 var a = {}; 53107 (a.width = e.offsetWidth), (a.height = e.offsetHeight); 53108 for (var d = (a.isBorderBox = "border-box" == s.boxSizing), l = 0; l < h; l++) { 53109 var f = u[l], 53110 c = s[f], 53111 m = parseFloat(c); 53112 a[f] = isNaN(m) ? 0 : m; 53113 } 53114 var p = a.paddingLeft + a.paddingRight, 53115 y = a.paddingTop + a.paddingBottom, 53116 g = a.marginLeft + a.marginRight, 53117 v = a.marginTop + a.marginBottom, 53118 _ = a.borderLeftWidth + a.borderRightWidth, 53119 z = a.borderTopWidth + a.borderBottomWidth, 53120 I = d && r, 53121 x = t(s.width); 53122 x !== !1 && (a.width = x + (I ? 0 : p + _)); 53123 var S = t(s.height); 53124 return S !== !1 && (a.height = S + (I ? 0 : y + z)), (a.innerWidth = a.width - (p + _)), (a.innerHeight = a.height - (y + z)), (a.outerWidth = a.width + g), (a.outerHeight = a.height + v), a; 53125 } 53126 } 53127 var r, 53128 a = 53129 "undefined" == typeof console 53130 ? e 53131 : function (t) { 53132 console.error(t); 53133 }, 53134 u = ["paddingLeft", "paddingRight", "paddingTop", "paddingBottom", "marginLeft", "marginRight", "marginTop", "marginBottom", "borderLeftWidth", "borderRightWidth", "borderTopWidth", "borderBottomWidth"], 53135 h = u.length, 53136 d = !1; 53137 return s; 53138 }), 53139 (function (t, e) { 53140 "use strict"; 53141 "function" == typeof define && define.amd ? define("desandro-matches-selector/matches-selector", e) : "object" == typeof module && module.exports ? (module.exports = e()) : (t.matchesSelector = e()); 53142 })(window, function () { 53143 "use strict"; 53144 var t = (function () { 53145 var t = window.Element.prototype; 53146 if (t.matches) return "matches"; 53147 if (t.matchesSelector) return "matchesSelector"; 53148 for (var e = ["webkit", "moz", "ms", "o"], i = 0; i < e.length; i++) { 53149 var o = e[i], 53150 n = o + "MatchesSelector"; 53151 if (t[n]) return n; 53152 } 53153 })(); 53154 return function (e, i) { 53155 return e[t](i); 53156 }; 53157 }), 53158 (function (t, e) { 53159 "function" == typeof define && define.amd 53160 ? define("fizzy-ui-utils/utils", ["desandro-matches-selector/matches-selector"], function (i) { 53161 return e(t, i); 53162 }) 53163 : "object" == typeof module && module.exports 53164 ? (module.exports = e(t, require("desandro-matches-selector"))) 53165 : (t.fizzyUIUtils = e(t, t.matchesSelector)); 53166 })(window, function (t, e) { 53167 var i = {}; 53168 (i.extend = function (t, e) { 53169 for (var i in e) t[i] = e[i]; 53170 return t; 53171 }), 53172 (i.modulo = function (t, e) { 53173 return ((t % e) + e) % e; 53174 }); 53175 var o = Array.prototype.slice; 53176 (i.makeArray = function (t) { 53177 if (Array.isArray(t)) return t; 53178 if (null === t || void 0 === t) return []; 53179 var e = "object" == typeof t && "number" == typeof t.length; 53180 return e ? o.call(t) : [t]; 53181 }), 53182 (i.removeFrom = function (t, e) { 53183 var i = t.indexOf(e); 53184 i != -1 && t.splice(i, 1); 53185 }), 53186 (i.getParent = function (t, i) { 53187 for (; t.parentNode && t != document.body; ) if (((t = t.parentNode), e(t, i))) return t; 53188 }), 53189 (i.getQueryElement = function (t) { 53190 return "string" == typeof t ? document.querySelector(t) : t; 53191 }), 53192 (i.handleEvent = function (t) { 53193 var e = "on" + t.type; 53194 this[e] && this[e](t); 53195 }), 53196 (i.filterFindElements = function (t, o) { 53197 t = i.makeArray(t); 53198 var n = []; 53199 return ( 53200 t.forEach(function (t) { 53201 if (t instanceof HTMLElement) { 53202 if (!o) return void n.push(t); 53203 e(t, o) && n.push(t);
53204 for (var i = t.querySelectorAll(o), s = 0; s < i.length; s++) n.push(i[s]); 53205 } 53206 }), 53207 n 53208 ); 53209 }), 53210 (i.debounceMethod = function (t, e, i) { 53211 i = i || 100; 53212 var o = t.prototype[e], 53213 n = e + "Timeout"; 53214 t.prototype[e] = function () { 53215 var t = this[n]; 53216 clearTimeout(t); 53217 var e = arguments, 53218 s = this; 53219 this[n] = setTimeout(function () { 53220 o.apply(s, e), delete s[n]; 53221 }, i); 53222 }; 53223 }), 53224 (i.docReady = function (t) { 53225 var e = document.readyState; 53226 "complete" == e || "interactive" == e ? setTimeout(t) : document.addEventListener("DOMContentLoaded", t); 53227 }), 53228 (i.toDashed = function (t) { 53229 return t 53230 .replace(/(.)([A-Z])/g, function (t, e, i) { 53231 return e + "-" + i; 53232 }) 53233 .toLowerCase(); 53234 }); 53235 var n = t.console; 53236 return ( 53237 (i.htmlInit = function (e, o) { 53238 i.docReady(function () { 53239 var s = i.toDashed(o), 53240 r = "data-" + s, 53241 a = document.querySelectorAll("[" + r + "]"), 53242 u = document.querySelectorAll(".js-" + s), 53243 h = i.makeArray(a).concat(i.makeArray(u)), 53244 d = r + "-options", 53245 l = t.jQuery; 53246 h.forEach(function (t) { 53247 var i, 53248 s = t.getAttribute(r) || t.getAttribute(d); 53249 try { 53250 i = s && JSON.parse(s); 53251 } catch (a) { 53252 return void (n && n.error("Error parsing " + r + " on " + t.className + ": " + a)); 53253 } 53254 var u = new e(t, i); 53255 l && l.data(t, o, u); 53256 }); 53257 }); 53258 }), 53259 i 53260 ); 53261 }), 53262 (function (t, e) { 53263 "function" == typeof define && define.amd 53264 ? define("outlayer/item", ["ev-emitter/ev-emitter", "get-size/get-size"], e) 53265 : "object" == typeof module && module.exports 53266 ? (module.exports = e(require("ev-emitter"), require("get-size"))) 53267 : ((t.Outlayer = {}), (t.Outlayer.Item = e(t.EvEmitter, t.getSize))); 53268 })(window, function (t, e) { 53269 "use strict"; 53270 function i(t) { 53271 for (var e in t) return !1; 53272 return (e = null), !0; 53273 } 53274 function o(t, e) { 53275 t && ((this.element = t), (this.layout = e), (this.position = { x: 0, y: 0 }), this._create()); 53276 } 53277 function n(t) { 53278 return t.replace(/([A-Z])/g, function (t) { 53279 return "-" + t.toLowerCase(); 53280 }); 53281 } 53282 var s = document.documentElement.style, 53283 r = "string" == typeof s.transition ? "transition" : "WebkitTransition", 53284 a = "string" == typeof s.transform ? "transform" : "WebkitTransform", 53285 u = { WebkitTransition: "webkitTransitionEnd", transition: "transitionend" }[r], 53286 h = { transform: a, transition: r, transitionDuration: r + "Duration", transitionProperty: r + "Property", transitionDelay: r + "Delay" }, 53287 d = (o.prototype = Object.create(t.prototype)); 53288 (d.constructor = o), 53289 (d._create = function () { 53290 (this._transn = { ingProperties: {}, clean: {}, onEnd: {} }), this.css({ position: "absolute" }); 53291 }), 53292 (d.handleEvent = function (t) { 53293 var e = "on" + t.type; 53294 this[e] && this[e](t); 53295 }), 53296 (d.getSize = function () { 53297 this.size = e(this.element); 53298 }), 53299 (d.css = function (t) { 53300 var e = this.element.style; 53301 for (var i in t) { 53302 var o = h[i] || i; 53303 e[o] = t[i]; 53304 } 53305 }), 53306 (d.getPosition = function () { 53307 var t = getComputedStyle(this.element), 53308 e = this.layout._getOption("originLeft"), 53309 i = this.layout._getOption("originTop"), 53310 o = t[e ? "left" : "right"], 53311 n = t[i ? "top" : "bottom"], 53312 s = parseFloat(o), 53313 r = parseFloat(n), 53314 a = this.layout.size; 53315 o.indexOf("%") != -1 && (s = (s / 100) * a.width), 53316 n.indexOf("%") != -1 && (r = (r / 100) * a.height),
53317 (s = isNaN(s) ? 0 : s), 53318 (r = isNaN(r) ? 0 : r), 53319 (s -= e ? a.paddingLeft : a.paddingRight), 53320 (r -= i ? a.paddingTop : a.paddingBottom), 53321 (this.position.x = s), 53322 (this.position.y = r); 53323 }), 53324 (d.layoutPosition = function () { 53325 var t = this.layout.size, 53326 e = {}, 53327 i = this.layout._getOption("originLeft"), 53328 o = this.layout._getOption("originTop"), 53329 n = i ? "paddingLeft" : "paddingRight", 53330 s = i ? "left" : "right", 53331 r = i ? "right" : "left", 53332 a = this.position.x + t[n]; 53333 (e[s] = this.getXValue(a)), (e[r] = ""); 53334 var u = o ? "paddingTop" : "paddingBottom", 53335 h = o ? "top" : "bottom", 53336 d = o ? "bottom" : "top", 53337 l = this.position.y + t[u]; 53338 (e[h] = this.getYValue(l)), (e[d] = ""), this.css(e), this.emitEvent("layout", [this]); 53339 }), 53340 (d.getXValue = function (t) { 53341 var e = this.layout._getOption("horizontal"); 53342 return this.layout.options.percentPosition && !e ? (t / this.layout.size.width) * 100 + "%" : t + "px"; 53343 }), 53344 (d.getYValue = function (t) { 53345 var e = this.layout._getOption("horizontal"); 53346 return this.layout.options.percentPosition && e ? (t / this.layout.size.height) * 100 + "%" : t + "px"; 53347 }), 53348 (d._transitionTo = function (t, e) { 53349 this.getPosition(); 53350 var i = this.position.x, 53351 o = this.position.y, 53352 n = t == this.position.x && e == this.position.y; 53353 if ((this.setPosition(t, e), n && !this.isTransitioning)) return void this.layoutPosition(); 53354 var s = t - i, 53355 r = e - o, 53356 a = {}; 53357 (a.transform = this.getTranslate(s, r)), this.transition({ to: a, onTransitionEnd: { transform: this.layoutPosition }, isCleaning: !0 }); 53358 }), 53359 (d.getTranslate = function (t, e) { 53360 var i = this.layout._getOption("originLeft"), 53361 o = this.layout._getOption("originTop"); 53362 return (t = i ? t : -t), (e = o ? e : -e), "translate3d(" + t + "px, " + e + "px, 0)"; 53363 }), 53364 (d.goTo = function (t, e) { 53365 this.setPosition(t, e), this.layoutPosition(); 53366 }), 53367 (d.moveTo = d._transitionTo), 53368 (d.setPosition = function (t, e) { 53369 (this.position.x = parseFloat(t)), (this.position.y = parseFloat(e)); 53370 }), 53371 (d._nonTransition = function (t) { 53372 this.css(t.to), t.isCleaning && this._removeStyles(t.to); 53373 for (var e in t.onTransitionEnd) t.onTransitionEnd[e].call(this); 53374 }), 53375 (d.transition = function (t) { 53376 if (!parseFloat(this.layout.options.transitionDuration)) return void this._nonTransition(t); 53377 var e = this._transn; 53378 for (var i in t.onTransitionEnd) e.onEnd[i] = t.onTransitionEnd[i]; 53379 for (i in t.to) (e.ingProperties[i] = !0), t.isCleaning && (e.clean[i] = !0); 53380 if (t.from) { 53381 this.css(t.from); 53382 var o = this.element.offsetHeight; 53383 o = null; 53384 } 53385 this.enableTransition(t.to), this.css(t.to), (this.isTransitioning = !0); 53386 }); 53387 var l = "opacity," + n(a); 53388 (d.enableTransition = function () { 53389 if (!this.isTransitioning) { 53390 var t = this.layout.options.transitionDuration; 53391 (t = "number" == typeof t ? t + "ms" : t), this.css({ transitionProperty: l, transitionDuration: t, transitionDelay: this.staggerDelay || 0 }), this.element.addEventListener(u, this, !1); 53392 } 53393 }), 53394 (d.onwebkitTransitionEnd = function (t) { 53395 this.ontransitionend(t); 53396 }), 53397 (d.onotransitionend = function (t) { 53398 this.ontransitionend(t); 53399 }); 53400 var f = { "-webkit-transform": "transform" }; 53401 (d.ontransitionend = function (t) { 53402 if (t.target === this.element) { 53403 var e = this._transn, 53404 o = f[t.propertyName] || t.propertyName; 53405 if ((delete e.ingProperties[o], i(e.ingProperties) && this.disableTransition(), o in e.clean && ((this.element.style[t.propertyName] = ""), delete e.clean[o]), o in e.onEnd)) { 53406 var n = e.onEnd[o]; 53407 n.call(this), delete e.onEnd[o]; 53408 } 53409 this.emitEvent("transitionEnd", [this]); 53410 } 53411 }), 53412 (d.disableTransition = function () { 53413 this.removeTransitionStyles(), this.element.removeEventListener(u, this, !1), (this.isTransitioning = !1); 53414 }), 53415 (d._removeStyles = function (t) { 53416 var e = {}; 53417 for (var i in t) e[i] = ""; 53418 this.css(e); 53419 }); 53420 var c = { transitionProperty: "", transitionDuration: "", transitionDelay: "" }; 53421 return ( 53422 (d.removeTransitionStyles = function () { 53423 this.css(c); 53424 }), 53425 (d.stagger = function (t) { 53426 (t = isNaN(t) ? 0 : t), (this.staggerDelay = t + "ms"); 53427 }), 53428 (d.removeElem = function () { 53429 this.element.parentNode.removeChild(this.element), this.css({ display: "" }), this.emitEvent("remove", [this]); 53430 }), 53431 (d.remove = function () { 53432 return r && parseFloat(this.layout.options.transitionDuration) 53433 ? (this.once("transitionEnd", function () { 53434 this.removeElem(); 53435 }), 53436 void this.hide()) 53437 : void this.removeElem(); 53438 }), 53439 (d.reveal = function () { 53440 delete this.isHidden, this.css({ display: "" }); 53441 var t = this.layout.options, 53442 e = {}, 53443 i = this.getHideRevealTransitionEndProperty("visibleStyle"); 53444 (e[i] = this.onRevealTransitionEnd), this.transition({ from: t.hiddenStyle, to: t.visibleStyle, isCleaning: !0, onTransitionEnd: e }); 53445 }), 53446 (d.onRevealTransitionEnd = function () { 53447 this.isHidden || this.emitEvent("reveal"); 53448 }), 53449 (d.getHideRevealTransitionEndProperty = function (t) { 53450 var e = this.layout.options[t]; 53451 if (e.opacity) return "opacity"; 53452 for (var i in e) return i; 53453 }), 53454 (d.hide = function () { 53455 (this.isHidden = !0), this.css({ display: "" }); 53456 var t = this.layout.options, 53457 e = {}, 53458 i = this.getHideRevealTransitionEndProperty("hiddenStyle"); 53459 (e[i] = this.onHideTransitionEnd), this.transition({ from: t.visibleStyle, to: t.hiddenStyle, isCleaning: !0, onTransitionEnd: e }); 53460 }), 53461 (d.onHideTransitionEnd = function () { 53462 this.isHidden && (this.css({ display: "none" }), this.emitEvent("hide")); 53463 }), 53464 (d.destroy = function () { 53465 this.css({ position: "", left: "", right: "", top: "", bottom: "", transition: "", transform: "" }); 53466 }), 53467 o 53468 ); 53469 }), 53470 (function (t, e) { 53471 "use strict"; 53472 "function" == typeof define && define.amd 53473 ? define("outlayer/outlayer", ["ev-emitter/ev-emitter", "get-size/get-size", "fizzy-ui-utils/utils", "./item"], function (i, o, n, s) { 53474 return e(t, i, o, n, s); 53475 }) 53476 : "object" == typeof module && module.exports 53477 ? (module.exports = e(t, require("ev-emitter"), require("get-size"), require("fizzy-ui-utils"), require("./item"))) 53478 : (t.Outlayer = e(t, t.EvEmitter, t.getSize, t.fizzyUIUtils, t.Outlayer.Item)); 53479 })(window, function (t, e, i, o, n) { 53480 "use strict"; 53481 function s(t, e) { 53482 var i = o.getQueryElement(t); 53483 if (!i) return void (u && u.error("Bad element for " + this.constructor.namespace + ": " + (i || t))); 53484 (this.element = i), h && (this.$element = h(this.element)), (this.options = o.extend({}, this.constructor.defaults)), this.option(e); 53485 var n = ++l; 53486 (this.element.outlayerGUID = n), (f[n] = this), this._create(); 53487 var s = this._getOption("initLayout"); 53488 s && this.layout(); 53489 } 53490 function r(t) { 53491 function e() { 53492 t.apply(this, arguments); 53493 } 53494 return (e.prototype = Object.create(t.prototype)), (e.prototype.constructor = e), e; 53495 } 53496 function a(t) { 53497 if ("number" == typeof t) return t; 53498 var e = t.match(/(^\d*\.?\d*)(\w*)/), 53499 i = e && e[1], 53500 o = e && e[2]; 53501 if (!i.length) return 0; 53502 i = parseFloat(i); 53503 var n = m[o] || 1; 53504 return i * n; 53505 } 53506 var u = t.console, 53507 h = t.jQuery, 53508 d = function () {}, 53509 l = 0, 53510 f = {}; 53511 (s.namespace = "outlayer"), 53512 (s.Item = n), 53513 (s.defaults = { 53514 containerStyle: { position: "relative" }, 53515 initLayout: !0, 53516 originLeft: !0, 53517 originTop: !0, 53518 resize: !0, 53519 resizeContainer: !0, 53520 transitionDuration: "0.4s", 53521 hiddenStyle: { opacity: 0, transform: "scale(0.001)" }, 53522 visibleStyle: { opacity: 1, transform: "scale(1)" }, 53523 }); 53524 var c = s.prototype; 53525 o.extend(c, e.prototype), 53526 (c.option = function (t) { 53527 o.extend(this.options, t); 53528 }), 53529 (c._getOption = function (t) { 53530 var e = this.constructor.compatOptions[t]; 53531 return e && void 0 !== this.options[e] ? this.options[e] : this.options[t]; 53532 }), 53533 (s.compatOptions = { 53534 initLayout: "isInitLayout", 53535 horizontal: "isHorizontal", 53536 layoutInstant: "isLayoutInstant", 53537 originLeft: "isOriginLeft", 53538 originTop: "isOriginTop", 53539 resize: "isResizeBound", 53540 resizeContainer: "isResizingContainer", 53541 }), 53542 (c._create = function () { 53543 this.reloadItems(), (this.stamps = []), this.stamp(this.options.stamp), o.extend(this.element.style, this.options.containerStyle); 53544 var t = this._getOption("resize"); 53545 t && this.bindResize(); 53546 }), 53547 (c.reloadItems = function () { 53548 this.items = this._itemize(this.element.children); 53549 }), 53550 (c._itemize = function (t) { 53551 for (var e = this._filterFindItemElements(t), i = this.constructor.Item, o = [], n = 0; n < e.length; n++) { 53552 var s = e[n], 53553 r = new i(s, this); 53554 o.push(r); 53555 } 53556 return o; 53557 }), 53558 (c._filterFindItemElements = function (t) { 53559 return o.filterFindElements(t, this.options.itemSelector); 53560 }), 53561 (c.getItemElements = function () { 53562 return this.items.map(function (t) { 53563 return t.element; 53564 }); 53565 }), 53566 (c.layout = function () { 53567 this._resetLayout(), this._manageStamps(); 53568 var t = this._getOption("layoutInstant"), 53569 e = void 0 !== t ? t : !this._isLayoutInited; 53570 this.layoutItems(this.items, e), (this._isLayoutInited = !0); 53571 }), 53572 (c._init = c.layout), 53573 (c._resetLayout = function () {
53574 this.getSize(); 53575 }), 53576 (c.getSize = function () { 53577 this.size = i(this.element); 53578 }), 53579 (c._getMeasurement = function (t, e) { 53580 var o, 53581 n = this.options[t]; 53582 n ? ("string" == typeof n ? (o = this.element.querySelector(n)) : n instanceof HTMLElement && (o = n), (this[t] = o ? i(o)[e] : n)) : (this[t] = 0); 53583 }), 53584 (c.layoutItems = function (t, e) { 53585 (t = this._getItemsForLayout(t)), this._layoutItems(t, e), this._postLayout(); 53586 }), 53587 (c._getItemsForLayout = function (t) { 53588 return t.filter(function (t) { 53589 return !t.isIgnored; 53590 }); 53591 }), 53592 (c._layoutItems = function (t, e) { 53593 if ((this._emitCompleteOnItems("layout", t), t && t.length)) { 53594 var i = []; 53595 t.forEach(function (t) { 53596 var o = this._getItemLayoutPosition(t); 53597 (o.item = t), (o.isInstant = e || t.isLayoutInstant), i.push(o); 53598 }, this), 53599 this._processLayoutQueue(i); 53600 } 53601 }), 53602 (c._getItemLayoutPosition = function () { 53603 return { x: 0, y: 0 }; 53604 }), 53605 (c._processLayoutQueue = function (t) { 53606 this.updateStagger(), 53607 t.forEach(function (t, e) { 53608 this._positionItem(t.item, t.x, t.y, t.isInstant, e); 53609 }, this); 53610 }), 53611 (c.updateStagger = function () { 53612 var t = this.options.stagger; 53613 return null === t || void 0 === t ? void (this.stagger = 0) : ((this.stagger = a(t)), this.stagger); 53614 }), 53615 (c._positionItem = function (t, e, i, o, n) { 53616 o ? t.goTo(e, i) : (t.stagger(n * this.stagger), t.moveTo(e, i)); 53617 }), 53618 (c._postLayout = function () { 53619 this.resizeContainer(); 53620 }), 53621 (c.resizeContainer = function () { 53622 var t = this._getOption("resizeContainer"); 53623 if (t) { 53624 var e = this._getContainerSize(); 53625 e && (this._setContainerMeasure(e.width, !0), this._setContainerMeasure(e.height, !1)); 53626 } 53627 }), 53628 (c._getContainerSize = d), 53629 (c._setContainerMeasure = function (t, e) { 53630 if (void 0 !== t) { 53631 var i = this.size; 53632 i.isBorderBox && (t += e ? i.paddingLeft + i.paddingRight + i.borderLeftWidth + i.borderRightWidth : i.paddingBottom + i.paddingTop + i.borderTopWidth + i.borderBottomWidth), 53633 (t = Math.max(t, 0)), 53634 (this.element.style[e ? "width" : "height"] = t + "px"); 53635 } 53636 }), 53637 (c._emitCompleteOnItems = function (t, e) { 53638 function i() { 53639 n.dispatchEvent(t + "Complete", null, [e]); 53640 } 53641 function o() { 53642 r++, r == s && i(); 53643 } 53644 var n = this, 53645 s = e.length; 53646 if (!e || !s) return void i(); 53647 var r = 0; 53648 e.forEach(function (e) { 53649 e.once(t, o); 53650 }); 53651 }), 53652 (c.dispatchEvent = function (t, e, i) { 53653 var o = e ? [e].concat(i) : i; 53654 if ((this.emitEvent(t, o), h)) 53655 if (((this.$element = this.$element || h(this.element)), e)) { 53656 var n = h.Event(e); 53657 (n.type = t), this.$element.trigger(n, i); 53658 } else this.$element.trigger(t, i); 53659 }), 53660 (c.ignore = function (t) { 53661 var e = this.getItem(t); 53662 e && (e.isIgnored = !0); 53663 }), 53664 (c.unignore = function (t) { 53665 var e = this.getItem(t); 53666 e && delete e.isIgnored; 53667 }), 53668 (c.stamp = function (t) { 53669 (t = this._find(t)), t && ((this.stamps = this.stamps.
53669concat(t)), t.forEach(this.ignore, this)); 53670 }), 53671 (c.unstamp = function (t) { 53672 (t = this._find(t)), 53673 t && 53674 t.forEach(function (t) { 53675 o.removeFrom(this.stamps, t), this.unignore(t); 53676 }, this); 53677 }), 53678 (c._find = function (t) { 53679 if (t) return "string" == typeof t && (t = this.element.querySelectorAll(t)), (t = o.makeArray(t)); 53680 }), 53681 (c._manageStamps = function () { 53682 this.stamps && this.stamps.length && (this._getBoundingRect(), this.stamps.forEach(this._manageStamp, this)); 53683 }), 53684 (c._getBoundingRect = function () { 53685 var t = this.element.getBoundingClientRect(), 53686 e = this.size; 53687 this._boundingRect = { 53688 left: t.left + e.paddingLeft + e.borderLeftWidth, 53689 top: t.top + e.paddingTop + e.borderTopWidth, 53690 right: t.right - (e.paddingRight + e.borderRightWidth), 53691 bottom: t.bottom - (e.paddingBottom + e.borderBottomWidth), 53692 }; 53693 }), 53694 (c._manageStamp = d), 53695 (c._getElementOffset = function (t) { 53696 var e = t.getBoundingClientRect(), 53697 o = this._boundingRect, 53698 n = i(t), 53699 s = { left: e.left - o.left - n.marginLeft, top: e.top - o.top - n.marginTop, right: o.right - e.right - n.marginRight, bottom: o.bottom - e.bottom - n.marginBottom }; 53700 return s; 53701 }), 53702 (c.handleEvent = o.handleEvent), 53703 (c.bindResize = function () { 53704 t.addEventListener("resize", this), (this.isResizeBound = !0); 53705 }), 53706 (c.unbindResize = function () { 53707 t.removeEventListener("resize", this), (this.isResizeBound = !1); 53708 }), 53709 (c.onresize = function () { 53710 this.resize(); 53711 }), 53712 o.debounceMethod(s, "onresize", 100), 53713 (c.resize = function () { 53714 this.isResizeBound && this.needsResizeLayout() && this.layout(); 53715 }), 53716 (c.needsResizeLayout = function () { 53717 var t = i(this.element), 53718 e = this.size && t; 53719 return e && t.innerWidth !== this.size.innerWidth; 53720 }), 53721 (c.addItems = function (t) { 53722 var e = this._itemize(t); 53723 return e.length && (this.items = this.items.concat(e)), e; 53724 }), 53725 (c.appended = function (t) { 53726 var e = this.addItems(t); 53727 e.length && (this.layoutItems(e, !0), this.reveal(e)); 53728 }), 53729 (c.prepended = function (t) { 53730 var e = this._itemize(t); 53731 if (e.length) { 53732 var i = this.items.slice(0); 53733 (this.items = e.concat(i)), this._resetLayout(), this._manageStamps(), this.layoutItems(e, !0), this.reveal(e), this.layoutItems(i); 53734 } 53735 }), 53736 (c.reveal = function (t) { 53737 if ((this._emitCompleteOnItems("reveal", t), t && t.length)) { 53738 var e = this.updateStagger(); 53739 t.forEach(function (t, i) { 53740 t.stagger(i * e), t.reveal(); 53741 }); 53742 } 53743 }), 53744 (c.hide = function (t) { 53745 if ((this._emitCompleteOnItems("hide", t), t && t.length)) { 53746 var e = this.updateStagger(); 53747 t.forEach(function (t, i) { 53748 t.stagger(i * e), t.hide(); 53749 }); 53750 } 53751 }), 53752 (c.revealItemElements = function (t) { 53753 var e = this.getItems(t); 53754 this.reveal(e); 53755 }), 53756 (c.hideItemElements = function (t) { 53757 var e = this.getItems(t); 53758 this.hide(e); 53759 }), 53760 (c.getItem = function (t) { 53761 for (var e = 0; e < this.items.length; e++) { 53762 var i = this.items[e]; 53763 if (i.element == t) return i; 53764 } 53765 }), 53766 (c.getItems = function (t) { 53767 t = o.makeArray(t); 53768 var e = []; 53769 return ( 53770 t.forEach(function (t) { 53771 var i = this.getItem(t); 53772 i && e.push(i); 53773 }, this), 53774 e 53775 ); 53776 }), 53777 (c.remove = function (t) { 53778 var e = this.getItems(t); 53779 this._emitCompleteOnItems("remove", e), 53780 e && 53781 e.length && 53782 e.forEach(function (t) { 53783 t.remove(), o.removeFrom(this.items, t); 53784 }, this); 53785 }), 53786 (c.destroy = function () { 53787 var t = this.element.style; 53788 (t.height = ""), 53789 (t.position = ""), 53790 (t.width = ""),
53791 this.items.forEach(function (t) { 53792 t.destroy(); 53793 }), 53794 this.unbindResize(); 53795 var e = this.element.outlayerGUID; 53796 delete f[e], delete this.element.outlayerGUID, h && h.removeData(this.element, this.constructor.namespace); 53797 }), 53798 (s.data = function (t) { 53799 t = o.getQueryElement(t); 53800 var e = t && t.outlayerGUID; 53801 return e && f[e]; 53802 }), 53803 (s.create = function (t, e) { 53804 var i = r(s); 53805 return ( 53806 (i.defaults = o.extend({}, s.defaults)), 53807 o.extend(i.defaults, e), 53808 (i.compatOptions = o.extend({}, s.compatOptions)), 53809 (i.namespace = t), 53810 (i.data = s.data), 53811 (i.Item = r(n)), 53812 o.htmlInit(i, t), 53813 h && h.bridget && h.bridget(t, i), 53814 i 53815 ); 53816 }); 53817 var m = { ms: 1, s: 1e3 }; 53818 return (s.Item = n), s; 53819 }), 53820 (function (t, e) { 53821 "function" == typeof define && define.amd 53822 ? define("isotope-layout/js/item", ["outlayer/outlayer"], e) 53823 : "object" == typeof module && module.exports 53824 ? (module.exports = e(require("outlayer"))) 53825 : ((t.Isotope = t.Isotope || {}), (t.Isotope.Item = e(t.Outlayer))); 53826 })(window, function (t) { 53827 "use strict"; 53828 function e() { 53829 t.Item.apply(this, arguments); 53830 } 53831 var i = (e.prototype = Object.create(t.Item.prototype)), 53832 o = i._create; 53833 (i._create = function () { 53834 (this.id = this.layout.itemGUID++), o.call(this), (this.sortData = {}); 53835 }), 53836 (i.updateSortData = function () { 53837 if (!this.isIgnored) { 53838 (this.sortData.id = this.id), (this.sortData["original-order"] = this.id), (this.sortData.random = Math.random()); 53839 var t = this.layout.options.getSortData, 53840 e = this.layout._sorters; 53841 for (var i in t) { 53842 var o = e[i]; 53843 this.sortData[i] = o(this.element, this); 53844 } 53845 } 53846 }); 53847 var n = i.destroy; 53848 return ( 53849 (i.destroy = function () { 53850 n.apply(this, arguments), this.css({ display: "" }); 53851 }), 53852 e 53853 ); 53854 }), 53855 (function (t, e) { 53856 "function" == typeof define && define.amd 53857 ? define("isotope-layout/js/layout-mode", ["get-size/get-size", "outlayer/outlayer"], e) 53858 : "object" == typeof module && module.exports 53859 ? (module.exports = e(require("get-size"), require("outlayer"))) 53860 : ((t.Isotope = t.Isotope || {}), (t.Isotope.LayoutMode = e(t.getSize, t.Outlayer))); 53861 })(window, function (t, e) { 53862 "use strict"; 53863 function i(t) { 53864 (this.isotope = t), t && ((this.options = t.options[this.namespace]), (this.element = t.element), (this.items = t.filteredItems), (this.size = t.size)); 53865 } 53866 var o = i.prototype, 53867 n = ["_resetLayout", "_getItemLayoutPosition", "_manageStamp", "_getContainerSize", "_getElementOffset", "needsResizeLayout", "_getOption"]; 53868 return ( 53869 n.forEach(function (t) { 53870 o[t] = function () { 53871 return e.prototype[t].apply(this.isotope, arguments); 53872 }; 53873 }), 53874 (o.needsVerticalResizeLayout = function () { 53875 var e = t(this.isotope.element), 53876 i = this.isotope.size && e; 53877 return i && e.innerHeight != this.isotope.size.innerHeight; 53878 }), 53879 (o._getMeasurement = function () { 53880 this.isotope._getMeasurement.apply(this, arguments); 53881 }), 53882 (o.getColumnWidth = function () {
53883 this.getSegmentSize("column", "Width"); 53884 }), 53885 (o.getRowHeight = function () { 53886 this.getSegmentSize("row", "Height"); 53887 }), 53888 (o.getSegmentSize = function (t, e) { 53889 var i = t + e, 53890 o = "outer" + e; 53891 if ((this._getMeasurement(i, o), !this[i])) { 53892 var n = this.getFirstItemSize(); 53893 this[i] = (n && n[o]) || this.isotope.size["inner" + e]; 53894 } 53895 }), 53896 (o.getFirstItemSize = function () { 53897 var e = this.isotope.filteredItems[0]; 53898 return e && e.element && t(e.element); 53899 }), 53900 (o.layout = function () { 53901 this.isotope.layout.apply(this.isotope, arguments); 53902 }), 53903 (o.getSize = function () { 53904 this.isotope.getSize(), (this.size = this.isotope.size); 53905 }), 53906 (i.modes = {}), 53907 (i.create = function (t, e) { 53908 function n() { 53909 i.apply(this, arguments); 53910 } 53911 return (n.prototype = Object.create(o)), (n.prototype.constructor = n), e && (n.options = e), (n.prototype.namespace = t), (i.modes[t] = n), n; 53912 }), 53913 i 53914 ); 53915 }), 53916 (function (t, e) { 53917 "function" == typeof define && define.amd 53918 ? define("masonry-layout/masonry", ["outlayer/outlayer", "get-size/get-size"], e) 53919 : "object" == typeof module && module.exports 53920 ? (module.exports = e(require("outlayer"), require("get-size"))) 53921 : (t.Masonry = e(t.Outlayer, t.getSize)); 53922 })(window, function (t, e) { 53923 var i = t.create("masonry"); 53924 i.compatOptions.fitWidth = "isFitWidth"; 53925 var o = i.prototype; 53926 return ( 53927 (o._resetLayout = function () {
53928 this.getSize(), this._getMeasurement("columnWidth", "outerWidth"), this._getMeasurement("gutter", "outerWidth"), this.measureColumns(), (this.colYs = []); 53929 for (var t = 0; t < this.cols; t++) this.colYs.push(0); 53930 (this.maxY = 0), (this.horizontalColIndex = 0); 53931 }), 53932 (o.measureColumns = function () { 53933 if ((this.getContainerWidth(), !this.columnWidth)) { 53934 var t = this.items[0], 53935 i = t && t.element; 53936 this.columnWidth = (i && e(i).outerWidth) || this.containerWidth; 53937 } 53938 var o = (this.columnWidth += this.gutter), 53939 n = this.containerWidth + this.gutter, 53940 s = n / o, 53941 r = o - (n % o), 53942 a = r && r < 1 ? "round" : "floor"; 53943 (s = Math[a](s)), (this.cols = Math.max(s, 1)); 53944 }), 53945 (o.getContainerWidth = function () { 53946 var t = this._getOption("fitWidth"), 53947 i = t ? this.element.parentNode : this.element, 53948 o = e(i); 53949 this.containerWidth = o && o.innerWidth; 53950 }), 53951 (o._getItemLayoutPosition = function (t) { 53952 t.getSize(); 53953 var e = t.size.outerWidth % this.columnWidth, 53954 i = e && e < 1 ? "round" : "ceil", 53955 o = Math[i](t.size.outerWidth / this.columnWidth); 53956 o = Math.min(o, this.cols); 53957 for ( 53958 var n = this.options.horizontalOrder ? "_getHorizontalColPosition" : "_getTopColPosition", s = this[n](o, t), r = { x: this.columnWidth * s.col, y: s.y }, a = s.y + t.size.outerHeight, u = o + s.col, h = s.col; 53959 h < u; 53960 h++ 53961 ) 53962 this.colYs[h] = a; 53963 return r; 53964 }), 53965 (o._getTopColPosition = function (t) { 53966 var e = this._getTopColGroup(t), 53967 i = Math.min.apply(Math, e); 53968 return { col: e.indexOf(i), y: i }; 53969 }), 53970 (o._getTopColGroup = function (t) { 53971 if (t < 2) return this.colYs; 53972 for (var e = [], i = this.cols + 1 - t, o = 0; o < i; o++) e[o] = this._getColGroupY(o, t); 53973 return e; 53974 }), 53975 (o._getColGroupY = function (t, e) { 53976 if (e < 2) return this.colYs[t]; 53977 var i = this.colYs.slice(t, t + e); 53978 return Math.max.apply(Math, i); 53979 }), 53980 (o._getHorizontalColPosition = function (t, e) { 53981 var i = this.horizontalColIndex % this.cols, 53982 o = t > 1 && i + t > this.cols; 53983 i = o ? 0 : i; 53984 var n = e.size.outerWidth && e.size.outerHeight; 53985 return (this.horizontalColIndex = n ? i + t : this.horizontalColIndex), { col: i, y: this._getColGroupY(i, t) }; 53986 }), 53987 (o._manageStamp = function (t) { 53988 var i = e(t), 53989 o = this._getElementOffset(t), 53990 n = this._getOption("originLeft"), 53991 s = n ? o.left : o.right, 53992 r = s + i.outerWidth, 53993 a = Math.floor(s / this.columnWidth); 53994 a = Math.max(0, a); 53995 var u = Math.floor(r / this.columnWidth); 53996 (u -= r % this.columnWidth ? 0 : 1), (u = Math.min(this.cols - 1, u)); 53997 for (var h = this._getOption("originTop"), d = (h ? o.top : o.bottom) + i.outerHeight, l = a; l <= u; l++) this.colYs[l] = Math.max(d, this.colYs[l]); 53998 }), 53999 (o._getContainerSize = function () { 54000 this.maxY = Math.max.apply(Math, this.colYs); 54001 var t = { height: this.maxY }; 54002 return this._getOption("fitWidth") && (t.width = this._getContainerFitWidth()), t; 54003 }), 54004 (o._getContainerFitWidth = function () { 54005 for (var t = 0, e = this.cols; --e && 0 === this.colYs[e]; ) t++; 54006 return (this.cols - t) * this.columnWidth - this.gutter; 54007 }), 54008 (o.needsResizeLayout = function () { 54009 var t = this.containerWidth; 54010 return this.getContainerWidth(), t != this.containerWidth; 54011 }), 54012 i 54013 ); 54014 }), 54015 (function (t, e) { 54016 "function" == typeof define && define.amd 54017 ? define("isotope-layout/js/layout-modes/masonry", ["../layout-mode", "masonry-layout/masonry"], e) 54018 : "object" == typeof module && module.exports 54019 ? (module.exports = e(require("../layout-mode"), require("masonry-layout"))) 54020 : e(t.Isotope.LayoutMode, t.Masonry); 54021 })(window, function (t, e) { 54022 "use strict"; 54023 var i = t.create("masonry"), 54024 o = i.prototype, 54025 n = { _getElementOffset: !0, layout: !0, _getMeasurement: !0 }; 54026 for (var s in e.prototype) n[s] || (o[s] = e.prototype[s]); 54027 var r = o.measureColumns; 54028 o.measureColumns = function () { 54029 (this.items = this.isotope.filteredItems), r.call(this); 54030 }; 54031 var a = o._getOption; 54032 return ( 54033 (o._getOption = function (t) { 54034 return "fitWidth" == t ? (void 0 !== this.options.isFitWidth ? this.options.isFitWidth : this.options.fitWidth) : a.apply(this.isotope, arguments); 54035 }), 54036 i 54037 ); 54038 }), 54039 (function (t, e) { 54040 "function" == typeof define && define.amd ? define("isotope-layout/js/layout-modes/fit-rows", ["../layout-mode"], e) : "object" == typeof exports ? (module.exports = e(require("../layout-mode"))) : e(t.Isotope.LayoutMode); 54041 })(window, function (t) { 54042 "use strict"; 54043 var e = t.create("fitRows"), 54044 i = e.prototype; 54045 return ( 54046 (i._resetLayout = function () { 54047 (this.x = 0), (this.y = 0), (this.maxY = 0), this._getMeasurement("gutter", "outerWidth"); 54048 }), 54049 (i._getItemLayoutPosition = function (t) { 54050 t.getSize(); 54051 var e = t.size.outerWidth + this.gutter, 54052 i = this.isotope.size.innerWidth + this.gutter; 54053 0 !== this.x && e + this.x > i && ((this.x = 0), (this.y = this.maxY)); 54054 var o = { x: this.x, y: this.y }; 54055 return (this.maxY = Math.max(this.maxY, this.y + t.size.outerHeight)), (this.x += e), o; 54056 }), 54057 (i._getContainerSize = function () { 54058 return { height: this.maxY }; 54059 }), 54060 e 54061 ); 54062 }), 54063 (function (t, e) { 54064 "function" == typeof define && define.amd 54065 ? define("isotope-layout/js/layout-modes/vertical", ["../layout-mode"], e) 54066 : "object" == typeof module && module.exports 54067 ? (module.exports = e(require("../layout-mode"))) 54068 : e(t.Isotope.LayoutMode); 54069 })(window, function (t) { 54070 "use strict"; 54071 var e = t.create("vertical", { horizontalAlignment: 0 }), 54072 i = e.prototype; 54073 return ( 54074 (i._resetLayout = function () { 54075 this.y = 0; 54076 }), 54077 (i._getItemLayoutPosition = function (t) { 54078 t.getSize(); 54079 var e = (this.isotope.size.innerWidth - t.size.outerWidth) * this.options.horizontalAlignment, 54080 i = this.y; 54081 return (this.y += t.size.outerHeight), { x: e, y: i }; 54082 }), 54083 (i._getContainerSize = function () { 54084 return { height: this.y }; 54085 }), 54086 e 54087 ); 54088 }), 54089 (function (t, e) { 54090 "function" == typeof define && define.amd 54091 ? define([ 54092 "outlayer/outlayer", 54093 "get-size/get-size", 54094 "desandro-matches-selector/matches-selector", 54095 "fizzy-ui-utils/utils", 54096 "isotope-layout/js/item", 54097 "isotope-layout/js/layout-mode", 54098 "isotope-layout/js/layout-modes/masonry", 54099 "isotope-layout/js/layout-modes/fit-rows", 54100 "isotope-layout/js/layout-modes/vertical", 54101 ], function (i, o, n, s, r, a) { 54102 return e(t, i, o, n, s, r, a); 54103 }) 54104 : "object" == typeof module && module.exports 54105 ? (module.exports = e( 54106 t, 54107 require("outlayer"), 54108 require("get-size"), 54109 require("desandro-matches-selector"), 54110 require("fizzy-ui-utils"), 54111 require("isotope-layout/js/item"), 54112 require("isotope-layout/js/layout-mode"), 54113 require("isotope-layout/js/layout-modes/masonry"), 54114 require("isotope-layout/js/layout-modes/fit-rows"), 54115 require("isotope-layout/js/layout-modes/vertical") 54116 )) 54117 : (t.Isotope = e(t, t.Outlayer, t.getSize, t.matchesSelector, t.fizzyUIUtils, t.Isotope.Item, t.Isotope.LayoutMode)); 54118 })(window, function (t, e, i, o, n, s, r) { 54119 function a(t, e) { 54120 return function (i, o) { 54121 for (var n = 0; n < t.length; n++) { 54122 var s = t[n], 54123 r = i.sortData[s], 54124 a = o.sortData[s]; 54125 if (r > a || r < a) { 54126 var u = void 0 !== e[s] ? e[s] : e, 54127 h = u ? 1 : -1; 54128 return (r > a ? 1 : -1) * h; 54129 } 54130 } 54131 return 0; 54132 }; 54133 } 54134 var u = t.jQuery, 54135 h = String.prototype.trim 54136 ? function (t) { 54137 return t.trim(); 54138 } 54139 : function (t) { 54140 return t.replace(/^\s+|\s+$/g, ""); 54141 }, 54142 d = e.create("isotope", { layoutMode: "masonry", isJQueryFiltering: !0, sortAscending: !0 }); 54143 (d.Item = s), (d.LayoutMode = r); 54144 var l = d.prototype; 54145 (l._create = function () { 54146 (this.itemGUID = 0), (this._sorters = {}), this._getSorters(), e.prototype._create.call(this), (this.modes = {}), (this.filteredItems = this.items), (this.sortHistory = ["original-order"]); 54147 for (var t in r.modes) this._initLayoutMode(t); 54148 }), 54149 (l.reloadItems = function () { 54150 (this.itemGUID = 0), e.prototype.reloadItems.call(this); 54151 }), 54152 (l._itemize = function () { 54153 for (var t = e.prototype._itemize.apply(this, arguments), i = 0; i < t.length; i++) { 54154 var o = t[i]; 54155 o.id = this.itemGUID++; 54156 } 54157 return this._updateItemsSortData(t), t; 54158 }), 54159 (l._initLayoutMode = function (t) { 54160 var e = r.modes[t], 54161 i = this.options[t] || {}; 54162 (this.options[t] = e.options ? n.extend(e.options, i) : i), (this.modes[t] = new e(this)); 54163 }), 54164 (l.layout = function () { 54165 return !this._isLayoutInited && this._getOption("initLayout") ? void this.arrange() : void this._layout(); 54166 }), 54167 (l._layout = function () { 54168 var t = this._getIsInstant(); 54169 this._resetLayout(), this._manageStamps(), this.layoutItems(this.filteredItems, t), (this._isLayoutInited = !0); 54170 }), 54171 (l.arrange = function (t) { 54172 this.option(t), this._getIsInstant(); 54173 var e = this._filter(this.items); 54174 (this.filteredItems = e.matches), this._bindArrangeComplete(), this._isInstant ? this._noTransition(this._hideReveal, [e]) : this._hideReveal(e), this._sort(), this._layout(); 54175 }), 54176 (l._init = l.arrange), 54177 (l._hideReveal = function (t) { 54178 this.reveal(t.needReveal), this.hide(t.needHide); 54179 }), 54180 (l._getIsInstant = function () { 54181 var t = this._getOption("layoutInstant"), 54182 e = void 0 !== t ? t : !this._isLayoutInited; 54183 return (this._isInstant = e), e; 54184 }), 54185 (l._bindArrangeComplete = function () { 54186 function t() { 54187 e && i && o && n.dispatchEvent("arrangeComplete", null, [n.filteredItems]); 54188 } 54189 var e, 54190 i, 54191 o, 54192 n = this; 54193 this.once("layoutComplete", function () { 54194 (e = !0), t(); 54195 }), 54196 this.once("hideComplete", function () { 54197 (i = !0), t(); 54198 }), 54199 this.once("revealComplete", function () { 54200 (o = !0), t(); 54201 }); 54202 }), 54203 (l._filter = function (t) { 54204 var e = this.options.filter; 54205 e = e || "*"; 54206 for (var i = [], o = [], n = [], s = this._getFilterTest(e), r = 0; r < t.length; r++) { 54207 var a = t[r]; 54208 if (!a.isIgnored) { 54209 var u = s(a); 54210 u && i.push(a), u && a.isHidden ? o.push(a) : u || a.isHidden || n.push(a); 54211 } 54212 } 54213 return { matches: i, needReveal: o, needHide: n }; 54214 }), 54215 (l._getFilterTest = function (t) { 54216 return u && this.options.isJQueryFiltering 54217 ? function (e) { 54218 return u(e.element).is(t); 54219 } 54220 : "function" == typeof t 54221 ? function (e) { 54222 return t(e.element); 54223 } 54224 : function (e) { 54225 return o(e.element, t); 54226 }; 54227 }), 54228 (l.updateSortData = function (t) { 54229 var e; 54230 t ? ((t = n.makeArray(t)), (e = this.getItems(t))) : (e = this.items), this._getSorters(), this._updateItemsSortData(e); 54231 }), 54232 (l._getSorters = function () { 54233 var t = this.options.getSortData; 54234 for (var e in t) { 54235 var i = t[e]; 54236 this._sorters[e] = f(i); 54237 } 54238 }), 54239 (l._updateItemsSortData = function (t) { 54240 for (var e = t && t.length, i = 0; e && i < e; i++) { 54241 var o = t[i]; 54242 o.updateSortData(); 54243 } 54244 }); 54245 var f = (function () { 54246 function t(t) { 54247 if ("string" != typeof t) return t; 54248 var i = h(t).split(" "), 54249 o = i[0], 54250 n = o.match(/^\[(.+)\]$/), 54251 s = n && n[1], 54252 r = e(s, o), 54253 a = d.sortDataParsers[i[1]]; 54254 return (t = a 54255 ? function (t) { 54256 return t && a(r(t)); 54257 } 54258 : function (t) { 54259 return t && r(t); 54260 }); 54261 } 54262 function e(t, e) { 54263 return t 54264 ? function (e) { 54265 return e.getAttribute(t); 54266 } 54267 : function (t) { 54268 var i = t.querySelector(e); 54269 return i && i.textContent; 54270 }; 54271 } 54272 return t; 54273 })(); 54274 (d.sortDataParsers = { 54275 parseInt: function (t) { 54276 return parseInt(t, 10); 54277 }, 54278 parseFloat: function (t) { 54279 return parseFloat(t); 54280 }, 54281 }), 54282 (l._sort = function () { 54283 if (this.options.sortBy) { 54284 var t = n.makeArray(this.options.sortBy); 54285 this._getIsSameSortBy(t) || (this.sortHistory = t.concat(this.sortHistory)); 54286 var e = a(this.sortHistory, this.options.sortAscending); 54287 this.filteredItems.sort(e); 54288 } 54289
54289 }), 54290 (l._getIsSameSortBy = function (t) { 54291 for (var e = 0; e < t.length; e++) if (t[e] != this.sortHistory[e]) return !1; 54292 return !0; 54293 }), 54294 (l._mode = function () { 54295 var t = this.options.layoutMode, 54296 e = this.modes[t]; 54297 if (!e) throw new Error("No layout mode: " + t); 54298 return (e.options = this.options[t]), e; 54299 }), 54300 (l._resetLayout = function () { 54301 e.prototype._resetLayout.call(this), this._mode()._resetLayout(); 54302 }), 54303 (l._getItemLayoutPosition = function (t) { 54304 return this._mode()._getItemLayoutPosition(t); 54305 }), 54306 (l._manageStamp = function (t) { 54307 this._mode()._manageStamp(t); 54308 }), 54309 (l._getContainerSize = function () { 54310 return this._mode()._getContainerSize(); 54311 }), 54312 (l.needsResizeLayout = function () { 54313 return this._mode().needsResizeLayout(); 54314 }), 54315 (l.appended = function (t) { 54316 var e = this.addItems(t); 54317 if (e.length) { 54318 var i = this._filterRevealAdded(e); 54319 this.filteredItems = this.filteredItems.concat(i); 54320 } 54321 }), 54322 (l.prepended = function (t) { 54323 var e = this._itemize(t); 54324 if (e.length) { 54325 this._resetLayout(), this._manageStamps(); 54326 var i = this._filterRevealAdded(e); 54327 this.layoutItems(this.filteredItems), (this.filteredItems = i.concat(this.filteredItems)), (this.items = e.concat(this.items)); 54328 } 54329 }), 54330 (l._filterRevealAdded = function (t) { 54331 var e = this._filter(t); 54332 return this.hide(e.needHide), this.reveal(e.matches), this.layoutItems(e.matches, !0), e.matches; 54333 }), 54334 (l.insert = function (t) { 54335 var e = this.addItems(t); 54336 if (e.length) { 54337 var i, 54338 o, 54339 n = e.length; 54340 for (i = 0; i < n; i++) (o = e[i]), this.element.appendChild(o.element); 54341 var s = this._filter(e).matches; 54342 for (i = 0; i < n; i++) e[i].isLayoutInstant = !0; 54343 for (this.arrange(), i = 0; i < n; i++) delete e[i].isLayoutInstant; 54344 this.reveal(s); 54345 } 54346 }); 54347 var c = l.remove; 54348 return ( 54349 (l.remove = function (t) { 54350 t = n.makeArray(t); 54351 var e = this.getItems(t); 54352 c.call(this, t); 54353 for (var i = e && e.length, o = 0; i && o < i; o++) { 54354 var s = e[o]; 54355 n.removeFrom(this.filteredItems, s); 54356 } 54357 }), 54358 (l.shuffle = function () { 54359 for (var t = 0; t < this.items.length; t++) { 54360 var e = this.items[t]; 54361 e.sortData.random = Math.random(); 54362 } 54363 (this.options.sortBy = "random"), this._sort(), this._layout(); 54364 }), 54365 (l._noTransition = function (t, e) { 54366 var i = this.options.transitionDuration; 54367 this.options.transitionDuration = 0; 54368 var o = t.apply(this, e); 54369 return (this.options.transitionDuration = i), o; 54370 }), 54371 (l.getFilteredItemElements = function () { 54372 return this.filteredItems.map(function (t) { 54373 return t.element; 54374 }); 54375 }), 54376 d 54377 ); 54378 }); 54379!(function (a, b) { 54380 "function" == typeof define && define.amd ? define("packery/js/rect", b) : "object" == typeof module && module.exports ? (module.exports = b()) : ((a.Packery = a.Packery || {}), (a.Packery.Rect = b())); 54381})(window, function () { 54382 function a(b) { 54383 for (var c in a.defaults) this[c] = a.defaults[c]; 54384 for (c in b) this[c] = b[c]; 54385 } 54386 a.defaults = { x: 0, y: 0, width: 0, height: 0 }; 54387 var b = a.prototype; 54388 return ( 54389 (b.contains = function (a) { 54390 var b = a.width || 0, 54391 c = a.height || 0; 54392 return this.x <= a.x && this.y <= a.y && this.x + this.width >= a.x + b && this.y + this.height >= a.y + c; 54393 }), 54394 (b.overlaps = function (a) { 54395 var b = this.x + this.width, 54396 c = this.y + this.height, 54397 d = a.x + a.width, 54398 e = a.y + a.height; 54399 return this.x < d && b > a.x && this.y < e && c > a.y; 54400 }), 54401 (b.getMaximalFreeRects = function (b) { 54402 if (!this.overlaps(b)) return !1; 54403 var c, 54404 d = [], 54405 e = this.x + this.width, 54406 f = this.y + this.height, 54407 g = b.x + b.width,
54408 h = b.y + b.height; 54409 return ( 54410 this.y < b.y && ((c = new a({ x: this.x, y: this.y, width: this.width, height: b.y - this.y })), d.push(c)), 54411 e > g && ((c = new a({ x: g, y: this.y, width: e - g, height: this.height })), d.push(c)), 54412 f > h && ((c = new a({ x: this.x, y: h, width: this.width, height: f - h })), d.push(c)), 54413 this.x < b.x && ((c = new a({ x: this.x, y: this.y, width: b.x - this.x, height: this.height })), d.push(c)), 54414 d 54415 ); 54416 }), 54417 (b.canFit = function (a) { 54418 return this.width >= a.width && this.height >= a.height; 54419 }), 54420 a 54421 ); 54422}), 54423 (function (a, b) { 54424 if ("function" == typeof define && define.amd) define("packery/js/packer", ["./rect"], b); 54425 else if ("object" == typeof module && module.exports) module.exports = b(require("./rect")); 54426 else { 54427 var c = (a.Packery = a.Packery || {}); 54428 c.Packer = b(c.Rect); 54429 } 54430 })(window, function (a) { 54431 function b(a, b, c) { 54432 (this.width = a || 0), (this.height = b || 0), (this.sortDirection = c || "downwardLeftToRight"), this.reset(); 54433 } 54434 var c = b.prototype; 54435 (c.reset = function () { 54436 this.spaces = []; 54437 var b = new a({ x: 0, y: 0, width: this.width, height: this.height }); 54438 this.spaces.push(b), (this.sorter = d[this.sortDirection] || d.downwardLeftToRight); 54439 }), 54440 (c.pack = function (a) { 54441 for (var b = 0; b < this.spaces.length; b++) { 54442 var c = this.spaces[b]; 54443 if (c.canFit(a)) { 54444 this.placeInSpace(a, c); 54445 break; 54446 } 54447 } 54448 }), 54449 (c.columnPack = function (a) { 54450 for (var b = 0; b < this.spaces.length; b++) { 54451 var c = this.spaces[b], 54452 d = c.x <= a.x && c.x + c.width >= a.x + a.width && c.height >= a.height - 0.01; 54453 if (d) { 54454 (a.y = c.y), this.placed(a); 54455 break; 54456 } 54457 } 54458 }), 54459 (c.rowPack = function (a) { 54460 for (var b = 0; b < this.spaces.length; b++) { 54461 var c = this.spaces[b], 54462 d = c.y <= a.y && c.y + c.height >= a.y + a.height && c.width >= a.width - 0.01; 54463 if (d) { 54464 (a.x = c.x), this.placed(a); 54465 break; 54466 } 54467 } 54468 }), 54469 (c.placeInSpace = function (a, b) { 54470 (a.x = b.x), (a.y = b.y), this.placed(a); 54471 }), 54472 (c.placed = function (a) { 54473 for (var b = [], c = 0; c < this.spaces.length; c++) { 54474 var d = this.spaces[c], 54475 e = d.getMaximalFreeRects(a); 54476 e ? b.push.apply(b, e) : b.push(d); 54477 } 54478 (this.spaces = b), this.mergeSortSpaces(); 54479 }), 54480 (c.mergeSortSpaces = function () { 54481 b.mergeRects(this.spaces), this.spaces.sort(this.sorter); 54482 }), 54483 (c.addSpace = function (a) { 54484 this.spaces.push(a), this.mergeSortSpaces(); 54485 }), 54486 (b.mergeRects = function (a) { 54487 var b = 0, 54488 c = a[b]; 54489 a: for (; c; ) { 54490 for (var d = 0, e = a[b + d]; e; ) { 54491 if (e == c) d++; 54492 else { 54493 if (e.contains(c)) { 54494 a.splice(b, 1), (c = a[b]); 54495 continue a; 54496 } 54497 c.contains(e) ? a.splice(b + d, 1) : d++; 54498 } 54499 e = a[b + d]; 54500 } 54501 b++, (c = a[b]); 54502 } 54503 return a; 54504 }); 54505 var d = { 54506 downwardLeftToRight: function (a, b) { 54507 return a.y - b.y || a.x - b.x; 54508 }, 54509 rightwardTopToBottom: function (a, b) { 54510 return a.x - b.x || a.y - b.y; 54511 }, 54512 }; 54513 return b; 54514 }), 54515 (function (a, b) { 54516 "function" == typeof define && define.amd 54517 ? define("packery/js/item", ["outlayer/outlayer", "./rect"], b) 54518 : "object" == typeof module && module.exports 54519 ? (module.exports = b(require("outlayer"), require("./rect"))) 54520 : (a.Packery.Item = b(a.Outlayer, a.Packery.Rect)); 54521 })(window, function (a, b) { 54522 var c = document.documentElement.style, 54523 d = "string" == typeof c.transform ? "transform" : "WebkitTransform", 54524 e = function () { 54525 a.Item.apply(this, arguments); 54526 }, 54527 f = (e.prototype = Object.create(a.Item.prototype)), 54528 g = f._create; 54529 f._create = function () { 54530 g.call(this), (this.rect = new b()); 54531 }; 54532 var h = f.moveTo; 54533 return ( 54534 (f.moveTo = function (a, b) { 54535 var c = Math.abs(this.position.x - a), 54536 d = Math.abs(this.position.y - b), 54537 e = this.layout.dragItemCount && !this.isPlacing && !this.isTransitioning && 1 > c && 1 > d; 54538 return e ? void this.goTo(a, b) : void h.apply(this, arguments); 54539 }), 54540 (f.enablePlacing = function () { 54541 this.removeTransitionStyles(), this.isTransitioning && d && (this.element.style[d] = "none"), (this.isTransitioning = !1), this.get
54541Size(), this.layout._setRectSize(this.element, this.rect), (this.isPlacing = !0); 54542 }), 54543 (f.disablePlacing = function () { 54544 this.isPlacing = !1; 54545 }), 54546 (f.removeElem = function () { 54547 this.element.parentNode.removeChild(this.element), this.layout.packer.addSpace(this.rect), this.emitEvent("remove", [this]); 54548 }), 54549 (f.showDropPlaceholder = function () { 54550 var a = this.dropPlaceholder; 54551 a || ((a = this.dropPlaceholder = document.createElement("div")), (a.className = "packery-drop-placeholder"), (a.style.position = "absolute")), 54552 (a.style.width = this.size.width + "px"), 54553 (a.style.height = this.size.height + "px"), 54554 this.positionDropPlaceholder(), 54555 this.layout.element.appendChild(a); 54556 }), 54557 (f.positionDropPlaceholder = function () { 54558 this.dropPlaceholder.style[d] = "translate(" + this.rect.x + "px, " + this.rect.y + "px)"; 54559 }), 54560 (f.hideDropPlaceholder = function () { 54561 this.layout.element.removeChild(this.dropPlaceholder); 54562 }), 54563 e 54564 ); 54565 }), 54566 (function (a, b) { 54567 "function" == typeof define && define.amd 54568 ? define("packery/js/packery", ["get-size/get-size", "outlayer/outlayer", "./rect", "./packer", "./item"], b) 54569 : "object" == typeof module && module.exports 54570 ? (module.exports = b(require("get-size"), require("outlayer"), require("./rect"), require("./packer"), require("./item"))) 54571 : (a.Packery = b(a.getSize, a.Outlayer, a.Packery.Rect, a.Packery.Packer, a.Packery.Item)); 54572 })(window, function (a, b, c, d, e) { 54573 function f(a, b) { 54574 return a.position.y - b.position.y || a.position.x - b.position.x; 54575 } 54576 function g(a, b) { 54577 return a.position.x - b.position.x || a.position.y - b.position.y; 54578 } 54579 function h(a, b) { 54580 var c = b.x - a.x, 54581 d = b.y - a.y; 54582 return Math.sqrt(c * c + d * d); 54583 } 54584 c.prototype.canFit = function (a) { 54585 return this.width >= a.width - 1 && this.height >= a.height - 1; 54586 }; 54587 var i = b.create("packery"); 54588 i.Item = e; 54589 var j = i.prototype; 54590 (j._create = function () { 54591 b.prototype._create.call(this), (this.packer = new d()), (this.shiftPacker = new d()), (this.isEnabled = !0), (this.dragItemCount = 0); 54592 var a = this; 54593 (this.handleDraggabilly = { 54594 dragStart: function () { 54595 a.itemDragStart(this.element); 54596 }, 54597 dragMove: function () { 54598 a.itemDragMove(this.element, this.position.x, this.position.y); 54599 }, 54600 dragEnd: function () { 54601 a.itemDragEnd(this.element); 54602 }, 54603 }), 54604 (this.handleUIDraggable = { 54605 start: function (b, c) { 54606 c && a.itemDragStart(b.currentTarget); 54607 }, 54608 drag: function (b, c) { 54609 c && a.itemDragMove(b.currentTarget, c.position.left, c.position.top); 54610 }, 54611 stop: function (b, c) { 54612 c && a.itemDragEnd(b.currentTarget); 54613 }, 54614 }); 54615 }), 54616 (j._resetLayout = function () {
54617 this.getSize(), this._getMeasurements(); 54618 var a, b, c; 54619 this._getOption("horizontal") ? ((a = 1 / 0), (b = this.size.innerHeight + this.gutter), (c = "rightwardTopToBottom")) : ((a = this.size.innerWidth + this.gutter), (b = 1 / 0), (c = "downwardLeftToRight")), 54620 (this.packer.width = this.shiftPacker.width = a), 54621 (this.packer.height = this.shiftPacker.height = b), 54622 (this.packer.sortDirection = this.shiftPacker.sortDirection = c), 54623 this.packer.reset(), 54624 (this.maxY = 0), 54625 (this.maxX = 0); 54626 }), 54627 (j._getMeasurements = function () { 54628 this._getMeasurement("columnWidth", "width"), this._getMeasurement("rowHeight", "height"), this._getMeasurement("gutter", "width"); 54629 }), 54630 (j._getItemLayoutPosition = function (a) { 54631 if ((this._setRectSize(a.element, a.rect), this.isShifting || this.dragItemCount > 0)) { 54632 var b = this._getPackMethod(); 54633 this.packer[b](a.rect); 54634 } else this.packer.pack(a.rect); 54635 return this._setMaxXY(a.rect), a.rect; 54636 }), 54637 (j.shiftLayout = function () { 54638 (this.isShifting = !0), this.layout(), delete this.isShifting; 54639 }), 54640 (j._getPackMethod = function () { 54641 return this._getOption("horizontal") ? "rowPack" : "columnPack"; 54642 }), 54643 (j._setMaxXY = function (a) { 54644 (this.maxX = Math.max(a.x + a.width, this.maxX)), (this.maxY = Math.max(a.y + a.height, this.maxY)); 54645 }), 54646 (j._setRectSize = function (b, c) { 54647 var d = a(b), 54648 e = d.outerWidth, 54649 f = d.outerHeight; 54650 (e || f) && ((e = this._applyGridGutter(e, this.columnWidth)), (f = this._applyGridGutter(f, this.rowHeight))), (c.width = Math.min(e, this.packer.width)), (c.height = Math.min(f, this.packer.height)); 54651 }), 54652 (j._applyGridGutter = function (a, b) { 54653 if (!b) return a + this.gutter; 54654 b += this.gutter; 54655 var c = a % b, 54656 d = c && 1 > c ? "round" : "ceil"; 54657 return (a = Math[d](a / b) * b); 54658 }), 54659 (j._getContainerSize = function () { 54660 return this._getOption("horizontal") ? { width: this.maxX - this.gutter } : { height: this.maxY - this.gutter }; 54661 }), 54662 (j._manageStamp = function (a) { 54663 var b, 54664 d = this.getItem(a); 54665 if (d && d.isPlacing) b = d.rect; 54666 else { 54667 var e = this._getElementOffset(a); 54668 b = new c({ x: this._getOption("originLeft") ? e.left : e.right, y: this._getOption("originTop") ? e.top : e.bottom }); 54669 } 54670 this._setRectSize(a, b), this.packer.placed(b), this._setMaxXY(b); 54671 }), 54672 (j.sortItemsByPosition = function () { 54673 var a = this._getOption("horizontal") ? g : f; 54674 this.items.sort(a); 54675 }), 54676 (j.fit = function (a, b, c) { 54677 var d = this.getItem(a); 54678 d && 54679 (this.stamp(d.element), 54680 d.enablePlacing(), 54681 this.updateShiftTargets(d), 54682 (b = void 0 === b ? d.rect.x : b), 54683 (c = void 0 === c ? d.rect.y : c), 54684 this.shift(d, b, c), 54685 this._bindFitEvents(d), 54686 d.moveTo(d.rect.x, d.rect.y), 54687 this.shiftLayout(), 54688 this.unstamp(d.element), 54689 this.sortItemsByPosition(), 54690 d.disablePlacing()); 54691 }), 54692 (j._bindFitEvents = function (a) { 54693 function b() { 54694 d++, 2 == d && c.dispatchEvent("fitComplete", null, [a]); 54695 } 54696 var c = this, 54697 d = 0; 54698 a.once("layout", b), this.once("layoutComplete", b); 54699 }), 54700 (j.resize = function () { 54701 this.isResizeBound && this.needsResizeLayout() && (this.options.shiftPercentResize ? this.resizeShiftPercentLayout() : this.layout()); 54702 }), 54703 (j.needsResizeLayout = function () { 54704 var b = a(this.element), 54705 c = this._getOption("horizontal") ? "innerHe
54705ight" : "innerWidth"; 54706 return b[c] != this.size[c]; 54707 }), 54708 (j.resizeShiftPercentLayout = function () { 54709 var b = this._getItemsForLayout(this.items), 54710 c = this._getOption("horizontal"), 54711 d = c ? "y" : "x", 54712 e = c ? "height" : "width", 54713 f = c ? "rowHeight" : "columnWidth", 54714 g = c ? "innerHeight" : "innerWidth", 54715 h = this[f]; 54716 if ((h = h && h + this.gutter)) { 54717 this._getMeasurements(); 54718 var i = this[f] + this.gutter; 54719 b.forEach(function (a) { 54720 var b = Math.round(a.rect[d] / h); 54721 a.rect[d] = b * i; 54722 }); 54723 } else { 54724 var j = a(this.element)[g] + this.gutter, 54725 k = this.packer[e]; 54726 b.forEach(function (a) { 54727 a.rect[d] = (a.rect[d] / k) * j; 54728 }); 54729 } 54730 this.shiftLayout(); 54731 }), 54732 (j.itemDragStart = function (a) { 54733 if (this.isEnabled) { 54734 this.stamp(a); 54735 var b = this.getItem(a); 54736 b && (b.enablePlacing(), b.showDropPlaceholder(), this.dragItemCount++, this.updateShiftTargets(b)); 54737 } 54738 }), 54739 (j.updateShiftTargets = function (a) { 54740 this.shiftPacker.reset(), this._getBoundingRect(); 54741 var b = this._getOption("originLeft"), 54742 d = this._getOption("originTop"); 54743 this.stamps.forEach(function (a) { 54744 var e = this.getItem(a); 54745 if (!e || !e.isPlacing) { 54746 var f = this._getElementOffset(a), 54747 g = new c({ x: b ? f.left : f.right, y: d ? f.top : f.bottom }); 54748 this._setRectSize(a, g), this.shiftPacker.placed(g); 54749 } 54750 }, this); 54751 var e = this._getOption("horizontal"), 54752 f = e ? "rowHeight" : "columnWidth", 54753 g = e ? "height" : "width"; 54754 (this.shiftTargetKeys = []), (this.shiftTargets = []); 54755 var h, 54756 i = this[f]; 54757 if ((i = i && i + this.gutter)) { 54758 var j = Math.ceil(a.rect[g] / i), 54759 k = Math.floor((this.shiftPacker[g] + this.gutter) / i); 54760 h = (k - j) * i; 54761 for (var l = 0; k > l; l++) this._addShiftTarget(l * i, 0, h); 54762 } else (h = this.shiftPacker[g] + this.gutter - a.rect[g]), this._addShiftTarget(0, 0, h); 54763 var m = this._getItemsForLayout(this.items), 54764 n = this._getPackMethod(); 54765 m.forEach(function (a) { 54766 var b = a.rect; 54767 this._setRectSize(a.element, b), this.shiftPacker[n](b), this._addShiftTarget(b.x, b.y, h); 54768 var c = e ? b.x + b.width : b.x, 54769 d = e ? b.y : b.y + b.height; 54770 if ((this._addShiftTarget(c, d, h), i)) 54771 for (var f = Math.round(b[g] / i), j = 1; f > j; j++) { 54772 var k = e ? c : b.x + i * j, 54773 l = e ? b.y + i * j : d; 54774 this._addShiftTarget(k, l, h); 54775 } 54776 }, this); 54777 }), 54778 (j._addShiftTarget = function (a, b, c) { 54779 var d = this._getOption("horizontal") ? b : a; 54780 if (!(0 !== d && d > c)) { 54781 var e = a + "," + b, 54782 f = -1 != this.shiftTargetKeys.indexOf(e); 54783 f || (this.shiftTargetKeys.push(e), this.shiftTargets.push({ x: a, y: b })); 54784 } 54785 }), 54786 (j.shift = function (a, b, c) { 54787 var d, 54788 e = 1 / 0, 54789 f = { x: b, y: c };
54790 this.shiftTargets.forEach(function (a) { 54791 var b = h(a, f); 54792 e > b && ((d = a), (e = b)); 54793 }), 54794 (a.rect.x = d.x), 54795 (a.rect.y = d.y); 54796 }); 54797 var k = 120; 54798 (j.itemDragMove = function (a, b, c) { 54799 function d() { 54800 f.shift(e, b, c), e.positionDropPlaceholder(), f.layout(); 54801 } 54802 var e = this.isEnabled && this.getItem(a); 54803 if (e) { 54804 (b -= this.size.paddingLeft), (c -= this.size.paddingTop); 54805 var f = this, 54806 g = new Date(); 54807 this._itemDragTime && g - this._itemDragTime < k ? (clearTimeout(this.dragTimeout), (this.dragTimeout = setTimeout(d, k))) : (d(), (this._itemDragTime = g)); 54808 } 54809 }), 54810 (j.itemDragEnd = function (a) { 54811 function b() { 54812 d++, 2 == d && (c.element.classList.remove("is-positioning-post-drag"), c.hideDropPlaceholder(), e.dispatchEvent("dragItemPositioned", null, [c])); 54813 } 54814 var c = this.isEnabled && this.getItem(a); 54815 if (c) { 54816 clearTimeout(this.dragTimeout), c.element.classList.add("is-positioning-post-drag"); 54817 var d = 0, 54818 e = this; 54819 c.once("layout", b), 54820 this.once("layoutComplete", b), 54821 c.moveTo(c.rect.x, c.rect.y), 54822 this.layout(), 54823 (this.dragItemCount = Math.max(0, this.dragItemCount - 1)), 54824 this.sortItemsByPosition(), 54825 c.disablePlacing(), 54826 this.unstamp(c.element); 54827 } 54828 }), 54829 (j.bindDraggabillyEvents = function (a) { 54830 this._bindDraggabillyEvents(a, "on"); 54831 }), 54832 (j.unbindDraggabillyEvents = function (a) { 54833 this._bindDraggabillyEvents(a, "off"); 54834 }), 54835 (j._bindDraggabillyEvents = function (a, b) { 54836 var c = this.handleDraggabilly; 54837 a[b]("dragStart", c.dragStart), a[b]("dragMove", c.dragMove), a[b]("dragEnd", c.dragEnd); 54838 }), 54839 (j.bindUIDraggableEvents = function (a) { 54840 this._bindUIDraggableEvents(a, "on"); 54841 }), 54842 (j.unbindUIDraggableEvents = function (a) { 54843 this._bindUIDraggableEvents(a, "off"); 54844 }), 54845 (j._bindUIDraggableEvents = function (a, b) { 54846 var c = this.handleUIDraggable; 54847 a[b]("dragstart", c.start)[b]("drag", c.drag)[b]("dragstop", c.stop); 54848 }); 54849 var l = j.destroy; 54850 return ( 54851 (j.destroy = function () { 54852 l.apply(this, arguments), (this.isEnabled = !1); 54853 }), 54854 (i.Rect = c), 54855 (i.Packer = d), 54856 i 54857 ); 54858 }), 54859 (function (a, b) { 54860 "function" == typeof define && define.amd 54861 ? define(["isotope-layout/js/layout-mode", "packery/js/packery"], b) 54862 : "object" == typeof module && module.exports 54863 ? (module.exports = b(require("isotope-layout/js/layout-mode"), require("packery"))) 54864 : b(a.Isotope.LayoutMode, a.Packery); 54865 })(window, function (a, b) { 54866 var c = a.create("packery"), 54867 d = c.prototype, 54868 e = { _getElementOffset: !0, _getMeasurement: !0 }; 54869 for (var f in b.prototype) e[f] || (d[f] = b.prototype[f]); 54870 var g = d._resetLayout; 54871 d._resetLayout = function () { 54872 (this.packer = this.packer || new b.Packer()), (this.shiftPacker = this.shiftPacker || new b.Packer()), g.apply(this, arguments); 54873 }; 54874 var h = d._getItemLayoutPosition; 54875 d._getItemLayoutPosition = function (a) { 54876 return (a.rect = a.rect || new b.Rect()), h.call(this, a); 54877 }; 54878 var i = d.needsResizeLayout; 54879 d.needsResizeLayout = function () { 54880 return this._getOption("horizontal") ? this.needsVerticalResizeLayout() : i.call(this); 54881 }; 54882 var j = d._getOption; 54883 return ( 54884 (d._getOption = function (a) { 54885 return "horizontal" == a ? (void 0 !== this.options.isHorizontal ? this.options.isHorizontal : this.options.horizontal) : j.apply(this.isotope, arguments); 54886 }), 54887 c 54888 ); 54889 }); 54890var FCL_IR_JSON = "https://www.frasersproperty.com/content/dam/frasersproperty/feature/project/fcl-corporate/data/investor-relations.json"; 54891var FCL_API_SEARCH = ".getsearchresults.json"; 54892var FCL_BOD_PORTFOLIO = "https://www.frasersproperty.com/api/BoardofDirector/getmoreproperties"; 54893var FCL_API_PORTFOLIO = $("#propertyEndpoint").val() + ".getmorepropertiesglobal.json"; 54894var FCL_API_BLOG = "https://www.frasersproperty.com/content/dam/frasersproperty/feature/project/fcl-corporate/data/GetMoreBlogs"; 54895var FCL_EVENTS_JSON = "https://www.frasersproperty.com/content/dam/frasersproperty/feature/project/fcl-corporate/data/events.json"; 54896var FCL_API_AWARDS = "/content/frasersproperty.frasersawards.json"; 54897var FCL_GMAP_KEY = "AIzaSyDF7fSOG-v3yJoUt6o3Oa78PjXGGTAWKUc"; 54898var FCL_CAREERS = "/content/frasersproperty.careers.json"; 54899var FB_APP_ID = "164296924322205"; 54900var FCL_ASSETS = "/Assets/FCL Corporate/"; 54901var FCL_GALLERY = "https://www.frasersproperty.com/api/photos/getmorephotos?id=9FFF641C-EC4B-4
549011FA-85C4-1464356ACEFA"; 54902var FCL_RESIDENCES = "/content/frasersproperty.residences.json"; 54903var FCL_RESIDENCES_RIVIERE = "/content/frasersproperty.residences.json"; 54904var no_result_text = "Sorry, there are no matching results."; 54905var FCL_REITS_APIS = [ 54906 { title: "Frasers Centrepoint Trust", type: "fct", url: "https://fct.frasersproperty.com/includes/external_stock_quotes.html" }, 54907 { title: "Frasers Hospitality Trust", type: "fht", url: "https://fht.frasersproperty.com/includes/external_stock_quotes.html" }, 54908 { title: "Frasers Logistics & Commercial Trust", type: "flct", url: "https://flct.frasersproperty.com/includes/external_stock_quotes_sg.html" }, 54909]; 54910jQuery(document).ready(function () { 54911 (function ($) { 54912 var firstLoad = true; 54913 if ($(".hero-carousel").length > 0) { 54914 $(".hero-carousel").addClass("show-block"); 54915 } 54916 Utils.initClocks(); 54917 $(document).on("click", "#pageZoom .enlarge", function () { 54918 Utils.zoomPage(); 54919 $("#pageZoom li").removeClass("active"); 54920 $(this).closest("li").addClass("active"); 54921 }); 54922 $(document).on("click", "#pageZoom .default", function () { 54923 Utils.zoomPage("reduce"); 54924 $("#pageZoom li").removeClass("active"); 54925 $(this).closest("li").addClass("active"); 54926 }); 54927 var sliderImg = $(".location-img"); 54928 $(window).on("load", function () { 54929 if (sliderImg[0]) { 54930 var initPosition = (sliderImg.find("img").width() - $(window).width() + 100) / 2; 54931 sliderImg.scrollLeft(initPosition); 54932 } 54933 }); 54934 function initSubNavBar() { 54935 var $this = $(".phrase2-sub-menu"); 54936 if ($this[0]) { 54937 var subNavBar = $(".phrase2-sub-menu .scrolling-x"); 54938 setTimeout(function () { 54939 var _victim = subNavBar.find("li.active"); 54940 var initNavPosition = _victim.offset().left - 20; 54941 subNavBar.scrollLeft(initNavPosition); 54942 }, 100); 54943 var navOffset = $this.offset().top; 54944 var addSpacing = $this.outerHeight(); 54945 $(window).scroll(function () { 54946 if ($(this).scrollTop() > navOffset-50) { 54947 $this.find(".menu-wrapper").addClass("sticky"); 54948 $this.css("padding-top", addSpacing); 54949 } else { 54950 $this.find(".menu-wrapper").removeClass("sticky"); 54951 $this.css("padding-top", 0); 54952 } 54953 }); 54954 } 54955 } 54956 $(window).on('load', function () { 54957 initSubNavBar(); 54958 }); 54959 $(document).on("change", ".menu:not(.sortable):not(.new-customize) select[data-select-index]", function (e) { 54960 e.preventDefault(); 54961 if ($(this).val() !== "#") window.location = $(this).val(); 54962 return false; 54963 }); 54964 var currentHash = window.location.hash, 54965 offset = parseInt($("#header").height()) + parseInt($(".hero").height()); 54966 $(".menu.overlap-up:not(.no-sticky) a").click(function (e) { 54967 if ($(window).width() > 991) { 54968 var delay = setTimeout(function () { 54969 $("html, body").stop().animate({ scrollTop: offset }, 500, "swing"); 54970 currentHash = window.location.hash; 54971 clearTimeout(delay); 54972 }, 1); 54973 } 54974 }); 54975 function hashChange() { 54976 $("*[data-hash-hide]").removeClass("hidden"); 54977 $('*[data-hash-hide="' + window.location.hash + '"]').addClass("hidden"); 54978 if (window.location.hash && $(window.location.hash).length > 0) { 54979 if ($(".tab-content").length > 0) { 54980 $(".tab-content").removeClass("show-block"); 54981 $(window.location.hash).addClass("show-block"); 54982 $("li.tab, li.tab li").removeClass("active"); 54983 var $li = $('li.tab a[href="' + window.location.hash + '"]').closest("li"); 54984 $('li.tab a[href="' + window.location.hash + '"]') 54985 .closest(".caret") 54986 .find("> a span.tab-title") 54987 .text($li.find("a span.tab-title").text()); 54988 $('li.tab a[href="' + window.location.hash + '"]') 54989 .closest(".resicaret") 54990 .find("> a span.tab-title") 54991 .text($li.find("a span.tab-title").text()); 54992 $li.addClass("active"); 54993 if ($(".tab-content").find(".slick-slider").length > 0) { 54994 $(".tab-content").find(".slick-slider").slick("reinit"); 54995 } 54996 if ($(".arrange-items").length > 0) { 54997 var isMobile = $(window).width() <= 767 ? true : false;
54998 var $container = $(".arrange-items"); 54999 $(".arrange-items").isotope({ itemSelector: ".grid-item", percentPosition: true, masonry: { columnWidth: isMobile ? $container.width() / 2 : $container.width() / 3, gutter: 0 } }); 55000 } 55001 } 55002 } else { 55003 if ($(".tab-content").length > 0) { 55004 $(".tab-content").first().addClass("show-block"); 55005 } 55006 } 55007 if (window.location.hash == "#sgx") { 55008 $("html, body") 55009 .stop() 55010 .animate({ scrollTop: 1080 }, 500, "swing", function () { 55011 window.location.hash = "#sgx#new"; 55012 }); 55013 } 55014 if ($(".business-unit.tab-content").length > 0) { 55015 var $gmap = $('.business-unit.tab-content.show-block div[id^="gmap-"]'); 55016 if ($gmap.length > 0) { 55017 var map; 55018 var multiple; 55019 if ($gmap.length > 1) { 55020 multiple = true; 55021 maps = []; 55022 $.each($gmap, function (index, value) { 55023 map = $(this).attr("id").replace("gmap-", ""); 55024 maps.push(map); 55025 }); 55026 loadGmap(maps, multiple); 55027 } else { 55028 multiple = false; 55029 map = $gmap.attr("id").replace("gmap-", ""); 55030 loadGmap(map); 55031 } 55032 } 55033 } 55034 tableResponsive(); 55035 menuResponsive(); 55036 } 55037 function tableResponsive() { 55038 $("table.table:not(.table-label-value)").each(function () { 55039 var $table = $(this), 55040 $th = $(this).find("thead th"); 55041 $th.each(function (k, v) { 55042 var label = $(this).text(); 55043 $table.find("tbody tr").each(function () { 55044 $(this) 55045 .find("td") 55046 .each(function (i, ele) { 55047 if (k == i) { 55048 $(this).attr("data-label", label); 55049 } 55050 }); 55051 }); 55052 }); 55053 }); 55054 } 55055 function getHashFromUrl(url) { 55056 return url.split("#")[url.split("#").length - 1]; 55057 } 55058 transformDateInputs(); 55059 function menuResponsive(filterFor) { 55060 $(".menu").each(function () { 55061 $menu = $(this); 55062 $menu.find("select").remove(); 55063 $menu.find(".sub-nav a").click(function () { 55064 var $li = $(this).closest(".caret"); 55065 $li.addClass("no-hover"); 55066 var delay = setTimeout(function () { 55067 $li.removeClass("no-hover"); 55068 clearTimeout(delay); 55069 }, 500); 55070 }); 55071 $menu.find(".sub-nav a").click(function () { 55072 var $li = $(this).closest(".resicaret"); 55073 $li.addClass("no-hover"); 55074 var delay = setTimeout(function () { 55075 $li.removeClass("no-hover"); 55076 clearTimeout(delay); 55077 }, 500); 55078 }); 55079 var isTab = $menu.find(".sub-nav").length > 0 ? true : false, 55080 options = isTab ? [] : [[]], 55081 c = 0; 55082 $menu.find("ul.main > li").each(function (i, ele) { 55083 var $link = $(this).find("> a"), 55084 io = isTab ? i : 0, 55085 obj = { name: $link.find("span.tab-title").text(), href: $link.attr("href"), active: $(this).hasClass("active"), val: $link.attr("data-val") }; 55086 if (isTab) options[io] = []; 55087 options[io].push(obj); 55088 if (isTab) { 55089 $(this) 55090 .find("> .sub-nav > li") 55091 .each(function () { 55092 $(this).parent().attr("data-select-index", c); 55093 var $sublink = $(this).find("> a"), 55094 sublinkText = $(this).hasClass("child") ? "- " + $sublink.text() : $sublink.text(); 55095 var optionObj = { name: sublinkText, href: $sublink.attr("href"), active: $(this).hasClass("active"), val: $sublink.attr("data-val") }; 55096 if (!Utils.empty($sublink.data("show"))) { 55097 optionObj.show = $sublink.data("show"); 55098 } 55099 options[io].push(optionObj); 55100 }); 55101 c++; 55102 } 55103 }); 55104 $.each(options, function (i, arr) { 55105 var offset = i + 1; 55106 if (isTab || i == 0) { 55107 var hidden = $menu.find(".caret:nth-child(" + offset + ")").hasClass("hidden") ? ' class="hidden"' : ""; 55108 var towerhidden = $menu.find(".resicaret:nth-child(" + offset + ")").hasClass("hidden") ? ' class="hidden"' : ""; 55109 $menu.append('<select data-select-index="' + i + '"' + hidden + "></select>"); 55110 var $select = $menu.find('select[data-select-index="' + i + '"]'); 55111 } 55112 $.each(arr, function (k, v) { 55113 if (isTab) { 55114 if (k > 0) { 55115 var selected = v.active ? " selected" : ""; 55116 var val = typeof v.val !== "undefined" ? v.val : v.href; 55117 var show = ""; 55118 if (!Utils.empty(v.show)) { 55119 show = ' data-show="' + v.show + '"'; 55120 } 55121 $select.append('<option value="' + val + '"' + show + selected + ">" + v.name + "</option>"); 55122 } 55123 } else { 55124 if (k == 0) { 55125 var selected = v.active ? " selected" : ""; 55126 var val = typeof v.val !== "undefined" ? v.val : v.href; 55127 var show = ""; 55128 if (!Utils.empty(v.show)) { 55129 show = ' data-show="' + v.show + '"'; 55130 } 55131 $select.append('<option value="' + val + '"' + show + selected + ">" + v.name + "</option>"); 55132 } else { 55133 var selected = v.active ? " selected" : ""; 55134 var val = typeof v.val !== "undefined" ? v.val : v.href; 55135 var show = ""; 55136 if (!Utils.empty(v.show)) { 55137 show = ' data-show="' + v.show + '"'; 55138 } 55139 $select.append('<option value="' + val + '"' + show + selected + ">" + v.name + "</option>"); 55140 } 55141 } 55142 }); 55143 }); 55144 }); 55145 if (filterFor && filterFor.length > 0) { 55146 filterFor.find(".sub-nav li.active a").trigger("click"); 55147 } 55148 } 55149 $(window).hashchange(hashChange); 55150 hashChange(); 55151 if ($(".video-gallery").length > 0) { 55152 window.onYouTubeIframeAPIReady = function () { 55153 var $firstVid = jQuery(".video-gallery .item.slick-active a").first();
55154 if ($firstVid.attr("href").indexOf("youtu.be") !== -1) { 55155 YTPlayer($firstVid.attr("href")); 55156 } else { 55157 $firstVid.trigger("click"); 55158 } 55159 }; 55160 window.tag = document.createElement("script"); 55161 tag.src = "https://www.youtube.com/iframe_api"; 55162 window.firstScriptTag = document.getElementsByTagName("script")[0]; 55163 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 55164 window.player; 55165 window.player_b; 55166 window.stopVideo = function () { 55167 player.stopVideo(); 55168 }; 55169 window.getIdFromYtUrl = function (url) { 55170 return url.split("/")[url.split("/").length - 1]; 55171 }; 55172 function YTPlayer(url) { 55173 if (typeof player === "undefined") { 55174 player = new YT.Player("ytplayer", { videoId: getIdFromYtUrl(url), playerVars: { rel: 0 }, events: { allowfullscreen: true, frameborder: 0 } }); 55175 } else { 55176 player.loadVideoById(getIdFromYtUrl(url)); 55177 } 55178 } 55179 $(".video-gallery .item a").click(function (e) { 55180 e.preventDefault(); 55181 var videoTitle = $(this).find(".text-black").text(); 55182 var videoDescription = $(this).find(".text-default").text(); 55183 $(".vid-container video").remove(); 55184 if ($(this).attr("href").indexOf("youtu.be") !== -1) { 55185 $('*[id^="ytplayer"]').removeClass("hidden"); 55186 YTPlayer($(this).attr("href")); 55187 } else { 55188 $('*[id^="ytplayer"]').addClass("hidden"); 55189 $(".vid-container").append( 55190 [ 55191 '<video poster="' + $(this).data("poster") + '" width="100%" height="100%" controlsList="nodownload" controls autoplay>', 55192 '<source src="' + $(this).attr("href") + '" type="video/mp4">', 55193 '<img alt="' + $(this).attr("title") + '" src="' + $(this).data("poster") + '" width="100%" height="100%"/>', 55194 "</video>", 55195 ].join("") 55196 ); 55197 stopVideo(); 55198 } 55199 var $parent = $(this).closest(".item"); 55200 $(".video-info .row").find('[class^="title-"]').text(videoTitle); 55201 $(".video-info .row").find("p").text(videoDescription); 55202 $("html, body").stop().animate({ scrollTop: 220 }, 500, "swing"); 55203 }); 55204 $(document).on("click", ".video-popup", function () { 55205 $(".video-popup").addClass("hidden"); 55206 }); 55207 } 55208 if ($(".loader[data-load-ir]").length > 0) { 55209 if (window.location.hash == "#sgx") { 55210 $(".sortable.json-sort select").first().val("SGX announcement").change(); 55211 $('ul.main.library-filter > li > .sub-nav[data-select-index="0"] > li').removeClass("active"); 55212 $('ul.main.library-filter > li > .sub-nav[data-select-index="0"] a[data-val="SGX announcement"]').closest("li").addClass("active"); 55213 $("ul.main.library-filter > li:first-child > a > .tab-title").text("SGX announcements"); 55214 $("html, body") 55215 .stop() 55216 .animate({ scrollTop: 1080 }, 500, "swing", function () { 55217 window.location.hash = "#sgx#new"; 55218 }); 55219 } 55220 $(document).on("click", '[data-modal="sgx-modal"]', function () { 55221 $("#sgx-modal .modal-body .btn-white").addClass("btn-default").removeClass("btn-white").removeClass("min-size"); 55222 $("#sgx-modal .social-share").addClass("hidden"); 55223 $("#sgx-modal .modal-body .content").html($(this).find("textarea").val()); 55224 }); 55225 window.prResult = null; 55226 window.newsResult = null; 55227 function ajaxSGX(callback) { 55228 if (SGXPR.sgx.country == "sg") { 55229 callback(); 55230 return; 55231 } 55232 $.ajax({ 55233 url: SGXPR.sgx.url, 55234 dataType: "JSON", 55235 complete: function (response) { 55236 var r = response.responseJSON; 55237 if (!Utils.empty(r)) { 55238 $.each(r.sgx_announcement, function (k, v) { 55239 v.day = v.day.length == 1 ? "0" + v.day : v.day; 55240 v.month = v.month.length == 1 ? "0" + v.month : v.month; 55241 r.sgx_announcement[k].datetime = v.year + "-" + v.month + "-" + v.day; 55242 r.sgx_announcement[k].category = "SGX announcement"; 55243 }); 55244 newsResult = r.sgx_announcement; 55245 } 55246 callback(); 55247 }, 55248 }); 55249 } 55250 function renderNewsroom($elem) { 55251 if (prResult !== null) return; 55252 (prResult = []), (newsResult = []); 55253 var queue = []; 55254 var ajaxPR = function (callback) { 55255 if (SGXPR.pr.params.country == "reits") { 55256 $.ajax({ 55257 url: SGXPR.pr.url, 55258 dataType: "JSON", 55259 complete: function (response) { 55260 var r = response.responseJSON; 55261 if (!Utils.empty(r)) { 55262 $.each(r.press_releases, function (k, v) { 55263 v.day = v.day.length == 1 ? "0" + v.day : v.day; 55264 v.month = v.month.length == 1 ? "0" + v.month : v.month; 55265 r.press_releases[k].datetime = v.year + "-" + v.month + "-" + v.day; 55266 r.press_releases[k].category = "Press release"; 55267 }); 55268 prResult = r.press_releases; 55269 } 55270 callback(); 55271 }, 55272 }); 55273 } else { 55274 $.ajax({ 55275 url: SGXPR.pr.url, 55276 data: SGXPR.pr.params, 55277 complete: function (response) { 55278 var r = response.responseJSON; 55279 if (!Utils.empty(r)) { 55280 var rows = r.press_release.length > 12 ? JSON.parse(r.press_release) : []; 55281 $.each(rows, function (k, v) { 55282 v.year = v.year.length == 1 ? "0" + v.year : v.year; 55283 v.day = v.day.length == 1 ? "0" + v.day : v.day; 55284 v.month = v.month.length == 1 ? "0" + v.month : v.month; 55285 rows[k].datetime = v.year + "-" + v.month + "-" + v.day; 55286 rows[k].category = "Press release"; 55287 rows[k].bu = " | "; 55288 switch (v.country) { 55289 case "SG": 55290 case "sg": 55291 rows[k].bu += "Singapore"; 55292 break; 55293 case "AU": 55294 case "au": 55295 rows[k].bu += "Australia"; 55296 break; 55297 case "UK": 55298 case "uk": 55299 rows[k].bu += "United Kingdom"; 55300 break; 55301 case "EU": 55302 case "eu": 55303 rows[k].bu += "Europe"; 55304 break; 55305 case "TH": 55306 case "th": 55307 rows[k].bu += "Thailand"; 55308 break; 55309 case "VN": 55310 case "vn": 55311 rows[k].bu += "Vietnam"; 55312 break; 55313 case "CN": 55314 case "cn": 55315 rows[k].bu += "China"; 55316 break; 55317 default: 55318 rows[k].bu += v.country; 55319 break; 55320 } 55321 }); 55322 prResult = rows; 55323 } 55324 callback(); 55325 }, 55326 }); 55327 } 55328 }; 55329 ajaxPR(function () { 55330 ajaxSGX(function () { 55331 newsResult = newsResult.concat(prResult); 55332 newsResult.sort(function (a, b) { 55333 return new Date(b.datetime) - new Date(a.datetime); 55334 }); 55335 $elem.each(function () { 55336 var i = 0, 55337 type = "Press release", 55338 altType = $(this).closest("*[data-type]").attr("data-type"), 55339 linkTo = $(this).attr("data-url") || ""; 55340 if (typeof altType !== "undefined") type = altType; 55341 var html = ['<div class="row row-flex left pad-top-xs">']; 55342 filtered = []; 55343 $.each(newsResult, function (k, v) { 55344 if (v.category == type) filtered.push(v); 55345 }); 55346 $.each(newsResult, function (k, v) { 55347 if (i < 6) { 55348 if (typeof altType === "undefined" || (typeof altType !== "undefined" && v.category == type)) { 55349 var business_unit = !Utils.empty(v.bu) ? v.bu : ""; 55350 html = html.concat([ 55351 '<div class="col-sm-6 col-md-4">', 55352 '<div class="news-item">', 55353 '<a href="' + v.url + '">', 55354 '<p class="text-small text-grey">' + v.category + "</p>", 55355 '<h4 class="title-5 text-default">' + truncate(v.title, 80) + "</h4>", 55356 '<p class="text-small text-grey">' + moment(v.datetime).format("DD MMM YYYY") + business_unit + "</p>", 55357 "</a>", 55358 "</div>", 55359 "</div>", 55360 ]); 55361 i++; 55362 } 55363 } 55364 }); 55365 html = html.concat(["</div>", '<div class="text-center mar-top">', '<a href="' + linkTo + '" title="View more in newsroom" class="btn-default min-size">View more in newsroom</a>', "</div>"]); 55366 $(this).replaceWith(html.join("")); 55367 }); 55368 }); 55369 }); 55370 } 55371 function renderPublications($elem, data) { 55372 var type = "all", 55373 altType = $elem.closest(".inner-container").attr("data-type"), 55374 linkTo = $elem.attr("data-url") || ""; 55375 if (typeof altType !== "undefined") type = altType; 55376 var html = ['<div class="row row-flex left pad-top-xs">']; 55377 $.each(data.links, function (k, v) { 55378 if (type == "all" || v.category == type) { 55379 var yr = v.date.split(" ").pop(); 55380 html = html.concat([ 55381 '<div class="col-sm-6 col-md-4 show-block" data-sort-category="' + v.category + '" data-sort-yr="' + yr + '">', 55382 '<div class="item">', 55383 '<a href="javascript:;" data-modal="sgx-modal">', 55384 '<h4 class="title-5 text-default">' + v.title + "</h4>", 55385 '<p class="text-small text-grey">' + v.date + " | " + v.size + " " + v.type + "</p>", 55386 '<textarea class="hidden">' + v.html + "</textarea>", 55387 "</a>", 55388 "</div>", 55389 "</div>", 55390 ]); 55391 } 55392 }); 55393 html = html.concat(["</div>"]); 55394 checkNIFilter(".downloads", ["category", "yr"]); 55395 $elem.replaceWith(html.join("")); 55396 } 55397 function renderFinancialYears($elem, data) { 55398 var html = []; 55399 $.each(data.docs, function (k, doc) { 55400 html = html.concat(['<h4 class="title-4 line show-block" data-sort-yr="' + doc.year + '">' + doc.group + "</h4>", '<div class="row row-flex show-block" data-sort-yr="' + doc.year + '">']); 55401 var c = 1; 55402 $.each(doc.files, function (i, file) { 55403 html = html.concat([ 55404 '<div class="col-sm-4 show-block" data-sort-yr="' + doc.year + '">', 55405 '<a href="' + file.url + '" class="item">', 55406 '<h4 class="title-5">' + file.title + "</h4>", 55407 '<p class="text-small">' + file.date + " | " + file.type + " " + file.size + "</p>", 55408 "</a>", 55409 "</div>", 55410 ]); 55411 if (c == 3) { 55412 if (doc.files.length > i + 1) { 55413 html = html.concat(["</div>", '<div class="row row-flex show-block" data-sort-yr="' + doc.year + '">']); 55414 } 55415 c = 1; 55416 } else { 55417 c++; 55418 } 55419 }); 55420 html = html.concat(["</div>"]); 55421 }); 55422 html = html.concat(['<div class="text-center">', '<div class="inner-container no-result">Sorry, there are no matching results.</div>', "</div>"]); 55423 $elem.replaceWith(html.join("")); 55424 checkNIFilter(".downloads", ["yr"]); 55425 } 55426 function renderReits($elem, apis, index, html) { 55427 index = index || 0; 55428 html = html || []; 55429 if (index == 0) html = html.concat(['<div class="row row-flex center-stock">']); 55430 api = apis[index]; 55431 $.ajax({ 55432 url: api.url, 55433 data: {}, 55434 dataType: "JSON", 55435 complete: function (response) { 55436 if (response.status == 200 && !Utils.empty(response.responseJSON)) { 55437 $(".loader[data-load-ir]").each(function () { 55438 $(this).parent().removeClass("loading"); 55439 }); 55440 if (response.responseJSON.stock_quote.length > 1) { 55441
55441 var stockOne = response.responseJSON.stock_quote[0]; 55442 var stockTwo = response.responseJSON.stock_quote[1]; 55443 html = html.concat([ 55444 '<div class="col-sm-8 col-sm-offset-2"><a href="javascript:;" class="info stock grey">', 55445 '<p class="date">' + api.title + "</p>", 55446 '<div class="inner-info">', 55447 '<div class="col">', 55448 '<h5 class="title-5"> <span style="text-transform:uppercase;">' + api.type + "</span> | " + stockOne.symbol + "</h5>", 55449 '<h4 class="title-4 ' + stockOne.changeTrend + '">S$' + stockOne.last + '<span class="text-default">' + stockOne.change + "</span></h4>", 55450 '<p class="text-small"> As of ' + 55451 moment(stockOne.lastTradeYear + "-" + stockOne.lastTradeMonth + "-" + stockOne.lastTradeDay + "T" + stockOne.lastTradeHour + ":" + stockOne.lastTradeMin + ":00").format("DD MMM YYYY hh:mm a") + 55452 "</p>", 55453 "</div>", 55454 '<div class="col">', 55455 '<h5 class="title-5"> <span style="text-transform:uppercase;">' + api.type + "</span> | " + stockTwo.symbol + "</h5>", 55456 '<h4 class="title-4 ' + stockTwo.changeTrend + '">A$' + stockTwo.last + '<span class="text-default">' + stockTwo.change + "</span></h4>", 55457 '<p class="text-small"> As of ' + 55458 moment 55459 .tz(stockTwo.lastTradeYear + "-" + stockTwo.lastTradeMonth + "-" + stockTwo.lastTradeDay + "T" + stockTwo.lastTradeHour + ":" + stockTwo.lastTradeMin + ":00", "Australia/Sydney") 55460 .format("DD MMM YYYY hh:mm a") + 55461 "</p>", 55462 "</div>", 55463 "</div></a>", 55464 "</div>", 55465 ]); 55466 } else { 55467 var stockOne = response.responseJSON.stock_quote[0]; 55468 html = html.concat([ 55469 '<div class="col-sm-4"><a href="javascript:;" class="info stock grey">', 55470 '<div class="top-inner">', 55471 '<p class="date">' + api.title + "</p>", 55472 '<h5 class="title-5"> <span style="text-transform:uppercase;">' + api.type + "</span> | " + stockOne.symbol + "</h5>", 55473 "</div>", 55474 '<h4 class="title-4 ' + stockOne.changeTrend + '">S$' + stockOne.last + '<span class="text-default">' + stockOne.change + "</span></h4>", 55475 '<p class="text-small"> As of ' + 55476 moment(stockOne.lastTradeYear + "-" + stockOne.lastTradeMonth + "-" + stockOne.lastTradeDay + "T" + stockOne.lastTradeHour + ":" + stockOne.lastTradeMin + ":00").format("DD MMM YYYY hh:mm a") + 55477 "</p>", 55478 "</div>", 55479 ]); 55480 } 55481 } 55482 if (index == apis.length - 1) { 55483 html = html.concat(["</div>"]); 55484 $elem.replaceWith(html.join("")); 55485 } else { 55486 index++; 55487 renderReits($elem, apis, index, html); 55488 } 55489 }, 55490 }); 55491 }
55492 function renderStockInfo($elem, apis) { 55493 var index, api; 55494 $.each(apis, function (k, v) { 55495 if (v.type == $elem.data("type")) api = v.url; 55496 }); 55497 $.ajax({ 55498 url: api, 55499 data: {}, 55500 dataType: "JSON", 55501 complete: function (r) { 55502 var url = "javascript:;"; 55503 if (typeof $elem.attr("data-url") !== "undefined") url = $elem.attr("data-url"); 55504 if (r.status == 200 && !Utils.empty(r.responseJSON)) { 55505 var stockInfoLength = r.responseJSON.stock_quote.length; 55506 if (stockInfoLength == 1) { 55507 var data = r.responseJSON.stock_quote[0]; 55508 var html = [ 55509 '<p class="date">As of ' + 55510 moment(data.lastTradeYear + "-" + data.lastTradeMonth + "-" + data.lastTradeDay + "T" + data.lastTradeHour + ":" + data.lastTradeMin + ":00").format("DD MMM YYYY hh:mm a") + 55511 "</p>", 55512 '<h4 class="title-2 ' + data.changeTrend + '">' + data.last + " " + data.currency + "</h4>", 55513 "<table>", 55514 "<tbody>", 55515 "<tr>", 55516 "<td>Last done:</td>", 55517 "<td>S$" + data.last + "</td>", 55518 "</tr>", 55519 "<tr>", 55520 "<td>Volume('000):</td>", 55521 "<td>
55521" + data.volume + "</td>", 55522 "</tr>", 55523 "<tr>", 55524 "<td>Change:</td>", 55525 "<td>" + data.change + "(" + data.percent + ")</td>", 55526 "</tr>", 55527 "</tbody>", 55528 "</table>", 55529 '<a href="' + url + '" title="' + $elem.attr("data-more-text") + '" class="more">' + $elem.attr("data-more-text") + "</a>", 55530 ]; 55531 $elem.replaceWith(html.join("")); 55532 } else { 55533 var dataOne = r.responseJSON.stock_quote[0]; 55534 var dataTwo = r.responseJSON.stock_quote[1]; 55535 var html = [ 55536 '<div class="col">', 55537 '<div class="">', 55538 '<div class="row table-stock">', 55539 '<p class="date">As of ' + 55540 moment(dataOne.lastTradeYear + "-" + dataOne.lastTradeMonth + "-" + dataOne.lastTradeDay + "T" + dataOne.lastTradeHour + ":" + dataOne.lastTradeMin + ":00").format("DD MMM YYYY hh:mm a") + 55541 "</p>", 55542 '<div class="col-sm-4">', 55543 '<h4 class="title-4 ' + dataOne.changeTrend + '">' + dataOne.last + ' <span class="title-4">' + dataOne.currency + "</span></h4>", 55544 "</div>", 55545 '<div class="col-sm-8">', 55546 "<table>", 55547 "<tbody>", 55548 "<tr>", 55549 "<td>Last done:</td>", 55550 "<td>S$" + dataOne.last + "</td>", 55551 "</tr>", 55552 "<tr>", 55553 "<td>Volume('000):</td>", 55554 "<td>" + dataOne.volume + "</td>", 55555 "</tr>", 55556 "<tr>", 55557 "<td>Change:</td>", 55558 "<td>" + dataOne.change + "(" + dataOne.percent + ")</td>", 55559 "</tr>", 55560 "</tbody>", 55561 "</table>", 55562 "</div>", 55563 "</div>", 55564 '<div class="row flt-stock table-stock">', 55565 '<p class="date">As of ' + 55566 moment(dataTwo.lastTradeYear + "-" + dataTwo.lastTradeMonth + "-" + dataTwo.lastTradeDay + "T" + dataTwo.lastTradeHour + ":" + dataTwo.lastTradeMin + ":00").format("DD MMM YYYY hh:mm a") + 55567 "</p>", 55568 '<div class="col-sm-4">', 55569 '<h4 class="title-4 ' + dataTwo.changeTrend + '">' + dataTwo.last + ' <span class="title-4">' + dataTwo.currency + "</span></h4>", 55570 "</div>", 55571 '<div class="col-sm-8">', 55572 "<table>", 55573 "<tbody>", 55574 "<tr>", 55575 "<td>Last done:</td>", 55576 "<td>A$" + dataTwo.last + "</td>", 55577 "</tr>", 55578 "<tr>", 55579 "<td>Volume('000):</td>", 55580 "<td>" + dataTwo.volume + "</td>", 55581 "</tr>", 55582 "<tr>", 55583 "<td>Change:</td>", 55584 "<td>" + dataTwo.change + "(" + dataTwo.percent + ")</td>", 55585 "</tr>", 55586 "</tbody>", 55587 "</table>", 55588 "</div>", 55589 "</div>", 55590 '<a href="' + url + '" title="' + $elem.attr("data-more-text") + '" class="more">' + $elem.attr("data-more-text") + "</a>", 55591 "</div>", 55592 "</div>", 55593 ]; 55594 $elem.replaceWith(html.join("")); 55595 } 55596 } 55597 }, 55598 }); 55599 } 55600 function checkNIFilter(wrapperClass, choices, hasViewMore) { 55601 hasViewMore = hasViewMore || false; 55602 wrapperClass = wrapperClass || ""; 55603 var filter = "", 55604 dataSorts = ""; 55605 $.each(choices, function (k, v) { 55606 var selectedVal = $('.sortable.json-sort select[data-select-index="' + k + '"]').val(); 55607 filter += selectedVal !== "all" ? "[data-sort-" + v + '="' + selectedVal + '"]' : ""; 55608 dataSorts += "[data-sort-" + v + "]"; 55609 }); 55610 var $elem = $(wrapperClass + " " + filter); 55611 $(wrapperClass + " .show-more").removeClass("hidden"); 55612 $(wrapperClass + " .no-result").addClass("hidden"); 55613 $(wrapperClass + " > .inner-container " + dataSorts) 55614 .removeClass("show-block") 55615 .removeClass("more-queue"); 55616 if (filter == "") $(wrapperClass + " > .inner-container " + dataSorts).addClass("show-block"); 55617 if (hasViewMore) { 55618 if ($elem.length > 0) { 55619 $elem.each(function (k, v) { 55620 if (k >= 6) { 55621 $(this).addClass("more-queue"); 55622 } else { 55623 $(this).addClass("show-block"); 55624 } 55625 }); 55626 if ($elem.length < 7) { 55627 $(wrapperClass + " .show-more").addClass("hidden"); 55628 } 55629 } else { 55630 $(wrapperClass + " .show-more").addClass("hidden"); 55631 $(wrapperClass + " .no-result").removeClass("hidden"); 55632 } 55633 } else { 55634 $elem.each(function (k, v) { 55635 $(this).addClass("show-block"); 55636 }); 55637 }
55638 var delay = setTimeout(function () { 55639 $(document).off("change", ".sortable.json-sort select"); 55640 $(document).on("change", ".sortable.json-sort select", function () { 55641 checkNIFilter(wrapperClass, choices, hasViewMore); 55642 }); 55643 clearTimeout(delay); 55644 }, 1); 55645 } 55646 $(document).on("click", ".newsroom-inside .show-more", function (e) { 55647 e.preventDefault(); 55648 $elem = $(".newsroom-inside > .inner-container .more-queue:not(.show-block)"); 55649 var count = $elem.length; 55650 $elem.each(function (k, v) { 55651 if (k < 6) { 55652 $(this).addClass("show-block"); 55653 count--; 55654 } 55655 }); 55656 if (count < 1) { 55657 $(this).addClass("hidden"); 55658 } 55659 }); 55660 $(".loader[data-load-ir]").each(function () { 55661 $(this).parent().addClass("loading"); 55662 }); 55663 if ($('.loader[data-load-ir="newsroom"]').length > 0) renderNewsroom($('.loader[data-load-ir="newsroom"]')); 55664 if ($('.loader[data-load-ir="reits.trust"]').length > 0) renderReits($('.loader[data-load-ir="reits.trust"]'), FCL_REITS_APIS); 55665 if ($('.loader[data-load-ir="stock_info.investor_relations"]').length > 0) renderStockInfo($('.loader[data-load-ir="stock_info.investor_relations"]'), FCL_REITS_APIS); 55666 $.ajax({ 55667 url: FCL_IR_JSON, 55668 data: {}, 55669 complete: function (response) { 55670 var r = response.responseJSON; 55671 $(".loader[data-load-ir]").each(function () { 55672 var ir_key = $(this).data("load-ir"), 55673 $layer = $(this), 55674 $loader = $layer.find(".icon-loader"); 55675 $(this).parent().removeClass("loading"); 55676 switch (ir_key) { 55677 case "newsroom": 55678 break; 55679 case "newsroom-inside": 55680 break; 55681 case "financial_info.financial_results.financial_years": 55682 renderFinancialYears($layer, r["financial_info"]["financial_results"]["financial_years"]); 55683 $layer.addClass("hidden"); 55684 break; 55685 case "publications": 55686 renderPublications($layer, r["publications"]); 55687 $layer.addClass("hidden"); 55688 break; 55689 case "reits.trust": 55690 break; 55691 case "stock_info.investor_relations": 55692 break; 55693 } 55694 }); 55695 }, 55696 }); 55697 } 55698 $("[data-filter=residences]").on("selectmenuchange", function (event, ui) { 55699 if (!firstLoad) { 55700 var resType = $(this).val(); 55701 var bedRoomNo = $('[data-filter="bedrooms"] option:selected').val(); 55702 renderSelectbox(resType, bedRoomNo); 55703 } 55704 });
55705 function renderSelectbox(resType, bedRoomNo) { 55706 var _victim = []; 55707 $("[data-filter]").each(function () { 55708 _victim.push($(this)); 55709 }); 55710 if (!resType) { 55711 resType = "All"; 55712 } 55713 if (!bedRoomNo) { 55714 bedRoomNo = "All"; 55715 } 55716 var ls = {}; 55717 ls.render = renderOptions; 55718 var urlSiteURL = window.location.href; 55719 ls.api = FCL_RESIDENCES; 55720 $.ajax({ 55721 url: ls.api, 55722 dataType: "JSON", 55723 method: "get", 55724 complete: function (data) { 55725 ls.render(data.responseJSON, data.status, _victim, resType, bedRoomNo); 55726 }, 55727 error: function (data) { 55728 console.log(data); 55729 }, 55730 }); 55731 } 55732 var renderOptions = function (data, status, _victim, resType, bedRoomNo) { 55733 if (status !== 200) { 55734 var $item = '<option value="All" selected>All Type</option>'; 55735 return; 55736 } 55737 var datas = data.ResidencesTypes; 55738 var max = 0; 55739 var _resOpt = $('[data-filter="residences"]'); 55740 var _bedOpt = $('[data-filter="bedrooms"]'); 55741 if (firstLoad) { 55742 updateFirstLoadSelection(resType, bedRoomNo); 55743 } else { 55744 if (resType == "All") { 55745 _bedOpt.val(bedRoomNo).selectmenu("refresh").trigger("selectmenuselect"); 55746 } else { 55747 _bedOpt.selectmenu("refresh"); 55748 } 55749 _resOpt.val(resType).selectmenu("refresh").trigger("selectmenuselect"); 55750 } 55751 }; 55752 if ($(".phrase-two")[0] && !$("#residences-filter")[0]) { 55753 renderSelectbox(); 55754 firstLoad = false; 55755 $(".filter-container .buton-group").on("click", "a", function (e) { 55756 var _this = $(this).closest(".filter-container"); 55757 var rootUrl = location.protocol + "//" + location.host; 55758 var path = $(this).attr("data-url"); 55759 var resVal = _this.find("[data-filter=residences] option:selected").val(); 55760 var bedVal = _this.find("[data-filter=bedrooms] option:selected").val(); 55761 window.location.href = rootUrl + path + "?residences=" + resVal + "&bedrooms=" + bedVal; 55762 }); 55763 } 55764 $loadedSection = $(".loader[data-load-section]"); 55765 if ($loadedSection.length > 0) { 55766 var countRenderedPort = 0; 55767 var selectFilterData = [], 55768 subNavFilterData = [], 55769 keepAliveData = []; 55770 $(".sortable.api-sort .caret ul").each(function () { 55771 var _this = $(this), 55772 $temp = []; 55773 _this.find("li").each(function (i) { 55774 if (i > 0) { 55775 $val = $(this).find("a").data("val") || ""; 55776 $href = $(this).find("a").attr("href") || ""; 55777 $dataHide = $(this).find("a").data("hide") || ""; 55778 $dataShow = $(this).find("a").data("show") || ""; 55779 $temp.push({ val: $val, href: $href, dataHide: $dataHide, dataShow: $dataShow }); 55780 } 55781 }); 55782 subNavFilterData.push($temp); 55783 }); 55784 var renderPortfolio = function ($elem, altClass, data, append, statusCode, subNavFilterData, $liSelFor, $liSelForTarget, showOptions, $selectTarget, optionTarget) { 55785 var html = [], 55786 hide = ""; 55787 if (statusCode !== 200) { 55788 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">Sorry, an unexpected error occured, please try again or contact the admin.</div>', "</div>"]; 55789 $(html.join("")).insertAfter($elem); 55790 return; 55791 } 55792 if (!Utils.empty(data.PageItems)) { 55793 ls.pageIndex++; 55794 if (!append) { 55795 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container">']; 55796 } 55797 html = html.concat(['<div class="row row-flex left">']); 55798 $.each(data.PageItems, function (k, v) { 55799 countRenderedPort++; 55800 var url = (title = img = proptype = ""); 55801 if (!Utils.empty(v.UrlItem)) { 55802 url = v.UrlItem; 55803 } 55804 if (!Utils.empty(v.SrcImage)) { 55805 img = v.SrcImage; 55806 } 55807 if (!Utils.empty(v.PropertyTitle)) { 55808 proptype = v.PropertyTitle; 55809 } 55810 html = html.concat([ 55811 '<div class="col-md-6">', 55812 '<a href="' + url + '" title="' + v.Title + '" class="portfolio-thumb">', 55813 '<div class="thumb-wrapper">', 55814 '<div style="background-image: url(\'' + img.replace("'","\\'") + '\');" class="thumb"></div>', 55815 "</div>", 55816 '<div class="info">', 55817 '<p class="category text-small">' + proptype + "</p>", 55818 '<h4 class="title-4">' + v.Title + "</h4>", 55819 '<div class="description">' + v.Content + "</div>", 55820 "</div>", 55821 "</a>", 55822 "</div>", 55823 ]); 55824 }); 55825 if (countRenderedPort < parseInt(data.TotalCount)) { 55826 var remaining = parseInt(data.TotalCount) - countRenderedPort; 55827 html = html.concat([ 55828 "</div>", 55829 '<div class="text-center mar-top ' + hide + '">', 55830 '<a href="javascript:;" title="View more" class="btn-primary min-size" data-next-index="' + ls.pageIndex + '">View more <span>(' + remaining + ")</span></a>", 55831 "</div>", 55832 ]); 55833 } else { 55834 ls.pageIndex = 1; 55835 } 55836 if (!append) { 55837 html = html.concat(["</div>", "</div>"]); 55838 } 55839 } else { 55840 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">Sorry, there are no matching results.</div>', "</div>"]; 55841 } 55842 renderFilterOption(subNavFilterData, $liSelFor, $liSelForTarget, showOptions, $selectTarget, optionTarget); 55843 $(html.join("")).insertAfter($elem); 55844 }; 55845 var renderBODPortfolio = function ($elem, data, append, statusCode) { 55846 var html = [], 55847 hide = ""; 55848 if (statusCode !== 200) { 55849 html = ['<div class="all-bod-location">', '<div class="inner-container no-result">
55849Sorry, an unexpected error occured, please try again or contact the admin.</div>', "</div>"]; 55850 $(html.join("")).insertAfter($elem); 55851 return; 55852 } 55853 if (!Utils.empty(data.PageItems)) { 55854 ls.pageIndex++; 55855 if (!append) { 55856 html = ['<div class="all-bod-location">']; 55857 } 55858 html = html.concat(['<div class="row row-flex left">']); 55859 $.each(data.PageItems, function (k, v) { 55860 countRenderedPort++; 55861 var url = (title = img = proptype = ""); 55862 if (!Utils.empty(v.WebsiteURL)) { 55863 url = v.WebsiteURL.Url; 55864 } 55865 if (!Utils.empty(v.ThumbnailImage)) { 55866 img = v.ThumbnailImage.Src; 55867 } 55868 if (!Utils.empty(v.PropertyType)) { 55869 proptype = v.PropertyType.Title; 55870 } 55871 html = html.concat([ 55872 '<div class="col-xs-12 col-md-6">', 55873 '<a href="' + url + '" title="' + v.Title + '" class="portfolio-thumb">', 55874 '<div class="thumb-wrapper">', 55875 '<div style="background-image: url(\'' + img.replace("'","\\'") + '\');" class="thumb"></div>', 55876 "</div>", 55877 '<div class="info">', 55878 '<p class="category text-small">' + proptype + "</p>", 55879 '<h4 class="title-4">' + v.Title + "</h4>", 55880 '<div class="description">' + v.Content + "</div>", 55881 "</div>", 55882 "</a>", 55883 "</div>", 55884 ]); 55885 }); 55886 if (countRenderedPort < parseInt(data.TotalCount)) { 55887 var remaining = parseInt(data.TotalCount) - countRenderedPort; 55888 html = html.concat([ 55889 "</div>", 55890 '<div class="text-center mar-top ' + hide + '">', 55891 '<a href="javascript:;" title="View more" class="btn-primary min-size" data-next-index="' + ls.pageIndex + '">View more <span>(' + remaining + ")</span></a>", 55892 "</div>", 55893 ]); 55894 } else { 55895 ls.pageIndex = 1; 55896 } 55897 if (!append) { 55898 html = html.concat(["</div>"]); 55899 } 55900 } else { 55901 html = ['<div class="all-bod-location">', '<div class="inner-container no-result">Sorry, there are no matching results.</div>', "</div>"]; 55902 } 55903 $(html.join("")).appendTo($elem); 55904 }; 55905 var countResidences = 0; 55906 var deepClone = function (obj) { 55907 var jsonStr = JSON.stringify(obj); 55908 return JSON.parse(jsonStr); 55909 }; 55910 var renderResidences = function ($elem, data, statusCode, filterType, $filterApplyElem) { 55911 var html = [], 55912 hide = ""; 55913 if (statusCode !== 200) { 55914 html = ['<div class="pad-top">', '<div class="inner-container no-result">' + $("#errorMsg").val() + "</div>", "</div>"]; 55915 $(html.join("")).appendTo($elem); 55916 return; 55917 } 55918 var datas = data.ResidencesTypes; 55919 if (filterType) { 55920 var newDatas = []; 55921 var resType = []; 55922 var resValue = []; 55923 var _temp = []; 55924 for (var j = 0; j < filterType.length; j++) { 55925 resType.push(filterType[j].Type); 55926 resValue.push(filterType[j].Value); 55927 } 55928 for (var i = 0; i < datas.length; i++) { 55929 var itemCount = 0; 55930 if (datas[i].TotalCount > 0) { 55931 switch (resValue[0]) { 55932 case "All": 55933 switch (resValue[1]) { 55934 case "All": 55935 newDatas = datas; 55936 break; 55937 default: 55938 var tempDatas = []; 55939 newDatas.push(deepClone(datas[i])); 55940 _temp.push(deepClone(datas[i])); 55941 newDatas[newDatas.length - 1].ItemProperties.splice(0); 55942 $.each(_temp[_temp.length - 1].ItemProperties, function (k, v) { 55943 itemCount++; 55944 if (parseInt(v.BedroomType.Code) == parseInt(resValue[1])) { 55945 tempDatas.push(v); 55946 newDatas[newDatas.length - 1].ItemProperties = newDatas[newDatas.length - 1].ItemProperties.concat(tempDatas); 55947 newDatas[newDatas.length - 1].TotalCount = itemCount; 55948 tempDatas = []; 55949 } else { 55950 itemCount--; 55951 newDatas[newDatas.length - 1].ItemProperties.splice(k, 1); 55952 newDatas[newDatas.length - 1].TotalCount = itemCount; 55953 } 55954 }); 55955 } 55956 break; 55957 default: 55958 switch (resValue[1]) { 55959 case "All": 55960 var a = 0; 55961 $.each(datas[i].ItemProperties, function (k, v) { 55962 if (v.ResidenceType.Name == resValue[0]) { 55963 newDatas.push(datas[i]); 55964 return false;
55965 } 55966 }); 55967 break; 55968 default: 55969 var tempDatas = []; 55970 newDatas.push(deepClone(datas[i])); 55971 _temp.push(deepClone(datas[i])); 55972 newDatas[newDatas.length - 1].ItemProperties.splice(0); 55973 $.each(_temp[_temp.length - 1].ItemProperties, function (k, v) { 55974 itemCount++; 55975 if (v.ResidenceType.Name == resValue[0] && parseInt(v.BedroomType.Code) == parseInt(resValue[1])) { 55976 tempDatas.push(v); 55977 newDatas[newDatas.length - 1].ItemProperties = newDatas[newDatas.length - 1].ItemProperties.concat(tempDatas); 55978 newDatas[newDatas.length - 1].TotalCount = itemCount; 55979 tempDatas = []; 55980 } else { 55981 itemCount--; 55982 newDatas[newDatas.length - 1].ItemProperties.splice(k, 1); 55983 newDatas[newDatas.length - 1].TotalCount = itemCount; 55984 } 55985 }); 55986 } 55987 } 55988 } 55989 } 55990 datas = newDatas; 55991 } 55992 if ($filterApplyElem) { 55993 let filteredResults = datas.reduce((acc, obj) => acc + obj.TotalCount, 0); 55994 if (typeof window.residenceListFilterTrack === "function") { 55995 window.residenceListFilterTrack($filterApplyElem, filteredResults); 55996 } 55997 } 55998 var _itemCount = 0; 55999 for (var i = 0; i < datas.length; i++) { 56000 _itemCount += parseInt(datas[i].TotalCount); 56001 var style2 = false;
56002 if (datas[i].Name == "Penthouse") { 56003 style2 = true; 56004 } 56005 if (datas[i].TotalCount > 0) { 56006 var urlSiteURL = window.location.href; 56007 var linecolor = '<h2 class="title-2 title-large ' + $("#titleStroke").val() + ' center">'; 56008 html = html.concat([ 56009 '<div class="residence-suites" data-count="' + datas[i].TotalCount + '" id="filter-count">', 56010 linecolor + datas[i].Name + "</h2>", 56011 '<div class="row mar-bot">', 56012 '<div class="col-md-8 col-md-offset-2 col-xs-12">', 56013 '<div class="ir-inner full text-center">', 56014 "<p>" + datas[i].Description + "</p>", 56015 "</div>", 56016 "</div>", 56017 "</div>", 56018 '<div class="row row-flex left">', 56019 ]); 56020 } 56021 if (!Utils.empty(datas[i].ItemProperties)) { 56022 ls.pageIndex++; 56023 $.each(datas[i].ItemProperties, function (k, v) { 56024 countResidences++; 56025 var url = (title = img = IsSoldOut = ""); 56026 var descr; 56027 if (typeof v.Content === "undefined") { 56028 descr = ""; 56029 } else { 56030 descr = v.Content; 56031 } 56032 var target = "_self"; 56033 if (!Utils.empty(v.DetailLink)) { 56034 url = v.DetailLink.Url; 56035 target = v.DetailLink.Target; 56036 } 56037 if (!Utils.empty(v.ThumbnailImage)) { 56038 img = v.ThumbnailImage.Src; 56039 } 56040 if (v.IsSoldOut == true) { 56041 IsSoldOut = '<span class="fully-sold">Fully sold</span>'; 56042 } 56043 if (!style2) { 56044 html = html.concat([ 56045 '<div class="col-md-6 col-sm-12">', 56046 '<a target ="' + target + '" href="' + url + '" title="' + v.Title + '" class="portfolio-thumb suites info_res" data-component-name="residence list" data-component-item-position="'+(k+1)+'" data-header-count= " ' + i + ' " >', 56047 '<div class="thumb-wrapper">', 56048 '<div style="background-image: url(\'' + img.replace("'","\\'") + '\');" class="thumb"></div>', 56049 "</div>", 56050 '<div class="info">', 56051 '<h4 class="title-4">' + v.Title + "</h4>", 56052 '<div class="suites-info">', 56053 "<p>" + v.BedroomType.Title + "</p>" + descr + IsSoldOut + "</div>", 56054 '<p class="descrition">' + v.Viewmore + "</p>", 56055 "</div>", 56056 "</a>", 56057 "</div>", 56058 ]); 56059 } else { 56060 html = html.concat([ 56061 '<div class="col-sm-12 col-xs-12">', 56062 '<a target ="' + target + '" href="' + url + '" title="' + v.Title + '" class="portfolio-thumb suites penthouse-thumb">', 56063 '<div class="thumb-wrapper">', 56064 '<div style="background-image: url(\'' + img.replace("'","\\'") + '\');" class="thumb"></div>', 56065 "</div>", 56066 '<div class="info">', 56067 '<h4 class="title-4">' + v.Title + "</h4>", 56068 '<div class="suites-info">', 56069 "<p>" + v.BedroomType.Title + "</p>" + descr + IsSoldOut + "</div>", 56070 '<p class="description">' + v.Viewmore + "</p>", 56071 "</div>", 56072 "</a>", 56073 "</div>", 56074 ]); 56075 } 56076 }); 56077 html = html.concat(["</div>", "</div>"]); 56078 if (countResidences < parseInt(datas[i].TotalCount)) { 56079 var remaining = parseInt(datas[i].TotalCount) - countResidences; 56080 html = html.concat([ 56081 '<div class="text-center mar-top ' + hide + '">', 56082 '<a href="javascript:;" title="View more" class="btn-blue min-size" data-next-index="' + ls.pageIndex + '">View more <span>(' + remaining + ")</span></a>", 56083 "</div>", 56084 ]); 56085 } else { 56086 ls.pageIndex = 1; 56087 } 56088 } 56089 } 56090 if (_itemCount < 1) { 56091 html = ['<div class="pad-top">', '<div class="inner-container no-result">' + $("#errorMsg").val() + "</div>", "</div>"]; 56092 } 56093 $(html.join("")).appendTo($elem); 56094 firstLoad = false;
56095 }; 56096 var countCareer = 0; 56097 var renderCareer = function ($elem, altClass, data, append, statusCode) { 56098 window.listCount = data.TotalCount; 56099 var html = [], 56100 hide = ""; 56101 if (statusCode !== 200) { 56102 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">Sorry, an unexpected error occured, please try again or contact the admin.</div>', "</div>"]; 56103 $(html.join("")).insertAfter($elem); 56104 return; 56105 } 56106 if (!Utils.empty(data.PageItems)) { 56107 if (countCareer == 0) ls.pageIndex = 1; 56108 ls.pageIndex++; 56109 if (!append) { 56110 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container">', '<h2 class="title-2 center pad-bot hide--mobile mar-top--10">Job openings</h2>', '<h2 class="title-11 center pad-bot mar-top--30 hide--desktop">Job openings</h2>','<div class="bor-top mar-bot--30 hide--desktop"></div>','<div data-accordion="" class="job-opening">']; 56111 } 56112 html = html.concat(['<div class="row" style="margin-bottom:25px">']); 56113 $.each(data.PageItems, function (k, v) { 56114 var rel = $('#newitemtab1').val() === '_blank' ? 'noreferer,noopener' : ''; 56115 countCareer++; 56116 var loc; 56117 if (typeof v.Location === "undefined") { 56118 loc = ""; 56119 } else { 56120 loc = v.Location; 56121 } 56122 var cc; 56123 if (typeof v.CC === "undefined") { 56124 cc = ""; 56125 } else { 56126 cc = v.CC; 56127 } 56128 html = html.concat([ 56129 '<div class="collapse-item left">', 56130 '<div class="acr collapse-header" data-JobOpeningExpansion-track="Job opening expansion" data-link-name = " ' + v.Name + ' " data-link-location = "Accordion expand" data-component-name="Job openings" data-component-header="Job openings" data-component-item-title=" ' + v.Name + ' " data-job-title=" ' + v.Name + ' " data-Job-bu=" '+ v.BusinessUnit.Title +' " data-job-division=" '+ v.Division.Title +' " data-job-type=" '+ v.Worktype.Title +' ">', 56131 '<h5 class="title-5 clr--black">' + v.Name + "</h5>", 56132 '<div class="job-short-desc">', 56133 '<div class="arun" style="overflow:hidden;">', 56134 '<div class="col-sm-3"><p class="text-small clr--scdry-mushroom">Business unit</p><p class="title-7 clr--black mar-top-xxs">' + v.BusinessUnit.Title + "</p></div>", 56135 '<div class="col-sm-3"><p class="text-small clr--scdry-mushroom">Division</p><p class="title-7 clr--black mar-top-xxs">' + v.Division.Title + "</p></div>", 56136 '<div class="col-sm-3"><p class="text-small clr--scdry-mushroom">Closes</p><p class="title-7 clr--black mar-top-xxs">' + moment(v.ClosingDate).format("DD MMM YYYY") + "</p></div>", 56137 '<div class="col-sm-3"><p class="text-small clr--scdry-mushroom">Work type</p><p class="title-7 clr--black mar-top-xxs">' + v.Worktype.Title + "</p></div>", 56138 "</div>", 56139 "</div>", 56140 "</div>", 56141 '<div class="collapse-inner">', 56142 '<div class="job-header">', 56143 '<dl><dt class="clr--black">Work type:</dt><dd class="clr--black">' + v.Worktype.Title + "</dd></dl>", 56144 '<dl><dt class="clr--black">Location:</dt><dd class="clr--black">' + loc + "</dd></dl>", 56145 '<dl><dt class="clr--black">Division:</dt><dd class="clr--black">' + v.Division.Title + "</dd></dl>", 56146 "</div>", 56147 v.Description, 56148 v.Requirements, 56149 '<div class="share-job-box">', 56150 '<a href="mailto:' + 56151 v.To + 56152 "?cc= " + 56153 cc + 56154 "&subject=Career Application â " + 56155 v.Name + 56156 " â " + 56157 v.BusinessUnit.Title + 56158 " â " + 56159 v.Division.Title +
56160 ' "title="Apply now" class="btn-primary jobapply" data-JobOpeningApplication-track="Job opening application" data-link-name = " '+ v.ApplyNow.Text +' " data-link-location = "button" data-component-name="Careers list" data-component-header="Job openings" data-component-item-position="1" data-component-item-title=" ' + v.Name + ' " data-job-title=" ' + v.Name + ' " data-Job-bu=" '+ v.BusinessUnit.Title +' " data-job-division=" '+ v.Division.Title +' " data-job-type=" '+ v.Worktype.Title +' ">' + 56161 v.ApplyNow.Text + 56162 "</a>", 56163 '<div class="share-job-link">', 56164 '<input type="text" value="' + v.ShareJob.Url + '" id="' + v.ShareJob.TargetId + '">', 56165 '<div class="share-box hide">', 56166 '<p class="text-small">Link copied</p>', 56167 '</div>', 56168 '<a href="' + 56169 v.ShareJob.Url + 56170 '" title="' + 56171 v.ShareJob.Text + 56172 '" data-clipboard-action="copy" data-clipboard-target="#' + 56173 v.ShareJob.TargetId + 56174 '" class="title-7 underline" data-JobOpeningApplication-track="Job opening application" data-link-name = " '+ v.ShareJob.Text +' " data-link-location = "text" data-component-name="Careers list" data-component-header="Job openings" data-component-item-title=" ' + v.Name + ' " data-job-title=" ' + v.Name + ' " data-Job-bu=" '+ v.BusinessUnit.Title +' " data-job-division=" '+ v.Division.Title +' " data-job-type=" '+ v.Worktype.Title +' "><span class="mar--0">' + 56175 v.ShareJob.Text + 56176 "</span></a>", 56177 '</div>', 56178 "</div>", 56179 "</div>", 56180 "</div>", 56181 ]); 56182 }); 56183 if (countCareer < parseInt(data.TotalCount)) { 56184 var remaining = parseInt(data.TotalCount) - countCareer; 56185 html = html.concat([ 56186 "</div>", 56187 '<div class="text-center mar-top ' + hide + '">', 56188 '<a href="javascript:;" title="View more" class="btn-primary min-size" data-next-index="' + ls.pageIndex + '">' + $("#showMore").val() + " <span>(" + remaining + ")</span></a>", 56189 "</div>", 56190 ]); 56191 } else { 56192 ls.pageIndex = 1; 56193 } 56194 if (!append) { 56195 html = html.concat(["</div>", "</div>", "</div>"]); 56196 } 56197 } else { 56198 if ($("span.tab-title:contains('Frasers Hospitality')").length == 2) { 56199 html = [ 56200 '<div class="all-location pad-top' + altClass + '">', 56201 '<div class="inner-container no-result">' + 56202 $("#errorMsgHosp").val() + 56203 '<br><br><br><a href="' + 56204 $("#hospitalityCta").val() + 56205 '" target="_blank" title="' + 56206 $("#hospitalityLabel").val() + 56207 '" class="btn-primary min-size" rel="noreferer,noopener">' + 56208 $("#hospitalityLabel").val() + 56209 "</a></div>", 56210 "</div>", 56211 ]; 56212 } else if ($("span.tab-title:contains('Frasers Property Australia')").length == 2) { 56213 html = [ 56214 '<div class="all-location pad-top' + altClass + '">', 56215 '<div class="inner-container no-result">' + 56216 $("#errorMsgAus").val() + 56217 '<br><br><br><a href="' + 56218 $("#australiaCta").val() + 56219 '" target="_blank" title="' + 56220 $("#australiaLabel").val() + 56221 '" class="btn-primary min-size" rel="noreferer,noopener">' + 56222 $("#australiaLabel").val() + 56223 "</a></div>", 56224 "</div>", 56225 ]; 56226 } else if ($("span.tab-title:contains('Australia')").length == 3) { 56227 html = [ 56228 '<div class="all-location pad-top' + altClass + '">', 56229 '<div class="inner-container no-result">' + 56230 $("#errorMsgAus").val() + 56231 '<br><br><br><a href="' + 56232 $("#australiaCta").val() + 56233 '" target="_blank" title="' + 56234 $("#australiaLabel").val() + 56235 '" class="btn-primary min-size" rel="noreferer,noopener">' + 56236 $("#australiaLabel").val() + 56237 "</a></div>", 56238 "</div>", 56239 ]; 56240 }
56240 else if ($("span.tab-title:contains('Hospitality')").length == 3) { 56241 html = [ 56242 '<div class="all-location pad-top' + altClass + '">', 56243 '<div class="inner-container no-result">' + 56244 $("#errorMsgHosp").val() + 56245 '<br><br><br><a href="' + 56246 $("#hospitalityCta").val() + 56247 '" target="_blank" title="' + 56248 $("#hospitalityLabel").val() + 56249 '" class="btn-primary min-size" rel="noreferer,noopener">' + 56250 $("#hospitalityLabel").val() + 56251 "</a></div>", 56252 "</div>", 56253 ]; 56254 } else { 56255 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">' + $("#errorMsg").val() + "</div>", "</div>"]; 56256 } 56257 } 56258 $(html.join("")).insertAfter($elem); 56259 }; 56260 var countRenderedLib = 0; 56261 var renderLibrary = function ($elem, altClass, data, append, statusCode, subNavFilterData, $liSelFor, $liSelForTarget, showOptions, $selectTarget, optionTarget) { 56262 var html = [], 56263 hide = ""; 56264 if (statusCode !== 200) { 56265 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">Sorry, an unexpected error occured, please try again or contact the admin.</div>', "</div>"]; 56266 $(html.join("")).insertAfter($elem); 56267 return; 56268 } 56269 if (!Utils.empty(data.PageItems)) { 56270 ls.pageIndex++; 56271 if (!append) { 56272 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container">']; 56273 } 56274 html = html.concat(['<div class="row row-left">']); 56275 $.each(data.PageItems, function (k, v) { 56276 countRenderedLib++; 56277 var url = (title = ""); 56278 if (!Utils.empty(v.Link)) { 56279 url = v.Link.Url; 56280 title = v.Link.Title; 56281 } 56282 if (Utils.empty(v.BlogImage)) { 56283 v.BlogImage = {}; 56284 v.BlogImage.Src = "null"; 56285 } 56286 html = html.concat([ 56287 '<div class="col-md-4">', 56288 '<a href="' + url + '" title="' + v.Name + '" class="bloggish">', 56289 '<div class="thumb-wrapper">', 56290 '<div style="background-image: url(\'' + v.BlogImage.Src.replace("'","\\'") + '\');" class="thumb"></div>', 56291 "</div>", 56292 '<div class="info">', 56293 '<p class="category text-small">' + v.Categories.Name + "</p>", 56294 '<h4 class="title-5">' + v.Name + "</h4>", 56295 '<p class="description">' + v.BlogPostDescription + "</p>", 56296 '<p class="date">' + moment(v.CreatedDate).format("DD MMM YYYY") + "</p>", 56297 "</div>", 56298 "</a>", 56299 "</div>", 56300 ]); 56301 }); 56302 if (countRenderedLib < parseInt(data.TotalCount)) { 56303 var remaining = parseInt(data.TotalCount) - countRenderedLib; 56304 html = html.concat([ 56305 "</div>", 56306 '<div class="text-center mar-top ' + hide + '">', 56307 '<a href="javascript:;" title="View more" class="btn-primary min-size" data-next-index="' + ls.pageIndex + '">View more <span>(' + remaining + ")</span></a>", 56308 "</div>", 56309 ]); 56310 } else { 56311 ls.pageIndex = 1; 56312 } 56313 if (!append) { 56314 html = html.concat(["</div>", "</div>"]); 56315 } 56316 } else { 56317 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">Sorry, there are no matching results.</div>', "</div>"]; 56318 } 56319 renderFilterOption(subNavFilterData, $liSelFor, $liSelForTarget, showOptions, $selectTarget, optionTarget); 56320 $(html.join("")).insertAfter($elem); 56321 }; 56322 var countRenderedNews = 0; 56323 var renderNewsInner = function ($elem, altClass, data, append, statusCode) { 56324 var rows = data.press_release.length > 12 ? JSON.parse(data.press_release) : null; 56325 var html = [], 56326 hide = ""; 56327 if (statusCode !== 200) { 56328 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">
56328Sorry, an unexpected error occured, please try again or contact the admin.</div>', "</div>"]; 56329 $(html.join("")).insertAfter($elem); 56330 return; 56331 } 56332 if (!Utils.empty(rows)) { 56333 ls.pageIndex++; 56334 if (!append) { 56335 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container">']; 56336 } 56337 html = html.concat(['<div class="row row-flex left pad-top-xs">']); 56338 $.each(rows, function (k, v) { 56339 v.month = v.month.length == 1 ? "0" + v.month : v.month; 56340 v.year = v.year.length == 1 ? "0" + v.year : v.year; 56341 v.day = v.day.length == 1 ? "0" + v.day : v.day; 56342 var timestamp = v.year + "-" + v.month + "-" + v.day; 56343 countRenderedNews++; 56344 var country = " | "; 56345 switch (v.country) { 56346 case "SG": 56347 case "sg": 56348 country += "Singapore"; 56349 break; 56350 case "AU": 56351 case "au": 56352 country += "Australia"; 56353 break; 56354 case "UK": 56355 case "uk": 56356 country += "United Kingdom"; 56357 break; 56358 case "EU": 56359 case "eu": 56360 country += "Europe"; 56361 break; 56362 case "TH": 56363 case "th": 56364 country += "Thailand"; 56365 break; 56366 case "VN": 56367 case "vn": 56368 country += "Vietnam"; 56369 break; 56370 case "CN": 56371 case "cn": 56372 country += "China"; 56373 break; 56374 default: 56375 country += v.country; 56376 break; 56377 } 56378 html = html.concat([ 56379 '<div id="' + v.id + '" class="col-sm-6" data-sort-nt="Press release">', 56380 '<div class="news-item">', 56381 '<a href="' + v.url + '">', 56382 '<h4 class="title-5 text-default">' + truncate(v.title, 120) + "</h4>", 56383 '<p class="text-small text-grey">' + moment(timestamp).format("DD MMM YYYY") + country + "</p>", 56384 "</a>", 56385 "</div>", 56386 "</div>", 56387 ]); 56388 }); 56389 if (countRenderedNews < parseInt(data.TotalCount)) { 56390 var remaining = parseInt(data.TotalCount) - countRenderedNews; 56391 html = html.concat([ 56392 "</div>", 56393 '<div class="text-center mar-top ' + hide + '">', 56394 '<a href="javascript:;" title="View more" class="btn-primary min-size" data-next-index="' + ls.pageIndex + '">View more <span>(' + remaining + ")</span></a>", 56395 "</div>", 56396 ]); 56397 } else { 56398 ls.pageIndex = 1; 56399 } 56400 if (!append) { 56401 html = html.concat(["</div>", "</div>"]); 56402 } 56403 } else { 56404 html = ['<div class="all-location pad-top' + altClass + '">', '<div class="inner-container no-result">Sorry, there are no matching results.</div>', "</div>"]; 56405 } 56406 $(html.join("")).insertAfter($elem); 56407 }; 56408 var ls = { section: $loadedSection.data("load-section") }; 56409 switch (ls.section) { 56410 case "portfolio": 56411 ls.render = renderPortfolio; 56412 ls.api = FCL_API_PORTFOLIO; 56413 ls.pageIndex = 1; 56414 ls.dataType = "JSONP";
56415 break; 56416 case "bod-portfolio": 56417 ls.render = renderBODPortfolio; 56418 ls.api = FCL_BOD_PORTFOLIO; 56419 ls.pageIndex = 1; 56420 ls.dataType = "JSONP"; 56421 break; 56422 case "residences": 56423 ls.render = renderResidences; 56424 var urlSiteURL = window.location.href; 56425 ls.api = FCL_RESIDENCES; 56426 ls.pageIndex = 1; 56427 ls.dataType = "JSONP"; 56428 break; 56429 case "careers": 56430 ls.render = renderCareer; 56431 ls.api = FCL_CAREERS; 56432 ls.pageIndex = 1; 56433 ls.dataType = "JSONP"; 56434 break; 56435 case "the-library": 56436 ls.render = renderLibrary; 56437 ls.api = FCL_API_BLOG; 56438 ls.pageIndex = 1; 56439 ls.dataType = "JSONP"; 56440 break; 56441 case "news-inner": 56442 ls.render = renderNewsInner; 56443 ls.api = SGXPR.pr.url; 56444 ls.payload = SGXPR.pr.params; 56445 ls.pageIndex = 1; 56446 ls.dataType = "JSON"; 56447 break; 56448 } 56449 function sectionLoader(lodi, payload, append, showOptions, $selectTarget, optionTarget) { 56450 var tblViewClass = $(".all-location").hasClass("table-view") ? " table-view" : ""; 56451 if (!append) $(".all-location").remove(); 56452 $(".no-result").remove(); 56453 var $layer = append ? $(".all-location .row").last() : $('.loader[data-load-section="' + lodi.section + '"]'), 56454 $loader = $('.loader[data-load-section="' + lodi.section + '"] .icon-loader'), 56455 payload = payload || {}, 56456 append = append || false, 56457 method = lodi.method || "get", 56458 pageId = $('.loader[data-load-section="' + lodi.section + '"]').attr("data-page-id"); 56459 if (typeof pageId !== "undefined" && pageId !== false) payload.id = pageId; 56460 $loader.parent().insertAfter($(".all-location").last()); 56461 $loader.parent().removeClass("hidden"); 56462 $.ajax({ 56463 url: lodi.api, 56464 data: payload, 56465 dataType: lodi.dataType, 56466 method: method, 56467 complete: function (r) { 56468 if (!append) { 56469 $(".all-location").remove(); 56470 countRenderedPort = 0; 56471 countResidences = 0; 56472 countRenderedLib = 0; 56473 countCareer = 0; 56474 countRenderedNews = 0; 56475 ls.pageIndex = 1; 56476 } 56477 lodi.render($layer, tblViewClass, r.responseJSON, append, r.status, subNavFilterData, $liSelFor, $liSelForTarget, showOptions, $selectTarget, optionTarget); 56478 $loader.parent().addClass("hidden"); 56479 firstLoad = false; 56480 }, 56481 }); 56482 } 56483 56484 function residencesLoader(payload, append, filterType, targetElem) { 56485 var $loader = $('.loader[data-load-section="' + ls.section + '"] .icon-loader'), 56486 $layer = $("#residences-filter"), 56487 append = append || false; 56488 var urlShow = []; 56489 var qmark = "?"; 56490 urlShow = payload; 56491 var hashUrl = window.location.hash; 56492 var waitingTime = 1000; 56493 if (!firstLoad) { 56494 hashUrl = "#residences-section"; 56495 waitingTime = 500; 56496 } 56497 if (hashUrl.length > 0) { 56498 var yOffset = $(hashUrl).offset().top; 56499 setTimeout(function () { 56500 $("html,body").animate({ scrollTop: yOffset }, 500); 56501 }, waitingTime); 56502 } 56503 if (urlShow.residences == "All") { 56504 delete urlShow["residences"]; 56505 } 56506 if (urlShow.bedrooms == "All") { 56507 delete urlShow["bedrooms"]; 56508 } 56509 $.ajax({ 56510 url: ls.api, 56511 data: payload, 56512 dataType: "JSON", 56513 method: ls.method || "get", 56514 complete: function (r) { 56515 let totalResults = 0; 56516 if (r.responseJSON) { 56517 totalResults = Number(r.responseJSON.TotalCount); 56518 } 56519 if (append == true) { 56520 $("#residences-section").find("#residences-filter").empty(); 56521 countResidences = 0; 56522 ls.render($layer, r.responseJSON, r.status, filterType, targetElem); 56523 $loader.parent().addClass("hidden"); 56524 } 56525 var flag = $('.filter-cta').data("flag"); 56526 if(flag) { 56527 var buttonElement = $('.filter-cta'); 56528 if(buttonElement && typeof window.residenceList === "function") { 56529 window.residenceList(buttonElement); 56530 } 56531 } else { 56532 $('.filter-cta').data("flag", "true"); 56533 } 56534 History.pushState(null, null, qmark + $.param(urlShow) + hashUrl); 56535 }, 56536 }); 56537 } 56538 function updateSelection() { 56539 if ($(".phrase-two")[0]) { 56540 if (firstLoad) { 56541 var selectedResidences = getParameterByName("residences") ? getParameterByName("residences") : "All"; 56542 var selectedBedrooms = getParameterByName("bedrooms") ? getParameterByName("bedrooms") : "All"; 56543 var selectedRes = selectedResidences.charAt(0).toUpperCase() + selectedResidences.slice(1); 56544 renderSelectbox(selectedRes, selectedBedrooms); 56545 } 56546 } 56547 } 56548 function updateFirstLoadSelection(selectedRes, selectedBedrooms) { 56549 var payload = {}; 56550 var filterType = []; 56551 $("[data-filter=residences]").selectmenu(); 56552 $("[data-filter=residences]").val(selectedRes).selectmenu("refresh").trigger("selectmenuchange"); 56553 $("[data-filter=bedrooms]").selectmenu(); 56554 $("[data-filter=bedrooms]").val(selectedBedrooms).selectmenu("refresh").trigger("selectmenuchange"); 56555 payload.residences = selectedRes; 56556 payload.bedrooms = selectedBedrooms; 56557 $(".filter-container select").each(function () { 56558 filterType.push({ Type: $(this).attr("data-filter"), Value: $(this).val() }); 56559 }); 56560 residencesLoader(payload, true, filterType); 56561 } 56562 updateSelection(); 56563 var countryPrev = "all"; 56564 56565 $(".filter-container .buton-group").on("click", "a", function (e) { 56566 var $layer = $("#residences-filter"); 56567 var _this = $(this).closest(".filter-container"); 56568 if ($layer.length > 0) { 56569 e.preventDefault(); 56570 var filterType = []; 56571 var _res = _this.find("[data-filter=residences] option:selected").val(); 56572 var _bed = _this.find("[data-filter=bedrooms] option:selected").val(); 56573 var payload = {}; 56574 payload.residences = _res; 56575 payload.bedrooms = _bed; 56576 ls.filters = []; 56577 ls.pageIndex = 1; 56578 $(".filter-container select").each(function () { 56579 filterType.push({ Type: $(this).attr("data-filter"), Value: $(this).val() }); 56580 }); 56581 residencesLoader(payload, true, filterType, e.target); 56582 } 56583 }); 56584 function renderAPIBODPortfolio(payload) { 56585 var $loader = $('.loader[data-load-section="' + ls.section + '"] .icon-loader'), 56586 pageId = $('.loader[data-load-section="' + ls.section + '"]').attr("data-page-id"), 56587 $layer = $("#bod-portfolio"); 56588 if (typeof pageId !== "undefined" && pageId !== false) { 56589 payload.id = pageId; 56590 } 56591 $.ajax({ 56592 url: ls.api, 56593 data: payload, 56594 dataType: ls.dataType, 56595 method: ls.method || "get", 56596 complete: function (r) { 56597 ls.render($layer, r.responseJSON, false, r.status); 56598 $loader.parent().addClass("hidden"); 56599 }, 56600 }); 56601 } 56602 if ($('[data-load-section="bod-portfolio"]')[0]) { 56603 var payload = payload || {}; 56604 payload.pageIndex = "1"; 56605 renderAPIBODPortfolio(payload); 56606 } 56607 $(document).on("click", ".all-bod-location a[data-next-index]", function () { 56608 var payload = ls.payload || {}; 56609 payload.pageIndex = $(this).data("next-index"); 56610 $(this).parent().addClass("hidden"); 56611 renderAPIBODPortfolio(payload); 56612 }); 56613 function renderFilterOption(data, filterQuery, filterFor, showOptions, $selectTarget, optionTarget) { 56614 if (optionTarget) { 56615 keepAliveData.push(deepClone(data)); 56616 if (filterFor) filterFor.find("li").not(":first").remove(); 56617 if ($selectTarget) $selectTarget.find("option").not(":first").remove(); 56618 var appendLocate = filterFor.find(".sub-nav"); 56619 var html = []; 56620 var target = filterFor.find(".sub-nav").data("select-index"); 56621 var currVal = filterQuery.find(".sub-nav li.active a").data("val"); 56622 var currMVal = optionTarget.find("option:selected").val(); 56623 var newData = keepAliveData[0]; 56624 if (!Utils.empty(showOptions)) { 56625 showFilters = showOptions.split(","); 56626 } else { 56627 showFilters = ""; 56628 } 56629 for (var i = 0; i < newData.length; i++) { 56630 if (i == target) { 56631 var datas = newData[target]; 56632 for (var j = 0; j < datas.length; j++) { 56633 if ($(window).width() >= 992) { 56634 if (currVal != "all") { 56635 $.each(showFilters, function (k, filter) { 56636 if (datas[j].val == filter) { 56637 html = html.concat([ 56638 '<li><a href="' + 56639 datas[j].href + 56640 '" data-val="' + 56641 datas[j].val + 56642 '" data-hide="' + 56643 datas[j].dataHide + 56644 '" data-show="' + 56645 datas[j].dataShow + 56646 '"><span class="tab-title">' + 56647 datas[j].val + 56648 "</span></a>", 56649 "</li>", 56650 ]); 56651 } 56652 }); 56653 } else { 56654 html = html.concat([ 56655 '<li><a href="' + 56656 datas[j].href + 56657 '" data-val="' + 56658 datas[j].val + 56659 '" data-hide="' + 56660 datas[j].dataHide + 56661 '" data-show="' + 56662 datas[j].dataShow + 56663 '"><span class="tab-title">' + 56664 datas[j].val + 56665 "</span></a>", 56666 "</li>", 56667 ]); 56668 } 56669 } else { 56670 if (currMVal != "all") { 56671 $.each(showFilters, function (k, filter) { 56672 if (datas[j].val == filter) { 56673 html = html.concat(['<option value="' + datas[j].val + '" data-show="' + datas[j].dataShow + '">' + datas[j].val + "</option>"]); 56674 } 56675 }); 56676 } else { 56677 html = html.concat(['<option value="' + datas[j].val + '" data-show="' + datas[j].dataShow + '">' + datas[j].val + "</option>"]); 56678 } 56679 } 56680 } 56681 } 56682 } 56683 if ($(window).width() >= 992) { 56684 $(html.join("")).appendTo(appendLocate); 56685 menuResponsive(filterFor); 56686 } else { 56687 $(html.join("")).appendTo($selectTarget); 56688 } 56689 } 56690 } 56691 var checkFL = {}; 56692 var countryPrev = "all"; 56693 $(document).on("change", ".sortable.api-sort select", function () { 56694 var payload = ls.payload || {}; 56695 ls.filters = []; 56696 $liSelFor = $(this) 56697 .closest(".sortable.api-sort") 56698 .find(".caret:nth-child(" + parseInt($(this).data("select-index") + 1) + ")"); 56699 if ($liSelFor.length > 0) { 56700 $liSelForTarget = $(this) 56701 .closest(".sortable.api-sort") 56702 .find('.caret[data-query="' + $liSelFor.data("for") + '"]'); 56703 if ($liSelForTarget.length > 0) { 56704 $liSelForTarget.find("> a > span.tab-title").text($liSelForTarget.find(".sub-nav > li:first-child a").text()); 56705 $liSelForTarget.find(".sub-nav > li").removeClass("active"); 56706 $liSelForTarget.find(".sub-nav > li:first-child").addClass("active"); 56707 var selectIndex = $liSelForTarget.find(".sub-nav").first().data("select-index"); 56708 var showOptions = $(this).find("option:selected").data("show"); 56709 var $selectTarget = $(this) 56710 .closest(".sortable.api-sort") 56711 .find('select[data-select-index="' + parseInt($(this).data("select-index") + 1) + '"]'); 56712 } 56713 } 56714 $(this) 56715 .closest(".sortable.api-sort") 56716 .find(".caret[data-query]") 56717 .each(function () { 56718 ls.filters.push($(this).data("query")); 56719 }); 56720 $.each(ls.filters, function (k, v) { 56721 var filter = $('.sortable.api-sort select[data-select-index="' + k + '"]').val(); 56722 if (!Utils.empty(filter) && filter.indexOf("
56722http") !== -1) window.location.href = filter; 56723 if (filter !== "all") payload[v] = filter; 56724 else if (!Utils.empty(payload[v])) delete payload[v]; 56725 }); 56726 if (firstLoad) { 56727 var crrurl = window.location.href; 56728 var captured = /pageIndex=([^&]+)/.exec(crrurl); 56729 var crrPageIndex = captured ? captured[1] : 1; 56730 payload.pageIndex = parseInt(crrPageIndex); 56731 } else { 56732 payload.pageIndex = 1; 56733 var crrPageIndex = 1; 56734 } 56735 if (ls.filters > 1) { 56736 var countryNow = $('.sortable.api-sort select[data-select-index="0"]').val(); 56737 if (countryPrev !== countryNow) { 56738 delete payload["category"]; 56739 } 56740 countryPrev = countryNow; 56741 } 56742 History.pushState(null, null, "?" + $.param(payload)); 56743 ls.pageIndex = parseInt(crrPageIndex); 56744 if (!firstLoad) { 56745 sectionLoader(ls, payload, false, showOptions, $selectTarget, $(this)); 56746 } else { 56747 checkFL.showOptions = showOptions; 56748 checkFL.selectTarget = $selectTarget; 56749 checkFL.optionTarget = $(this); 56750 } 56751 }); 56752 $(document).on("click", ".all-location a[data-next-index]", function () { 56753 var payload = ls.payload || {}; 56754 $.each(ls.filters, function (k, v) { 56755 var filter = $('.sortable.api-sort select[data-select-index="' + k + '"]').val(); 56756 if (!Utils.empty(filter) && filter.indexOf("http") !== -1) window.location.href = filter; 56757 if (filter !== "all") payload[v] = filter; 56758 else if (!Utils.empty(payload[v])) delete payload[v]; 56759 }); 56760 payload.pageIndex = $(this).data("next-index"); 56761 $(this).parent().addClass("hidden"); 56762 ls.pageIndex = $(this).data("next-index"); 56763 sectionLoader(ls, payload, true, "", false, false); 56764 }); 56765 $(".event-tab ul.tab-header > li > a").click(function (e) { 56766 e.stopPropagation(); 56767 $(".event-tab ul.tab-header > li > a").toggleClass("active"); 56768 $(".all-location").toggleClass("table-view"); 56769 }); 56770 if ($(".sortable.api-sort")[0]) { 56771 setTimeout(function () { 56772 if (firstLoad) { 56773 var payload = ls.payload || {}; 56774 ls.filters = []; 56775 $(".sortable.api-sort") 56776 .find(".caret[data-query]") 56777 .each(function () { 56778 ls.filters.push($(this).data("query")); 56779 }); 56780 $.each(ls.filters, function (k, v) { 56781 var filter = $('.sortable.api-sort select[data-select-index="' + k + '"]').val(); 56782 if (!Utils.empty(filter) && filter.indexOf("http") !== -1) window.location.href = filter; 56783 if (filter !== "all") payload[v] = filter; 56784 else if (!Utils.empty(payload[v])) delete payload[v]; 56785 }); 56786 var crrurl = window.location.href; 56787 var captured = /pageIndex=([^&]+)/.exec(crrurl); 56788 var crrPageIndex = captured ? captured[1] : 1; 56789 payload.pageIndex = parseInt(crrPageIndex); 56790 if (ls.filters > 1) { 56791 var countryNow = $('.sortable.api-sort select[data-select-index="0"]').val(); 56792 if (countryPrev !== countryNow) { 56793 delete payload["category"]; 56794 } 56795 countryPrev = countryNow; 56796 } 56797 History.pushState(null, null, "?" + $.param(payload)); 56798 ls.pageIndex = parseInt(crrPageIndex); 56799 if (Object.getOwnPropertyNames(checkFL).length > 0) { 56800 sectionLoader(ls, payload, false, checkFL.showOptions, checkFL.selectTarget, checkFL.optionTarget); 56801 } else { 56802 sectionLoader(ls, payload, false); 56803 } 56804 } 56805 }, 300); 56806 } 56807 } 56808 $(".sortable .menu > select[data-select-index]").each(function () { 56809 $(this).val($(this).find("option:first").val()).change(); 56810 }); 56811 var selectedCountry = getParameterByName("country"); 56812 var selectedCategory = getParameterByName("category"); 56813 var selectedOwnership = getParameterByName("ownership"); 56814 var selectedState = getParameterByName("state"); 56815 var _vicCo = "0"; 56816 if (firstLoad) { 56817 if (selectedCountry) { 56818 _vicCo = $('[data-query="country"]').find(".sub-nav").data("select-index"); 56819 $($('*[data-query="country"]').find(".tab-title").get(0)).html(selectedCountry); 56820 $('*[data-query="country"]').find("li").removeClass("active"); 56821 $('*[data-query="country"]') 56822 .find("li") 56823 .each(function (idx, option) { 56824 if ($(option).find("a").data("val") === selectedCountry) { 56825 $(option).addClass("active"); 56826 } 56827 }); 56828 $('.sortable.api-sort select[data-select-index="' + _vicCo + '"]') 56829 .val(selectedCountry) 56830 .trigger("change"); 56831 } 56832 if (selectedState) { 56833 _vicCo = $('[data-query="state"]').find(".sub-nav").data("select-index"); 56834 $($('*[data-query="state"]').find(".tab-title").get(0)).html(selectedState); 56835 $('*[data-query="state"]').find("li").removeClass("active"); 56836 $('*[data-query="state"]') 56837 .find("li") 56838 .each(function (idx, option) { 56839 if ($(option).find("a").data("val") === selectedState) { 56840 $(option).addClass("active"); 56841 } 56842 }); 56843 $('.sortable.api-sort select[data-select-index="' + _vicCo + '"]') 56844 .val(selectedState) 56845 .trigger("change"); 56846 } 56847 if (selectedCategory) { 56848 var _vicCo = $('[data-query="category"]').find(".sub-nav").data("select-index"); 56849 $($('*[data-query="category"]').find(".tab-title").get(0)).html(selectedCategory); 56850 $('*[data-query="category"]').find("li").removeClass("active"); 56851 $('*[data-query="category"]') 56852 .find("li") 56853 .each(function (idx, option) { 56854 if ($(option).find("a").data("val") === selectedCategory) { 56855 $(option).addClass("active"); 56856 } 56857 }); 56858 $('.sortable.api-sort select[data-select-index="' + _vicCo + '"]') 56859 .val(selectedCategory) 56860 .trigger("change"); 56861 } 56862 if (selectedOwnership) { 56863 _vicCo = $('[data-query="ownership"]').find(".sub-nav").data("select-index"); 56864 $($('*[data-query="ownership"]').find(".tab-title").get(0)).html(selectedOwnership); 56865 $('*[data-query="ownership"]').find("li").removeClass("active"); 56866 $('*[data-query="ownership"]') 56867 .find("li") 56868 .each(function (idx, option) { 56869 if ($(option).find("a").data("val") === selectedOwnership) { 56870 $(option).addClass("active"); 56871 } 56872 }); 56873 $('.sortable.api-sort select[data-select-index="' + _vicCo + '"]') 56874 .val(selectedOwnership) 56875 .trigger("change"); 56876 } 56877 if (!selectedCountry && !selectedCategory && !selectedOwnership && !selectedState) { 56878 $(".sortable.api-sort select").first().trigger("change"); 56879 } 56880 } 56881 $(document).on("change", '.publication-filter select[data-select-index="0"]', publicationYear); 56882 function publicationYear() { 56883 if ($('.publication-filter select[data-select-index="0"]').val() !== "all") { 56884 $(".publication-filter ul.main > .caret:nth-child(2)").removeClass("disabled"); 56885 $('.publication-filter select[data-select-index="1"]').attr("disabled", false); 56886 } else { 56887 $(".publication-filter ul.main > .caret:nth-child(2)").addClass("disabled"); 56888 $(".publication-filter ul.main > .caret:nth-child(2) > a > .tab-title").text("All years"); 56889 $(".publication-filter ul.main > .caret:nth-child(2) .sub-nav li").removeClass("active"); 56890 $('.publication-filter ul.main > .caret:nth-child(2) .sub-nav li > a[data-val="all"]').closest("li").addClass("active"); 56891 $('.publication-filter select[data-select-index="1"]').val("all").change().attr("disabled", true); 56892 } 56893 } 56894 publicationYear(); 56895 $(document).on("change", ".sortable.api-sort select", function () { 56896 if ($(window).width() < 992) { 56897 var _this = $(this).data("select-index"); 56898 var _val = $(this).find("option:selected").val(); 56899 var _vic = $('ul[data-select-index="' + _this + '"]').find('a[data-val="' + _val + '"]'); 56900 var _viclength = _vic.attr("href").length; 56901 if (_viclength > 1) { 56902 window.location.href = _vic.attr("href"); 56903 } 56904 } 56905 }); 56906 $(document).on("click", ".sortable .sub-nav a:not(.btn-apply)", function (e) { 56907 e.preventDefault(); 56908 var select_id = $(this).closest(".sub-nav").data("select-index");
56909 var validUrl = $(this).attr("href"); 56910 if (validUrl == "#" || validUrl == "" || validUrl == "javascript:;") { 56911 if ($(this).closest("li").hasClass("parent") && $(this).data("val") == "") { 56912 return false; 56913 } 56914 $(this) 56915 .closest(".menu") 56916 .find('> select[data-select-index="' + select_id + '"]') 56917 .val($(this).data("val")) 56918 .change(); 56919 var nth = parseInt(select_id) + 1; 56920 $(this).closest(".sub-nav").find("> li").removeClass("active"); 56921 $(this).closest("li").addClass("active"); 56922 $(".sortable ul.main > li.caret:nth-child(" + nth + ") > a > .tab-title").text($(this).find(".tab-title").text()); 56923 } else { 56924 window.location.href = $(this).attr("href"); 56925 } 56926 }); 56927 56928 $(".modal.launch").each(function () { 56929 $modal = $(this); 56930 $modal.modal("show").addClass("no-scrolling"); 56931 $(document).on("click.closeModal", ".modal.launch .icon-close, .modal.launch .modal-close", function (event) { 56932 $("html, body").removeClass("no-scrolling"); 56933 $(".modal-backdrop").remove(); 56934 $modal.modal("hide"); 56935 }); 56936 }); 56937 $(".si-filter .fil > a").each(function (k, v) { 56938 $(this).click(function () { 56939 $(".si-filter .fil").removeClass("active"); 56940 $(this).closest(".fil").addClass("active"); 56941 }); 56942 }); 56943 $(".si-filter ul.checklist li label").each(function () { 56944 $('<div class="cbox"></div>').insertAfter($(this).find("input")); 56945 }); 56946 $(".si-filter .dropdown > a").click(function () { 56947 $(this).closest(".si-filter").toggleClass("expanded"); 56948 }); 56949 $(".si-filter .accordion-toggle").click(function () { 56950 $(this).closest(".accordion").toggleClass("expanded"); 56951 }); 56952 $(document).on("change", "#contact-us select", function () { 56953 var $this = $(this), 56954 selectedVal = $this.find("option:selected").data("val"); 56955 $("#contact-us .suggest-help").addClass("hidden"); 56956 if ($(this).prop("name") == "select-help") { 56957 $(".form-section").addClass("hidden"); 56958 } 56959 if ($this.find("option:selected").data("val") != "") { 56960 $('#contact-us .suggest-help[data-val="' + selectedVal + '"]').removeClass("hidden"); 56961 } 56962 var switchVal = $(this).closest("div[data-switch]").data("switch"); 56963 if (!Utils.empty(switchVal)) { 56964 $("#contact-us div[data-switch-" + switchVal + "]").addClass("hidden"); 56965 $("#contact-us div[data-switch-" + switchVal + '="' + selectedVal + '"]').removeClass("hidden"); 56966 } 56967 $(this).closest(".form-section").removeClass("hidden"); 56968 $('div[data-val="' + selectedVal + '"]').removeClass("hidden"); 56969 }); 56970 $(document).on("selectmenuchange", "#contact-us select", function (event, ui) { 56971 var $this = $(this), 56972 selectedVal = $(ui.item.element).data("val"); 56973 $("#contact-us .suggest-help").addClass("hidden"); 56974 if ($(this).prop("name") == "select-help") { 56975 $(".form-section").addClass("hidden"); 56976 } 56977 if ($(ui.item.element).data("val") != "") { 56978 $('#contact-us .suggest-help[data-val="' + selectedVal + '"]').removeClass("hidden"); 56979 } 56980 var switchVal = $(this).closest("div[data-switch]").data("switch"); 56981 if (!Utils.empty(switchVal)) { 56982 $("#contact-us div[data-switch-" + switchVal + "]").addClass("hidden"); 56983 $("#contact-us div[data-switch-" + switchVal + '="' + selectedVal + '"]').removeClass("hidden"); 56984 } 56985 $(this).closest(".form-section").removeClass("hidden"); 56986 $('div[data-val="' + selectedVal + '"]').removeClass("hidden"); 56987 var delaySelectMenu = setTimeout(function () { 56988 if ($(".ui-selectmenu-menu > ul > li:first-child").length > 0) { 56989 $(".ui-selectmenu-menu > ul > li:first-child").addClass("ui-state-disabled"); 56990 clearTimeout(delaySelectMenu); 56991 } 56992 }, 1); 56993 }); 56994 $(document).on("selectmenuchange", "#contact-us .frasers_tower_select select", function (event, ui) { 56995 selectedleasingVal = $(ui.item.element).data("val"); 56996 if(selectedleasingVal == 'leasing'){ 56997 $('.contact_input_field').addClass('hidden'); 56998 $('.contact_input_field_leasing').removeClass('hidden'); 56999 } else if(!(selectedleasingVal == 'leasing')) { 57000 $('.contact_input_field').removeClass('hidden'); 57001 $('.contact_input_field_leasing').addClass('hidden'); 57002 } 57003 57004 }); 57005 $(document).on("change", 'select[name="input-qualifications[]"]', function () { 57006 var $this = $(this); 57007 if ($this.val() == "na") { 57008 $this.closest(".row").find("input").addClass("disabled").val("").prop("disabled", true); 57009 } else { 57010 $this.closest(".row").find("input").removeClass("disabled").prop("disabled", false); 57011 } 57012 }); 57013 $(document).on("selectmenuchange", 'select[name="input-qualifications[]"]', function (event, ui) { 57014 var $this = $(ui.item.element); 57015 if ($this.val() == "na") { 57016 $this.closest(".row").find("input").addClass("disabled").val("").prop("disabled", true); 57017 } else { 57018 $this.closest(".row").find("input").removeClass("disabled").prop("disabled", false); 57019 } 57020 }); 57021 if ($("#contact-us").length > 0) { 57022 $(document).on("change", ".menu-business-unit select", function () { 57023 $(this).find("option:selected").text(); 57024 $('input[name="selected-country"]').val($(this).find("option:selected").text()); 57025 }); 57026 } 57027 $(document).on("click", "a.ajax-output", function (e) { 57028 e.preventDefault(); 57029 var $this = $(this); 57030 $(".modal").html(""); 57031 var attr = $this.attr("data-modal"); 57032 if (typeof attr !== "undefined" && attr !== false) { 57033 $("#" + attr + " > .modal-body > .inner-container").html(""); 57034 $.ajax({ 57035 url: $this.attr("href"), 57036 data: { ajax: 1 }, 57037 statusCode: { 57038 500: function (r) { 57039 console.log("500 Internal Error"); 57040 }, 57041 404: function () { 57042 console.log("404 Not Found"); 57043 }, 57044 }, 57045 success: function (data) { 57046 data = data.replace(/<script.*?>([\w\W\d\D\s\S\0\n\f\r\t\v\b\B]*?)<\/script>/gi, ""); 57047 var html = data.replace(' id="' + attr + '"', ' id="response-modal"'); 57048 $("#" + attr).prepend(html); 57049 $("#response-modal").remove(); 57050 $("#" + attr + " > .modal-head").html($("#response-modal > .modal-head").html()); 57051 $("#" + attr + " > .modal-body").html($("#response-modal > .modal-body").html());
57052 var modalData = $(".modal.active .modal-head").parent(); 57053 $("#" + attr).html(modalData); 57054 History.pushState(null, null, $this.attr("href")); 57055 $(document).off("click", "#" + attr + " .icon-close"); 57056 $(document).on("click", "#" + attr + " .icon-close", function () { 57057 History.go(-1); 57058 }); 57059 }, 57060 }); 57061 } 57062 }); 57063 window.addEventListener("popstate", function (event) { 57064 var urlsegment = window.location.href.split("/"), 57065 maxKey = urlsegment.length - 1; 57066 var theLibrary = urlsegment.indexOf("the-library") == maxKey || (urlsegment[maxKey].indexOf("?") !== -1 && urlsegment.indexOf("the-library") == maxKey - 1); 57067 if (theLibrary) { 57068 var $modal = $("#blog-post-modal"); 57069 if ($modal.hasClass("active")) $modal.removeClass("show-block"); 57070 $("html, body").removeClass("no-scrolling"); 57071 if ($modal.hasClass("modal-small")) { 57072 $(".modal-backdrop").remove(); 57073 } 57074 $modal.removeClass("active").fadeOut("400", function () { 57075 $modal.find(".step.active").removeClass("active").fadeOut(); 57076 $modal.find(".step:first-child").addClass("active").fadeIn(); 57077 }); 57078 } else if (urlsegment.indexOf("the-library") == maxKey - 1) { 57079 var checkActive = setTimeout(function () { 57080 if (!$modal.hasClass("active")) $('.the-library a[href*="' + urlsegment[maxKey - 1] + "/" + urlsegment[maxKey] + '"]').trigger("click"); 57081 clearTimeout(checkActive); 57082 }, 1); 57083 } 57084 }); 57085 if ($('[id^="scWebEdit"]').length > 0) { 57086 $(".menu.overlap-up").addClass("sc-loggedin"); 57087 } 57088 $(".contact-sections a").click(function () { 57089 $(".contact-sections li").removeClass("active"); 57090 $(this).closest("li").addClass("active"); 57091 $(".wrapper[data-section]").addClass("hidden"); 57092 $('.wrapper[data-section="' + $(this).data("val") + '"]').removeClass("hidden"); 57093 }); 57094 $(".contact-sections select").change(function () { 57095 $(".contact-sections li").removeClass("active"); 57096 $(this).closest("li").addClass("active"); 57097 $(".wrapper[data-section]").addClass("hidden"); 57098 $('.wrapper[data-section="' + $(this).val() + '"]').removeClass("hidden"); 57099 }); 57100 if ($("#gmap").length > 0) { 57101 loadGmap(); 57102 } 57103 function loadGmap(bu, multiple) { 57104 var retroStyle = [ 57105 { elementType: "geometry", stylers: [{ color: "#ebe3cd" }] }, 57106 { elementType: "labels.text.fill", stylers: [{ color: "#523735" }] }, 57107 { elementType: "labels.text.stroke", stylers: [{ color: "#f5f1e6" }] }, 57108 { featureType: "administrative", elementType: "geometry.stroke", stylers: [{ color: "#c9b2a6" }] }, 57109 { featureType: "administrative.land_parcel", elementType: "geometry.stroke", stylers: [{ color: "#dcd2be" }] }, 57110 { featureType: "administrative.land_parcel", elementType: "labels.text.fill", stylers: [{ color: "#ae9e90" }] }, 57111 { featureType: "landscape.natural", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57112 { featureType: "poi", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57113 { featureType: "poi", elementType: "labels.text.fill", stylers: [{ color: "#93817c" }] }, 57114 { featureType: "poi.park", elementType: "geometry.fill", stylers: [{ color: "#a5b076" }] }, 57115 { featureType: "poi.park", elementType: "labels.text.fill", stylers: [{ color: "#447530" }] }, 57116 { featureType: "road", elementType: "geometry", stylers: [{ color: "#f5f1e6" }] }, 57117 { featureType: "road.arterial", elementType: "geometry", stylers: [{ color: "#fdfcf8" }] }, 57118 { featureType: "road.highway", elementType: "geometry", stylers: [{ color: "#f8c967" }] }, 57119 { featureType: "road.highway", elementType: "geometry.stroke", stylers: [{ color: "#e9bc62" }] }, 57120 { featureType: "road.highway.controlled_access", elementType: "geometry", stylers: [{ color: "#e98d58" }] }, 57121 { featureType: "road.highway.controlled_access", elementType: "geometry.stroke", stylers: [{ color: "#db8555" }] }, 57122 { featureType: "road.local", elementType: "labels.text.fill", stylers: [{ color: "#806b63" }] }, 57123 { featureType: "transit.line", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57124 { featureType: "transit.line", elementType: "labels.text.fill", stylers: [{ color: "#8f7d77" }] }, 57125 { featureType: "transit.line", elementType: "labels.text.stroke", stylers: [{ color: "#ebe3cd" }] }, 57126 { featureType: "transit.station", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57127 { featureType: "water", elementType: "geometry.fill", stylers: [{ color: "#b9d3c2" }] }, 57128 { featureType: "water", elementType: "labels.text.fill", stylers: [{ color: "#92998d" }] }, 57129 ]; 57130 if (multiple) { 57131 var gmaps = [], 57132 lats = [], 57133 lngs = [], 57134 showControls = [], 57135 mapStyles = []; 57136 for (var index = 0; index < bu.length; index++) { 57137 var current_bu = bu[index]; 57138 if (typeof current_bu === "undefined") current_bu = ""; 57139 else current_bu = "-" + current_bu; 57140 gmaps[index] = "gmap" + current_bu; 57141 (lats[index] = parseFloat($("#" + gmaps[index]).data("latitude"))), (lngs[index] = parseFloat($("#" + gmaps[index]).data("longitude"))); 57142 showControls[index] = $("#" + gmaps[index]).attr("data-control") && $("#" + gmap).attr("data-control")
57142== "hide" ? false : true; 57143 mapStyles[index] = $("#" + gmaps[index]).attr("data-style") && $("#" + gmaps[index]).attr("data-style") == "retro" ? retroStyle : ""; 57144 } 57145 $.ajax({ 57146 url: "https://maps.googleapis.com/maps/api/js", 57147 dataType: "JSONP", 57148 data: { key: FCL_GMAP_KEY }, 57149 statusCode: { 57150 500: function (r) { 57151 console.log("500 Internal Error"); 57152 }, 57153 404: function () { 57154 console.log("404 Not Found"); 57155 }, 57156 }, 57157 success: function (r) { 57158 for (var index = 0; index < bu.length; index++) { 57159 var current_gmap = new google.maps.Map(document.getElementById(gmaps[index]), { 57160 zoom: 15, 57161 styles: mapStyles[index], 57162 center: { lat: lats[index], lng: lngs[index] }, 57163 zoomControl: showControls[index], 57164 mapTypeControl: showControls[index], 57165 scaleControl: showControls[index], 57166 streetViewControl: showControls[index], 57167 rotateControl: showControls[index], 57168 fullscreenControl: showControls[index], 57169 }); 57170 new google.maps.Marker({ position: { lat: lats[index], lng: lngs[index] }, map: current_gmap }); 57171 } 57172 }, 57173 }); 57174 } else { 57175 if (typeof bu === "undefined") bu = ""; 57176 else bu = "-" + bu; 57177 var gmap = "gmap" + bu; 57178 (lat = parseFloat($("#" + gmap).data("latitude"))), (lng = parseFloat($("#" + gmap).data("longitude"))); 57179 var showControl = $("#" + gmap).attr("data-control") && $("#" + gmap).attr("data-control") == "hide" ? false : true; 57180 var retroStyle = [ 57181 { elementType: "geometry", stylers: [{ color: "#ebe3cd" }] }, 57182 { elementType: "labels.text.fill", stylers: [{ color: "#523735" }] }, 57183 { elementType: "labels.text.stroke", stylers: [{ color: "#f5f1e6" }] }, 57184 { featureType: "administrative", elementType: "geometry.stroke", stylers: [{ color: "#c9b2a6" }] }, 57185 { featureType: "administrative.land_parcel", elementType: "geometry.stroke", stylers: [{ color: "#dcd2be" }] }, 57186 { featureType: "administrative.land_parcel", elementType: "labels.text.fill", stylers: [{ color: "#ae9e90" }] }, 57187 { featureType: "landscape.natural", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57188 { featureType: "poi", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57189 { featureType: "poi", elementType: "labels.text.fill", stylers: [{ color: "#93817c" }] }, 57190 { featureType: "poi.park", elementType: "geometry.fill", stylers: [{ color: "#a5b076" }] }, 57191 { featureType: "poi.park", elementType: "labels.text.fill", stylers: [{ color: "#447530" }] }, 57192 { featureType: "road", elementType: "geometry", stylers: [{ color: "#f5f1e6" }] }, 57193 { featureType: "road.arterial", elementType: "geometry", stylers: [{ color: "#fdfcf8" }] }, 57194 { featureType: "road.highway", elementType: "geometry", stylers: [{ color: "#f8c967" }] }, 57195 { featureType: "road.highway", elementType: "geometry.stroke", stylers: [{ color: "#e9bc62" }] }, 57196 { featureType: "road.highway.controlled_access", elementType: "geometry", stylers: [{ color: "#e98d58" }] }, 57197 { featureType: "road.highway.controlled_access", elementType: "geometry.stroke", stylers: [{ color: "#db8555" }] }, 57198 { featureType: "road.local", elementType: "labels.text.fill", stylers: [{ color: "#806b63" }] }, 57199 { featureType: "transit.line", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57200 { featureType: "transit.line", elementType: "labels.text.fill", stylers: [{ color: "#8f7d77" }] }, 57201 { featureType: "transit.line", elementType: "labels.text.stroke", stylers: [{ color: "#ebe3cd" }] }, 57202 { featureType: "transit.station", elementType: "geometry", stylers: [{ color: "#dfd2ae" }] }, 57203 { featureType: "water", elementType: "geometry.fill", stylers: [{ color: "#b9d3c2" }] }, 57204 { featureType: "water", elementType: "labels.text.fill", stylers: [{ color: "#92998d" }] }, 57205 ]; 57206 var mapStyle = $("#" + gmap).attr("data-style") && $("#" + gmap).attr("data-style") == "retro" ? retroStyle : ""; 57207 $.ajax({
57208 url: "https://maps.googleapis.com/maps/api/js", 57209 dataType: "JSONP", 57210 data: { key: FCL_GMAP_KEY }, 57211 statusCode: { 57212 500: function (r) { 57213 console.log("500 Internal Error"); 57214 }, 57215 404: function () { 57216 console.log("404 Not Found"); 57217 }, 57218 }, 57219 success: function (r) { 57220 var map = new google.maps.Map(document.getElementById(gmap), { 57221 zoom: 15, 57222 styles: mapStyle, 57223 center: { lat: lat, lng: lng }, 57224 zoomControl: showControl, 57225 mapTypeControl: showControl, 57226 scaleControl: showControl, 57227 streetViewControl: showControl, 57228 rotateControl: showControl, 57229 fullscreenControl: showControl, 57230 }); 57231 var marker = new google.maps.Marker({ position: { lat: lat, lng: lng }, map: map }); 57232 }, 57233 }); 57234 } 57235 } 57236 $(".register-block .icon-plus-black, .register-block .icon-plus").click(function () { 57237 var $ele = $(this); 57238 var html = '<div class="study-group">' + $ele.closest(".register-block").find(".study-group").last().html() + "</div>"; 57239 $(html).insertBefore($ele.parent()); 57240 $ele.closest(".register-block").find(".study-group").last(); 57241 $new = $ele.closest(".register-block").find(".study-group").last(); 57242 $new.find("input").val(""); 57243 $new.find(".pickadate").each(function (k, v) { 57244 var $input = $(this); 57245 $input.removeClass("pickadated"); 57246 $input.find("~ .picker").remove(); 57247 var newId = $input.attr("id").split("-")[0] + "-" + (parseInt($input.attr("id").split("-")[1]) + 1); 57248 $input.attr("id", newId); 57249 var name = $input.attr("name"); 57250 }); 57251 if ($new.first().closest(".study-group").find("> p.text-right").length == 0) $new.first().closest(".study-group").prepend('<p class="text-right"><a href="javascript:;" title="Remove" class="link-ic icon-remove">Remove</a>'); 57252 pickadateInit(); 57253 $new.find(".cust-select-applied").val("").change(); 57254 $new.find(".cust-select-applied + span").remove(); 57255 $new.find(".cust-select-applied").removeClass("cust-select-applied"); 57256 initCustomSelect(); 57257 }); 57258 $(document).on("click", ".study-group .icon-remove", function () { 57259 $(this).closest(".study-group").remove(); 57260 }); 57261 $("form#application-form").submit(function (e) { 57262 if ($("input").hasClass("error")) { 57263 e.preventDefault(); 57264 } else { 57265 $(this).find('[type="submit"]').prop("disabled", true).value("Submiting...").text("Submiting..."); 57266 } 57267 }); 57268 $("#contact-us .form-submit-btn").click(function (e) { 57269 e.preventDefault(); 57270 if($("input[name='selected-country']").length > 0 && $(".menu .caret.tab>a>span.tab-title").length >0){ 57271 $("input[name='selected-country']").val($(".menu .caret.tab>a>span.tab-title").text()); 57272 } 57273 var $frm = $(this).closest("form"); 57274 var error = $('#contact-us .form-control.error'); 57275 var formId = $(this).closest("#form-replace"); 57276 if (error.length > 0) { 57277 window.handleError(formId, error); 57278 return false; 57279 } else { 57280 const { isValid, errorFields } = validateRequiredFields($frm); 57281 if (!isValid) { 57282 if (window.handleError) window.handleError(formId, errorFields); 57283 return; 57284 } 57285 $($frm).find('[type="submit"]').prop("disabled", true).val("Submiting...").text("Submiting..."); 57286 window.handleSubmit(formId); 57287 const errorPagePath = $($frm).data("errorPagePath") + '.html'; 57288 $.ajax({ 57289 type: $frm.attr("method"), 57290 url: $frm.data("actionUrl"), 57291 data: new FormData($frm[0]), 57292 processData: false, 57293 contentType: false, 57294 success: function (response) { 57295 window.handleComplete(formId, "web.webPageDetails.form.complete"); 57296 if (response && response.redirectPath) { 57297 window.location.href = response.redirectPath; 57298 } 57299 }, 57300 error: function (data) { 57301 $("#submit-btn").removeClass("hidden"); 57302 const responseJSON = data.responseJSON; 57303 const errorMessage = responseJSON && responseJSON.message ? responseJSON.message : 'An error occurred while submitting the form.'; 57304 window.handleComplete(formId, "web.webPageDetails.form.unsuccessfulSubmit", data.status + ":" + errorMessage); 57305 window.location.href = errorPagePath; 57306 } 57307 }); 57308 } 57309 }); 57310 function validateRequiredFields($form) { 57311 var hasErrors = false;
57312 var requiredFields = $form.find(".form-control.required"); 57313 requiredFields.removeClass("error"); 57314 57315 requiredFields.each(function () { 57316 var $field = $(this); 57317 57318 if ($field.is(":checkbox")) { 57319 if (!$field.is(":checked")) { 57320 $field.addClass("error"); 57321 hasErrors = true; 57322 } 57323 } else if ($field.is("select")) { 57324 if (!$field.val()) { 57325 $field.addClass("error"); 57326 hasErrors = true; 57327 } 57328 } else { 57329 if (!$field.val().trim()) { 57330 $field.addClass("error"); 57331 hasErrors = true; 57332 } 57333 } 57334 }); 57335 57336 return { 57337 isValid: !hasErrors, 57338 errorFields: requiredFields.filter(".error") 57339 }; 57340 }; 57341 $("#contact-us form").submit(function (e) { 57342 $("input[name='selected-country']").val($(".menu .caret.tab>a>span.tab-title").text()); 57343 var $frm = $(this); 57344 var error = $('#contact-us .form-control.error'); 57345 var formId = $(this).closest("#form-replace"); 57346 if (error.length > 0) { 57347 window.handleError(formId, error); 57348 return false; 57349 } else { 57350 window.handleSubmit(formId); 57351 window.handleComplete(formId, "web.webPageDetails.form.complete"); 57352 $(this).find('[type="submit"]').prop("disabled", true).value("Submiting...").text("Submiting..."); 57353 } 57354 }); 57355 $("#residenceEnquiryForm form").submit(function (e) { 57356 e.preventDefault(); 57357 let form = $(this); 57358 let error = form.find('.form-control.error'); 57359 if (error.length > 0) { 57360 window.handleError(this, error); 57361 return false; 57362 } else { 57363 window.handleSubmit(this); 57364 const successPagePath = $(form).data("successPagePath") + '.html'; 57365 const errorPagePath = $(form).data("errorPagePath") + '.html'; 57366 $.ajax({ 57367 type: form.attr("data-method"), 57368 url: form.attr("data-action"), 57369 data: new FormData(this), 57370 processData: false, 57371 contentType: false, 57372 success: function (res, textStatus, xhr) { 57373 const statusCode = xhr.status; 57374 if (statusCode === 200 && res.status === 'success') { 57375 window.handleResidenceEnquiryFormCompleteEvent(form, "web.webPageDetails.form.complete"); 57376 window.location.href = successPagePath; 57377 } else { 57378 console.warn(res); 57379 window.handleResidenceEnquiryFormCompleteEvent(form, "web.webPageDetails.form.unsuccessfulSubmit", `${statusCode}:${res.message}`); 57380 window.location.href = errorPagePath; 57381 } 57382 }, 57383 error: function (err) { 57384 console.error(err); 57385 const errorResponse = err.responseJSON; 57386 const errormsg = errorResponse && errorResponse.message ? errorResponse.message : 'An error occurred while submitting the form.'; 57387 window.handleResidenceEnquiryFormCompleteEvent(form, "web.webPageDetails.form.unsuccessfulSubmit", `${err.status}:${errormsg}`); 57388 window.location.href = errorPagePath; 57389 }, 57390 }); 57391 } 57392 }); 57393 57394 $(document).ajaxComplete(function () { 57395 $("body").find(".stock").removeClass("loading"); 57396 }); 57397 $("html").on("click", ".share-job-link a", function (e) { 57398 e.preventDefault(); 57399 e.stopPropagation(); 57400 var $box = $(this).closest(".share-job-link").find(".share-box"); 57401 var $input = $(this).closest(".share-job-link").find("input"); 57402 window.jobOpeningMethod(this); 57403 if (navigator.userAgent.match(/ipad|ipod|iphone/i)) { 57404 var el = $input.get(0); 57405 var editable = el.contentEditable; 57406 var readOnly = el.readOnly; 57407 el.contentEditable = true; 57408 el.readOnly = false;
57409 var range = document.createRange(); 57410 range.selectNodeContents(el); 57411 var sel = window.getSelection(); 57412 sel.removeAllRanges(); 57413 sel.addRange(range); 57414 el.setSelectionRange(0, 999999); 57415 el.contentEditable = editable; 57416 el.readOnly = readOnly; 57417 } else { 57418 $input.select(); 57419 } 57420 document.execCommand("copy"); 57421 $input.blur(); 57422 $box.removeClass("hide"); 57423 $(document).on("click", function (event) { 57424 if (!$(event.target).closest(".share-job-link").length) { 57425 $box.addClass("hide"); 57426 } 57427 }); 57428 $(document).on("touchstart", function (event) { 57429 if (!$(event.target).closest(".share-job-link").length) { 57430 $box.addClass("hide"); 57431 } 57432 }); 57433 }); 57434 })(jQuery); 57435 if ($(".grid-thumb")[0]) { 57436 $(".grid-thumb").each(function () { 57437 var bgColor = $(this).attr("data-color"); 57438 $(this).find("span.grid-overlay").css({ "background-color": bgColor }); 57439 }); 57440 } 57441}); 57442function transformDateInputs(callback) { 57443 (function ($) { 57444 if (!Utils.isMobile()) { 57445 $('input[type="date"]').each(function () { 57446 var name = $(this).prop("name"), 57447 value = $(this).val(), 57448 id = $(this).attr("id") || "", 57449 placeholder = $(this).attr("placeholder") || "", 57450 klass = $(this).attr("class"); 57451 if ($("#" + id + 'input[type="hidden"]').length == 0) { 57452 $(this).replaceWith( 57453 '<input class="datepicker ' + klass + '" type="text" value="' + value + '" placeholder="' + placeholder + '" readonly/><input type="hidden" id="' + id + '" value="' + value + '" name="' + name + '"/>' 57454 ); 57455 $("input.datepicker").datepicker({ dateFormat: "dd MM yy", altField: '[name="' + name + '"]', altFormat: "dd/mm/yy", maxDate: typeof $(this).attr("data-pastday") !== "undefined" ? "today" : null }); 57456 } 57457 }); 57458 $("[data-datepicker]:not(.hasDatepicker)").datepicker(); 57459 $(".date-min").each(function (k, v) { 57460 $(this).off("change"); 57461 $(this).on("change", function () { 57462 $(this).closest(".row").find(".date-max").first().datepicker("option", "minDate", $(this).datepicker("getDate")); 57463 }); 57464 }); 57465 } 57466 if (typeof callback === "function") { 57467 callback(); 57468 } 57469 })(jQuery); 57470} 57471function recaptcha_callback() { 57472 jQuery(".g-recaptcha").closest("form").find('*[type="submit"]').prop("disabled", false); 57473} 57474function truncate(str, max) { 57475 return str.length > max ? str.substr(0, max - 1) + "â¦" : str; 57476} 57477function makeBaseAuth(user, pswd) { 57478 var token = user + ":" + pswd; 57479 var hash = ""; 57480 if (btoa) { 57481 hash = btoa(token); 57482 } 57483 return "Basic " + hash; 57484} 57485function getParameterByName(name, url) { 57486 if (!url) url = window.location.href; 57487 name = name.replace(/[\[\]]/g, "\\$&"); 57488 var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 57489 results = regex.exec(url); 57490 if (!results) return null; 57491 if (!results[2]) return ""; 57492 return decodeURIComponent(results[2].replace(/\+/g, " ")); 57493} 57494jQuery(document).ready(function () { 57495 (function ($) { 57496 var uploaderName = $('.link-ic input[type="file"]').first().attr("name"); 57497 $(document).on("change", 'input[type="file"]', function () { 57498 var file_size = $(this)[0].files[0].size; 57499 var size = $("[data-size]").data().size; 57500 var format = $("[data-format]").data().format.split(","); 57501 var fileExtension = format; 57502 if (file_size > size) { 57503 $(".uperror").remove(); 57504 $(this).parent().append('<label class="uperror error">Please upload less than 5 MB</label>'); 57505 return false;
57506 } else if ($.inArray($(this).val().split(".").pop().toLowerCase(), fileExtension) == -1) { 57507 $(".uperror").remove(); 57508 $(this).parent().append('<label class="uperror error">Please upload correct file format</label>'); 57509 return false; 57510 } else { 57511 $(".uperror").remove(); 57512 if ($(this).val == "" || $(this).data("orig-val") == $(this).val()) return false; 57513 var filename = $(this).val().split("\\"); 57514 var fileindex = filename.length - 1; 57515 $(this) 57516 .closest(".link-ic") 57517 .prepend("<span>" + filename[fileindex] + "</span>"); 57518 $(this).addClass("hidden"); 57519 $(this).closest(".link-ic").find(".icon-upload").addClass("hidden"); 57520 $(this).data("orig-val", $(this).val()); 57521 $(this).closest(".link-ic").append('<i class="icon-close"></i>'); 57522 $(this).closest(".link-ic").find("label").addClass("hidden"); 57523 $(this) 57524 .closest(".link-ic") 57525 .parent() 57526 .append( 57527 [ 57528 '<div class="link-ic">', 57529 '<i class="icon-upload"></i>', 57530 "<label>", 57531 "<span>Add another document</span>", 57532 '<input type="file" name="' + uploaderName + '" data-format="' + format + '" data-size="' + size + '"/>', 57533 "</label>", 57534 "</div>", 57535 ].join("") 57536 ); 57537 } 57538 }); 57539 $(document).on("click", ".link-ic .icon-close", function (e) { 57540 $(this).closest(".link-ic").remove(); 57541 }); 57542 })(jQuery); 57543}); 57544(function () { 57545 var pageSize = 6; 57546 var pageIndex = 1; 57547 $(function () { 57548 $(".achievements-year-picker ul > li").on("click ", function (e) { 57549 e.preventDefault(); 57550 filterByYear(e.target.text); 57551 }); 57552 }); 57553 if ($(".achievements-year-picker").length <= 0) { 57554 $(".awards-block").addClass("no-top-margin"); 57555 } 57556 $(".achievements-year-picker .caret > a").on("click ", function (e) { 57557 e.preventDefault(); 57558 if (!$(this).parent().hasClass("active")) { 57559 $(this).parent().siblings(".caret").removeClass("active"); 57560 $(this).parent().addClass("active"); 57561 } else { 57562 $(this).parent().removeClass("active"); 57563 } 57564 }); 57565 function filterByYear(year) { 57566 if (!rewards_result) { 57567 return; 57568 } 57569 var result = rewards_result; 57570 var count_ = 0; 57571 var totalCount = result.TotalCount; 57572 if (result.PageItems) { 57573 var currentPage = window.location.href.split("#"); 57574 currentPage = currentPage[1]; 57575 if (!currentPage) { 57576 if ($("#commercial").length) { 57577 currentPage = "commercial"; 57578 } else { 57579 currentPage = "corporate"; 57580 } 57581 } 57582 $("#" + currentPage + " .awards").empty(); 57583 $(".loader").addClass("hidden"); 57584 $(".JS_MoreAwards").addClass("hidden"); 57585 if (year && year.toLowerCase() === "all years") { 57586 pageIndex = 1; 57587 renderAwards(1, getCurrentPage()); 57588 return; 57589 } 57590 var list = ""; 57591 $.each(result.PageItems, function (i, value) { 57592 if ((year && year.toLowerCase() === "all years") || (value && value.Year && value.Year.indexOf(year) >= 0)) { 57593 count_++; 57594 var bulletPointMap = value.Location.split(",").map(function (item) { 57595 return '<li class="award-bullet">' + item + "</li>"; 57596 }); 57597 list += 57598 '<div class="row"><div class="col-xs-8"><h5 class="title-5"> ' + 57599 value.Name +
57600 ' </h5><p class="text-default"> ' + 57601 value.AwardName + 57602 '</p></div><div class="col-xs-4"><h5 class="title-5"> <ul class="awards-bullets-container">' + 57603 bulletPointMap.join("") + 57604 "</ul></h5></div></div>"; 57605 } 57606 }); 57607 $("#" + currentPage + " .awards").append(list); 57608 } else { 57609 $(".JS_MoreAwards").addClass("hidden"); 57610 $(".awards-header").addClass("hidden"); 57611 } 57612 if (count_ == 0) { 57613 $("#" + currentPage + " .awards").append('<div class="inner-container no-result title-5 text-center">' + $(".error-message").text() + "</div>"); 57614 $(".awards-header").addClass("hidden"); 57615 } 57616 if (year && year.toLowerCase() === "all years") { 57617 $(".JS_MoreAwards").removeClass("hidden"); 57618 $(".awards-header").removeClass("hidden"); 57619 } 57620 } 57621 function loadMore(id, pageIndex, page) { 57622 $(".JS_MoreAwards").addClass("hidden"); 57623 $(".awards-header").addClass("hidden"); 57624 $(".loader").removeClass("hidden"); 57625 if (rewards_result && page === cachedPage) { 57626 renderAwards(pageIndex, page); 57627 return; 57628 } 57629 $.ajax({ 57630 url: FCL_API_AWARDS, 57631 dataType: "json", 57632 type: "GET", 57633 data: { id: id, pageindex: pageIndex, pagePath: $("#awardsListComponent").val(), tabAttr: page, insideTab: $("#insideTabs").val() }, 57634 complete: function (r) { 57635 if (r.status !== 200) { 57636 console.log("Sorry, an unexpected error occured, please try again or contact the admin."); 57637 return false; 57638 } 57639 window.rewards_result = JSON.parse(r.responseText); 57640 window.cachedPage = page || ""; 57641 renderAwards(pageIndex, page); 57642 }, 57643 }); 57644 } 57645 function renderAwards(pageindex, page) { 57646 var result = rewards_result; 57647 var totalCount = result.TotalCount; 57648 pageindex = pageindex || 1; 57649 if (result.PageItems) { 57650 $(".loader").addClass("hidden"); 57651 $(".JS_MoreAwards").removeClass("hidden"); 57652 $(".awards-header").removeClass("hidden"); 57653 var currentItem = totalCount - pageSize * pageIndex; 57654 $(".JS_MoreAwards span").text("(" + currentItem + ")"); 57655 if (currentItem <= 0) { 57656 $(".JS_MoreAwards").addClass("hidden"); 57657 } 57658 var list = ""; 57659 var splicedArray = result.PageItems.slice((pageIndex - 1) * pageSize, pageSize * pageIndex); 57660 $.each(splicedArray, function (i, value) { 57661 var bulletPointMap = value.Location.split(",").map(function (item) { 57662 return '<li class="award-bullet">' + item + "</li>"; 57663 }); 57664 list += 57665 '<div class="row"><div class="col-xs-8"><h5 class="title-5"> ' + 57666 value.Name + 57667 ' </h5><p class="text-default"> ' + 57668 value.AwardName + 57669 '</p></div><div class="col-xs-4"><h5 class="title-5"> <ul class="awards-bullets-container">' + 57670 bulletPointMap.join("") + 57671 "</ul></h5></div></div>"; 57672 }); 57673 $("#" + page + " .awards").append(list); 57674 } else { 57675 $(".JS_MoreAwards").addClass("hidden"); 57676 $(".awards-header").addClass("hidden"); 57677 } 57678 if (totalCount == 0) { 57679 $("#" + page + " .awards").append('<div class="inner-container no-result title-5 text-center">' + $(".error-message").text() + "</div>"); 57680 $(".awards-header").addClass("hidden"); 57681 } 57682 } 57683 function getCurrentPage() { 57684 var currentPage = window.location.href.split("#"); 57685 return (currentPage = currentPage[1]); 57686 } 57687 var pageId = $("#corporate .awards-block").data("page-id"); 57688 if ($(".JS_MoreAwards span").length != $(".JS_MoreAwards").length) { 57689 $(".JS_MoreAwards").each(function (index, el) { 57690 if ($(this).children("span").length == 0) {
57691 $(this).append(" <span></span>"); 57692 } 57693 }); 57694 } 57695 if (getCurrentPage() === undefined && pageId !== undefined) { 57696 loadMore(pageId, 1, "corporate"); 57697 } else if (pageId !== undefined) { 57698 loadMore(pageId, 1, getCurrentPage()); 57699 } 57700 if (pageId == undefined && $("#commercial").length) { 57701 pageId = $("#commercial .awards-block").data("page-id"); 57702 loadMore(pageId, 1, "commercial"); 57703 } 57704 $(".overlap-up .tab").on("click", function () { 57705 if ($(".awards-block").length >= 1) { 57706 var pageName = $(this).find("a").attr("href").split("#")[1]; 57707 var pageId = $("#" + pageName + " .awards-block").data("pageId"); 57708 pageIndex = 1; 57709 $(".awards").html(""); 57710 loadMore(pageId, 1, pageName); 57711 } 57712 }); 57713 $(".JS_MoreAwards").on("click", function () { 57714 pageIndex++; 57715 pageId = $(this).closest(".awards-block").data("page-id"); 57716 if (getCurrentPage() === undefined) { 57717 if ($("#commercial").length) { 57718 loadMore(pageId, pageIndex, "commercial"); 57719 } else { 57720 loadMore(pageId, pageIndex, "corporate"); 57721 } 57722 } else { 57723 loadMore(pageId, pageIndex, getCurrentPage()); 57724 } 57725 }); 57726})(); 57727var rewards_result, cachedPage; 57728jQuery(document).ready(function () { 57729 (function ($) { 57730 window.pickadateInit = function () { 57731 if ($(".pickadate:not(.pickadated)").length > 0) { 57732 $(".input-from").each(function () { 57733 var id = $(this).attr("id"), 57734 $to = $(this).closest(".row").find(".input-to"), 57735 toId = $to.attr("id"); 57736 var from_$input = $("#" + id).pickadate({ max: -1, today: false, format: "dd mmm, yyyy" }), 57737 from_picker = from_$input.pickadate("picker"); 57738 var to_$input = $("#" + toId).pickadate({ max: -1, today: false, format: "dd mmm, yyyy" }), 57739 to_picker = to_$input.pickadate("picker"); 57740 if (from_picker.get("value")) { 57741 to_picker.set("min", from_picker.get("select")); 57742 to_picker.set("max", true); 57743 } 57744 if (to_picker.get("value")) { 57745 from_picker.set("max", to_picker.get("select")); 57746 } 57747 from_picker.on("set", function (event) { 57748 if (event.select) { 57749 to_picker.set("min", from_picker.get("select")); 57750 from_$input.find("~ input.pickertext").val(from_picker.get("value")); 57751 } else if ("clear" in event) { 57752 from_$input.find("~ input.pickertext").val(""); 57753 to_picker.set("min", false); 57754 } 57755 }); 57756 to_picker.on("set", function (event) { 57757 if (event.select) { 57758 from_picker.set("max", to_picker.get("select")); 57759 to_$input.find("~ input.pickertext").val(to_picker.get("value")); 57760 } else if ("clear" in event) { 57761 from_$input.find("~ input.pickertext").val(""); 57762 from_picker.set("max", false); 57763 } 57764 }); 57765 from_$input.find("~ input.pickertext").on({ 57766 change: function () { 57767 parseInputDate(this, from_picker); 57768 }, 57769 focus: function () { 57770 from_picker.open(false); 57771 }, 57772 blur: function () { 57773 from_picker.close(); 57774 }, 57775 keypress: function (event) { 57776 if (event.keyCode === 10 || event.keyCode === 13) { 57777 event.preventDefault(); 57778 parseInputDate(this, from_picker); 57779 } 57780 }, 57781 }); 57782 to_$input.find("~ input.pickertext").on({ 57783 change: function () { 57784 parseInputDate(this, to_picker); 57785 }, 57786 focus: function () { 57787 to_picker.open(false); 57788 }, 57789 blur: function () { 57790 to_picker.close(); 57791 }, 57792 keypress: function (event) { 57793 if (event.keyCode === 10 || event.keyCode === 13) { 57794 event.preventDefault(); 57795 parseInputDate(this, to_picker); 57796 } 57797 }, 57798 }); 57799 parseInputDate = function (input, picker) { 57800 if (input.value == "") { 57801 picker.clear(); 57802 return ""; 57803 } 57804 var parsedDate = moment(Date.parse(input.value)).format("DD MMM, YYYY"); 57805 if (parsedDate) { 57806 picker.set("select", parsedDate); 57807 } 57808 return parsedDate; 57809 }; 57810 $("#" + id).addClass("pickadated"); 57811 $("#" + toId).addClass("pickadated"); 57812 }); 57813 } 57814 }; 57815 pickadateInit(); 57816 })(jQuery); 57817}); 57818var Utils = {}, 57819 moment; 57820Utils.isMobile = function () { 57821 var check = false;
57822 (function (a) { 57823 if ( 57824 /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test( 57825 a 57826 ) || 57827 /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test( 57828 a.substr(0, 4) 57829 ) 57830 ) { 57831 check = true; 57832 } 57833 })(navigator.userAgent || navigator.vendor || window.opera); 57834 return check; 57835}; 57836function splitTime(time) { 57837 return time.split(":"); 57838} 57839Utils.initClocks = function () { 57840 jQuery(function () { 57841 (function ($) { 57842 setInterval(function () { 57843 var $ele = $(this); 57844 var timezone = $ele.data("timezone"); 57845 var australia = moment.tz(new Date(), "Australia/Sydney").format("h:mm:a"); 57846 var australiaHourMin = splitTime(australia); 57847 var hr_deg = australiaHourMin[0] * (360 / 12); 57848 var min_deg = australiaHourMin[1] * (360 / 60); 57849 var ampm = australiaHourMin[2]; 57850 $("#clock-au .minute-hand").css({ 57851 "-webkit-transform": "rotate(" + min_deg + "deg)", 57852 "-moz-transform": "rotate(" + min_deg + "deg)", 57853 "-o-transform": "rotate(" + min_deg + "deg)", 57854 "-ms-transform": "rotate(" + min_deg + "deg)", 57855 transform: "rotate(" + min_deg + "deg)", 57856 }); 57857 $("#clock-au .hour-hand").css({ 57858 "-webkit-transform": "rotate(" + hr_deg + "deg)", 57859 "-moz-transform": "rotate(" + hr_deg + "deg)", 57860 "-o-transform": "rotate(" + hr_deg + "deg)", 57861 "-ms-transform": "rotate(" + hr_deg + "deg)", 57862 transform: "rotate(" + hr_deg + "deg)", 57863 }); 57864 $("#clock-au .spacetime").html(australiaHourMin[0] + ":" + australiaHourMin[1] + " " + ampm); 57865 var london = moment.tz(new Date(), "Europe/London").format("h:mm:a"); 57866 var londonHourMin = splitTime(london); 57867 var hr_deg = londonHourMin[0] * (360 / 12); 57868 var min_deg = londonHourMin[1] * (360 / 60); 57869 var ampm = londonHourMin[2]; 57870 $("#clock-uk .minute-hand").css({ 57871 "-webkit-transform": "rotate(" + min_deg + "deg)", 57872 "-moz-transform": "rotate(" + min_deg + "deg)", 57873 "-o-transform": "rotate(" + min_deg + "deg)", 57874 "-ms-transform": "rotate(" + min_deg + "deg)", 57875 transform: "rotate(" + min_deg + "deg)", 57876 }); 57877 $("#clock-uk .hour-hand").css({ 57878 "-webkit-transform": "rotate(" + hr_deg + "deg)", 57879 "-moz-transform": "rotate(" + hr_deg + "deg)", 57880 "-o-transform": "rotate(" + hr_deg + "deg)", 57881 "-ms-transform": "rotate(" + hr_deg + "deg)", 57882 transform: "rotate(" + hr_deg + "deg)", 57883 }); 57884 $("#clock-uk .spacetime").html(londonHourMin[0] + ":" + londonHourMin[1] + " " + ampm); 57885 var europe = moment.tz(new Date(), "Europe/Amsterdam").format("h:mm:a");
57886 var europeHourMin = splitTime(europe); 57887 var hr_deg = europeHourMin[0] * (360 / 12); 57888 var min_deg = europeHourMin[1] * (360 / 60); 57889 var ampm = europeHourMin[2]; 57890 $("#clock-eu .minute-hand").css({ 57891 "-webkit-transform": "rotate(" + min_deg + "deg)", 57892 "-moz-transform": "rotate(" + min_deg + "deg)", 57893 "-o-transform": "rotate(" + min_deg + "deg)", 57894 "-ms-transform": "rotate(" + min_deg + "deg)", 57895 transform: "rotate(" + min_deg + "deg)", 57896 }); 57897 $("#clock-eu .hour-hand").css({ 57898 "-webkit-transform": "rotate(" + hr_deg + "deg)", 57899 "-moz-transform": "rotate(" + hr_deg + "deg)", 57900 "-o-transform": "rotate(" + hr_deg + "deg)", 57901 "-ms-transform": "rotate(" + hr_deg + "deg)", 57902 transform: "rotate(" + hr_deg + "deg)", 57903 }); 57904 $("#clock-eu .spacetime").html(europeHourMin[0] + ":" + europeHourMin[1] + " " + ampm); 57905 var singapore = moment.tz(new Date(), "Asia/Singapore").format("h:mm:a"); 57906 var singaporeHourMin = splitTime(singapore); 57907 var hr_deg = singaporeHourMin[0] * (360 / 12); 57908 var min_deg = singaporeHourMin[1] * (360 / 60); 57909 var ampm = singaporeHourMin[2]; 57910 $("#clock-sg .minute-hand").css({ 57911 "-webkit-transform": "rotate(" + min_deg + "deg)", 57912 "-moz-transform": "rotate(" + min_deg + "deg)", 57913 "-o-transform": "rotate(" + min_deg + "deg)", 57914 "-ms-transform": "rotate(" + min_deg + "deg)", 57915 transform: "rotate(" + min_deg + "deg)", 57916 }); 57917 $("#clock-sg .hour-hand").css({ 57918 "-webkit-transform": "rotate(" + hr_deg + "deg)", 57919 "-moz-transform": "rotate(" + hr_deg + "deg)", 57920 "-o-transform": "rotate(" + hr_deg + "deg)", 57921 "-ms-transform": "rotate(" + hr_deg + "deg)", 57922 transform: "rotate(" + hr_deg + "deg)", 57923 }); 57924 $("#clock-sg .spacetime").html(singaporeHourMin[0] + ":" + singaporeHourMin[1] + " " + ampm); 57925 var thailand = moment.tz(new Date(), "Asia/Bangkok").format("h:mm:a"); 57926 var thailandHourMin = splitTime(thailand); 57927 var hr_deg = thailandHourMin[0] * (360 / 12); 57928 var min_deg = thailandHourMin[1] * (360 / 60); 57929 var ampm = thailandHourMin[2]; 57930 $("#clock-th .minute-hand").css({ 57931 "-webkit-transform": "rotate(" + min_deg + "deg)", 57932 "-moz-transform": "rotate(" + min_deg + "deg)", 57933 "-o-transform": "rotate(" + min_deg + "deg)", 57934 "-ms-transform": "rotate(" + min_deg + "deg)", 57935 transform: "rotate(" + min_deg + "deg)", 57936 }); 57937 $("#clock-th .hour-hand").css({ 57938 "-webkit-transform": "rotate(" + hr_deg + "deg)", 57939 "-moz-transform": "rotate(" + hr_deg + "deg)", 57940 "-o-transform": "rotate(" + hr_deg + "deg)", 57941 "-ms-transform": "rotate(" + hr_deg + "deg)", 57942 transform: "rotate(" + hr_deg + "deg)", 57943 }); 57944 $("#clock-th .spacetime").html(thailandHourMin[0] + ":" + thailandHourMin[1] + " " + ampm); 57945 var china = moment.tz(new Date(), "Asia/Shanghai").format("h:mm:a"); 57946 var chinaHourMin = splitTime(china); 57947 var hr_deg = chinaHourMin[0] * (360 / 12); 57948 var min_deg = chinaHourMin[1] * (360 / 60); 57949 var ampm = chinaHourMin[2]; 57950 $("#clock-ch .minute-hand").css({ 57951 "-webkit-transform": "rotate(" + min_deg + "deg)", 57952 "-moz-transform": "rotate(" + min_deg + "deg)", 57953 "-o-transform": "rotate(" + min_deg + "deg)", 57954 "-ms-transform": "rotate(" + min_deg + "deg)", 57955 transform: "rotate(" + min_deg + "deg)", 57956 }); 57957 $("#clock-ch .hour-hand").css({ 57958 "-webkit-transform": "rotate(" + hr_deg + "deg)", 57959 "-moz-transform": "rotate(" + hr_deg + "deg)", 57960 "-o-transform": "rotate(" + hr_deg + "deg)", 57961 "-ms-transform": "rotate(" + hr_deg + "deg)", 57962 transform: "rotate(" + hr_deg + "deg)", 57963 }); 57964 $("#clock-ch .spacetime").html(chinaHourMin[0] + ":" + chinaHourMin[1] + " " + ampm); 57965 var vietnam = moment.tz(new Date(), "Asia/Ho_Chi_Minh").format("h:mm:a"); 57966 var vietnamHourMin = splitTime(vietnam); 57967 var hr_deg = vietnamHourMin[0] * (360 / 12); 57968 var min_deg = vietnamHourMin[1] * (360 / 60); 57969 var ampm = vietnamHourMin[2]; 57970 $("#clock-vn .minute-hand").css({ 57971 "-webkit-transform": "rotate(" + min_deg + "deg)", 57972 "-moz-transform": "rotate(" + min_deg + "deg)", 57973 "-o-transform": "rotate(" + min_deg + "deg)", 57974 "-ms-transform": "rotate(" + min_deg + "deg)", 57975 transform: "rotate(" + min_deg + "deg)", 57976 }); 57977 $("#clock-vn .hour-hand").css({ 57978 "-webkit-transform": "rotate(" + hr_deg + "deg)", 57979 "-moz-transform": "rotate(" + hr_deg + "deg)", 57980 "-o-transform": "rotate(" + hr_deg + "deg)", 57981 "-ms-transform": "rotate(" + hr_deg + "deg)", 57982 transform: "rotate(" + hr_deg + "deg)", 57983 }); 57984 $("#clock-vn .spacetime").html(vietnamHourMin[0] + ":" + vietnamHourMin[1] + " " + ampm); 57985 }, 1000); 57986 })(jQuery); 57987 }); 57988}; 57989Utils.zoomPage = function (enlarge) { 57990 jQuery(function () { 57991 (function ($) { 57992 enlarge = enlarge || ""; 57993 if (enlarge != "reduce") $(".page").first().addClass("zoomed"); 57994 else $(".page").first().removeClass("zoomed"); 57995 })(jQuery); 57996 }); 57997}; 57998Utils.empty = function (mixedVar) { 57999 var undef; 58000 var key; 58001 var i; 58002 var len; 58003 var emptyValues = [undef, null, false, 0, "", "0"]; 58004 for (i = 0, len = emptyValues.length; i < len; i++) { 58005 if (mixedVar === emptyValues[i]) { 58006 return true; 58007 } 58008 } 58009 if (typeof mixedVar === "object") { 58010 for (key in mixedVar) { 58011 if (mixedVar.hasOwnProperty(key)) { 58012 return false;
58013 } 58014 } 58015 return true; 58016 } 58017 return false; 58018}; 58019$(window).on('load', function () { 58020 $(document).on("click", ".ie .enlarge", function () { 58021 window.scrollTo(180, 0); 58022 }); 58023}); 58024(function ($, window, undefined) { 58025 "use strict"; 58026 var pluginName = "accordion"; 58027 function Plugin(element, options) { 58028 this.element = $(element); 58029 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 58030 this.init(); 58031 } 58032 Plugin.prototype = { 58033 init: function () { 58034 var that = this; 58035 that.element.slick(that.options); 58036 }, 58037 destroy: function () { 58038 $.removeData(this.element[0], pluginName); 58039 }, 58040 }; 58041 $.fn[pluginName] = function (options, params) { 58042 return this.each(function () { 58043 var instance = $.data(this, pluginName); 58044 if (!instance) { 58045 $.data(this, pluginName, new Plugin(this, options)); 58046 } else if (instance[options]) { 58047 instance[options](params); 58048 } 58049 }); 58050 }; 58051 $.fn[pluginName].defaults = {}; 58052 $(window).on('load', function () { 58053 $(document).on("click", ".all-location .collapse-header", function () { 58054 var accordion = $(this).closest("[data-accordion]"); 58055 var newContent = $(this).siblings(".collapse-inner"); 58056 if ($(this).hasClass("active")) { 58057 $(this).removeClass("active"); 58058 newContent.slideUp("easeInOutBounce"); 58059 } else { 58060 newContent.slideDown("easeInOutBounce"); 58061 $(this).addClass("active"); 58062 } 58063 }); 58064 $(document).on("click", ".menu .sub-nav a", function () { 58065 $(this).parent().parents("li").removeClass("active"); 58066 }); 58067 if (!$(".icon-loader").is(":visible")) { 58068 $('[data-query="worktype"] [data-val="all"]').trigger("click"); 58069 $(".tab.active > a").trigger("click"); 58070 } 58071 }); 58072 $("[data-accordion] .collapse-header").on("click.accordion", function (e) { 58073 e.preventDefault(); 58074 var accordion = $(this).closest("[data-accordion]"); 58075 var newContent = $(this).siblings(".collapse-inner"); 58076 if ($(this).hasClass("active")) { 58077 $(this).removeClass("active"); 58078 newContent.slideUp("easeInOutBounce"); 58079 } else { 58080 newContent.slideDown("easeInOutBounce"); 58081 $(this).addClass("active"); 58082 } 58083 }); 58084})(jQuery, window); 58085!(function (t, e) { 58086 "object" == typeof exports && "object" == typeof module ? (module.exports = e()) : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? (exports.ClipboardJS = e()) : (t.ClipboardJS = e()); 58087})(this, function () { 58088 return (function (t) { 58089 function e(o) { 58090 if (n[o]) return n[o].exports; 58091 var r = (n[o] = { i: o, l: !1, exports: {} }); 58092 return t[o].call(r.exports, r, r.exports, e), (r.l = !0), r.exports; 58093 } 58094 var n = {}; 58095 return ( 58096 (e.m = t), 58097 (e.c = n), 58098 (e.i = function (t) { 58099 return t; 58100 }), 58101 (e.d = function (t, n, o) { 58102 e.o(t, n) || Object.defineProperty(t, n, { configurable: !1, enumerable: !0, get: o }); 58103 }), 58104 (e.n = function (t) { 58105 var n = 58106 t && t.__esModule 58107 ? function () { 58108 return t.default; 58109 } 58110 : function () { 58111 return t; 58112 }; 58113 return e.d(n, "a", n), n; 58114 }), 58115 (e.o = function (t, e) { 58116 return Object.prototype.hasOwnProperty.call(t, e); 58117 }), 58118 (e.p = ""), 58119 e((e.s = 3)) 58120 ); 58121 })([ 58122 function (t, e, n) { 58123 var o, r, i; 58124 !(function (a, c) { 58125 (r = [t, n(7)]), (o = c), void 0 !== (i = "function" == typeof o ? o.apply(e, r) : o) && (t.exports = i); 58126 })(0, function (t, e) { 58127 "use strict"; 58128 function n(t, e) { 58129 if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function"); 58130 } 58131 var o = (function (t) { 58132 return t && t.__esModule ? t : { default: t }; 58133 })(e), 58134 r = 58135 "function" == typeof Symbol && "symbol" == typeof Symbol.iterator 58136 ? function (t) { 58137 return typeof t; 58138 } 58139 : function (t) { 58140 return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t; 58141 }, 58142 i = (function () { 58143 function t(t, e) { 58144 for (var n = 0; n < e.length; n++) { 58145 var o = e[n]; 58146 (o.enumerable = o.enumerable || !1), (o.configurable = !0), "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o); 58147 } 58148 } 58149 return function (e, n, o) { 58150 return n && t(e.prototype, n), o && t(e, o), e; 58151 }; 58152 })(), 58153 a = (function () { 58154 function t(e) { 58155 n(this, t), this.resolveOptions(e), this.initSelection(); 58156 } 58157 return ( 58158 i(t, [ 58159 { 58160 key: "resolveOptions", 58161 value: function () { 58162 var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 58163 (this.action = t.action), (this.container = t.container), (this.emitter = t.emitter), (this.target = t.target), (this.text = t.text), (this.trigger = t.trigger), (this.selectedText = ""); 58164 }, 58165 }, 58166 { 58167 key: "initSelection", 58168 value: function () { 58169 this.text ? this.selectFake() : this.target && this.selectTarget(); 58170 }, 58171 }, 58172 { 58173 key: "selectFake", 58174 value: function () { 58175 var t = this, 58176 e = "rtl" == document.documentElement.getAttribute("dir"); 58177 this.removeFake(), 58178 (this.fakeHandlerCallback = function () { 58179 return t.removeFake(); 58180 }), 58181 (this.fakeHandler = this.container.addEventListener("click", this.fakeHandlerCallback) || !0), 58182 (this.fakeElem = document.createElement("textarea")), 58183 (this.fakeElem.style.fontSize = "12pt"), 58184 (this.fakeElem.style.border = "0"), 58185 (this.fakeElem.style.padding = "0"), 58186 (this.fakeElem.style.margin = "0"), 58187 (this.fakeElem.style.position = "absolute"), 58188 (this.fakeElem.style[e ? "right" : "left"] = "-9999px"); 58189 var n = window.pageYOffset || document.documentElement.scrollTop; 58190 (this.fakeElem.style.top = n + "px"), 58191 this.fakeElem.setAttribute("readonly", ""), 58192 (this.fakeElem.value = this.text), 58193 this.container.appendChild(this.fakeElem), 58194 (this.selectedText = (0, o.default)(this.fakeElem)), 58195 this.copyText(); 58196 }, 58197 }, 58198 { 58199 key: "removeFake", 58200 value: function () { 58201 this.fakeHandler && (this.container.removeEventListener("click", this.fakeHandlerCallback), (this.fakeHandler = null), (this.fakeHandlerCallback = null)), 58202 this.fakeElem && (this.container.removeChild(this.fakeElem), (this.fakeElem = null)); 58203 }, 58204 }, 58205 { 58206 key: " = $(this);", 58207 value: function () { 58208 (this.selectedText = (0, o.default)(this.target)), this.copyText(); 58209 }, 58210 }, 58211 { 58212 key: "copyText", 58213 value: function () { 58214 var t = void 0; 58215 try { 58216 t = document.execCommand(this.action); 58217 } catch (e) { 58218 t = !1; 58219 } 58220 this.handleResult(t); 58221 }, 58222 }, 58223 { 58224 key: "handleResult", 58225 value: function (t) { 58226 this.emitter.emit(t ? "success" : "error", { action: this.action, text: this.selectedText, trigger: this.trigger,
58226clearSelection: this.clearSelection.bind(this) }); 58227 }, 58228 }, 58229 { 58230 key: "clearSelection", 58231 value: function () { 58232 this.trigger && this.trigger.focus(), window.getSelection().removeAllRanges(); 58233 }, 58234 }, 58235 { 58236 key: "destroy", 58237 value: function () { 58238 this.removeFake(); 58239 }, 58240 }, 58241 { 58242 key: "action", 58243 set: function () { 58244 var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "copy"; 58245 if (((this._action = t), "copy" !== this._action && "cut" !== this._action)) throw new Error('Invalid "action" value, use either "copy" or "cut"'); 58246 }, 58247 get: function () { 58248 return this._action; 58249 }, 58250 }, 58251 { 58252 key: "target", 58253 set: function (t) { 58254 if (void 0 !== t) { 58255 if (!t || "object" !== (void 0 === t ? "undefined" : r(t)) || 1 !== t.nodeType) throw new Error('Invalid "target" value, use a valid Element'); 58256 if ("copy" === this.action && t.hasAttribute("disabled")) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); 58257 if ("cut" === this.action && (t.hasAttribute("readonly") || t.hasAttribute("disabled"))) 58258 throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); 58259 this._target = t; 58260 } 58261 }, 58262 get: function () { 58263 return this._target; 58264 }, 58265 }, 58266 ]), 58267 t 58268 ); 58269 })(); 58270 t.exports = a; 58271 }); 58272 }, 58273 function (t, e, n) { 58274 function o(t, e, n) { 58275 if (!t && !e && !n) throw new Error("Missing required arguments"); 58276 if (!c.string(e)) throw new TypeError("Second argument must be a String"); 58277 if (!c.fn(n)) throw new TypeError("Third argument must be a Function"); 58278 if (c.node(t)) return r(t, e, n); 58279 if (c.nodeList(t)) return i(t, e, n); 58280 if (c.string(t)) return a(t, e, n); 58281 throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList"); 58282 } 58283 function r(t, e, n) { 58284 return ( 58285 t.addEventListener(e, n), 58286 { 58287 destroy: function () { 58288 t.removeEventListener(e, n); 58289 }, 58290 } 58291 ); 58292 } 58293 function i(t, e, n) { 58294 return ( 58295 Array.prototype.forEach.call(t, function (t) { 58296 t.addEventListener(e, n); 58297 }), 58298 { 58299 destroy: function () { 58300 Array.prototype.forEach.call(t, function (t) { 58301 t.removeEventListener(e, n); 58302 }); 58303 }, 58304 } 58305 ); 58306 } 58307 function a(t, e, n) { 58308 return u(document.body, t, e, n); 58309 } 58310 var c = n(6), 58311 u = n(5); 58312 t.exports = o; 58313 }, 58314 function (t, e) { 58315 function n() {} 58316 (n.prototype = { 58317 on: function (t, e, n) { 58318 var o = this.e || (this.e = {}); 58319 return (o[t] || (o[t] = [])).push({ fn: e, ctx: n }), this; 58320 }, 58321 once: function (t, e, n) { 58322 function o() { 58323 r.off(t, o), e.apply(n, arguments); 58324 } 58325 var r = this; 58326 return (o._ = e), this.on(t, o, n); 58327 }, 58328 emit: function (t) { 58329 var e = [].slice.call(arguments, 1), 58330 n = ((this.e || (this.e = {}))[t] || []).slice(), 58331 o = 0, 58332 r = n.length; 58333 for (o; o < r; o++) n[o].fn.apply(n[o].ctx, e); 58334 return this; 58335 }, 58336 off: function (t, e) { 58337 var n = this.e || (this.e = {}), 58338 o = n[t], 58339 r = []; 58340 if (o && e) for (var i = 0, a = o.length; i < a; i++) o[i].fn !== e && o[i].fn._ !== e && r.push(o[i]); 58341 return r.length ? (n[t] = r) : delete n[t], this; 58342 }, 58343 }), 58344 (t.exports = n); 58345 }, 58346 function (t, e, n) { 58347 var o, r, i; 58348 !(function (a, c) { 58349 (r = [t, n(0), n(2), n(1)]), (o = c), void 0 !== (i = "function" == typeof o ? o.apply(e, r) : o) && (t.exports = i); 58350 })(0, function (t, e, n, o) { 58351 "use strict"; 58352 function r(t) { 58353 return t && t.__esModule ? t : { default: t }; 58354 } 58355 function i(t, e) { 58356 if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function"); 58357 } 58358 function a(t, e) { 58359 if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 58360 return !e || ("object" != typeof e && "function" != typeof e) ? t : e; 58361 } 58362 function c(t, e) { 58363 if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); 58364 (t.prototype = Object.create(e && e.prototype, { c
58364onstructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } })), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : (t.__proto__ = e)); 58365 } 58366 function u(t, e) { 58367 var n = "data-clipboard-" + t; 58368 if (e.hasAttribute(n)) return e.getAttribute(n); 58369 } 58370 var l = r(e), 58371 s = r(n), 58372 f = r(o), 58373 d = 58374 "function" == typeof Symbol && "symbol" == typeof Symbol.iterator 58375 ? function (t) { 58376 return typeof t; 58377 } 58378 : function (t) { 58379 return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t; 58380 }, 58381 h = (function () { 58382 function t(t, e) { 58383 for (var n = 0; n < e.length; n++) { 58384 var o = e[n]; 58385 (o.enumerable = o.enumerable || !1), (o.configurable = !0), "value" in o && (o.writable = !0), Object.defineProperty(t, o.key, o); 58386 } 58387 } 58388 return function (e, n, o) { 58389 return n && t(e.prototype, n), o && t(e, o), e; 58390 }; 58391 })(), 58392 p = (function (t) { 58393 function e(t, n) { 58394 i(this, e); 58395 var o = a(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); 58396 return o.resolveOptions(n), o.listenClick(t), o; 58397 } 58398 return ( 58399 c(e, t), 58400 h( 58401 e, 58402 [ 58403 { 58404 key: "resolveOptions", 58405 value: function () { 58406 var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 58407 (this.action = "function" == typeof t.action ? t.action : this.defaultAction), 58408 (this.target = "function" == typeof t.target ? t.target : this.defaultTarget), 58409 (this.text = "function" == typeof t.text ? t.text : this.defaultText), 58410 (this.container = "object" === d(t.container) ? t.container : document.body); 58411 }, 58412 }, 58413 { 58414 key: "listenClick", 58415 value: function (t) { 58416 var e = this; 58417 this.listener = (0, f.default)(t, "click", function (t) { 58418 return e.onClick(t); 58419 }); 58420 }, 58421 }, 58422 { 58423 key: "onClick", 58424 value: function (t) { 58425 var e = t.delegateTarget || t.currentTarget; 58426 this.clipboardAction && (this.clipboardAction = null), 58427 (this.clipboardAction = new l.default({ action: this.action(e), target: this.target(e), text: this.text(e), container: this.container, trigger: e, emitter: this })); 58428 }, 58429 }, 58430 { 58431 key: "defaultAction", 58432 value: function (t) { 58433 return u("action", t); 58434 }, 58435 }, 58436 { 58437 key: "defaultTarget", 58438 value: function (t) { 58439 var e = u("target", t); 58440 if (e) return document.querySelector(e); 58441 }, 58442 }, 58443 { 58444 key: "defaultText", 58445 value: function (t) { 58446 return u("text", t); 58447 }, 58448 }, 58449 {
58450 key: "destroy", 58451 value: function () { 58452 this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), (this.clipboardAction = null)); 58453 }, 58454 }, 58455 ], 58456 [ 58457 { 58458 key: "isSupported", 58459 value: function () { 58460 var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], 58461 e = "string" == typeof t ? [t] : t, 58462 n = !!document.queryCommandSupported; 58463 return ( 58464 e.forEach(function (t) { 58465 n = n && !!document.queryCommandSupported(t); 58466 }), 58467 n 58468 ); 58469 }, 58470 }, 58471 ] 58472 ), 58473 e 58474 ); 58475 })(s.default); 58476 t.exports = p; 58477 }); 58478 }, 58479 function (t, e) { 58480 function n(t, e) { 58481 for (; t && t.nodeType !== o; ) { 58482 if ("function" == typeof t.matches && t.matches(e)) return t; 58483 t = t.parentNode; 58484 } 58485 } 58486 var o = 9; 58487 if ("undefined" != typeof Element && !Element.prototype.matches) { 58488 var r = Element.prototype; 58489 r.matches = r.matchesSelector || r.mozMatchesSelector || r.msMatchesSelector || r.oMatchesSelector || r.webkitMatchesSelector; 58490 } 58491 t.exports = n; 58492 }, 58493 function (t, e, n) { 58494 function o(t, e, n, o, r) { 58495 var a = i.apply(this, arguments); 58496 return ( 58497 t.addEventListener(n, a, r), 58498 { 58499 destroy: function () { 58500 t.removeEventListener(n, a, r); 58501 }, 58502 } 58503 ); 58504 } 58505 function r(t, e, n, r, i) { 58506 return "function" == typeof t.addEventListener 58507 ? o.apply(null, arguments) 58508 : "function" == typeof n 58509 ? o.bind(null, document).apply(null, arguments) 58510 : ("string" == typeof t && (t = document.querySelectorAll(t)), 58511 Array.prototype.map.call(t, function (t) { 58512 return o(t, e, n, r, i); 58513 })); 58514 } 58515 function i(t, e, n, o) { 58516 return function (n) { 58517 (n.delegateTarget = a(n.target, e)), n.delegateTarget && o.call(t, n); 58518 }; 58519 } 58520 var a = n(4); 58521 t.exports = r; 58522 }, 58523 function (t, e) { 58524 (e.node = function (t) { 58525 return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType; 58526 }), 58527 (e.nodeList = function (t) { 58528 var n = Object.prototype.toString.call(t); 58529 return void 0 !== t && ("[object NodeList]" === n || "[object HTMLCollection]" === n) && "length" in t && (0 === t.length || e.node(t[0])); 58530 }), 58531 (e.string = function (t) { 58532 return "string" == typeof t || t instanceof String; 58533 }), 58534 (e.fn = function (t) { 58535 return "[object Function]" === Object.prototype.toString.call(t); 58536 }); 58537 }, 58538 function (t, e) { 58539 function n(t) { 58540 var e; 58541 if ("SELECT" === t.nodeName) t.focus(), (e = t.value); 58542 else if ("INPUT" === t.nodeName || "TEXTAREA" === t.nodeName) { 58543 var n = t.hasAttribute("readonly"); 58544 n || t.setAttribute("readonly", ""), t.select(), t.setSelectionRange(0, t.value.length), n || t.removeAttribute("readonly"), (e = t.value); 58545 } else { 58546 t.hasAttribute("contenteditable") && t.focus(); 58547 var o = window.getSelection(), 58548 r = document.createRange(); 58549 r.selectNodeContents(t), o.removeAllRanges(), o.addRange(r), (e = o.toString()); 58550 } 58551 return e; 58552 } 58553 t.exports = n; 58554 }, 58555 ]); 58556}); 58557(function ($, window, undefined) { 58558 "use strict"; 58559 $(function () { 58560 $(".menu.overlap-up .caret > a").on("click ", function (e) { 58561 e.preventDefault(); 58562 if (!$(this).parent().hasClass("active")) { 58563 $(this).parent().siblings(".caret").removeClass("active"); 58564 $(this).parent().addClass("active"); 58565 } else { 58566 $(this).parent().removeClass("active"); 58567 } 58568 }); 58569 }); 58570})(jQuery, window); 58571(function ($, window, undefined) { 58572 "use strict"; 58573 var pluginName = "dropdown"; 58574 function Plugin(element, options) { 58575 this.element = $(element); 58576 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 58577 this.init(); 58578 } 58579 Plugin.prototype = { 58580 init: function () { 58581 var that = this; 58582 that.element.slick(that.options); 58583 }, 58584 destroy: function () { 58585 $.removeData(this.element[0], pluginName); 58586 }, 58587 }; 58588 $.fn[pluginName] = function (options, params) { 58589 return this.each(function () { 58590 var instance = $.data(this, pluginName); 58591 if (!instance) { 58592 $.data(this, pluginName, new Plugin(this, options)); 58593 } else if (instance[options]) { 58594 instance[options](params); 58595 } 58596 }); 58597 }; 58598 $.fn[pluginName].defaults = {}; 58599 window.initCustomSelect = function () { 58600 jQuery(document).ready(function () { 58601 (function ($) { 58602 $(".cust-select select:not(.cust-select-applied)").selectmenu({ 58603 widthMenu: $(this).width(), 58604 change: function (event, ui) { 58605 if (ui.item.value) { 58606 $(this).closest(".cust-select").addClass("selected");
58607 $(this).addClass("valid").removeClass("error"); 58608 } 58609 }, 58610 }); 58611 var delay = setTimeout(function () { 58612 var $select = $(".cust-select select:not(.cust-select-applied)"); 58613 $select.addClass("cust-select-applied"); 58614 $select.closest(".cust-select").removeClass("selected"); 58615 clearTimeout(delay); 58616 }, 1); 58617 })(jQuery); 58618 }); 58619 }; 58620 initCustomSelect(); 58621})(jQuery, window); 58622(function ($, window, undefined) { 58623 "use strict"; 58624 var pluginName = "event-calendar"; 58625 function Plugin(element, options) { 58626 this.element = $(element); 58627 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 58628 this.init(); 58629 } 58630 Plugin.prototype = { 58631 init: function () { 58632 var that = this; 58633 that.element.slick(that.options); 58634 }, 58635 destroy: function () { 58636 $.removeData(this.element[0], pluginName); 58637 }, 58638 }; 58639 $.fn[pluginName] = function (options, params) { 58640 return this.each(function () { 58641 var instance = $.data(this, pluginName); 58642 if (!instance) { 58643 $.data(this, pluginName, new Plugin(this, options)); 58644 } else if (instance[options]) { 58645 instance[options](params); 58646 } 58647 }); 58648 }; 58649 $.fn[pluginName].defaults = {}; 58650 $(function () {}); 58651})(jQuery, window); 58652(function ($, window, undefined) { 58653 "use strict"; 58654 var form = $("#application-form").show(); 58655 form.steps({ 58656 headerTag: "h3", 58657 bodyTag: "fieldset", 58658 transitionEffect: "slideLeft", 58659 labels: { cancel: "Cancel", current: "current step:", pagination: "Pagination", enableCancelButton: true, finish: $(".button-finish").text(), next: $(".button-next-1").text(), previous: "Previous", loading: "Loading ..." }, 58660 onStepChanging: function (event, currentIndex, newIndex) { 58661 if (currentIndex > newIndex) { 58662 return true; 58663 } 58664 if (currentIndex < newIndex) { 58665 form.find(".body:eq(" + newIndex + ") label.error").remove(); 58666 form.find(".body:eq(" + newIndex + ") .error").removeClass("error"); 58667 } 58668 form.validate().settings.ignore = ":disabled,:hidden"; 58669 var inValid = 0; 58670 $("#application-form-p-" + currentIndex + " select.required").each(function () { 58671 if (!$(this).val()) { 58672 $(this).addClass("error"); 58673 inValid++; 58674 } else { 58675 $(this).removeClass("error"); 58676 } 58677 }); 58678 if (!form.valid() || inValid > 0) return false; 58679 return true; 58680 }, 58681 onStepChanged: function (event, currentIndex, priorIndex) { 58682 if (currentIndex === 2 && Number($("#age-2").val()) >= 18) { 58683 form.steps("next"); 58684 } 58685 if (currentIndex === 2 && priorIndex === 3) { 58686 form.steps("previous"); 58687 } 58688 switch (currentIndex) { 58689 case 1: 58690 $(this).find('a[href="#next"]').html($(".button-next-2").text()); 58691 break; 58692 case 2: 58693 $(this).find('a[href="#next"]').html($(".button-next-3").text()); 58694 break; 58695 case 3: 58696 $(this).find('a[href="#next"]').html($(".button-next-4").text()); 58697 break; 58698 default: 58699 break; 58700 } 58701 }, 58702 onFinishing: function (event, currentIndex) { 58703 form.validate().settings.ignore = ":disabled"; 58704 return form.valid(); 58705 }, 58706 onFinished: function (event, currentIndex) {}, 58707 onInit: function () { 58708 $(".actions ul").append("<li><a href=" + form.data("exit-link") + " class='mar-left link-decor'>" + form.data("exit-text") + "</a></li>"); 58709 }, 58710 }).validate({ 58711 errorPlacement: function errorPlacement(error, element) { 58712 element.before(error); 58713 }, 58714 rules: {}, 58715 }); 58716 jQuery.validator.addMethod( 58717 "lettersonly", 58718 function(value, element) { 58719 return this.optional(element) || /^[A-Za-z\u00C0-\u024F\u1E00-\u1EFF\u0E00-\u0E7F\s]+$/.test(value); 58720 } 58721 ); 58722 jQuery.validator.addMethod( 58723 "specialChar", 58724 function (value, element) { 58725 return this.optional(element) || /([0-9a-zA-Z\s])$/.test(value); 58726 }, 58727 "Please Fill Correct Value in Field." 58728 ); 58729 $("form[data-validate]").each(function (key, form) { 58730 $(form).validate({ rules: { something: { specialChars: true } } }); 58731 }); 58732})(jQuery, window); 58733(function ($, window, undefined) { 58734 "use strict"; 58735 var pluginName = "dropdown"; 58736 function Plugin(element, options) { 58737 this.element = $(element); 58738 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 58739 this.init(); 58740 } 58741 Plugin.prototype = { 58742 init: function () { 58743 var that = this; 58744 that.element.slick(that.options); 58745 }, 58746 destroy: function () { 58747 $.removeData(this.element[0], pluginName); 58748 }, 58749 }; 58750 $.fn[pluginName] = function (options, params) { 58751 return this.each(function () { 58752 var instance = $.data(this, pluginName); 58753 if (!instance) { 58754 $.data(this, pluginName, new Plugin(this, options)); 58755 } else if (instance[options]) { 58756 instance[options](params); 58757 } 58758 }); 58759 }; 58760 $.fn[pluginName].defaults = {}; 58761 $(function () { 58762 var menuHeight = $(window).height() - $("#header").innerHeight(); 58763 $(".hamburger-box-v2").on("click.showMenu", function (e) { 58764 $(".collapse-header.active").siblings(".collapse-inner").slideUp(); 58765 $(".collapse-header.active").removeClass("active"); 58766 $(this).find(".hamburger-inner").toggleClass("active"); 58767 $(".mega-menu-mobile").toggleClass("showing"); 58768 $(".mega-menu-mobile.showing").css("max-height", menuHeight); 58769 $("html, body").toggleClass("no-scrolling"); 58770 if($(".mega-menu-mobile").hasClass("showing")) { 58771 $(".mainmenuV2 .main.language_nav").css("display", "none"); 58772 $(".mainmenuV2 .search").css("display", "none"); 58773 } 58774 else{ 58775 $(".mainmenuV2 .main.language_nav").css("display", "block"); 58776 $(".mainmenuV2 .search").css("display", "block"); 58777 } 58778 }); 58779 $(".hamburger-box").on("click.showMenu", function (e) { 58780 $(".collapse-header.active").siblings(".collapse-inner").slideUp(); 58781 $(".collapse-header.active").removeClass("active"); 58782 $(this).find(".hamburger-inner").toggleClass("active"); 58783 $(".mega-menu-mobile").toggleClass("showing"); 58784 $(".mega-menu-mobile.showing").css("max-height", menuHeight); 58785 $("html, body").toggleClass("no-scrolling"); 58786 }); 58787 $(".level-2 .item-header") 58788 .on("click.level2", function (e) { 58789 e.preventDefault(); 58790 $(this).siblings(".level-3").addClass("active"); 58791 $(this).closest(".mega-menu-mobile").find(".quick-links").addClass("hidden"); 58792 $(".level-1").addClass("showing-level-3 "); 58793 }) 58794 .on("click", "a", function (e) { 58795 e.stopPropagation(); 58796 }); 58797 $(".back-level-2").on("click.backLevel2", function (e) { 58798 e.preventDefault(); 58799 $(this).closest(".level-3").removeClass("active"); 58800 $(this).closest(".mega-menu-mobile").find(".quick-links").removeClass("hidden"); 58801 $(".level-1").removeClass("showing-level-3 "); 58802 $(".item-3 .item-header.active").siblings(".collapse-inner").slideUp(); 58803 $(".item-3 .item-header.active").removeClass("active"); 58804 }); 58805 $("[data-accordion-link] .collapse-header") 58806 .on("click.accordion", function (e) { 58807 e.preventDefault(); 58808 var accordion = $(this).closest("[data-accordion-link]"); 58809 var newContent = $(this).siblings(".collapse-inner"); 58810 if ($(this).hasClass("active")) { 58811 $(this).removeClass("active"); 58812 newContent.slideUp("easeInOutBounce"); 58813 } else { 58814 if ($(this).parents().hasClass("item-1") && !$(this).parents().hasClass("item-3")) { 58815 $(this).parents().parents().find(".item-1.collapse-item").children(".collapse-inner").slideUp("easeInOutBounce"); 58816 $(this).parents().parents().find(".item-1.collapse-item").children(".collapse-header").removeClass("active"); 58817 } 58818 newContent.slideDown("easeInOutBounce"); 58819 $(this).addClass("active"); 58820 } 58821 }) 58822 .on("click", "a", function (e) { 58823 e.stopPropagation(); 58824 }); 58825 }); 58826})(jQuery, window); 58827(function ($, window, undefined) { 58828 "use strict"; 58829 $(document).ready(function () { 58830 var irEmailContainer = $("div[data-section='ir-email']"); 58831 var irReitHash = window.location.hash; 58832 }); 58833})(jQuery, window); 58834(function ($, window, undefined) { 58835 "use strict"; 58836 var pluginName = "lightbox"; 58837 function Plugin(element, options) { 58838 this.element = $(element); 58839 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 58840 this.init(); 58841 } 58842 Plugin.prototype = { 58843 init: function () { 58844 var that = this; 58845 that.element.slick(that.options); 58846 }, 58847 destroy: function () { 58848 $.removeData(this.element[0], pluginName); 58849 }, 58850 }; 58851 $.fn[pluginName] = function (options, params) { 58852 return this.each(function () { 58853 var instance = $.data(this, pluginName); 58854 if (!instance) { 58855 $.data(this, pluginName, new Plugin(this, options)); 58856 } else if (instance[options]) { 58857 instance[options](params); 58858 } 58859 }); 58860 }; 58861 $.fn[pluginName].defaults = {}; 58862 $(function () {}); 58863})(jQuery, window); 58864(function ($, window, undefined) { 58865 "use strict"; 58866 $(function () { 58867 $(document).on("click", "[data-modal]", function (e) { 58868 e.preventDefault(); 58869 var screenOverlay = $(document.createElement("span")); 58870 screenOverlay.addClass("modal-backdrop"); 58871 var modal = $("#" + $(this).attr("data-modal")); 58872 if (modal.hasClass("modal-small")) { 58873 screenOverlay.appendTo("body"); 58874 } 58875 modal.addClass("active").fadeIn(); 58876 if ($(window).width() < 991) { 58877 $("html, body").addClass("no-scrolling"); 58878 } else { 58879 $("html").addClass("no-scrolling"); 58880 } 58881 var isExists = $('.managerdata_model.modal-container.active'); 58882 if(isExists){ 58883 window.managerDataAnalytics(isExists,this); 58884 } 58885 var isExist = $('.managerdata_model.modal-container.active'); 58886 if(isExist){ 58887 window.managerDataModelAnalytics(isExist,this); 58888 } 58889 }); 58890
58891 $(document).on("click","span.back-page",function() { 58892 var previousPageUrl = document.referrer; 58893 window.location.href= previousPageUrl; 58894 }); 58895 58896 $(document).on("click.closeModal", ".icon-close, .modal-close", function (e) { 58897 e.preventDefault(); 58898 var $modal = $(".modal"); 58899 $modal.removeClass("show-block"); 58900 $(".newpagesection>.modal").addClass("show-block"); 58901 $("html, body").removeClass("no-scrolling"); 58902 if ($modal.hasClass("modal-small")) { 58903 $(".modal-backdrop").remove(); 58904 } 58905 $modal.removeClass("active").fadeOut("400", function () { 58906 $modal.find(".step.active").removeClass("active").fadeOut(); 58907 $modal.find(".step:first-child").addClass("active").fadeIn(); 58908 }); 58909 }); 58910 }); 58911})(jQuery, window); 58912(function ($, window, undefined) { 58913 "use strict"; 58914 jQuery(document).ready(function () { 58915 $(function () { 58916 if ($(".mega-menu .links").children("li").length > 3) { 58917 $(".mega-menu .links").addClass("large"); 58918 } 58919 var oneTouch = false; 58920 $(".touch.tablet #logo-menu .links > li > a").on("click", function (e) { 58921 if (oneTouch == false) { 58922 e.preventDefault(); 58923 oneTouch = true; 58924 } 58925 }); 58926 }); 58927 }); 58928})(jQuery, window); 58929(function ($, window, undefined) { 58930 "use strict"; 58931 var pluginName = "slider"; 58932 function Plugin(element, options) { 58933 this.element = $(element); 58934 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 58935 this.init(); 58936 } 58937 Plugin.prototype = { 58938 init: function () { 58939 var that = this; 58940 that.element.slick(that.options); 58941 }, 58942 destroy: function () { 58943 $.removeData(this.element[0], pluginName); 58944 }, 58945 }; 58946 $.fn[pluginName] = function (options, params) { 58947 return this.each(function () { 58948 var instance = $.data(this, pluginName); 58949 if (!instance) { 58950 $.data(this, pluginName, new Plugin(this, options)); 58951 } else if (instance[options]) { 58952 instance[options](params); 58953 } 58954 }); 58955 }; 58956 $.fn[pluginName].defaults = {}; 58957 function playPauseVideo(slick, control) { 58958 var currentSlide, slideType, startTime, player, video; 58959 currentSlide = slick.find(".slick-current"); 58960 slideType = currentSlide.attr("class").split(" ")[1]; 58961 player = currentSlide.find("iframe").get(0); 58962 startTime = currentSlide.data("video-start"); 58963 video = currentSlide.children("video").get(0); 58964 if (video != null) { 58965 if (control === "play") { 58966 video.play(); 58967 } else { 58968 video.pause(); 58969 } 58970 } 58971 } 58972})(jQuery, window); 58973(function ($, window, undefined) { 58974 "use strict"; 58975 $(function () { 58976 $(".scroll-top").hide(); 58977 $(document).on("click", ".scroll-top-btn", function () { 58978 $("html,body").animate({ scrollTop: 0 }, 1500); 58979 return false; 58980 }); 58981 $(window).scroll(function () { 58982 if ($(this).scrollTop() > 800) { 58983 $(".scroll-top").fadeIn(200); 58984 $(".pr2-contact-us").addClass("move-up"); 58985 } else { 58986 $(".scroll-top").fadeOut(200); 58987 $(".pr2-contact-us").removeClass("move-up"); 58988 } 58989 }); 58990 }); 58991})(jQuery, window); 58992(function ($, window, undefined) { 58993 "use strict"; 58994 $(function () { 58995 $(".show-more-link").on("click", function (e) { 58996 e.preventDefault(); 58997 var moreBlock = $(this).closest(".show-more"); 58998 moreBlock.toggleClass("active"); 58999 }); 59000 }); 59001})(jQuery, window); 59002var calendar = { 59003 init: function (ajax) { 59004 if (ajax && window.location.host.indexOf("localhost:4502") === -1) { 59005 $.ajax({ url: FCL_EVENTS_JSON, type: "GET", dataType: "json" }) 59006 .done(function (data) { 59007 var events = data.events; 59008 for (var i = 0; i < events.length; i++) { 59009 $(".list").append( 59010 '<div class="day-event" date-day="' + 59011 events[i].day + 59012 '" date-month="' + 59013 events[i].month + 59014 '" date-year="' + 59015 events[i].year + 59016 '" data-number="' + 59017 i + 59018 '"><h2 class="title-7">' + 59019 events[i].title1 + 59020 '</h2><h2 class="title-3">' + 59021 events[i].title2 + 59022 '</h2><p class="text-default">' + 59023 events[i].description + 59024 "</p></div>" 59025 ); 59026 }
59027 calendar.startCalendar(); 59028 }) 59029 .fail(function (data) { 59030 console.log(data); 59031 }); 59032 } else { 59033 calendar.startCalendar(); 59034 } 59035 }, 59036 startCalendar: function () { 59037 var mon = "Mon"; 59038 var tue = "Tue"; 59039 var wed = "Wed"; 59040 var thur = "Thur"; 59041 var fri = "Fri"; 59042 var sat = "Sat"; 59043 var sund = "Sun"; 59044 var d = new Date(); 59045 var strDate = yearNumber + "/" + (d.getMonth() + 1) + "/" + d.getDate(); 59046 var yearNumber = new Date().getFullYear(); 59047 var monthNumber = d.getMonth() + 1; 59048 function GetMonthName(monthNumber) { 59049 var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; 59050 return months[monthNumber - 1]; 59051 } 59052 setMonth(monthNumber, mon, tue, wed, thur, fri, sat, sund); 59053 function setMonth(monthNumber, mon, tue, wed, thur, fri, sat, sund) { 59054 $(".month").text(GetMonthName(monthNumber) + " " + yearNumber); 59055 $(".month").attr("data-month", monthNumber); 59056 printDateNumber(monthNumber, mon, tue, wed, thur, fri, sat, sund); 59057 } 59058 $(".btn-next").on("click", function (e) { 59059 var monthNumber = $(".month").attr("data-month"); 59060 if (monthNumber > 11) { 59061 $(".month").attr("data-month", "0"); 59062 var monthNumber = $(".month").attr("data-month"); 59063 yearNumber = yearNumber + 1; 59064 setMonth(parseInt(monthNumber) + 1, mon, tue, wed, thur, fri, sat, sund); 59065 } else { 59066 setMonth(parseInt(monthNumber) + 1, mon, tue, wed, thur, fri, sat, sund); 59067 } 59068 }); 59069 $(".btn-prev").on("click", function (e) { 59070 var monthNumber = $(".month").attr("data-month"); 59071 if (monthNumber < 2) { 59072 $(".month").attr("data-month", "13"); 59073 var monthNumber = $(".month").attr("data-month"); 59074 yearNumber = yearNumber - 1; 59075 setMonth(parseInt(monthNumber) - 1, mon, tue, wed, thur, fri, sat, sund); 59076 } else { 59077 setMonth(parseInt(monthNumber) - 1, mon, tue, wed, thur, fri, sat, sund); 59078 } 59079 }); 59080 59081 function printDateNumber(monthNumber, mon, tue, wed, thur, fri, sat, sund) { 59082 $($("tbody.event-calendar tr")).each(function (index) { 59083 $(this).empty(); 59084 }); 59085 $($("thead.event-days tr")).each(function (index) { 59086 $(this).empty(); 59087 }); 59088 function getDaysInMonth(month, year) { 59089 var date = new Date(year, month, 1); 59090 var days = []; 59091 while (date.getMonth() === month) { 59092 days.push(new Date(date)); 59093 date.setDate(date.getDate() + 1); 59094 } 59095 return days; 59096 } 59097 i = 0; 59098 setDaysInOrder(mon, tue, wed, thur, fri, sat, sund); 59099 function setDaysInOrder(mon, tue, wed, thur, fri, sat, sund) { 59100 var monthDay = getDaysInMonth(monthNumber - 1, yearNumber)[0] 59101 .toString() 59102 .substring(0, 3); 59103 if (monthDay === "Mon") { 59104 $("thead.event-days tr").append("<td>" + mon + "</td><td>" + tue + "</td><td>" + wed + "</td><td>" + thur + "</td><td>" + fri + "</td><td>" + sat + "</td><td>" + sund + "</td>"); 59105 } else if (monthDay === "Tue") { 59106 $("thead.event-days tr").append("<td>" + tue + "</td><td>" + wed + "</td><td>" + thur + "</td><td>" + fri + "</td><td>" + sat + "</td><td>" + sund + "</td><td>" + mon + "</td>"); 59107 } else if (monthDay === "Wed") { 59108 $("thead.event-days tr").append("<td>" + wed + "</td><td>" + thur + "</td><td>" + fri + "</td><td>" + sat + "</td><td>" + sund + "</td><td>" + mon + "</td><td>" + tue + "</td>"); 59109 } else if (monthDay === "Thu") { 59110 $("thead.event-days tr").append("<td>" + thur + "</td><td>" + fri + "</td><td>" + sat + "</td><td>" + sund + "</td><td>" + mon + "</td><td>" + tue + "</td><td>" + wed + "</td>"); 59111 } else if (monthDay === "Fri") { 59112 $("thead.event-days tr").append("<td>" + fri + "</td><td>" + sat + "</td><td>" + sund + "</td><td>" + mon + "</td><td>" + tue + "</td><td>" + wed + "</td><td>" + thur + "</td>"); 59113 } else if (monthDay === "Sat") { 59114 $("thead.event-days tr").append("<td>" + sat + "</td><td>" + sund + "</td><td>" + mon + "</td><td>" + tue + "</td><td>" + wed + "</td><td>" + thur + "</td><td>" + fri + "</td>"); 59115 } else if (monthDay === "Sun") { 59116 $("thead.event-days tr").append("<td>" + sund + "</td><td>" + mon + "</td><td>" + tue + "</td><td>" + wed + "</td><td>" + thur + "</td><td>" + fri + "</td><td>" + sat + "</td>"); 59117 } 59118 } 59119 $(getDaysInMonth(monthNumber - 1, yearNumber)).each(function (index) { 59120 var index = index + 1; 59121 if (index < 8) { 59122 $("tbody.event-calendar tr.1").append('<td date-month="' + monthNumber + '" date-day="' + index + '" date-year="' + yearNumber + '"><span>' + index + "</span></td>"); 59123 } else if (index < 15) { 59124 $("tbody.event-calendar tr.2").append('<td date-month="' + monthNumber + '" date-day="' + index + '" date-year="' + yearNumber + '"><span>' + index + "</span></td>"); 59125 } else if (index < 22) { 59126 $("tbody.event-calendar tr.3").append('<td date-month="' + monthNumber + '" date-day="' + index + '" date-year="' + yearNumber + '"><span>' + index + "</span></td>"); 59127 } else if (index < 29) { 59128 $("tbody.event-calendar tr.4").append('<td date-month="' + monthNumber + '" date-day="' + index + '" date-year="' + yearNumber + '"><span>' + index + "</span></td>"); 59129 } else if (index < 32) { 59130 $("tbody.event-calendar tr.5").append('<td date-month="' + monthNumber + '" date-day="' + index + '" date-year="' + yearNumber + '"><span>' + index + "</span></td>"); 59131 } 59132 i++; 59133 }); 59134 var date = new Date();
59135 var month = date.getMonth() + 1; 59136 var thisyear = new Date().getFullYear(); 59137 setCurrentDay(month, thisyear); 59138 setEvent(); 59139 displayEvent(); 59140 } 59141 function setCurrentDay(month, year) { 59142 var viewMonth = $(".month").attr("data-month"); 59143 var eventYear = $(".event-days").attr("date-year"); 59144 if (parseInt(year) === yearNumber) { 59145 if (parseInt(month) === parseInt(viewMonth)) { 59146 $('tbody.event-calendar td[date-day="' + d.getDate() + '"]').addClass("current-day"); 59147 } 59148 } 59149 } 59150 function _setEvent() { 59151 $(".day-event").each(function (i) { 59152 var eventMonth = $(this).attr("date-month"); 59153 var eventDay = $(this).attr("date-day"); 59154 var eventYear = $(this).attr("date-year"); 59155 var eventClass = $(this).attr("event-class"); 59156 if (eventClass === undefined) eventClass = "event"; 59157 else eventClass = "event " + eventClass; 59158 if (parseInt(eventYear) === yearNumber) { 59159 $('tbody.event-calendar tr td[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][date-year="' + eventYear + '"]').addClass(eventClass); 59160 } 59161 }); 59162 } 59163 function setEvent() { 59164 var j = true; 59165 $(".day-event").each(function (i) { 59166 var eventMonth = $(this).attr("date-month"); 59167 var eventDay = $(this).attr("date-day"); 59168 var eventYear = $(this).attr("date-year"); 59169 var eventClass = $(this).attr("event-class"); 59170 if (eventClass === undefined) eventClass = "event";
59171 else eventClass = "event " + eventClass; 59172 if (parseInt(eventYear) === yearNumber) { 59173 var activeClass = ""; 59174 if (j && monthNumber == eventMonth) { 59175 activeClass = "active"; 59176 j = false; 59177 $(".list") 59178 .find('.day-event[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][date-year="' + eventYear + '"]') 59179 .show(); 59180 } 59181 $('.event-calendar tr td[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][date-year="' + eventYear + '"]') 59182 .addClass(eventClass) 59183 .addClass(activeClass); 59184 } 59185 }); 59186 $(".event-calendar td").on("click", function (e) { 59187 if ($(this).hasClass("event")) { 59188 $(".event-calendar td").removeClass("active"); 59189 $(this).addClass("active"); 59190 } else { 59191 $(".event-calendar td").removeClass("active"); 59192 } 59193 }); 59194 } 59195 function displayEvent() { 59196 $("tbody.event-calendar td").on("click", function (e) { 59197 $(".day-event").slideUp("fast"); 59198 var yearEvent = $(this).attr("date-year"); 59199 var monthEvent = $(this).attr("date-month"); 59200 var dayEvent = $(this).text(); 59201 $('.day-event[date-month="' + monthEvent + '"][date-day="' + dayEvent + '"][date-year="' + yearEvent + '"]').slideDown("fast"); 59202 }); 59203 } 59204 $(".close").on("click", function (e) { 59205 $(this).parent().slideUp("fast"); 59206 }); 59207 $(".save").click(function () { 59208 if (this.checked) { 59209 $(this).next().text("Remove from personal list"); 59210 var eventHtml = $(this).closest(".day-event").html(); 59211 var eventMonth = $(this).closest(".day-event").attr("date-month"); 59212 var eventDay = $(this).closest(".day-event").attr("date-day"); 59213 var eventNumber = $(this).closest(".day-event").attr("data-number"); 59214 $(".person-list").append('<div class="day" date-month="' + eventMonth + '" date-day="' + eventDay + '" data-number="' + eventNumber + '" style="display:none;">' + eventHtml + "</div>"); 59215 $('.day[date-month="' + eventMonth + '"][date-day="' + eventDay + '"]').slideDown("fast"); 59216 $(".day").find(".close").remove(); 59217 $(".day").find(".save").removeClass("save").addClass("remove"); 59218 $(".day").find(".remove").next().addClass("hidden-print"); 59219 remove(); 59220 sortlist(); 59221 } else { 59222 $(this).next().text("Save to personal list"); 59223 var eventMonth = $(this).closest(".day-event").attr("date-month"); 59224 var eventDay = $(this).closest(".day-event").attr("date-day"); 59225 var eventNumber = $(this).closest(".day-event").attr("data-number"); 59226 $('.day[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][data-number="' + eventNumber + '"]').slide
59226Up("slow"); 59227 setTimeout(function () { 59228 $('.day[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][data-number="' + eventNumber + '"]').remove(); 59229 }, 1500); 59230 } 59231 }); 59232 function remove() { 59233 $(".remove").click(function () { 59234 if (this.checked) { 59235 $(this).next().text("Remove from personal list"); 59236 var eventMonth = $(this).closest(".day").attr("date-month"); 59237 var eventDay = $(this).closest(".day").attr("date-day"); 59238 var eventNumber = $(this).closest(".day").attr("data-number"); 59239 $('.day[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][data-number="' + eventNumber + '"]').slideUp("slow"); 59240 $('.day-event[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][data-number="' + eventNumber + '"]') 59241 .find(".save") 59242 .attr("checked", false); 59243 $('.day-event[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][data-number="' + eventNumber + '"]') 59244 .find("span") 59245 .text("Save to personal list"); 59246 setTimeout(function () { 59247 $('.day[date-month="' + eventMonth + '"][date-day="' + eventDay + '"][data-number="' + eventNumber + '"]').remove(); 59248 }, 1500); 59249 } 59250 }); 59251 } 59252 function sortlist() { 59253 var personList = $(".person-list"); 59254 personList 59255 .find(".day") 59256 .sort(function (a, b) { 59257 return +a.getAttribute("date-day") - +b.getAttribute("date-day"); 59258 }) 59259 .appendTo(personList); 59260 } 59261 $(".print-btn").click(function () { 59262 window.print(); 59263 }); 59264 }, 59265}; 59266$(document).ready(function () { 59267 calendar.init("ajax"); 59268}); 59269(function ($, window, undefined) { 59270 "use strict"; 59271 $(function () { 59272 $(".site-plan-facilities") 59273 .find(".item") 59274 .on("mouseenter", function () { 59275 var _target = $(this).attr("data-plan"); 59276 $("[plan-verify=" + _target + "]").addClass("active"); 59277 }); 59278 $(".site-plan-facilities") 59279 .find(".item") 59280 .on("mouseleave", function () { 59281 var _target = $(this).attr("data-plan"); 59282 $("[plan-verify=" + _target + "]").removeClass("active"); 59283 }); 59284 }); 59285})(jQuery, window); 59286(function ($, window, undefined) { 59287 "use strict"; 59288 var pluginName = "slider"; 59289 function Plugin(element, options) { 59290 this.element = $(element); 59291 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 59292 this.init(); 59293 } 59294 Plugin.prototype = { 59295 init: function () { 59296 var that = this; 59297 that.element.slick(that.options); 59298 }, 59299 destroy: function () { 59300 $.removeData(this.element[0], pluginName); 59301 }, 59302 }; 59303 $.fn[pluginName] = function (options, params) { 59304 return this.each(function () { 59305 var instance = $.data(this, pluginName); 59306 if (!instance) { 59307 $.data(this, pluginName, new Plugin(this, options)); 59308 } else if (instance[options]) { 59309 instance[options](params); 59310 } 59311 }); 59312 }; 59313 $.fn[pluginName].defaults = {}; 59314 function playPauseVideo(slick, control) { 59315 var currentSlide, slideType, startTime, player, video; 59316 currentSlide = slick.find(".slick-current"); 59317 slideType = currentSlide.attr("class").split(" ")[1]; 59318 player = currentSlide.find("iframe").get(0); 59319 startTime = currentSlide.data("video-start"); 59320 video = currentSlide.children("video").get(0); 59321 if (video != null) { 59322 if (control === "play") { 59323 video.play(); 59324 } else { 59325 video.pause(); 59326 } 59327 } 59328 } 59329 $(function () { 59330 var heroCarousel = $(".hero .carousel"); 59331 heroCarousel.on("afterChange", function (event, slick, currentSlide) { 59332 var _this = $(this).find(".slick-active"); 59333 var slidePos = $(".hero .carousel").find(".item"); 59334 var slideLength = slidePos.length; 59335 slidePos.each(function (i) { 59336 switch (i) { 59337 case (i = currentSlide): 59338 if ($(this).hasClass("has-video")) { 59339 } 59340 } 59341 }); 59342 }); 59343 if (Utils.isMobile()) { 59344 $(".hero-carousel .desktopVideo").remove(); 59345 $(".hero-carousel #desktop").remove(); 59346 } else if (!Utils.isMobile()) { 59347 $(".hero-carousel .mobileVideo").remove(); 59348 $(".hero-carousel #mobile").remove(); 59349 } 59350 heroCarousel.on("beforeChange", function (event, slick, currentSlide, nextSlide) { 59351 var _this = $(this).find("slick-active"); 59352 var slidePos = $(".hero .carousel").find(".item"); 59353 var slideLength = slidePos.length; 59354 slidePos.each(function (i) { 59355 switch (i) { 59356 case (i = currentSlide): 59357 if ($(this).hasClass("has-video")) { 59358 $(this).find("video").get(0).pause(); 59359 $(this).find("div").show(); 59360 $(this).find(".play-btn").show(); 59361 $(this).find("video").removeAttr("controls"); 59362 heroCarousel.slick("slickPlay"); 59363 } 59364 } 59365 }); 59366 }); 59367 var imageCount = $(".hero .carousel").find(".item").length; 59368 if (imageCount > 1) { 59369 $(".hero .carousel").slick({ 59370 infinite: true, 59371 dots: true,
59372 arrows: false, 59373 fade: true, 59374 autoplaySpeed: 10000, 59375 autoplay: true, 59376 pauseOnHover: false, 59377 responsive: [{ breakpoint: 767, settings: { dots: false, adaptiveHeight: true } }], 59378 }); 59379 } 59380 imageCount = $(".square-carousel .carousel").find(".item").length; 59381 if (imageCount > 1) { 59382 $(".square-carousel .carousel").slick({ infinite: true, dots: true, arrows: false, fade: true, autoplaySpeed: 7000, autoplay: true, pauseOnHover: false }); 59383 } 59384 $(".video-gallery .carousel").slick({ slidesToShow: 3, arrows: true, infinite: true, variableWidth: true, responsive: [{ breakpoint: 991, settings: { centerMode: true } }] }); 59385 $(".seaside-carousel .carousel").on("init reInit beforeChange", function (event, slick, currentSlide, nextSlide) { 59386 var _this = $(".sg-slider-control"); 59387 var i = (nextSlide ? nextSlide : 0) + 1; 59388 $(".sg-slider-control .data-total").html(slick.slideCount); 59389 $(".sg-slider-control .data-curr").html(i); 59390 }); 59391 $(".seaside-carousel .carousel").slick({ 59392 slidesToShow: 1, 59393 arrows: true, 59394 infinite: true, 59395 variableWidth: false, 59396 nextArrow: ".sg-slick-next", 59397 prevArrow: ".sg-slick-prev", 59398 responsive: [{ breakpoint: 767, settings: { variableWidth: true } }], 59399 }); 59400 $(".seaside-carousel .play-btn").on("click", function () { 59401 $(this).hide(); 59402 $(this).closest(".has-video").find("video").attr("controls", ""); 59403 $(this).closest(".has-video").find("video").get(0).play(); 59404 }); 59405 $(".hero-carousel .play-btn").on("click", function () { 59406 $(this).hide(); 59407 $(this).closest(".has-video").find("video").get(0).play(); 59408 $(this).closest(".has-video").find("div").hide(); 59409 heroCarousel.slick("slickPause"); 59410 }); 59411 $(".hero-carousel .desktopVideo").on("click", function (currentSlide) { 59412 var isPaused = currentSlide.currentTarget.paused; 59413 if (isPaused == false) { 59414 $(this).closest(".has-video").find("video").attr("controls", ""); 59415 $(this).closest(".has-video").find("video").get(0).pause(); 59416 $(this).closest(".has-video").find("div").show(); 59417 $(this).closest(".has-video").find(".play-btn").show(); 59418 heroCarousel.slick("slickPlay"); 59419 $(this).closest(".has-video").find("video").removeAttr("controls"); 59420 } else { 59421 $(this).closest(".has-video").find("video").attr("controls", ""); 59422 $(this).closest(".has-video").find("video").get(0).play(); 59423 $(this).closest(".has-video").find("div").show(); 59424 $(this).closest(".has-video").find(".play-btn").hide(); 59425 heroCarousel.slick("slickPause"); 59426 $(this).closest(".has-video").find("video").removeAttr("controls"); 59427 } 59428 }); 59429 $(".hero-carousel .mobileVideo").on("click", function (currentSlide) { 59430 var isPaused = currentSlide.currentTarget.paused; 59431 console.log(isPaused); 59432 if (isPaused == false) { 59433 $(this).closest(".has-video").find("video").attr("controls", ""); 59434 $(this).closest(".has-video").find("video").get(0).pause(); 59435 $(this).closest(".has-video").find("div").show(); 59436 $(this).closest(".has-video").find(".play-btn").show(); 59437 heroCarousel.slick("slickPlay"); 59438 $(this).closest(".has-video").find("video").removeAttr("controls"); 59439 } else { 59440 $(this).closest(".has-video").find("video").attr("controls", ""); 59441 $(this).closest(".has-video").find("video").get(0).play(); 59442 $(this).closest(".has-video").find("div").hide(); 59443 $(this).closest(".has-video").find(".play-btn").hide(); 59444 heroCarousel.slick("slickPause"); 59445 $(this).closest(".has-video").find("video").removeAttr("controls"); 59446 } 59447 }); 59448 $(document).ready(function () { 59449 $("video").on("ended", function () { 59450 $(this).closest(".has-video").find("video").load(); 59451 $(this).closest(".has-video").find("div").show(); 59452 $(this).closest(".has-video").find(".play-btn").show(); 59453 heroCarousel.slick("slickPlay"); 59454 }); 59455 if (Utils.isMobile()) { 59456 $("video").on("paused", function () { 59457 $(this).closest(".has-video").find("div").show(); 59458 $(this).closest(".has-video").find(".play-btn").show(); 59459 heroCarousel.slick("slickPlay"); 59460 }); 59461 } 59462 }); 59463 var fullScreenCarousel = $(".full-screen-carousel .carousel"); 59464 fullScreenCarousel.each(function () { 59465 var swipeStatus = $(this).attr("swipe") == "false" ? false : true; 59466 var _arrow = $(this).attr("arrow") == "false" ? false : true; 59467 $(this).slick({ slidesToShow: 1, slidesToScroll: 1, arrows: _arrow, fade: true, dots: false, swipe: swipeStatus, infinite: false, asNavFor: ".carousel-nav", responsive: [{ breakpoint: 767, settings: {} }] }); 59468 }); 59469 fullScreenCarousel.on("afterChange", function (event, slick, currentSlide) { 59470 var _this = $(this).find(".slick-current"); 59471 var slidePos = $(".full-screen-carousel .carousel").find(".item"); 59472 var slideLength = slidePos.length; 59473 slidePos.each(function (i) { 59474 switch (i) { 59475 case (i = currentSlide): 59476 if ($(this).hasClass("has-video")) { 59477 fullScreenCarousel.slick("slickPause"); 59478 $(this).find("video").get(0).play(); 59479 } 59480 } 59481 }); 59482 }); 59483 fullScreenCarousel.on("beforeChange", function (event, slick, currentSlide, nextSlide) { 59484 var _this = $(this).find(".slick-current"); 59485 var slidePos = $(".full-screen-carousel .carousel").find(".item"); 59486 var slideLength = slidePos.length; 59487 slidePos.each(function (i) { 59488 switch (i) { 59489 case (i = currentSlide): 59490 if ($(this).hasClass("has-video")) { 59491 $(this).find("video").get(0).pause(); 59492 } 59493 } 59494 }); 59495 }); 59496 $(".has-video video").on("ended", myHandler, false); 59497 function myHandler(e) { 59498 fullScreenCarousel.slick("slickPlay"); 59499 } 59500 var slideNum = $(".carousel-nav .item").length; 59501 $(".carousel-nav").slick({ slidesToShow: 4, useTransform: false, slidesToScroll: 1, asNavFor: ".full-screen-carousel .carousel", dots: false, arrows: fal
59501se, focusOnSelect: true }); 59502 $(".site-plan-container .carousel").slick({ infinite: false, dots: false, arrows: true, fade: true, autoplay: false, adaptiveHeight: true, pauseOnHover: true, responsive: [{ breakpoint: 767, settings: {} }] }); 59503 if ($(".center-hero-carousel").length > 0) { 59504 var centerHeroCarousel = $(".center-hero-carousel"); 59505 centerHeroCarousel.slick({ centerMode: true, slidesToShow: 1, variableWidth: true }); 59506 centerHeroCarousel.on("afterChange", function (event, slick, currentSlide) { 59507 $(slick.$slides) 59508 .find("video") 59509 .each(function () { 59510 this.pause(); 59511 }); 59512 if ($(slick.$slides[currentSlide]).find("iframe").length) { 59513 var newSrc = $(slick.$slides[currentSlide]).find("iframe").attr("src") + "?autoplay=1&controls=0"; 59514 $(slick.$slides[currentSlide]).find("iframe").attr("src", newSrc); 59515 var $slickInstance = $(this); 59516 var video = $(slick.$slides[currentSlide]).find("iframe")[0]; 59517 video.addEventListener("ended", function () {}, false); 59518 } 59519 if ($(slick.$slides[currentSlide]).find("video").length) { 59520 var $slickInstance = $(this); 59521 var video = $(slick.$slides[currentSlide]).find("video")[0]; 59522 video.play(); 59523 video.addEventListener("ended", function () {}, false); 59524 } 59525 }); 59526 } 59527 if ($(".cross-carousel").length > 0) { 59528 function renderCarousel(crossCarousel) { 59529 crossCarousel.slick({ slidesToShow: 2, slidesToScroll: 1, dots: false, variableWidth: true, infinite: true, responsive: [{ breakpoint: 1200, settings: "unslick" }] }); 59530 } 59531 var crossCarousel = $(".cross-carousel"); 59532 renderCarousel(crossCarousel); 59533 $(window).on("resize", function () { 59534 if ($(window).width() > 1199) { 59535 renderCarousel($(".cross-carousel")); 59536 } 59537 }); 59538 } 59539 if ($(".slider-left-side")[0]) { 59540 function renderCarousel(crossCarousel) { 59541 crossCarousel.slick({ infinite: false, dots: false, slidesToShow: 3.8, variableWidth: true, adaptiveHeight: false, responsive: [{ breakpoint: 1199, settings: "unslick" }] }); 59542 } 59543 var crossCarousel = $(".slider-left-side"); 59544 renderCarousel(crossCarousel); 59545 $(window).on("resize", function () { 59546 if ($(window).width() > 1199) { 59547 renderCarousel(crossCarousel); 59548 } 59549 }); 59550 } 59551 if ($(".hero-detail-carousel").length > 0) { 59552 var detailCarousel = $(".hero-detail-carousel"); 59553 detailCarousel.slick({ 59554 dots: true, 59555 arrows: false, 59556 slidesToShow: 1, 59557 variableWidth: false, 59558 infinite: true, 59559 fade: true, 59560 autoplaySpeed: 10000, 59561 autoplay: true, 59562 pauseOnHover: false, 59563 responsive: [{ breakpoint: 767, settings: { adaptiveHeight: true } }], 59564 }); 59565 } 59566 }); 59567})(jQuery, window); 59568(function ($, window, undefined) { 59569 "use strict"; 59570 var pluginName = "tab"; 59571 function Plugin(element, options) { 59572 this.element = $(element); 59573 this.options = $.extend({}, $.fn[pluginName].defaults, this.element.data(), options); 59574 this.init(); 59575 } 59576 Plugin.prototype = { 59577 init: function () { 59578 var that = this; 59579 that.element.slick(that.options); 59580 }, 59581 destroy: function () { 59582 $.removeData(this.element[0], pluginName); 59583 }, 59584 }; 59585 $.fn[pluginName] = function (options, params) { 59586 return this.each(function () { 59587 var instance = $.data(this, pluginName); 59588 if (!instance) { 59589 $.data(this, pluginName, new Plugin(this, options)); 59590 } else if (instance[options]) { 59591 instance[options](params); 59592 } 59593 }); 59594 }; 59595 $.fn[pluginName].defaults = {}; 59596 $(function () { 59597 $("[data-tab-header]").on("click.changeTab", "a", function (e) { 59598 e.preventDefault(); 59599 var tab = $(this).closest("[data-tab]"); 59600 var newContent = $(this).attr("href"); 59601 tab.find("[data-tab-header] a.active").removeClass("active"); 59602 tab.find("[data-tab-content] > .active").removeClass("active"); 59603 var activeTab = tab.find(newContent).addClass("active"); 59604 $(this).addClass("active"); 59605 }); 59606 $(".tabs-dropdown select").change(function () { 59607 var newContent = $(this).find("option:selected").attr("data-tab-item"); 59608 var content = $(this).closest("[data-tab]").find("[data-tab-content]");
59609 content.find(".inner.active").removeClass("active"); 59610 content.find("#" + newContent).addClass("active"); 59611 content.find("[data-tab-content-item = #" + newContent + "]").addClass("active"); 59612 }); 59613 }); 59614})(jQuery, window); 59615(function ($, window, undefined) { 59616 "use strict"; 59617 $(function () { 59618 $(".timeline-intro .short-timeline").mouseenter(function () { 59619 var history = $(this).closest(".history"); 59620 history.addClass("active"); 59621 $("html, body").addClass("no-scrolling-history"); 59622 $(this).addClass("disappear"); 59623 $(document).off("click", ".bgd-overlay"); 59624 var delay = setTimeout(function () { 59625 $(document).on("click", ".bgd-overlay", function () { 59626 $(".history").removeClass("active"); 59627 $(".timeline-intro .short-timeline").removeClass("disappear"); 59628 }); 59629 $(".timeline").mCustomScrollbar({ theme: "minidark", mouseWheelPixels: 80, scrollInertia: 0 }); 59630 clearTimeout(delay); 59631 }, 1); 59632 $(".ios .history .bgd-overlay") 59633 .on("click", function (e) { 59634 e.stopPropagation(); 59635 $(this).closest(".history").removeClass("active"); 59636 $(".timeline-intro .short-timeline").removeClass("disappear"); 59637 $("html, body").removeClass("no-scrolling-history"); 59638 }) 59639 .on("click", ".timeline", function (e) { 59640 e.stopPropagation(); 59641 }); 59642 }); 59643 $(".full-timeline .timeline").mouseleave(function () { 59644 var history = $(this).closest(".history"); 59645 history.removeClass("active"); 59646 $("html, body").removeClass("no-scrolling-history"); 59647 $(".timeline-intro .short-timeline").removeClass("disappear"); 59648 }); 59649 $(".full-timeline") 59650 .on("click", function (e) { 59651 var history = $(this).closest(".history"); 59652 history.removeClass("active"); 59653 $(".timeline-intro .short-timeline").removeClass("disappear"); 59654 }) 59655 .on("click", ".timeline", function (e) { 59656 e.stopPropagation(); 59657 }); 59658 $("[data-content-refer]").on("click", function (e) { 59659 e.preventDefault(); 59660 $(this).siblings("[data-content-refer]").removeClass("active"); 59661 $(this).addClass("active"); 59662 $(".timeline-intro .short-timeline").addClass("disappear"); 59663 var data = $(this).data("content-refer"); 59664 var contents = $(this).closest(".history"); 59665 contents.find("[data-content]").removeClass("active"); 59666 $("[data-content = " + data + "]").addClass("active"); 59667 var history = $(this).closest(".history"); 59668 history.removeClass("active"); 59669 $("html, body").removeClass("no-scrolling-history"); 59670 $(".timeline-intro .short-timeline").removeClass("disappear"); 59671 }); 59672 }); 59673 var btnBackToTop = $("#button-back-to-top"); 59674 $(window).scroll(function () { 59675 if ($(window).scrollTop() > 300) { 59676 btnBackToTop.addClass("show"); 59677 } else { 59678 btnBackToTop.removeClass("show"); 59679 } 59680 }); 59681 btnBackToTop.on("click", function (e) { 59682 e.preventDefault(); 59683 $("html, body").animate({ scrollTop: 0 }, "300"); 59684 }); 59685})(jQuery, window); 59686(function ($, window, undefined) { 59687 "use strict"; 59688 $(function () { 59689 $(".item-level-1").click(function (e) { 59690 e.preventDefault(); 59691 $(this).siblings(".filter-level-2").addClass("active"); 59692 }); 59693 $(".back-level-1").click(function (e) { 59694 e.preventDefault(); 59695 $(this).closest(".filter-level-2").removeClass("active"); 59696 }); 59697 $(".play-video").click(function () { 59698 var blog = $(this).closest(".bloggish"); 59699 if (blog.find("video").length > 0) { 59700 var video = blog.find("video")[0]; 59701 video.play(); 59702 blog.addClass("playing", function () { 59703 setTimeout(function () { 59704 blog.find(".video-wrap").click(function () { 59705 blog.removeClass("playing"); 59706 video.pause(); 59707 }); 59708 }, 100); 59709 }); 59710 } 59711 }); 59712 var isMobile = $(window).width() <= 767 ? true : false;
59713 var $container = $(".arrange-items"); 59714 $(".arrange-items")[0] && $(".arrange-items").isotope({ itemSelector: ".grid-item", percentPosition: true, masonry: { columnWidth: isMobile ? $container.width() / 2 : $container.width() / 3, gutter: 0 } }); 59715 $(".arrange-items")[0] && 59716 $(window).resize(function () { 59717 $(".arrange-items").isotope({ itemSelector: ".grid-item", percentPosition: true, masonry: { columnWidth: isMobile ? $container.width() / 2 : $container.width() / 3, gutter: 0 } }); 59718 }); 59719 }); 59720 $("[data-sgx-api]").each(function () { 59721 var target = $(this); 59722 var apiUrl = target.attr("data-sgx-api"); 59723 $.get({ 59724 url: apiUrl, 59725 success: function (data) { 59726 var newDatas = JSON.parse(data); 59727 var html = []; 59728 for (var i = 0; i < 3; i++) { 59729 html = html.concat([ 59730 '<div class="desc">' + 59731 '<a href="' + 59732 newDatas.sgx_announcement[i].url + 59733 '" title="' + 59734 newDatas.sgx_announcement[i].title + 59735 '">' + 59736 '<h4 class="title">' + 59737 newDatas.sgx_announcement[i].title + 59738 "</h4>" + 59739 "</a>" + 59740 '<p class="date">' + 59741 newDatas.sgx_announcement[i].day + 59742 " " + 59743 moment(newDatas.sgx_announcement[i].year + newDatas.sgx_announcement[i].month + newDatas.sgx_announcement[i].day).format("MMM") + 59744 " " + 59745 newDatas.sgx_announcement[i].year + 59746 "</p>" + 59747 "</div>", 59748 ]); 59749 } 59750 $(html.join("")).appendTo(target); 59751 }, 59752 }); 59753 }); 59754 var busy = false; 59755 var includeSGX = false; 59756 var mcFirstLoad = true; 59757 var noResult = false;
59758 var totalPage = null; 59759 function convertCountryName(cName) { 59760 var newName = ""; 59761 switch (cName) { 59762 case "SG": 59763 case "sg": 59764 newName += "Singapore"; 59765 break; 59766 case "AU": 59767 case "au": 59768 newName += "Australia"; 59769 break; 59770 case "UK": 59771 case "uk": 59772 newName += "United Kingdom"; 59773 break; 59774 case "EU": 59775 case "eu": 59776 newName += "Europe"; 59777 break; 59778 case "TH": 59779 case "th": 59780 newName += "Thailand"; 59781 break; 59782 case "VN": 59783 case "vn": 59784 newName += "Vietnam"; 59785 break; 59786 case "CN": 59787 case "cn": 59788 newName += "China"; 59789 break; 59790 default: 59791 newName += cName; 59792 break; 59793 } 59794 return newName; 59795 } 59796 function replaceTextName(target, text) { 59797 var newText = text && text != "" ? text : "All"; 59798 target.find(".tab-title").html(newText); 59799 } 59800 function renderParams(target, isLoadMore) { 59801 var params = {}; 59802 var isLoadMore = isLoadMore || false; 59803 target.find("[data-query]").each(function () { 59804 var that = $(this); 59805 var prName = $(this).attr("data-query"); 59806 if (prName == "period") { 59807 that.find("[data-query]").each(function () { 59808 var childPrName = $(this).attr("data-query"); 59809 var childPrVal = []; 59810 var childPrText = []; 59811 $(this) 59812 .find("input:checked") 59813 .each(function () { 59814 childPrVal.push($(this).val()); 59815 if ($(this).next("span")) { 59816 childPrText.push($(this).next("span").text()); 59817 } 59818 }); 59819 params[childPrName] = childPrVal.join(","); 59820 }); 59821 } else { 59822 var childPrVal = []; 59823 var childPrText = []; 59824 that.find("input:checked").each(function () { 59825 childPrVal.push($(this).val()); 59826 childPrText.push($(this).next("span").text()); 59827 }); 59828 replaceTextName($(this), childPrText.join(", ")); 59829 params[prName] = childPrVal.join(","); 59830 } 59831 }); 59832 target.find(".icon-close") && !isLoadMore && target.find(".icon-close").trigger("click"); 59833 return $.param(params); 59834 } 59835 $("[data-api-load]").on("click", ".btn-apply", function (e) { 59836 var target = "#" + $(this).closest(".media-center-tab-content").attr("id"); 59837 var apiUrl = $(target).attr("data-tab-api"); 59838 mcFirstLoad = true; 59839 var paramTarget = $(window).width() >= 992 ? $(this).closest("[data-tab-filter]") : $(this).closest(".filter-modal"); 59840 var params = renderParams(paramTarget); 59841 var newAPIUrl = apiUrl + "?" + params; 59842 target == "#media-center-blog" && renderMCBlogs(target, newAPIUrl, mcFirstLoad); 59843 target == "#media-center-press-releases" && renderMCPressRealeases(target, newAPIUrl, mcFirstLoad); 59844 target == "#media-center-all" && renderMCAll(target, newAPIUrl, mcFirstLoad); 59845 }); 59846 if ($(".board-management")[0]) { 59847 var thisCmp = $(".board-management"); 59848 thisCmp.on("click", "a[data-modal]", function (e) { 59849 e.preventDefault(); 59850 var modal = $(this).attr("data-modal"); 59851 var targ = $(this).attr("data-curr"); 59852 $("#" + modal) 59853 .find("[data-active=" + targ + "]") 59854 .fadeIn("300") 59855 .addClass("active"); 59856 $("#" + modal) 59857 .find("[data-active=" + targ + "]") 59858 .siblings("[data-active]") 59859 .fadeOut() 59860 .removeClass("active");
59861 var pLength = $("#" + modal).find(".modal-container").length; 59862 var currProfile = $("#" + modal) 59863 .find(".modal-container.active") 59864 .index(); 59865 Number(currProfile) == 0 59866 ? $("#" + modal) 59867 .find('[data-control="prev"]') 59868 .addClass("disabled") 59869 : $("#" + modal) 59870 .find('[data-control="prev"]') 59871 .removeClass("disabled"); 59872 Number(currProfile) >= Number(pLength) - 1 59873 ? $("#" + modal) 59874 .find('[data-control="next"]') 59875 .addClass("disabled") 59876 : $("#" + modal) 59877 .find('[data-control="next"]') 59878 .removeClass("disabled"); 59879 }); 59880 } 59881 $(".modal-board-management").on("click", "[data-control]", function (e) { 59882 e.preventDefault(); 59883 var that = $(this); 59884 var modal = that.closest(".modal"); 59885 var profiles = modal.find(".modal-container"); 59886 var currProfile = modal.find(".modal-container.active"); 59887 var pLength = profiles.length; 59888 var currOrder = Number(currProfile.index()); 59889 var behavior = that.attr("data-control"); 59890 switch (behavior) { 59891 case "prev": 59892 if (currOrder >= 1) { 59893 currOrder == 1 ? that.addClass("disabled") : that.removeClass("disabled"); 59894 modal.find('[data-control="next"]').removeClass("disabled"); 59895 currProfile.fadeOut(0).removeClass("active"); 59896 $(profiles[currOrder - 1]) 59897 .stop() 59898 .fadeIn("300") 59899 .addClass("active"); 59900 } 59901 break; 59902 default: 59903 if (currOrder <= pLength - 2) { 59904 currOrder == pLength - 2 ? that.addClass("disabled") : that.removeClass("disabled"); 59905 modal.find('[data-control="prev"]').removeClass("disabled"); 59906 currProfile.fadeOut(0).removeClass("active"); 59907 $(profiles[currOrder + 1]) 59908 .stop() 59909 .fadeIn("300") 59910 .addClass("active"); 59911 } 59912 break; 59913 } 59914 }); 59915 if (navigator.appVersion.indexOf("Win") != -1) { 59916 $("html").addClass("is-windows"); 59917 } 59918 function handleOHResult(targ, params) { 59919 var target = $("#our-history-result"); 59920 var filterUrl = targ.data("api") + (params != "" ? "&" + $.param(params) : ""); 59921 target.find(".result-container").hide().html(""); 59922 target.find(".loader").removeClass("hidden"); 59923 var newTemplate = []; 59924 $.ajax({ 59925 type: "GET", 59926 url: filterUrl || "", 59927 dataType: "JSON", 59928 success: function (response) { 59929 console.log(response); 59930 $(newTemplate.join("")).appendTo(target.find(".result-container")); 59931 target.find(".result-container").fadeIn(); 59932 target.find(".loader").addClass("hidden"); 59933 }, 59934 error: function (error) { 59935 console.log(error); 59936 }, 59937 }); 59938 } 59939 function ourHistoryDropdownChange(val) { 59940 var filterData = {}; 59941 filterData.country = val || ""; 59942 handleOHResult($(".our-history-cmp[data-api]"), filterData); 59943 } 59944 var filterTarget = $(".our-portfolio[data-api-render]"); 59945 if (filterTarget[0]) { 59946 var $this = $(".our-portfolio[data-api-render]"); 59947 var nextPage = Number($(this).attr("data-page-index")); 59948 var chkListLocate = $(window).width() >= 992 ? $(".sortable.mixed-filter") : $("#filter-modal-portfolio .modal-body .filter-level-1"); 59949 if (mcFirstLoad) { 59950 var queryString = window.location.search; 59951 var urlParams = new URLSearchParams(queryString); 59952 var keys = urlParams.keys(), 59953 values = urlParams.values(); 59954 for (var key of keys); 59955 for (var value of values); 59956 var portfolioFilterSelector = $(".list-filter-block"); 59957 var portfolioFilterElem = portfolioFilterSelector.length && portfolioFilterSelector; 59958 if (key) { 59959 portfolioFilterElem && portfolioFilterElem.find('input[name="' + value + '"]').prop("checked", true); 59960 var chckList = $(".mixed-filter"); 59961 handlePortfolioClick(chckList); 59962 } else { 59963 handlePortfolioFilter(getFilterParams(chkListLocate, nextPage), false); 59964 } 59965 } else { 59966 handlePortfolioFilter(getFilterParams(chkListLocate, nextPage), false); 59967 } 59968 } 59969 function handlePortfolioClick(chkListLocate , interactedFilterTarget) { 59970 var parentNode = chkListLocate.find(".caret"); 59971 parentNode.each(function () { 59972 var that = $(this); 59973 var ourChkL = that.find(".list-filter-block"); 59974 var text = ourChkL.find('input[type="checkbox"]:checked').length > 0 ? "" : that.find(".tab-title").attr("data-default-text"); 59975 ourChkL.find('input[type="checkbox"]:checked').each(function (index) { 59976 text = index == 0 ? text.concat($(this).next("span").text()) : text.concat(", " + $(this).next("span").text()); 59977 }); 59978 that.find(".tab-title").text(text); 59979 }); 59980 handlePortfolioFilter(getFilterParams(chkListLocate, false), true, interactedFilterTarget); 59981 } 59982 function handlePortfolioFilter(filterData, renderNew, interactedFilterTarget) { 59983 var target = filterTarget.find(".all-location .row"); 59984 renderNew && target.hide().html(""); 59985 filterData.siteName = filterTarget.attr("data-site-name") && filterTarget.attr("data-site-name") != "" ? (filterData.siteName = filterTarget.attr("data-site-name")) : ""; 59986 filterData.id = filterTarget.attr("data-id") && filterTarget.attr("data-id") != "" ? (filterData.id = filterTarget.attr("data-id")) : ""; 59987 var filterUrl = filterTarget.attr("data-api-render") + "?" + $.param(filterData); 59988 filterTarget.find(".loader").removeClass("hidden"); 59989 var btnMore = filterTarget.find(".btn-primary[data-page-index]"); 59990 btnMore.addClass("hidden"); 59991 var template = []; 59992 $.ajax({ 59993 type: "GET", 59994 url: filterUrl || "", 59995 dataType: "JSON", 59996 success: function (response) { 59997 var isExist = $('.prop'); 59998 var noResultText = response.NoResult || "Sorry, an unexpected error occured, please try again or c
59998ontact the admin."; 59999 var datas = response.PageItems; 60000 var total = Number(response.TotalCount); 60001 if (interactedFilterTarget && interactedFilterTarget !== undefined && (typeof window.propertyResultsFilterTrack === "function")) { 60002 window.propertyResultsFilterTrack(interactedFilterTarget, total); 60003 } 60004 var currPage = renderNew ? 1 : filterData.pageIndex; 60005 var pageItems = 10; 60006 var totalPage = Math.ceil(total / pageItems); 60007 var tilePositionCount = 1; 60008 window.filteredResultsCount = total; 60009 if (datas && datas.length > 0) { 60010 Array.prototype.slice.call(datas).forEach(function (data) { 60011 template = template.concat([ 60012 '<div class="col-md-4 property-result-content">', 60013 '<a href="' + data.UrlItem + '" title="' + data.Title + '" target="' + data.Target + '" class="portfolio-thumb info-click" data-component-name="property results" data-component-item-title="' + data.Title + '" data-component-item-position="' + tilePositionCount + '" data-filter1-name="location" data-filter2-name="state" data-filter3-name="property" data-filter4-name="owner/manager">', 60014 '<div class="thumb-wrapper">', 60015 '<div style="background-image: url(\'' + data.SrcImage.replace("'","\\'") + '\');" class="thumb"></div>', 60016 "</div>", 60017 '<div class="info">', 60018 '<p class="category text-small">' + data.PropertyTitle + "</p>", 60019 '<h4 class="title-4">' + data.Title + "</h4>", 60020 '<div class="description">' + data.Content + "</div>", 60021 "</div>", 60022 "</a>", 60023 "</div>", 60024 ]); 60025 tilePositionCount = tilePositionCount+1; 60026 }); 60027 } else { 60028 template = template.concat(['<div class="col-12 no-result"><p class="text-center">' + noResultText + "</p></div>"]); 60029 } 60030 btnMore 60031 .attr("data-page-index", currPage + 1) 60032 .find("span") 60033 .text("(" + (total - currPage * pageItems) + ")"); 60034 currPage < totalPage ? btnMore.removeClass("hidden") : btnMore.addClass("hidden"); 60035 $(template.join("")).appendTo(target); 60036 target.show(); 60037 filterTarget.find(".loader").addClass("hidden"); 60038 }, 60039 error: function (error) { 60040 console.log(error); 60041 }, 60042 }); 60043 } 60044 function getFilterParams(targ, nextPage) { 60045 var filterData = {}; 60046 targ.find("> ul > li").each(function () { 60047 var filterCol = $(this).attr("data-query"); 60048 var filterValue = ""; 60049 $(this) 60050 .find('.list-filter-block input[type="checkbox"]:checked') 60051 .each(function (index) { 60052 filterValue = index == 0 ? filterValue + $(this).val() : filterValue + "," + $(this).val(); 60053 }); 60054 filterData[filterCol] = filterValue; 60055 }); 60056 !nextPage ? (filterData.pageIndex = 1) : (filterData.pageIndex = nextPage); 60057 return filterData; 60058 } 60059 filterTarget.on("click", "[data-page-index]", function (e) { 60060 e.preventDefault(); 60061 var nextPage = Number($(this).attr("data-page-index")); 60062 var chkListLocate = $(window).width() >= 992 ? $(".sortable.mixed-filter") : $("#filter-modal-portfolio .modal-body .filter-level-1"); 60063 handlePortfolioFilter(getFilterParams(chkListLocate, nextPage), false); 60064 }); 60065 $(document).on("click", ".sortable.mixed-filter .sub-nav .btn-apply", function (e) { 60066 e.preventDefault(); 60067 var isNMC = $(this).closest(".mediacenter-redesign").length; 60068 if (!isNMC) { 60069 var chkListLocate = $(this).closest(".mixed-filter"); 60070 handlePortfolioClick(chkListLocate, e.target); 60071 window.propertyMethod(this); 60072 } 60073 60074 }); 60075 $("#filter-modal-portfolio").on("click", ".btn-apply", function (e) { 60076 e.preventDefault(); 60077 var chkListLocate = $(this).closest(".filter-level-1"); 60078 handlePortfolioFilter(getFilterParams(chkListLocate, false), true);
60079 $(this).closest("#filter-modal-portfolio").find(".modal-head .icon-close").trigger("click"); 60080 }); 60081 $("[data-tab-filter], .filter-modal-portfolio").on("click", ".link-reset", function () { 60082 $(this).closest("form").find(".list-filter-block input").removeAttr("checked"); 60083 }); 60084})(jQuery, window); 60085(function ($, window, undefined) { 60086 var videoSelector = $("#video"); 60087 var video = videoSelector[0] ? videoSelector[0] : null; 60088 var handle = false; 60089 var touchmoved; 60090 if (video) { 60091 if (video.readyState >= video.HAVE_FUTURE_DATA) { 60092 handleCanPlay(); 60093 } else { 60094 video.addEventListener("canplay", function () { 60095 handleCanPlay(); 60096 }); 60097 } 60098 $(".hero.hero-pages .item.has-video.no-show-more .thumb, .hero.hero-pages .item.has-video > .inner-container") 60099 .on("click touchend", function (e) { 60100 e.stopImmediatePropagation(); 60101 if (!touchmoved) { 60102 if (e.type === "click") { 60103 handlePlay(); 60104 handle = true; 60105 } else if (e.type === "touchend" && !handle) { 60106 handlePlay(); 60107 } else { 60108 handle = false; 60109 } 60110 } 60111 }) 60112 .on("touchmove", function () { 60113 touchmoved = true; 60114 }) 60115 .on("touchstart", function () { 60116 touchmoved = false; 60117 }); 60118 function handleCanPlay() { 60119 video.pause(); 60120 videoSelector.closest(".hero.hero-pages .item.has-video.no-show-more").addClass("playing"); 60121 } 60122 function handlePlay() { 60123 if (video.paused) { 60124 video.play(); 60125 videoSelector.closest(".hero.hero-pages .item.has-video.no-show-more").removeClass("playing"); 60126 } else { 60127 video.pause(); 60128 videoSelector.closest(".hero.hero-pages .item.has-video.no-show-more").addClass("playing"); 60129 } 60130 } 60131 } 60132})(jQuery, window); 60133var StickyHeader = (function ($, window, undefined) { 60134 var init = function () { 60135 "use strict"; 60136 var WINDOW; 60137 var HEADER; 60138 var MAIN_MENU; 60139 var OVERLAP_MENU; 60140 var FILTER; 60141 var TABLE; 60142 var SUB_MENU; 60143 var CONTACT_MENU; 60144 var MEDIA_MENU; 60145 var MEDIA_CENTER_MENU; 60146 var MEDIA_CONTENT; 60147 var PAGE_CONTAINER; 60148 var INITIAL_MAIN_MENU_OFFSET_TOP; 60149 var INITIAL_OVERLAP_MENU_OFFSET_TOP; 60150 var INITIAL_FILTER_OFFSET_TOP; 60151 var INITIAL_PAGE_CONTAINER_OFFSET_TOP; 60152 var INITIAL_CONTACT_MENU_OFFSET_TOP; 60153 var INITIAL_PAGE_CONTAINER_OUTER_HEIGHT; 60154 var INITIAL_MAIN_MENU_OUTER_HEIGHT; 60155 var INITIAL_OVERLAP_MENU_OUTER_HEIGHT; 60156 var INITIAL_MEDIA_MENU_OUTER_HEIGHT; 60157 var INITIAL_MEDIA_MENU_OFFSET_TOP; 60158 var INITIAL_SUB_MENU_OFFSET_TOP; 60159 var INITIAL_SINGLE_TABLE_OFFSET_TOP; 60160 var ACTUAL_OVERLAP_MENU_OFFSET_TOP; 60161 var ACTUALFILTER_OFFSET_TOP; 60162 var ACTUAL_CONTACT_MENU_OFFSET_TOP; 60163 var ACTUAL_MEDIA_MENU_OFFSET_TOP; 60164 var COUNT_OVERLAP_FILTER = 0; 60165 var mainHandler = function () { 60166 OVERLAP_MENU = $(".menu.overlap-up:not(.no-sticky)"); 60167 FILTER = $(".menu[data-filters]:not(.overlap-up):visible"); 60168 TABLE = $("table.table:not(.table-label-value):not(.clone-sticky):visible,div.table.insiderTable:not(.clone-sticky):visible,div.table.historicalTable:not(.clone-sticky):visible"); 60169 SUB_MENU = $(".phrase2-sub-menu"); 60170 CONTACT_MENU = $(".menu.contact-sections"); 60171 MEDIA_MENU = $(".media-content > .menu"); 60172 MEDIA_CENTER_MENU = $("[data-api-load='media-center'] .menu"); 60173 MEDIA_CONTENT = $(".media-content"); 60174 PAGE_CONTAINER = $(".page .container"); 60175 removeStickOnlyGlobalAndMain(); 60176 removeStickOnlyOverlapMenu(); 60177 removeStickOverlapAndFilter(); 60178 removeStickContactMenu(); 60179 removeStickSubMenu(); 60180 removeStickMediaCenter(); 60181 removeStickOverlapAndSingleTable(); 60182 removeStickOverlapAndMultiTables(); 60183 switch (true) { 60184 case !OVERLAP_MENU[0] && !FILTER[0] && !SUB_MENU[0] && !MEDIA_CONTENT[0] && !CONTACT_MENU[0] && !TABLE[0]: 60185 stickOnlyGlobalAndMain(); 60186 break; 60187 case OVERLAP_MENU[0] && !FILTER[0] && !SUB_MENU[0] && !MEDIA_CONTENT[0] && !CONTACT_MENU[0] && !TABLE[0]: 60188 stickOnlyOverlapMenu(); 60189 break; 60190 case OVERLAP_MENU[0] && FILTER[0] && !SUB_MENU[0] && !MEDIA_CONTENT[0] && !CONTACT_MENU[0] && !TABLE[0]: 60191 stickOverlapAndFilter(); 60192 break; 60193 case OVERLAP_MENU[0] && CONTACT_MENU[0] && !FILTER[0] && !SUB_MENU[0] && !MEDIA_CONTENT[0] && !TABLE[0]: 60194 stickContactMenu(); 60195 break; 60196 case SUB_MENU[0] && !OVERLAP_MENU[0] && !FILTER[0] && !MEDIA_CONTENT[0] && !CONTACT_MENU[0] && !TABLE[0]: 60197 stickSubMenu(); 60198 break; 60199 case MEDIA_CONTENT[0] && !FILTER[0] && !SUB_MENU[0] && !CONTACT_MENU[0] && !TABLE[0]: 60200 stickMediaCenter(); 60201 break; 60202 case OVERLAP_MENU[0] && TABLE[0] && TABLE.length === 1 && !SUB_MENU[0] && !CONTACT_MENU[0] && !MEDIA_CONTENT[0] && !FILTER[0]: 60203 stickOverlapAndSingleTable(); 60204 break; 60205 case OVERLAP_MENU[0] && TABLE[0] && TABLE.length !== 1 && !SUB_MENU[0] && !CONTACT_MENU[0] && !MEDIA_CONTENT[0] && !FILTER[0]: 60206 stickOverlapAndMultiTables(); 60207 break; 60208 case OVERLAP_MENU[0]: 60209 stickOnlyOverlapMenu(); 60210 default: 60211 stickOnlyGlobalAndMain(); 60212 } 60213 }; 60214 $(document).ready(function () { 60215 console.log("ready!!"); 60216 WINDOW = $(window); 60217 HEADER = $(".globalheader"); 60218 MAIN_MENU = $("#logo-menu"); 60219 OVERLAP_MENU = $(".menu.overlap-up:not(.no-sticky)"); 60220 FILTER = $(".menu[data-filters]:not(.overlap-up):visible"); 60221 SUB_MENU = $(".phrase2-sub-menu"); 60222 CONTACT_MENU = $(".menu.contact-sections"); 60223 MEDIA_MENU = $(".media-content > .menu"); 60224 MEDIA_CENTER_MENU = $("[data-api-load='media-center'] .menu"); 60225 MEDIA_CONTENT = $(".media-content"); 60226 PAGE_CONTAINER = $(".page .container"); 60227 TABLE = $("table.table:not(.table-label-value):not(.clone-sticky):visible,div.table.insiderTable:not(.clone-sticky):visible,div.table.historicalTable:not(.clone-sticky):visible"); 60228 recalculate(); 60229 function recalculate() { 60230 console.log("recalculated"); 60231 INITIAL_MAIN_MENU_OFFSET_TOP = MAIN_MENU.offset() ? MAIN_MENU.offset().top : null; 60232 INITIAL_OVERLAP_MENU_OFFSET_TOP = OVERLAP_MENU[0] ? OVERLAP_MENU.offset().top : null; 60233 INITIAL_OVERLAP_MENU_OUTER_HEIGHT = OVERLAP_MENU[0] ? OVERLAP_MENU.outerHeight() : null; 60234 INITIAL_FILTER_OFFSET_TOP = FILTER[0] ? FILTER.offset().top : null; 60235 INITIAL_PAGE_CONTAINER_OFFSET_TOP = PAGE_CONTAINER[0] ? PAGE_CONTAINER.offset().top : null; 60236 INITIAL_PAGE_CONTAINER_OUTER_HEIGHT = PAGE_CONTAINER[0] ? PAGE_CONTAINER.outerHeight() : null; 60237 INITIAL_MAIN_MENU_OUTER_HEIGHT = MAIN_MENU.outerHeight(); 60238 INITIAL_MEDIA_MENU_OUTER_HEIGHT = MEDIA_CENTER_MENU.outerHeight(); 60239 INITIAL_CONTACT_MENU_OFFSET_TOP = CONTACT_MENU[0] ? CONTACT_MENU.offset().top : null; 60240 INITIAL_MEDIA_MENU_OFFSET_TOP = MEDIA_CENTER_MENU[0] ? MEDIA_CENTER_MENU.offset().top : null; 60241 INITIAL_SUB_MENU_OFFSET_TOP = SUB_MENU[0] ? SUB_MENU.offset().top : null; 60242 INITIAL_SINGLE_TABLE_OFFSET_TOP = TABLE[0] ? TABLE.offset().top : null; 60243 ACTUAL_OVERLAP_MENU_OFFSET_TOP = !INITIAL_OVERLAP_MENU_OFFSET_TOP ? null : INITIAL_OVERLAP_MENU_OFFSET_TOP - (WINDOW.innerWidth() < 992 ? 75 : (OVERLAP_MENU.parent(".inner-container")[0] ? 0 : 40) + MAIN_MENU.outerHeight()); 60244 ACTUALFILTER_OFFSET_TOP = !INITIAL_FILTER_OFFSET_TOP ? null : INITIAL_FILTER_OFFSET_TOP - MAIN_MENU.outerHeight(); 60245 ACTUAL_CONTACT_MENU_OFFSET_TOP = !INITIAL_CONTACT_MENU_OFFSET_TOP ? null : INITIAL_CONTACT_MENU_OFFSET_TOP - MAIN_MENU.outerHeight(); 60246 ACTUAL_MEDIA_MENU_OFFSET_TOP = !INITIAL_MEDIA_MENU_OFFSET_TOP ? null : INITIAL_MEDIA_MENU_OFFSET_TOP - MAIN_MENU.outerHeight(); 60247 } 60248 mainHandler(); 60249 var windowWidth = WINDOW.width(); 60250 $(window).on("resize", function () { 60251 if (WINDOW.width() !== windowWidth) { 60252 console.log("resized"); 60253 setTimeout(recalculate, 100); 60254 setTimeout(mainHandler, 100); 60255 } 60256 }); 60257 if (OVERLAP_MENU[0]) { 60258 $(document).on("click", ".menu.overlap-up .tab a", function () { 60259 setTimeout(mainHandler, 100); 60260 }); 60261 $(document).on("change", ".menu.overlap-up select", function () { 60262 setTimeout(mainHandler, 100); 60263 }); 60264 } 60265 }); 60266 function stickOnlyGlobalAndMain(firstCheck) { 60267 console.log("only global and main"); 60268 var handler = function () { 60269 if (WINDOW.scrollTop() > 0) { 60270 HEADER.addClass("sticky"); 60271 } else { 60272 HEADER.removeClass("sticky"); 60273 } 60274 }; 60275 handler();
60276 WINDOW.on("scroll.stickOnlyGlobalAndMain", handler); 60277 } 60278 function removeStickOnlyGlobalAndMain() { 60279 console.log("remove"); 60280 WINDOW.off("scroll.stickOnlyGlobalAndMain"); 60281 HEADER.removeClass("sticky"); 60282 } 60283 60284// Function to add the sticky class 60285function addMediaStickyClass() { 60286 const mediacenterRedesign = document.querySelector('.mediacenter-redesign'); 60287 if (!mediacenterRedesign) return; // Exit if mediacenterRedesign doesn't exist 60288 60289 const redesignFilter = mediacenterRedesign.querySelector('.redesign-filter'); 60290 if (!redesignFilter) return; // Exit if redesign-filter doesn't exist 60291 60292 const bufferPxTop = 100; // Adjust this value to set how early you want the sticky class to be added 60293 const bufferPxBottom = 150; // Adjust this value to set the buffer for removing the sticky class 60294 60295 const scrollTop = window.pageYOffset || document.documentElement.scrollTop; 60296 const mediacenterTop = mediacenterRedesign.offsetTop; 60297 const mediacenterBottom = mediacenterTop + mediacenterRedesign.offsetHeight; 60298 const filterHeight = redesignFilter.offsetHeight; 60299 60300 // Add the sticky class if the user has scrolled to the top of mediacenter-redesign 60301 if (scrollTop >= mediacenterTop - bufferPxTop) { 60302 redesignFilter.classList.add('sticky'); 60303 } else { 60304 redesignFilter.classList.remove('sticky'); 60305 } 60306 60307 // Remove the sticky class when reaching the bottom with a buffer 60308 if (scrollTop >= mediacenterBottom - filterHeight - bufferPxBottom) { 60309 redesignFilter.classList.remove('sticky'); 60310 } 60311} 60312 60313// Add scroll event listener to the window 60314window.addEventListener('scroll', addMediaStickyClass); 60315 60316// Call the function initially to handle the initial state 60317addMediaStickyClass(); 60318 60319 60320 // function stickOnlyOverlapMenu() { 60321 // console.log("main + overlap"); 60322 // var handler = function () { 60323 // if (WINDOW.scrollTop() > INITIAL_MAIN_MENU_OFFSET_TOP) { 60324 // HEADER.addClass("main-only-sticky"); 60325 // } else { 60326 // HEADER.removeClass("main-only-sticky"); 60327 // } 60328 // if (OVERLAP_MENU && OVERLAP_MENU[0] && OVERLAP_MENU[0].classList.contains('redesign-filter')) { 60329 // let timeoutScroll; 60330 // let homecarousel = document.getElementsByClassName('homecarousel') ? document.getElementsByClassName('homecarousel')[0].offsetHeight : 0; 60331 // let homebanner = document.getElementsByClassName('homebanner') ? document.getElementsByClassName('homebanner')[0].offsetHeight : 0; 60332 // let mediacentercards = document.getElementsByClassName('mediacentercards') ? document.getElementsByClassName('mediacentercards')[0].offsetHeight : 0; 60333 // let mediacenterRedesign = document.getElementsByClassName('mediacenter-redesign') ? document.getElementsByClassName('mediacenter-redesign')[0].offsetHeight : 0; 60334 // let minStickyHeight = homecarousel + homebanner + mediacentercards; 60335 // let maxStickyHeight = minStickyHeight + mediacenterRedesign; 60336 // if (WINDOW.scrollTop() > minStickyHeight && WINDOW.scrollTop() <= (maxStickyHeight-100)) { 60337 // OVERLAP_MENU.addClass("sticky"); 60338 // }else if (WINDOW.scrollTop() < minStickyHeight) { 60339 // OVERLAP_MENU.removeClass("sticky"); 60340 // } else if (WINDOW.scrollTop() > (maxStickyHeight-20)) { 60341 // OVERLAP_MENU.removeClass("sticky"); 60342 // } 60343 // } else { 60344 // if (WINDOW.scrollTop() > ACTUAL_OVERLAP_MENU_OFFSET_TOP) { 60345 // OVERLAP_MENU.addClass("sticky"); 60346 // } else { 60347 // OVERLAP_MENU.removeClass("sticky"); 60348 // } 60349 // } 60350 // }; 60351 // handler(); 60352 // WINDOW.on("scroll.stickOnlyOverlapMenu", handler); 60353 // } 60354 60355 function stickOnlyOverlapMenu() { 60356 var handler = function () { 60357 if (WINDOW.scrollTop() > INITIAL_MAIN_MENU_OFFSET_TOP) { 60358 HEADER.addClass("main-only-sticky"); 60359 } else { 60360 HEADER.removeClass("main-only-sticky"); 60361 } 60362 if (OVERLAP_MENU && OVERLAP_MENU[0] && OVERLAP_MENU[0].classList.contains('redesign-filter')) { 60363 60364 let mediacenterRedesign = document.getElementsByClassName('nmc-filter-reults') ? document.getElementsByClassName('nmc-filter-reults')[0].offsetHeight : 0; 60365 let minStickyHeight = document.getElementsByClassName('nmc-filter mcgrey') ? document.getElementsByClassName('nmc-filter mcgrey')[0].offsetTop : 0; 60366 minStickyHeight-=120; 60367 let maxStickyHeight = minStickyHeight + mediacenterRedesign; 60368 if (WINDOW.scrollTop() > minStickyHeight && WINDOW.scrollTop() <= (maxStickyHeight-100)) { 60369 OVERLAP_MENU.addClass("sticky"); 60370 }else if (WINDOW.scrollTop() < minStickyHeight) { 60371 OVERLAP_MENU.removeClass("sticky"); 60372 } else if (WINDOW.scrollTop() > (maxStickyHeight-125)) { 60373 OVERLAP_MENU.removeClass("sticky"); 60374 } 60375 } else { 60376 if (WINDOW.scrollTop() > ACTUAL_OVERLAP_MENU_OFFSET_TOP) { 60377 OVERLAP_MENU.addClass("sticky"); 60378 } else { 60379 OVERLAP_MENU.removeClass("sticky"); 60380 } 60381 } 60382 }; 60383 handler();
60384 WINDOW.on("scroll.stickOnlyOverlapMenu", handler); 60385 } 60386 60387 function removeStickOnlyOverlapMenu() { 60388 WINDOW.off("scroll.stickOnlyOverlapMenu"); 60389 HEADER.removeClass("main-only-sticky"); 60390 OVERLAP_MENU.removeClass("sticky"); 60391 } 60392 function removeStickOverlapAndFilter() { 60393 WINDOW.off("scroll.stickOverlapAndFilter"); 60394 HEADER.removeClass("main-only-sticky"); 60395 OVERLAP_MENU.removeClass("sticky"); 60396 } 60397 function stickContactMenu() { 60398 console.log("main + overlap + contact"); 60399 var handler = function () { 60400 if (WINDOW.scrollTop() > INITIAL_MAIN_MENU_OFFSET_TOP) { 60401 HEADER.addClass("main-only-sticky"); 60402 } else { 60403 HEADER.removeClass("main-only-sticky"); 60404 } 60405 if (WINDOW.scrollTop() > ACTUAL_OVERLAP_MENU_OFFSET_TOP && WINDOW.scrollTop() <= ACTUAL_CONTACT_MENU_OFFSET_TOP) { 60406 OVERLAP_MENU.addClass("sticky"); 60407 } else { 60408 OVERLAP_MENU.removeClass("sticky"); 60409 } 60410 if (WINDOW.scrollTop() > ACTUAL_CONTACT_MENU_OFFSET_TOP) { 60411 CONTACT_MENU.addClass("sticky"); 60412 } else { 60413 CONTACT_MENU.removeClass("sticky"); 60414 } 60415 }; 60416 handler(); 60417 WINDOW.on("scroll.stickContactMenu", handler); 60418 if($(".menu.contact-sections.show-contactus-only").length > 0) { 60419 var selectTag = $(".menu.contact-sections.show-contactus-only").find("select"); 60420 if(selectTag) { 60421 $(".menu.contact-sections.show-contactus-only select").attr("disabled","disabled"); 60422 } 60423 } 60424 } 60425 function removeStickContactMenu() { 60426 WINDOW.off("scroll.stickContactMenu"); 60427 HEADER.removeClass("main-only-sticky"); 60428 OVERLAP_MENU.removeClass("sticky"); 60429 CONTACT_MENU.removeClass("sticky"); 60430 } 60431 function stickSubMenu() { 60432 console.log("submenu"); 60433 var handler = function () { 60434 if (WINDOW.scrollTop() > 0 && WINDOW.scrollTop()<INITIAL_SUB_MENU_OFFSET_TOP){ 60435 60436 HEADER.addClass("sticky"); 60437 HEADER.removeClass(""); 60438 } 60439 else { 60440 HEADER.removeClass("sticky"); 60441 } 60442 60443 60444 }; 60445 handler(); 60446 WINDOW.on("scroll.stickSubMenu", handler); 60447 } 60448 function removeStickSubMenu() { 60449 WINDOW.off("scroll.stickSubMenu"); 60450 HEADER.removeClass("sticky"); 60451 } 60452 function stickMediaCenter() { 60453 console.log("media center"); 60454 var handler = function () { 60455 if (WINDOW.scrollTop() > INITIAL_MAIN_MENU_OFFSET_TOP) { 60456 HEADER.addClass("main-only-sticky"); 60457 } else { 60458 HEADER.removeClass("main-only-sticky"); 60459 } 60460 if (WINDOW.scrollTop() > ACTUAL_MEDIA_MENU_OFFSET_TOP) { 60461 MEDIA_CENTER_MENU.first().addClass("sticky"); 60462 MEDIA_CONTENT.css("padding-top", INITIAL_MEDIA_MENU_OUTER_HEIGHT); 60463 } else { 60464 MEDIA_CENTER_MENU.first().removeClass("sticky"); 60465 MEDIA_CONTENT.css("padding-top", ""); 60466 } 60467 }; 60468 handler(); 60469 WINDOW.on("scroll.stickMediaCenter", handler); 60470 } 60471 function removeStickMediaCenter() { 60472 WINDOW.off("scroll.stickMediaCenter"); 60473 HEADER.removeClass("main-only-sticky"); 60474 MEDIA_CENTER_MENU.first().removeClass("sticky"); 60475 MEDIA_CONTENT.css("padding-top", ""); 60476 } 60477 function stickOverlapAndSingleTable() { 60478 console.log("main + overlap + single table"); 60479 TABLE = $("table.table:not(.table-label-value):not(.clone-sticky):visible,div.table.insiderTable:not(.clone-sticky):visible,div.table.historicalTable:not(.clone-sticky):visible"); 60480 INITIAL_SINGLE_TABLE_OFFSET_TOP = TABLE.offset().top; 60481 if (!TABLE.siblings(".clone-sticky")[0]) { 60482 TABLE.clone(true).insertBefore(TABLE).addClass("clone-sticky").css({ "max-width": TABLE.outerWidth(), width: TABLE.outerWidth() }); 60483 } 60484 var tableTriggerPosition = INITIAL_SINGLE_TABLE_OFFSET_TOP - (INITIAL_MAIN_MENU_OUTER_HEIGHT + INITIAL_OVERLAP_MENU_OUTER_HEIGHT + 10); 60485 var handler = function () { 60486 if (WINDOW.scrollTop() > INITIAL_MAIN_MENU_OFFSET_TOP) { 60487 HEADER.addClass("main-only-sticky"); 60488 } else { 60489 HEADER.removeClass("main-only-sticky"); 60490 } 60491 if (WINDOW.scrollTop() > ACTUAL_OVERLAP_MENU_OFFSET_TOP && WINDOW.scrollTop() <= tableTriggerPosition) { 60492 OVERLAP_MENU.addClass("sticky"); 60493 } else { 60494 OVERLAP_MENU.removeClass("sticky"); 60495 } 60496 if (WINDOW.scrollTop() > tableTriggerPosition) { 60497 TABLE.siblings(".clone-sticky").addClass("sticky"); 60498 } else { 60499 TABLE.siblings(".clone-sticky").removeClass("sticky"); 60500 } 60501 }; 60502 handler();
60503 WINDOW.on("scroll.stickOverlapAndSingleTable", handler); 60504 } 60505 function removeStickOverlapAndSingleTable() { 60506 WINDOW.off("scroll.stickOverlapAndSingleTable"); 60507 HEADER.removeClass("main-only-sticky"); 60508 OVERLAP_MENU.removeClass("sticky"); 60509 TABLE.siblings(".clone-sticky").remove(); 60510 } 60511 function stickOverlapAndMultiTables() { 60512 console.log("main + overlap + multi tables"); 60513 var tablePositions = []; 60514 var currentStickedTablePosition = null; 60515 var currentStickedTableIndex = null; 60516 TABLE = $("table.table:not(.table-label-value):not(.clone-sticky):visible,div.table.insiderTable:not(.clone-sticky):visible,div.table.historicalTable:not(.clone-sticky):visible"); 60517 for (var index = 0; index < TABLE.length; index++) { 60518 var $thisTable = $(TABLE[index]); 60519 tablePositions.push($thisTable.offset().top); 60520 if (!$thisTable.siblings(".clone-sticky")[0]) { 60521 $thisTable.clone(true).insertBefore($thisTable).addClass("clone-sticky").css({ "max-width": $thisTable.outerWidth(), width: $thisTable.outerWidth() }); 60522 } 60523 } 60524 var tableTriggerPosition = tablePositions[0] - (INITIAL_MAIN_MENU_OUTER_HEIGHT + INITIAL_OVERLAP_MENU_OUTER_HEIGHT + 10); 60525 var handler = function () { 60526 console.log("window scroll ", WINDOW.scrollTop()); 60527 console.log("table trigger ", tableTriggerPosition); 60528 if (WINDOW.scrollTop() > INITIAL_MAIN_MENU_OFFSET_TOP) { 60529 HEADER.addClass("main-only-sticky"); 60530 } else { 60531 HEADER.removeClass("main-only-sticky"); 60532 } 60533 if (WINDOW.scrollTop() > ACTUAL_OVERLAP_MENU_OFFSET_TOP && WINDOW.scrollTop() <= tableTriggerPosition) { 60534 OVERLAP_MENU.addClass("sticky"); 60535 } else { 60536 OVERLAP_MENU.removeClass("sticky"); 60537 } 60538 if (WINDOW.scrollTop() > tableTriggerPosition) { 60539 currentStickedTablePosition = findClosestValue(tablePositions, WINDOW.scrollTop() + INITIAL_MAIN_MENU_OUTER_HEIGHT + INITIAL_OVERLAP_MENU_OUTER_HEIGHT); 60540 currentStickedTableIndex = tablePositions.indexOf(currentStickedTablePosition); 60541 for (var index = 0; index < TABLE.length; index++) { 60542 var $thisTable = $(TABLE[index]); 60543 if (index === currentStickedTableIndex && currentStickedTableIndex !== null) { 60544 $thisTable.siblings(".clone-sticky").addClass("sticky"); 60545 OVERLAP_MENU.removeClass("sticky"); 60546 } else { 60547 $thisTable.siblings(".clone-sticky").removeClass("sticky"); 60548 } 60549 } 60550 } else { 60551 TABLE.siblings(".clone-sticky").removeClass("sticky"); 60552 } 60553 }; 60554 handler(); 60555 WINDOW.on("scroll.stickOverlapAndMultiTables", handler); 60556 } 60557 function removeStickOverlapAndMultiTables() { 60558 WINDOW.off("scroll.stickOverlapAndMultiTables"); 60559 HEADER.removeClass("main-only-sticky"); 60560 OVERLAP_MENU.removeClass("sticky"); 60561 TABLE.siblings(".clone-sticky").remove(); 60562 } 60563 function findClosestValue(arr, val) { 60564 return Math.max.apply( 60565 null, 60566 arr.filter(function (v) { 60567 return v <= val; 60568 }) 60569 ) !== -Infinity 60570 ? Math.max.apply( 60571 null, 60572 arr.filter(function (v) { 60573 return v <= val; 60574 }) 60575 ) 60576 : false; 60577 } 60578 }; 60579 $(".btn-close").click(function () { 60580 $.when($("#top-bar").animate({ opacity: 0 }, 500), $(".nav").animate({ top: "-45px" }, 500)).then(function () { 60581 var el = document.getElementById("top-bar"); 60582 el.setAttribute("style", "display: none;"); 60583 $(".nav").css("top", "0px"); 60584 }); 60585 }); 60586 return { init: init }; 60587})(jQuery, window); 60588StickyHeader.init(); 60589function applyResponsiveVideoWidth() { 60590 if (window.innerWidth >= 1359) return; 60591 const videoWrappers = document.querySelectorAll('.video-v2 .fraservideo'); 60592 if (videoWrappers.length === 0) return; 60593
60594 videoWrappers.forEach(videoWrapper => { 60595 const videoPlayer = videoWrapper.querySelector('.fraservideo__player'); 60596 if (!videoPlayer) return; 60597 const wrapperWidth = videoWrapper.offsetWidth - 40; 60598 videoPlayer.style.setProperty('width', wrapperWidth + 'px'); 60599 }); 60600} 60601document.addEventListener("DOMContentLoaded", function () { 60602 applyResponsiveVideoWidth(); 60603}); 60604// portfolio cards bottom value updation is it does not have anchor tag 60605const cardDivs = document.querySelectorAll('.fraserportfolio__cardovrlytxt'); 60606 60607 cardDivs.forEach(cardDiv => { 60608 const anchorTag = cardDiv.querySelector('a'); 60609 60610 if (!anchorTag) { 60611 cardDiv.classList.add('no-anchor'); 60612 } 60613 }); 60614 60615 $(document).ready(function () { 60616 var color = $("#bg-color").css("background-color"); 60617 $("#lightbox").css("background", color); 60618 if($("#bg-color").hasClass("bg--white")){ 60619 $("#lightbox .lb-close").css('background-image','url(/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/fraseroldimages/icon-close.svg)'); 60620 } 60621 }); 60622$(".alert-marquee").each(function() { 60623 if($(this).prop('scrollWidth') > $(this).parent().width()) 60624 $(this).wrap('<marquee></marquee>') 60625}); 60626function updateFacebookIframeWidth() { 60627 const socialMediaContainer = document.querySelector(".socialmedia"); 60628 if (!socialMediaContainer) return; 60629 const iframes = socialMediaContainer.querySelectorAll("iframe"); 60630 iframes.forEach(iframe => { 60631 const src = iframe.getAttribute("src"); 60632 60633 if (src && src.includes("facebook.com/plugins/post.php")) { 60634 const iframeWidth = iframe.offsetWidth; 60635 let newSrc = src.replace(/([?&])width=\d+(&)?/, (match, p1, p2) => { 60636 return p2 ? p1 : ""; 60637 }); 60638 const hasQuery = newSrc.includes("?"); 60639 const separator = hasQuery ? "&" : "?"; 60640 newSrc += `${separator}width=${iframeWidth}`; 60641 iframe.setAttribute("src", newSrc); 60642 } 60643 }); 60644} 60645document.addEventListener("DOMContentLoaded", updateFacebookIframeWidth); 60646function setIframeHeight() { 60647 const stock_iframe = document.querySelector('.iframe_item'); 60648 if (stock_iframe) { 60649 const desktopHeight = stock_iframe.getAttribute('data-height-desktop') || '301'; 60650 const mobileHeight = stock_iframe.getAttribute('data-height-mobile') || '600'; 60651 60652 const isMobile = window.innerWidth <= 991; 60653 stock_iframe.style.height = (isMobile ? mobileHeight : desktopHeight) + 'px'; 60654 } 60655} 60656 60657if (document.querySelector('.iframe_item')) { 60658 window.addEventListener('load', setIframeHeight); 60659 window.addEventListener('resize', setIframeHeight); 60660} 60661/** 60662* Panzoom for panning and zooming elements using CSS transforms 60663* Copyright Timmy Willison and other contributors 60664* https://github.com/timmywil/panzoom/blob/master/MIT-License.txt 60665*/ 60666!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Panzoom=e()}(this,function(){"use strict";var C=function(){return(C=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++)for(var r in e=arguments[n])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}).apply(this,arguments)};function T(t,e){for(var n=t.length;n--;)if(t[n].pointerId===e.pointerId)return n;return-1}function N(t,e){if(e.touches)for(var n=0,o=0,r=e.touches;o<r.length;o++){var a=r[o];a.pointerId=n++,N(t,a)}else-1<(n=T(t,e))&&t.splice(n,1),t.push(e)}function L(t){for(var e,n=(t=t.slice(0)).pop();e=t.pop();)n={clientX:(e.clientX-n.clientX)/2+n.clientX,clientY:(e.clientY-n.clientY)/2+n.clientY};return n}function I(t){if(t.length<2)return 0;var e=t[0],t=t[1];return Math.sqrt(Math.pow(Math.abs(t.clientX-e.clientX),2)+Math.pow(Math.abs(t.clientY-e.clientY),2))}"undefined"!=typeof window&&(window.NodeList&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(t,e){e=e||{bubbles:!1,cancelable:!1,detail:null};var n=document.createEvent("CustomEvent");return n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}));
60666var V={down:"mousedown",move:"mousemove",up:"mouseup mouseleave"};function W(t,e,n,o){V[t].split(" ").forEach(function(t){e.addEventListener(t,n,o)})}function Z(t,e,n){V[t].split(" ").forEach(function(t){e.removeEventListener(t,n)})}"undefined"!=typeof window&&("function"==typeof window.PointerEvent?V={down:"pointerdown",move:"pointermove",up:"pointerup pointerleave pointercancel"}:"function"==typeof window.TouchEvent&&(V={down:"touchstart",move:"touchmove",up:"touchend touchcancel"}));var a,i="undefined"!=typeof document&&!!document.documentMode;var l=["webkit","moz","ms"],c={};function q(t){if(c[t])return c[t];var e=a=a||document.createElement("div").style;if(t in e)return c[t]=t;for(var n=t[0].toUpperCase()+t.slice(1),o=l.length;o--;){var r=""+l[o]+n;if(r in e)return c[t]=r}}function r(t,e){return parseFloat(e[q(t)])||0}function s(t,e,n){var o="border"===e?"Width":"";return{left:r(e+"Left"+o,n=void 0===n?window.getComputedStyle(t):n),right:r(e+"Right"+o,n),top:r(e+"Top"+o,n),bottom:r(e+"Bottom"+o,n)}}function B(t,e,n){t.style[q(e)]=n}function D(t){var e=t.parentNode,n=window.getComputedStyle(t),o=window.getComputedStyle(e),r=t.getBoundingClientRect(),a=e.getBoundingClientRect();return{elem:{style:n,width:r.width,height:r.height,top:r.top,bottom:r.bottom,left:r.left,right:r.right,margin:s(t,"margin",n),border:s(t,"border",n)},parent:{style:o,width:a.width,height:a.height,top:a.top,bottom:a.bottom,left:a.left,right:a.right,padding:s(e,"padding",o),border:s(e,"border",o)}}}var F=/^http:[\w\.\/]+svg$/;var G={animate:!1,canvas:!1,cursor:"move",disablePan:!1,disableZoom:!1,disableXAxis:!1,disableYAxis:!1,duration:200,easing:"ease-in-out",exclude:[],excludeClass:"panzoom-exclude",handleStartEvent:function(t){t.preventDefault(),t.stopPropagation()},maxScale:4,minScale:.125,overflow:"hidden",panOnlyWhenZoomed:!1,relative:!1,setTransform:function(t,e,n){var o=e.x,r=e.y,a=e.scale,e=e.isSVG;B(t,"transform","scale("+a+") translate("+o+"px, "+r+"px)"),e&&i&&(e=window.getComputedStyle(t).getPropertyValue("transform"),t.setAttribute("transform",e))},startX:0,startY:0,startScale:1,step:.3,touchAction:"none"};function t(d,f){if(!d)throw new Error("Panzoom requires an element as an argument");if(1!==d.nodeType)throw new Error("Panzoom requires an element with a nodeType of 1");if(t=(e=d).ownerDocument,e=e.parentNode,!(t&&e&&9===t.nodeType&&1===e.nodeType&&t.documentElement.contains(e)))throw new Error("Panzoom should be called on elements that have been attached to the DOM");var t;f=C(C({},G),f);var e,c=(e=d,F.test(e.namespaceURI)&&"svg"!==e.nodeName.toLowerCase()),n=d.parentNode;n.style.overflow=f.overflow,n.style.userSelect="none",n.style.touchAction=f.touchAction,(f.canvas?n:d).style.cursor=f.cursor,d.style.userSelect="none",d.style.touchAction=f.touchAction,B(d,"transformOrigin","string"==typeof f.origin?f.origin:c?"0 0":"50% 50%");var o,r,a,i,l,s,m=0,h=0,v=1,p=!1;function u(t,e,n){n.silent||(e=new CustomEvent(t,{detail:e}),d.dispatchEvent(e))}function g(t,e,n){var o={x:m,y:h,scale:v,isSVG:c,originalEvent:n};return requestAnimationFrame(function(){var t;"boolean"==typeof e.animate&&(e.animate?(t=e,B(d,"transition",q("transform")+" "+t.duration+"ms "+t.easing)):B(d,"transition","none")),e.setTransform(d,o,e)}),u(t,o,e),u("panzoomchange",o,e),o}function y(){var t,e,n;f.contain&&(e=(n=D(d)).parent.width-n.parent.border.left-n.parent.border.right,t=n.parent.height-n.parent.border.top-n.parent.border.bottom,e=e/(n.elem.width/v),n=t/(n.elem.height/v),"inside"===f.contain?f.maxScale=Math.min(e,n):"outside"===f.contain&&(f.minScale=Math.max(e,n)))}function w(t,e,n,o){var r,a,i,l,c,s,p=C(C({},f),o),u={x:m,y:h,opts:p};return!p.force&&(p.disablePan||p.panOnlyWhenZoomed&&v===p.startScale)||(t=parseFloat(t),e=parseFloat(e),p.disableXAxis||(u.x=(p.relative?m:0)+t),p.disableYAxis||(u.y=(p.relative?h:0)+e),p.contain&&(t=((o=(a=(r=D(d)).elem.width/v)*n)-a)/2,e=((a=(e=r.elem.height/v)*n)-e)/2,"inside"===p.contain?(i=(-r.elem.margin.left-r.parent.padding.left+t)/n,l=(r.parent.width-o-r.parent.padding.left-r.elem.margin.left-r.parent.border.left-r.parent.border.right+t)/n,u.x=Math.max(Math.min(u.x,l),i),c=(-r.elem.margin.top-r.parent.padding.top+e)/n,s=(r.parent.height-a-r.parent.padding.top-r.elem.margin.top-r.parent.border.top-r.parent.border.bottom+e)/n,u.y=Math.max(Math.min(u.y,s),c)):"outside"===p.contain&&(i=(-(o-r.parent.width)-r.parent.padding.left-r.parent.border.left-r.parent.border.right+t)/n,l=(t-r.parent.padding.left)/n,u.x=Math.max(Math.min(u.x,l),i),c=(-(a-r.parent.height)-r.parent.padding.top-r.parent.border.top-r.parent.border.bottom+e)/n,s=(e-r.parent.padding.top)/n,u.y=Math.max(Math.min(u.y,s),c)))),u}function b(t,e){var n=C(C({},f),e),e={scale:v,opts:n};return!n.force&&n.disableZoom||(e.scale=Math.min(Math.max(t,n.minScale),n.maxScale)),e}function x(t,e,n,o){e=w(t,e,v,n),n=e.opts;return m=e.x,h=e.y,g("panzoompan",n,o)}function S(t,e,n){var o=b(t,e),r=o.opts;if(r.force||!r.disableZoom){t=o.scale;var a=m,e=h;r.focal&&(a=((o=r.focal).x/t-o.x/v+m*t)/t,e=(o.y/t-o.y/v+h*t)/t);e=w(a,e,t,{relative:!1,force:!0});return m=e.x,h=e.y,v=t,g("panzoomzoom",r,n)}}function E(t,e){e=C(C(C({},f),{animate:!0}),e);return S(v*Math.exp((t?1:-1)*e.step),e)}function O(t,e,n,o){var r=D(d),a=r.parent.width-r.parent.padding.left-r.parent.padding.right-r.parent.border.left-r.parent.border.right,i=r.parent.height-r.parent.padding.top-r.parent.padding.bottom-r.parent.border.top-r.parent.border.bottom,l=e.clientX-r.parent.left-r.parent.padding.left-r.parent.border.left-r.elem.margin.left,e=e.clientY-r.parent.top-r.parent.padding.top-r.parent.border.top-r.elem.margin.top;c||(l-=r.elem.width/v/2,e-=r.elem.height/v/2);i={x:l/a*(a*t),y:e/i*(i*t)};return S(t,C(C({animate:!1},n),{focal:i}),o)}S(f.startScale,{animate:!1}),setTimeout(function(){y(),x(f.startX,f.startY,{animate:!1})});var M=[];function P(t){!function(t,e){for(var n,o,r=t;null!=r;r=r.parentNode)if(n=r,o=e.excludeClass,1===n.nodeType&&-1<(" "+(n.getAttribute("class")||"").trim()+" ").indexOf(" "+o+" ")||-1<e.exclude.indexOf(r))return 1}(t.target,f)&&(N(M,t),p=!0,f.handleStartEvent(t),u("panzoomstart",{x:o=m,y:r=h,scale:v,isSVG:c,originalEvent:t},f),t=L(M),a=t.clientX,i=t.clientY,l=v,s=I(M))}function A(t){var e;p&&void 0!==o&&void 0!==r&&void 0!==a&&void 0!==i&&(N(M,t),e=L(M),1<M.length?(0===s&&(s=I(M)),O(b((I(M)-s)*f.step/80+l).scale,e)):x(o+(e.clientX-a)/v,r+(e.clientY-i)/v,{animate:!1},t))}function z(t){1===M.length&&u("panzoomend",{x:m,y:h,scale:v,isSVG:c,originalEvent:t},f),function(t,e){if(e.touches)for(;t.length;)t.pop();else{e=T(t,e);-1<e&&t.splice(e,1)}}(M,t),p&&(p=!1,o=r=a=i=void 0)}var X=!1;function Y(){X||(X=!0,W("down",f.canvas?n:d,P),W("move",document,A,{passive:!0}),W("up",document,z,{passive:!0}))}return f.noBind||Y(),{bind:Y,destroy:function(){X=!1,Z("down",f.canvas?n:d,P),Z("move",document,A),Z("up",document,z)},eventNames:V,getPan:function(){return{x:m,y:h}},getScale:function(){return v},getOptions:function(){return function(t){var e,n={};for(e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);return n}(f)},pan:x,reset:function(t){var e=C(C(C({},f),{animate:!0,force:!0}),t);return v=b(e.startScale,e).scale,t=w(e.startX,e.startY,v,e),m=t.x,h=t.y,g("panzoomreset",e)},resetStyle:function(){n.style.overflow="",n.style.userSelect="",n.style.touchAction="",n.style.cursor="",d.style.cursor="",d.style.userSelect="",d.style.touchAction="",B(d,"transformOrigin","")},setOptions:function(t){for(var e in t=void 0===t?{}:t)t.hasOwnProperty(e)&&(f[e]=t[e]);(t.hasOwnProperty("cursor")||t.hasOwnProperty("canvas"))&&(n.style.cursor=d.style.cursor="",(f.canvas?n:d).style.cursor=f.cursor),t.hasOwnProperty("overflow")&&(n.style.overflow=t.overflow),t.hasOwnProperty("touchAction")&&(n.style.touchAction=t.touchAction,d.style.touchAction=t.touchAction),(t.hasOwnProperty("minScale")||t.hasOwnProperty("maxScale")||t.hasOwnProperty("contain"))&&y()},setStyle:function(t,e){return B(d,t,e)},zoom:S,zoomIn:function(t){return E(!0,t)},zoomOut:function(t){return E(!1,t)},zoomToPoint:O,zoomWithWheel:function(t,e){t.preventDefault();var n=C(C({},f),e),e=0===t.deltaY&&t.deltaX?t.deltaX:t.deltaY;return O(b(v*Math.exp((e<0?1:-1)*n.step/3),n).scale,t,n)}}}return t.defaultOptions=G,t}); 60667/*! 60668 * simpleParallax.min - simpleParallax is a simple JavaScript library that gives your website parallax animations on any images or videos, 60669 * @date: 09-06-2020 12:9:37, 60670 * @version: 5.5.1, 60671 * @link: https://simpleparallax.com/ 60672 */ 60673!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("simpleParallax",[],e):"object"==typeof exports?exp
60673orts.simpleParallax=e():t.simpleParallax=e()}(window,(function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";n.r(e),n.d(e,"default",(function(){return x}));var i=function(){return Element.prototype.closest&&"IntersectionObserver"in window};function o(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var s=new(function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.positions={top:0,bottom:0,height:0}}var e,n,i;return e=t,(n=[{key:"setViewportTop",value:function(t){return this.positions.top=t?t.scrollTop:window.pageYOffset,this.positions}},{key:"setViewportBottom",value:function(){return this.positions.bottom=this.positions.top+this.positions.height,this.positions}},{key:"setViewportAll",value:function(t){return this.positions.top=t?t.scrollTop:window.pageYOffset,this.positions.height=t?t.clientHeight:document.documentElement.clientHeight,this.positions.bottom=this.positions.top+this.positions.height,this.positions}}])&&o(e.prototype,n),i&&o(e,i),t}()),r=function(t){return NodeList.prototype.isPrototypeOf(t)||HTMLCollection.prototype.isPrototypeOf(t)?Array.from(t):"string"==typeof t||t instanceof String?document.querySelectorAll(t):[t]},a=function(){for(var t,e="transform webkitTransform mozTransform oTransform msTransform".split(" "),n=0;void 0===t;)t=void 0!==document.createElement("div").style[e[n]]?e[n]:void 0,n+=1;return t}(),l=function(t){return"video"===t.tagName.toLowerCase()||!!t&&(!!t.complete&&(void 0===t.naturalWidth||0!==t.naturalWidth))};function u(t){return function(t){if(Array.isArray(t))return c(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return c(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function h(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var f=function(){function t(e,n){var i=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.element=e,this.elementContainer=e,this.settings=n,this.isVisible=!0,this.isInit=!1,this.oldTranslateValue=-1,this.init=this.init.bind(this),l(e)?this.init():this.element.addEventListener("load",(function(){setTimeout((function(){i.init(!0)}),50)}))}var e,n,i;return e=t,(n=[{key:"init",value:function(t){var e=this;this.isInit||(t&&(this.rangeMax=null),this.element.closest(".simpleParallax")||(!1===this.settings.overflow&&this.wrapElement(this.element),this.setTransformCSS(),this.getElementOffset(),this.intersectionObserver(),this.getTranslateValue(),this.animate(),this.settings.delay>0&&setTimeout((function(){e.setTransitionCSS()}),10),this.isInit=!0))}},{key:"wrapElement",value:function(){var t=this.settings.customWrapper&&this.element.closest(this.settings.customWrapper),e=this.element.closest("picture")||this.element,n=document.createElement("div");t&&(n=this.element.closest(this.settings.customWrapper)),n.classList.add("simpleParallax"),n.style.overflow="hidden",t||(e.parentNode.insertBefore(n,e),n.appendChild(e)),this.elementContainer=n}},{key:"unWrapElement",value:function(){var t=this.elementContainer;this.settings.customWrapper&&this.element.closest(this.settings.customWrapper)?(t.classList.remove("simpleParallax"),t.style.overflow=""):t.replaceWith.apply(t,u(t.childNodes))}},{key:"setTransformCSS",value:function(){!1===this.settings.overflow&&(this.element.style[a]="scale(".concat(this.settings.scale,")")),this.element.style.willChange="transform"}},{key:"setTransitionCSS",value:function(){this.element.style.transition="transform ".concat(this.settings.delay,"s ").concat(this.settings.transition)}},{key:"unSetStyle",value:function(){this.element.style.willChange="",this.element.style[a]="",this.element.style.transition=""}},{key:"getElementOffset",value:function(){var t=this.elementContainer.getBoundingClientRect();if(this.elementHeight=t.height,this.elementTop=t.top+s.positions.top,this.settings.customContainer){var e=this.settings.customContainer.getBoundingClientRect();this.elementTop=t.top-e.top+s.positions.top}this.elementBottom=this.elementHeight+this.elementTop}},{key:"buildThresholdList",value:function(){for(var t=[],e=1;e<=this.elementHeight;e++){var n=e/this.elementHeight;t.push(n)}return t}},{key:"intersectionObserver",value:function(){var t={root:null,threshold:this.buildThresholdList()};this.observer=new IntersectionObserver(this.intersectionObserverCallback.bind(this),t),this.observer.observe(this.element)}},{key:"intersectionObserverCallback",value:function(t){var e=this;t.forEach((function(t){t.isIntersecting?e.isVisible=!0:e.isVisible=!1}))}},{key:"checkIfVisible",value:function(){return this.elementBottom>s.positions.top&&this.elementTop<s.positions.bottom}},{key:"getRangeMax",value:function(){var t=this.element.clientHeight;this.rangeMax=t*this.settings.scale-t}},{key:"getTranslateValue",value:function(){var t=((s.positions.bottom-this.elementTop)/((s.positions.height+this.elementHeight)/100)).toFixed(1);return t=Math.min(100,Math.max(0,t)),0!==this.settings.maxTransition&&t>this.settings.maxTransition&&(t=this.settings.maxTransition),this.oldPercentage!==t&&(this.rangeMax||this.getRangeMax(),this.translateValue=(t/100*this.rangeMax-this.rangeMax/2).toFixed(0),this.oldTranslateValue!==this.translateValue&&(this.oldPercentage=t,this.oldTranslateValue=this.translateValue,!0))}},{key:"animate",value:function(){var t,e=0,n=0;(this.settings.orientation.includes("left")||this.settings.orientation.includes("right"))&&(n="".concat(this.settings.orientation.includes("left")?-1*this.translateValue:this.translateValue,"px")),(this.settings.orientation.includes("up")||this.settings.orientation.includes("down"))&&(e="".concat(this.settings.orientation.includes("up")?-1*this.translateValue:this.translateValue,"px")),t=!1===this.settings.overflow?"translate3d(".concat(n,", ").concat(e,", 0) scale(").concat(this.settings.scale,")"):"translate3d(".concat(n,", ").concat(e,", 0)"),this.element.style[a]=t}}])&&h(e.prototype,n),i&&h(e,i),t}();function m(t){return function(t){if(Array.isArray(t))return y(t)}(t)||function(t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||d(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var n=[],i=!0,o=!1,s=void 0;try{for(var r,a=t[Symbol.iterator]();!(i=(r=a.next()).done)&&(n.push(r.value),!e||n.length!==e);i=!0);}catch(t){o=!0,s=t}finally{try{i||null==a.return||a.return()}finally{if(o)throw s}}return n}(t,e)||d(t,e)||function(){throw new TypeError("Invalid attempt to de
60673structure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(t,e){if(t){if("string"==typeof t)return y(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(t,e):void 0}}function y(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);n<e;n++)i[n]=t[n];return i}function v(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var g,b,w=!1,T=[],x=function(){function t(e,n){if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e&&i()){if(this.elements=r(e),this.defaults={delay:0,orientation:"up",scale:1.3,overflow:!1,transition:"cubic-bezier(0,0,0,1)",customContainer:!1,customWrapper:!1,maxTransition:0},this.settings=Object.assign(this.defaults,n),this.settings.customContainer){var o=p(r(this.settings.customContainer),1);this.customContainer=o[0]}this.lastPosition=-1,this.resizeIsDone=this.resizeIsDone.bind(this),this.refresh=this.refresh.bind(this),this.proceedRequestAnimationFrame=this.proceedRequestAnimationFrame.bind(this),this.init()}}var e,n,o;return e=t,(n=[{key:"init",value:function(){var t=this;s.setViewportAll(this.customContainer),T=[].concat(m(this.elements.map((function(e){return new f(e,t.settings)}))),m(T)),w||(this.proceedRequestAnimationFrame(),window.addEventListener("resize",this.resizeIsDone),w=!0)}},{key:"resizeIsDone",value:function(){clearTimeout(b),b=setTimeout(this.refresh,200)}},{key:"proceedRequestAnimationFrame",value:function(){var t=this;s.setViewportTop(this.customContainer),this.lastPosition!==s.positions.top?(s.setViewportBottom(),T.forEach((function(e){t.proceedElement(e)})),g=window.requestAnimationFrame(this.proceedRequestAnimationFrame),this.lastPosition=s.positions.top):g=window.requestAnimationFrame(this.proceedRequestAnimationFrame)}},{key:"proceedElement",value:function(t){(this.customContainer?t.checkIfVisible():t.isVisible)&&t.getTranslateValue()&&t.animate()}},{key:"refresh",value:function(){s.setViewportAll(this.customContainer),T.forEach((function(t){t.getElementOffset(),t.getRangeMax()})),this.lastPosition=-1}},{key:"destroy",value:function(){var t=this,e=[];T=T.filter((function(n){return t.elements.includes(n.element)?(e.push(n),!1):n})),e.forEach((function(e){e.unSetStyle(),!1===t.settings.overflow&&e.unWrapElement()})),T.length||(window.cancelAnimationFrame(g),window.removeEventListener("resize",this.refresh))}}])&&v(e.prototype,n),o&&v(e,o),t}()}]).default}));
vendor: 44,342 bytes, lines 60674-60680
60674/** 60675 * Owl Carousel v2.3.4 60676 * Copyright 2013-2018 David Deutsch 60677 * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 60678 */ 60679!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,checkVisibility:!0,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",slideTransition:"",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g>0;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i,g-=1;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c<b;)d=f[c-1]||0,e=this._widths[this.relative(c)]+this.settings.margin,f.push(d+e*a);this._coordinates=f}},{filter:["width","items","settings"],run:function(){var a=this.settings.stagePadding,b=this._coordinates,c={width:Math.ceil(Math.abs(b[b.length-1]))+2*a,"padding-left":a||"","padding-right":a||""};this.$stage.css(c)}},{filter:["width","items","settings"],run:function(a){var b=this._coordinates.length,c=!this.settings.autoWidth,d=this.$stage.children();if(c&&a.items.merge)for(;b--;)a.css.width=this._widths[this.relative(b)],d.eq(b).css(a.css);else c&&(a.css.width=a.items.width,d.css(a.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(a){a.current=a.current?this.$stage.children().index(a.current):0,a.current=Math.max(this.minimum(),Math.min(this.maximum(),a.current)),this.reset(a.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var a,b,c,d,e=this.settings.rtl?1:-1,f=2*this.settings.stagePadding,g=this.coordinates(this.current())+f,h=g+this.width()*e,i=[];for(c=0,d=this._coordinates.length;c<d;c++)a=this._coordinates[c-1]||0,b=Math.abs(this._coordinates[c])+f*e,(this.op(a,"<=",g)&&this.op(a,">",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.$stage.children(".center").removeClass("center"),this.settings.center&&this.$stage.children().eq(this.current()).addClass("center")}}],e.prototype.initializeStage=function(){this.$stage=this.$element.find("."+this.settings.stageClass),this.$stage.length||(this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+">",{class:this.settings.stageClass}).wrap(a("<div/>",{class:this.settings.stageOuterClass})),this.$element.append(this.$stage.parent()))},e.prototype.initializeItems=function(){var b=this.$element.find(".owl-item");if(b.length)return this._items=b.get().map(function(b){return a(b)}),this._mergers=this._items.map(function(){return 1}),void this.refresh();this.replace(this.$element.children().not(this.$stage.parent())),this.isVisible()?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass)},e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var a,b,c;a=this.$element.find("img"),b=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,c=this.$element.children(b).width(),a.length&&c<=0&&this.preloadAutoWidthImages(a)}this.initializeStage(),this.initializeItems(),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.isVisible=function(){return!this.settings.checkVisibility||this.$element.is(":visible")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b<c;)(this._invalidated.all||a.grep(this._pipe[b].filter,d).length>0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.isVisible()&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)<Math.abs(d.y)&&this.is("valid")||(b.preventDefault(),this.enter("dragging"),this.trigger("drag"))},this)))},e.prototype.onDragMove=function(a){var b=null,c=null,d=null,e=this.difference(this._drag.pointer,this.pointer(a)),f=this.difference(this._drag.stage.start,e);this.is("dragging")&&(a.preventDefault(),this.settings.loop?(b=this.coordinates(this.minimum()),c=this.coordinates(this.maximum()+1)-b,f.x=((f.x-b)%c+c)%c+b):(b=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),c=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),d=this.settings.pullDrag?-1*e.x/5:0,f.x=Math.max(Math.min(f.x,b+d),c+d)),this._drag.stage.current=f,this.animate(f.x))},e.prototype.onDragEnd=function(b){var d=this.difference(this._drag.pointer,this.pointer(b)),e=this._drag.stage.current,f=d.x>0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var e=-1,f=30,g=this.width(),h=this.coordinates();return this.settings.freeDrag||a.each(h,a.proxy(function(a,i){return"left"===c&&b>i-f&&b<i+f?e=a:"right"===c&&b>i-g-f&&b<i-g+f?e=a+1:this.op(b,"<",i)&&this.op(b,">",h[a+1]!==d?h[a+1]:i-g)&&(e="left"===c?a+1:a),-1===e},this)),this.settings.loop||(this.op(b,">",h[this.minimum()])?e=b=this.minimum():this.op(b,"<",h[this.maximum()])&&(e=b=this.maximum())),e},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"+(this.settings.slideTransition?" "+this.settings.slideTransition:"")}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){(a=this.normalize(a))!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){if(b=this._items.length)for(c=this._items[--b].width(),d=this.$element.width();b--&&!((c+=this._items[b].width()+this.settings.margin)>d););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2==0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=-1*f*g),a=c+e,(d=((a-h)%g+g)%g+h)!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.isVisible()&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){(a=this.normalize(a,!0))!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),!1!==this.settings.responsive&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$stage.remove(),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")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a<c;case">":return d?a<c:a>c;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&-1!==a.namespace.indexOf("owl")?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.isVisible(),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.isVisible()!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type)){var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&-1*e||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);for(c.lazyLoadEager>0&&(e+=c.lazyLoadEager,c.loop&&(g-=c.lazyLoadEager,e++));f++<e;)this.load(h/2+this._core.relative(g)),h&&a.each(this._core.clones(this._core.relative(g)),i),g++}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={lazyLoad:!1,lazyLoadEager:0},e.prototype.load=function(c){var d=this._core.$stage.children().eq(c),e=d&&d.find(".owl-lazy");!e||a.inArray(d.get(0),this._loaded)>-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src")||f.attr("data-srcset");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):f.is("source")?f.one("load.owl.lazy",a.proxy(function(){this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("srcset",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(c){this._core=c,this._previousHeight=null,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"===a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._intervalId=null;var d=this;a(b).on("load",function(){d._core.settings.autoHeight&&d.update()}),a(b).resize(function(){d._core.settings.autoHeight&&(null!=d._intervalId&&clearTimeout(d._intervalId),d._intervalId=setTimeout(function(){d.update()},250))})};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.settings.lazyLoad,e=this._core.$stage.children().toArray().slice(b,c),f=[],g=0;a.each(e,function(b,c){f.push(a(c).height())}),g=Math.max.apply(null,f),g<=1&&d&&this._previousHeight&&(g=this._previousHeight),this._previousHeight=g,this._core.$stage.parent().height(g).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com|be\-nocookie\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?"width:"+c.width+"px;height:"+c.height+"px;":"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(c){e='<div class="owl-video-play-icon"></div>',d=k.lazyLoad?a("<div/>",{class:"owl-video-tn "+j,srcType:c}):a("<div/>",{class:"owl-video-tn",style:"opacity:1;background-image:url("+c+")"}),b.after(d),b.after(e)};if(b.wrap(a("<div/>",{class:"owl-video-wrapper",style:g})),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),c=a('<iframe frameborder="0" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>'),c.attr("height",h),c.attr("width",g),"youtube"===f.type?c.attr("src","//www.youtube.com/embed/"+f.id+"?autoplay=1&rel=0&v="+f.id):"vimeo"===f.type?c.attr("src","//player.vimeo.com/video/"+f.id+"?autoplay=1"):"vzaar"===f.type&&c.attr("src","//view.vzaar.com/"+f.id+"/player?autoplay=true"),a(c).wrap('<div class="owl-video-frame" />').insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1, 60680animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype._next=function(d){this._call=b.setTimeout(a.proxy(this._next,this,d),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("interacting")||c.hidden||this._core.next(d||this._core.settings.autoplaySpeed)},e.prototype.read=function(){return(new Date).getTime()-this._time},e.prototype.play=function(c,d){var e;this._core.is("rotating")||this._core.enter("rotating"),c=c||this._core.settings.autoplayTimeout,e=Math.min(this._time%(this._timeout||c),c),this._paused?(this._time=this.read(),this._paused=!1):b.clearTimeout(this._call),this._time+=this.read()%c-e,this._timeout=c,this._call=b.setTimeout(a.proxy(this._next,this,d),c-e)},e.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,b.clearTimeout(this._call),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,b.clearTimeout(this._call))},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:['<span aria-label="Previous">‹</span>','<span aria-label="Next">›</span>'],navSpeed:!1,navElement:'button type="button" role="presentation"',navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("<div>").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a('<button role="button">').addClass(c.dotClass).append(a("<span>")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("<div>").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","button",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d,e;e=this._core.settings;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)"$relative"===b&&e.navContainer?this._controls[b].html(""):this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a<e;a++){if(b>=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("<support>").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document);
60680 60681let menuElement = document.querySelector(".frasernav__menuicon"); 60682let menulistElement = document.querySelector(".frasernav__menu"); 60683let navElement = document.querySelector(".frasernav"); 60684let fraserCarousel; 60685if (menuElement) { 60686 menuElement.onclick = function () { 60687 let applyStyle = (menulistElement.style && menulistElement.style.display && menulistElement.style.display === "block") ? "none" : "block" 60688 menulistElement.style.display = applyStyle; 60689 if (navElement.classList.value.indexOf("open--menu") === -1) { 60690 navElement.classList.add("open--menu"); 60691 } else { 60692 navElement.classList.remove("open--menu"); 60693 } 60694 } 60695} 60696 60697let bannerElement = document.querySelector(".fraserbanner"); 60698let headerNavElement = document.querySelector(".pos-fix--top"); 60699document.body.onscroll = function () { 60700 if (window.innerWidth > 834 && bannerElement && bannerElement.length) { 60701 if (window.pageYOffset >= bannerElement.clientHeight) { 60702 headerNavElement.classList.add("frasern
60702av--fixtop"); 60703 } else { 60704 headerNavElement.classList.remove("frasernav--fixtop"); 60705 } 60706 } 60707}; 60708 60709$(document).ready(function () { 60710 const scrollTop = window.scrollY; 60711 revealImages(scrollTop, leftImages, 'apply__animationleft', 'animate__animated animate__backInLeft animate__slow'); 60712 revealImages(scrollTop, rightImages, 'apply__animationright', 'animate__animated animate__backInRight animate__slow'); 60713 60714 let responsiveWidth = 0 60715 if ($(window).width() >= 1024) { 60716 responsiveWidth = (($(window).width() - 980)/2); 60717 } else if ($(window).width() > 769) { 60718 responsiveWidth = $(window).width() - 980; 60719 } 60720 var autoPlaySpeed = 7000; 60721 var carObj = { 60722 margin: $(window).width() > 768 ? 15 : 0, 60723 loop: true, 60724 items: 1, 60725 nav: true, 60726 navText: [ 60727 `<svg class="carousal--arrow" width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 60728 <path d="M6.31641 11.7793C5.89453 12.2012 5.89453 12.9043 6.31641 13.3262L15.4102 22.4668C15.8789 22.8887 16.582 22.8887 17.0039 22.4668L18.082 21.3887C18.5039 20.9668 18.5039 20.2637 18.082 19.7949L10.8633 12.5293L18.082 5.31055C18.5039 4.8418 18.5039 4.13867 18.082 3.7168L17.0039 2.63867C16.582 2.2168 15.8789 2.2168 15.4102 2.63867L6.31641 11.7793Z" fill="white"/> 60729 </svg>`, 60730 `<svg class="carousal--arrow" width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 60731 <path d="M17.8594 13.3262C18.2812 12.9043 18.2812 12.2012 17.8594 11.7793L8.76562 2.63867C8.29688 2.2168 7.59375 2.2168 7.17188 2.63867L6.09375 3.7168C5.67188 4.13867 5.67188 4.8418 6.09375 5.31055L13.3125 12.5293L6.09375 19.7949C5.67188 20.2637 5.67188 20.9668 6.09375 21.3887L7.17188 22.4668C7.59375 22.8887 8.29688 22.8887 8.76562 22.4668L17.8594 13.3262Z" fill="white"/> 60732 </svg>` 60733 ], 60734 autoplay: true, 60735 autoplayTimeout: autoPlaySpeed, 60736 responsive: { 60737 0: { 60738 items: 1, 60739 stagePadding: 0, 60740 }, 60741 480: { 60742 items: 1, 60743 stagePadding: 0, 60744 }, 60745 768: { 60746 items: 1, 60747 stagePadding: 0, 60748 }, 60749 1024: { 60750 items: 1, 60751 stagePadding: responsiveWidth, 60752 } 60753 } 60754 }; 60755 60756 if ($(".fraser--carousel").length) { 60757 var newCarObj = carObj; 60758 newCarObj.navText = [ 60759 `<svg class="carousal--arrow" width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg"> 60760 <rect width="64" height="64" fill="#C0AC8D"/> 60761 <path d="M26.3164 31.25C25.8945 31.6719 25.8945 32.375 26.3164 32.7969L35.4102 41.9375C35.8789 42.3594 36.582 42.3594 37.0039 41.9375L38.082 40.8594C38.5039 40.4375 38.5039 39.7344 38.082 39.2656L30.8633 32L38.082 24.7812C38.5039 24.3125 38.5039 23.6094 38.082 23.1875L37.0039 22.1094C36.582 21.6875 35.8789 21.6875 35.4102 22.1094L26.3164 31.25Z" fill="white"/> 60762 </svg>`, 60763 `<svg class="carousal--arrow" width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg"> 60764 <rect width="64" height="64" fill="#C0AC8D"/> 60765 <path d="M37.8594 32.7969C38.2812 32.375 38.2812 31.6719 37.8594 31.25L28.7656 22.1094C28.2969 21.6875 27.5938 21.6875 27.1719 22.1094L26.0938 23.1875C25.6719 23.6094 25.6719 24.3125 26.0938 24.7812L33.3125 32L26.0938 39.2656C25.6719 39.7344 25.6719 40.4375 26.0938 40.8594L27.1719 41.9375C27.5938 42.3594 28.2969 42.3594 28.7656 41.9375L37.8594 32.7969Z" fill="white"/> 60766 </svg>` 60767 ]; 60768 fraserCarousel = $(".fraser--carousel").owlCarousel(newCarObj); 60769 } 60770 60771 if ($(".banner--slider").length) { 60772 var bannerSpeed = $("#bannercarouselspeed").val() ? $("#bannercarouselspeed").val() * 1000 : 7000; 60773 carObj.autoplayTimeout = bannerSpeed; 60774 carObj.margin = 0; 60775 carObj.responsive[768].stagePadding = 0; 60776 carObj.responsive[1024].stagePadding = 0; 60777 carObj.navText = [ 60778 `<svg class="carousal--arrow" width="24" height="25" viewB
60778ox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 60779 <path d="M6.31641 11.7793C5.89453 12.2012 5.89453 12.9043 6.31641 13.3262L15.4102 22.4668C15.8789 22.8887 16.582 22.8887 17.0039 22.4668L18.082 21.3887C18.5039 20.9668 18.5039 20.2637 18.082 19.7949L10.8633 12.5293L18.082 5.31055C18.5039 4.8418 18.5039 4.13867 18.082 3.7168L17.0039 2.63867C16.582 2.2168 15.8789 2.2168 15.4102 2.63867L6.31641 11.7793Z" fill="white"/> 60780 </svg>`, 60781 `<svg class="carousal--arrow" width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 60782 <path d="M17.8594 13.3262C18.2812 12.9043 18.2812 12.2012 17.8594 11.7793L8.76562 2.63867C8.29688 2.2168 7.59375 2.2168 7.17188 2.63867L6.09375 3.7168C5.67188 4.13867 5.67188 4.8418 6.09375 5.31055L13.3125 12.5293L6.09375 19.7949C5.67188 20.2637 5.67188 20.9668 6.09375 21.3887L7.17188 22.4668C7.59375 22.8887 8.29688 22.8887 8.76562 22.4668L17.8594 13.3262Z" fill="white"/> 60783 </svg>` 60784 ]; 60785 $(".banner--slider").owlCarousel(carObj); 60786 setInterval(function(){ 60787 checkNPlayCarVideo(); 60788 }, bannerSpeed); 60789 60790 $(document).on('click', '.banner--slider', function () { 60791 checkNPlayCarVideo(); 60792 }); 60793 } 60794 60795 function checkNPlayCarVideo () { 60796 for (var i = 0; i < $('.owl-item .fraservideo__player').length; i++) { 60797 $('.owl-item .fraservideo__player')[i].pause(); 60798 } 60799 if ($('.owl-item.active').find('.fraservideo__player').length) { 60800 $('.owl-item.active .fraservideo__player')[0].play(); 60801 } 60802 } 60803 60804 60805 if ($(".fraserimgntxt__slider").length) { 60806 carObj.margin = 0; 60807 carObj.responsive[768].stagePadding = 0; 60808 carObj.responsive[1024].stagePadding = 0; 60809 carObj.autoplay = false; 60810 carObj.navText = [ 60811 `<svg class="carousal--arrow" width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 60812 <path d="M6.31641 11.7793C5.89453 12.2012 5.89453 12.9043 6.31641 13.3262L15.4102 22.4668C15.8789 22.8887 16.582 22.8887 17.0039 22.4668L18.082 21.3887C18.5039 20.9668 18.5039 20.2637 18.082 19.7949L10.8633 12.5293L18.082 5.31055C18.5039 4.8418 18.5039 4.13867 18.082 3.7168L17.0039 2.63867C16.582 2.2168 15.8789 2.2168 15.4102 2.63867L6.31641 11.7793Z" fill="white"/> 60813 </svg>`, 60814 `<svg class="carousal--arrow" width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> 60815 <path d="M17.8594 13.3262C18.2812 12.9043 18.2812 12.2012 17.8594 11.7793L8.76562 2.63867C8.29688 2.2168 7.59375 2.2168 7.17188 2.63867L6.09375 3.7168C5.67188 4.13867 5.67188 4.8418 6.09375 5.31055L13.3125 12.5293L6.09375 19.7949C5.67188 20.2637 5.67188 20.9668 6.09375 21.3887L7.17188 22.4668C7.59375 22.8887 8.29688 22.8887 8.76562 22.4668L17.8594 13.3262Z" fill="white"/> 60816 </svg>` 60817 ]; 60818 $(".fraserimgntxt__slider").owlCarousel(carObj); 60819 } 60820 60821 $(".frasergallery__readmore").click(function(){ 60822 $(this).hide(); 60823 $(".frasergallery__more, .frasergallery__readless").slideToggle(); 60824 }); 60825 60826 $(".frasergallery__readless").click(function(){ 60827 $(this).hide(); 60828 $(".frasergallery__more, .frasergallery__readless").slideToggle(); 60829 }); 60830 60831 $(".frasermap__tabledropdownselect").change(function(){ 60832 if ($(this)[0].selectedIndex === 0) { 60833 $("#frasermapTableAccessbility").show(); 60834 $("#frasermapTableLandmarks").hide(); 60835 } else { 60836 $("#frasermapTableAccessbility").hide(); 60837 $("#frasermapTableLandmarks").show(); 60838 } 60839 }); 60840 60841 $('#roomSelect').on("change", function(){ 60842 // $('#unitType').removeAttr("disabled"); 60843 $('.select.select--disabled.unit').removeClass('select--disabled'); 60844 var selectVal = $(this).find(':selected').data('variantlist'); 60845 if(selectVal != '' && selectVal != undefined){ 60846 $(".unit").empty(); 60847 var variantList = selectVal.split(","); 60848 $(".unit").append('<option disabled selected>Select Unit Type</option>'); 60849 $(variantList).each(function(index,value){ 60850 $(".unit").append($('<option value="' + value+ '">' + value + '</option>')); 60851 }) 60852 } 60853 }); 60854 60855 $('#unitType').on("change", function(){ 60856 $("#floorplanExisitingImg").hide(); 60857 $("#floorplanImg, #floorplanImgLegend, .floorplan__details").show(); 60858 $("#floorplanDesc").css({"display": "flex"}); 60859 selectRoom($(this).val()); 60860 }); 60861 60862 $(".faqsection__expclps").click(function(){ 60863 $(this).toggleClass("faqsection--collapse"); 60864 $(this).parents(".faqsection__expand").find(".faqsection__hidecontent").toggle(); 60865 }); 60866
60867 $(".textarea__elm").on("keypress, keydown, keyup", function(){ 60868 if ($(this)[0].value.length){ 60869 $(this).parents(".textarea").find(".textarea__txt").hide(); 60870 } else { 60871 $(this).parents(".textarea").find(".textarea__txt").show(); 60872 } 60873 }); 60874 60875 $(".btn, .newbtn").click(function() { 60876 var redirectionPath = $(this).attr('data-href'); 60877 var newtab = $(this).attr('data-target'); 60878 window.textAndImageMethod(this); 60879 window.residenceTextImageMethod(this); 60880 window.buttonMethod(this); 60881 window.carouselAnalyticsMethod(this); 60882 window.magazineTileMethod(this); 60883 window.lifestyleTileMethod(this); 60884 window.awardSummaryMethod(this); 60885 window.contactusNewTrackMethod(this); 60886 window.textCtaTrackMethod(this); 60887 window.introductionTextWithCtaTrackMethod(this); 60888 window.downloadreportOneTrackMethod(this); 60889 window.downloadreportSecTrackMethod(this); 60890 window.textImageCtaMethod(this); 60891 window.homeCarouselMethod(this); 60892 if (redirectionPath) { 60893 window.open(redirectionPath, newtab); 60894 } 60895 }); 60896}); 60897 60898const element = document.getElementById('panzoom'); 60899const zoomInButton = document.getElementById('zoom-in'); 60900const zoomOutButton = document.getElementById('zoom-out'); 60901if (element) { 60902 const panzoom = Panzoom(element, { 60903 maxScale: 15, 60904 minScale: 1, 60905 startX: 180, 60906 startScale: 2, 60907 startY: 65, 60908 contain: 'outside' 60909 }); 60910 // enable mouse wheel 60911 const parent = element.parentElement 60912 parent.addEventListener('wheel', panzoom.zoomWithWheel); 60913 zoomInButton.addEventListener('click', panzoom.zoomIn); 60914 zoomOutButton.addEventListener('click', panzoom.zoomOut); 60915} 60916 60917function activateMaps() { 60918 let zoomMap = $('.maps-container-inner').ZoomArea({ 60919 zoomLevel: 1, 60920 minZoomLevel: 1, 60921 maxZoomLevel: 15, 60922 parentOverflow: 'auto', 60923 exceptionsZoom: ['marker-all'], 60924 hideWhileAnimate: ['map-area', 'marker-all'], 60925 externalIncrease: '.map-control-zoomin', 60926 externalDecrease: '.map-control-zoomout', 60927 virtualScrollbars: false, 60928 usedAnimateMethod: 'jquery' 60929 }); 60930 resizeFilterPanel(); 60931} 60932 60933function resizeFilterPanel() { 60934 $('.map-filter').removeAttr('style'); 60935 if (parseInt($('.measurement').css('max-width'), 10) > 768) { 60936 $('.map-filter').css('height', $('.maps-container').outerHeight() + 'px'); 60937 } 60938} 60939 60940$(window).on("load", function () { 60941 if ($('.maps-container-inner').length) { 60942 activateMaps(); 60943 } 60944}); 60945 60946$(window).on("resize", function () { 60947 if ($('.maps-container-inner').length) { 60948 resizeFilterPanel(); 60949 } 60950 60951 // if ($(".fraser--carousel").length) { 60952 // fraserCarousel.destroy(); 60953 // fraserCarousel = $(".fraser--carousel").owlCarousel(carObj); 60954 // } 60955}); 60956 60957// owl.on('translated.owl.carousel', function (event) { 60958// var comment = $(this).find('.active').find('img').attr('alt'); 60959// var title = $(this).find('.active').find('img').attr('title'); 60960// if (comment) $('.image-caption').html('<h4>' + title + '</h4><p>' + comment + '</p>'); 60961// }); 60962 60963var videoElement, playerid; 60964function playFraserVideo(thisElement, youtubePlayer) { 60965 checkNPlay(thisElement.parentNode, youtubePlayer) 60966} 60967 60968function checkNPlay(parentNode, youtubePlayer){ 60969 var classnameList = []; 60970 var localNameList = []; 60971 $('video').prop('muted', true); 60972 if (parentNode) { 60973 for (var i = 0; i < parentNode.childNodes.length; i++) { 60974 if (parentNode.childNodes[i].classList && parentNode.childNodes[i].classList.length) { 60975 classnameList.push(parentNode.childNodes[i].classList.toString()); 60976 } else { 60977 classnameList.push(""); 60978 } 60979 localNameList.push(parentNode.childNodes[i].localName); 60980 } 60981 var videoIndex = classnameList.indexOf("fraservideo__player"); 60982 var videoPosterIndex = localNameList.indexOf("picture"); 60983 var parallaxElementIndex = classnameList.indexOf("simpleParallax"); 60984 var playIconIndex = classnameList.indexOf("icon icon--play fraservideo__playicon"); 60985 var posteroverlayIndex = classnameList.indexOf("fraservideo__posteroverlay"); 60986 var newplayiconIndex; 60987 classnameList.forEach(function(e, i){ 60988 if (e.indexOf("fraservideo__newplayicon") > -1) { 60989 newplayiconIndex = i; 60990 } 60991 }); 60992 var videoTextIndex = classnameList.indexOf("para fraservideo__txt"); 60993 var bannerOverlayIndex = classnameList.indexOf("fraserbanner__overlay"); 60994 var newfraservideotxtIndex = classnameList.indexOf("newfraservideo__txt hide--mobile"); 60995 60996 if (videoPosterIndex > -1) { 60997 parentNode.childNodes[videoPosterIndex].style.display = "none"; 60998 } 60999 if (parallaxElementIndex > -1){ 61000 parentNode.childNodes[parallaxElementIndex].style.display = "none"; 61001 } 61002 if (playIconIndex > -1) { 61003 parentNode.childNodes[playIconIndex].style.display = "none"; 61004 } 61005 if (videoTextIndex > -1) { 61006 parentNode.childNodes[videoTextIndex].style.display = "none"; 61007 } 61008 if (bannerOverlayIndex > -1) { 61009 parentNode.childNodes[bannerOverlayIndex].style.display = "none"; 61010 } 61011 if (posteroverlayIndex > -1) { 61012 parentNode.childNodes[posteroverlayIndex].style.display = "none"; 61013 } 61014 if (newplayiconIndex > -1) { 61015 parentNode.childNodes[newplayiconIndex].style.display = "none"; 61016 } 61017 if (newfraservideotxtIndex > -1) { 61018 parentNode.childNodes[newfraservideotxtIndex].classList.remove("hide--mobile"); 61019 parentNode.childNodes[newfraservideotxtIndex].style.display = "none"; 61020 } 61021 61022 if (videoIndex > -1) { 61023 parentNode.childNodes[videoIndex].muted = false;
61024 if (youtubePlayer) { 61025 playYTVideo(parentNode.childNodes[videoIndex]); 61026 } else { 61027 parentNode.childNodes[videoIndex].play(); 61028 } 61029 } else { 61030 parentNode = parentNode.parentNode; 61031 checkNPlay(parentNode, youtubePlayer); 61032 } 61033 } 61034} 61035 61036var player = {}; 61037var ytPlayerIndex = 0; 61038var playersArr = []; 61039function playYTVideo(videoElement) { 61040 playerid = 'player' + ytPlayerIndex; 61041 var videoURL = videoElement.attributes.datasrc.nodeValue.split('v=')[1]; 61042 videoElement.innerHTML = "<div id='" + playerid + "' datasrc='" + videoURL + "'></div>"; 61043 ytPlayerIndex++; 61044 if (!window.YT) { 61045 var tag = document.createElement('script'); 61046 tag.src = "https://www.youtube.com/player_api"; 61047 var firstScriptTag = document.getElementsByTagName('script')[0]; 61048 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 61049 } else { 61050 onYouTubePlayerAPIReady(); 61051 } 61052} 61053 61054var videoElement; 61055document.addEventListener('fullscreenchange', () => { 61056 const isFullscreen = !!document.fullscreenElement; 61057 if(isFullscreen){ 61058 videoElement = document.fullscreenElement; 61059 }else{ 61060 if(videoElement.tagName.toLowerCase() === "video"){ 61061 const rect = videoElement.getBoundingClientRect(); 61062 const topPosition = (rect.top + window.pageYOffset) - 200; 61063 document.body.style.overflow = "hidden"; 61064 setTimeout(() => { 61065 window.scrollTo({ top: topPosition, behavior: "auto" }); 61066 document.body.style.overflow = ""; 61067 }, 10); 61068 }else{ 61069 const rect = videoElement.getBoundingClientRect(); 61070 const topPosition = (rect.top + window.pageYOffset) - 200; 61071 document.body.style.overflow = "hidden"; 61072 setTimeout(() => { 61073 window.scrollTo({ top: topPosition, behavior: "auto" }); 61074 document.body.style.overflow = ""; 61075 }, 10); 61076 } 61077 } 61078}); 61079 61080function getVideoId(){ 61081 return document.getElementById(playerid).attributes.datasrc.nodeValue; 61082}; 61083 61084var getVideoObjectIndex = function(list, url){ 61085 return list.filter((el => el.event === "web.mediaDetails.mediaInteraction" && el.web.mediaDetails.mediaURL === url)); 61086} 61087 61088function onYouTubePlayerAPIReady() { 61089 player[ytPlayerIndex] = new YT.Player(playerid, { 61090 videoId: getVideoId(), 61091 playerVars: { 61092 controls: 1, 61093 showinfo: 0, 61094 rel: 0, 61095 showsearch: 0, 61096 iv_load_policy: 3 61097 }, 61098 events: { 61099 'onReady': onPlayerReady, 61100 'onStateChange': onPlayerStateChange 61101 } 61102 }); 61103 playersArr.push(player[ytPlayerIndex]); 61104} 61105 61106function onPlayerReady(event) { 61107 event.target.playVideo(); 61108} 61109 61110var done = false; 61111let progressFlags = {10:false,25:false,50:false,75:false,95:false}; 61112let progressInterval = null; 61113function onPlayerStateChange(event) { 61114 const duration = event.target.getDuration(); 61115 const iframe = event.target.getIframe(); 61116 const playerWrapper = iframe.closest('[data-component-name]'); 61117 const videoPath = event.target.getVideoUrl(); 61118 const videoTitle = toLowerCaseText(event.target.getVideoData()?.title); 61119 const ct = event.target.getCurrentTime() ? Math.floor(event.target.getCurrentTime()) : 0; 61120 61121 let interactionType = null; 61122 let starts = 0, pauses = 0, resumes = 0, completes = 0; 61123 let pauseTime = 0; 61124 let progress10 = 0, progress25 = 0, progress50 = 0, progress75 = 0, progress95 = 0; 61125 61126 if (event.data === YT.PlayerState.PLAYING) { 61127 if (!event.target.firstYtTimePlayed && ct === 0) { 61128 interactionType = "media play"; 61129 starts = 1; 61130 event.target.firstYtTimePlayed = true; 61131 } else if (ct > 0) { 61132 interactionType = "media resume"; 61133 resumes = 1; 61134 pauseTime = ct; 61135 } 61136 61137 if (!progressInterval) { 61138 progressInterval = setInterval(() => { 61139 checkProgress(event.target, duration, videoTitle, videoPath, playerWrapper); 61140 }, 1000); 61141 } 61142 } 61143 61144 if (event.data === YT.PlayerState.PAUSED) { 61145 if (event.target.getDuration() !== event.target.getCurrentTime()) { 61146 interactionType = "media pause"; 61147 pauses = 1; 61148 } 61149 clearInterval(progressInterval); 61150 progressInterval = null; 61151 } 61152 61153 if (event.data === YT.PlayerState.ENDED) { 61154 interactionType = "media complete"; 61155 completes = 1; 61156 event.target.firstYtTimePlayed = false;
61157 clearInterval(progressInterval); 61158 progressInterval = null; 61159 progressFlags = {10:false,25:false,50:false,75:false,95:false}; 61160 } 61161 61162 if (interactionType) { 61163 const compJson = window.analyticsMethods.getComponentDetails(playerWrapper, interactionType); 61164 window.adobeDataLayer.push({ 61165 event: 'web.mediaDetails.mediaInteraction', 61166 web: { 61167 mediaDetails: { 61168 mediaName: videoTitle, 61169 mediaSource: "youtube", 61170 mediaLength: duration || "", 61171 mediaType: "video", 61172 mediaURL: videoPath, 61173 mediaTimedValue: { 61174 starts: { value: starts }, 61175 pauses: { value: pauses }, 61176 resumes: { value: resumes }, 61177 completes: { value: completes }, 61178 mediaTimeSpent: { value: ct }, 61179 pauseTime: { value: pauseTime }, 61180 progress10: { value: progress10 }, 61181 progress25: { value: progress25 }, 61182 progress50: { value: progress50 }, 61183 progress75: { value: progress75 }, 61184 progress95: { value: progress95 } 61185 } 61186 }, 61187 componentDetails: JSON.parse(compJson) 61188 }, 61189 }); 61190 } 61191} 61192function checkProgress(player, duration, videoTitle, videoPath, playerWrapper) { 61193 const ct = player.getCurrentTime() ? Math.floor(player.getCurrentTime()) : 0; 61194 const percent = (ct / duration) * 100; 61195 61196 let progress10=0, progress25=0, progress50=0, progress75=0, progress95=0, interactionType=null; 61197 let mediaTimeSpent = 0; 61198 61199 if (percent >= 10 && !progressFlags[10]) { 61200 progress10=1; progressFlags[10]=true; 61201 interactionType="media progress 10%"; 61202 mediaTimeSpent = Math.floor(duration * 0.10); 61203 } 61204 else if (percent >= 25 && !progressFlags[25]) { 61205 progress25=1; progressFlags[25]=true; 61206 interactionType="media progress 25%"; 61207 mediaTimeSpent = Math.floor(duration * 0.25); 61208 } 61209 else if (percent >= 50 && !progressFlags[50]) { 61210 progress50=1; progressFlags[50]=true; 61211 interactionType="media progress 50%"; 61212 mediaTimeSpent = Math.floor(duration * 0.50); 61213 } 61214 else if (percent >= 75 && !progressFlags[75]) { 61215 progress75=1; progressFlags[75]=true; 61216 interactionType="media progress 75%"; 61217 mediaTimeSpent = Math.floor(duration * 0.75); 61218 } 61219 else if (percent >= 95 && !progressFlags[95]) { 61220 progress95=1; progressFlags[95]=true; 61221 interactionType="media progress 95%"; 61222 mediaTimeSpent = Math.floor(duration * 0.95); 61223 } 61224 61225 if (interactionType) { 61226 const compJson = window.analyticsMethods.getComponentDetails(playerWrapper, interactionType); 61227 window.adobeDataLayer.push({ 61228 event: 'web.mediaDetails.mediaInteraction', 61229 web: { 61230 mediaDetails: { 61231 mediaName: videoTitle, 61232 mediaSource: "youtube", 61233 mediaLength: duration || "", 61234 mediaType: "video", 61235 mediaURL: videoPath, 61236 mediaTimedValue: { 61237 starts: { value: 0 }, 61238 pauses: { value: 0 }, 61239 resumes: { value: 0 }, 61240 completes: { value: 0 }, 61241 mediaTimeSpent: { value: mediaTimeSpent }, 61242 pauseTime: { value: 0 }, 61243 progress10: { value: progress10 }, 61244 progress25: { value: progress25 }, 61245 progress50: { value: progress50 }, 61246 progress75: { value: progress75 }, 61247 progress95: { value: progress95 } 61248 } 61249 }, 61250 componentDetails: JSON.parse(compJson) 61251 }, 61252 }); 61253 } 61254} 61255 61256 61257function stopVideo() { 61258 player[videoIndex].stopVideo(); 61259} 61260 61261var parallaximages = document.querySelectorAll('.parallax--effect'); 61262new simpleParallax(parallaximages, { 61263 delay: .1, 61264 transition: 'cubic-bezier(0,0,0,1)', 61265 scale: 1.5, 61266 orientation: 'up down' 61267}); 61268 61269const leftImages = document.querySelectorAll('.apply__animationleft'); 61270const rightImages = document.querySelectorAll('.apply__animationright'); 61271 61272const revealImages = (scrollTop, type, removeClassName, className) =>{ 61273 if (scrollTop != 0) { 61274 type.forEach(ele =>{ 61275 if ( 61276 (scrollTop + window.innerHeight > $(ele).offset().top) 61277 && (scrollTop < $(ele).offset().top) 61278 && (!$(ele).hasClass('applied__animation'))) { 61279 $(ele).addClass(className); 61280 $(ele).removeClass(removeClassName); 61281 $(ele).addClass('applied__animation'); 61282 } 61283 }); 61284 } 61285} 61286// } 61287document.addEventListener("scroll", function(e){ 61288 const scrollTop = window.scrollY; 61289 revealImages(scrollTop, leftImages, 'apply__animationleft', 'animate__animated animate__fadeInLeft animate__slow'); 61290 revealImages(scrollTop, rightImages, 'apply__animationright', 'animate__animated animate__fadeInRight animate__slow'); 61291}); 61292 61293const viewMoreButton = document.querySelector('#facilitiesViewMore') 61294const extendedFacilitiesList = document.querySelector('#facilitiesExtendedList') 61295const facilitySelector = document.querySelector('.facilitieslist__optionslist') 61296const facilituBubble = document.querySelectorAll('.facilitieslist__floor__bubble') 61297 61298if (viewMoreButton) { 61299 viewMoreButton.onclick = () => { 61300 extendedFacilitiesList.classList.remove("hide--mobile"); 61301 viewMoreButton.classList.add("dis--none"); 61302 viewMoreButton.classList.remove("hide--desktop"); 61303 }; 61304} 61305document.querySelectorAll(".facilitieslist__optionslist").forEach( 61306 ele => ele.addEventListener("mouseover", 61307 async () => { 61308 await document 61309 .querySelectorAll('.facilitieslist__floorbubble') 61310 .forEach(ele => ele.classList.remove('facilitieslist--floorbubbleactive')); 61311 document.querySelector(`#${ele.id}bubble`).classList.add('facilitieslist--floorbubbleactive');; 61312 } 61313 ) 61314); 61315 61316document.querySelectorAll(".facilitieslist__optionslist").forEach( 61317 ele => ele.addEventListener("mouseleave", 61318 async () => { 61319 await document 61320 .querySelectorAll('.facilitieslist__floorbubble') 61321 .forEach(ele => ele.classList.remove('facilitieslist--floorbubbleactive')); 61322 } 61323 ) 61324); 61325 61326document.querySelectorAll(".facilitieslist__floorbubble").forEach( 61327 ele => ele.addEventListener("mouseover", 61328 async () => { 61329 await document 61330 .querySelectorAll('.facilitieslist__optionslist') 61331 .forEach(ele => ele.classList.remove('facilitieslist--optionsactive')); 61332 var elmId = ele.id.replace('bubble', ''); 61333 console.log(elmId); 61334 document.querySelector(`#${elmId}`).classList.add('facilitieslist--optionsactive');; 61335 } 61336 ) 61337); 61338 61339document.querySelectorAll(".facilitieslist__floorbubble").forEach( 61340 ele => ele.addEventListener("mouseleave", 61341 async () => { 61342 await document 61343 .querySelectorAll('.facilitieslist__optionslist') 61344 .forEach(ele => ele.classList.remove('facilitieslist--optionsactive')); 61345 } 61346 ) 61347); 61348 61349document.querySelectorAll('.facilitieslist__tablink') 61350 .forEach(option => option.addEventListener('click', () => { 61351 document.querySelectorAll('.facilitieslist__tablink') 61352 .forEach(ele => ele.classList.remove('facilitieslist--tablinkactive')); 61353 document.querySelectorAll('.facilitieslist__cont') 61354 .forEach(ele => ele.style.display = "none"); 61355 61356 document.querySelector(`#${option.id}`).classList.add('facilitieslist--tablinkactive'); 61357 document.querySelector(`#${option.id}Section`).style.display = "flex"; 61358 })) 61359 61360 var liTags = document.querySelectorAll('.tab__cont li') 61361 if(liTags && liTags.length){
61362 liTags.forEach(item=>{ 61363 var li_color = item.children[0]?.style?.color 61364 if(li_color){ 61365 item.style.color=li_color; 61366 } 61367 }) 61368 } 61369let unit = document.querySelector(".select.unit"); 61370let optionsContainer = document.querySelector(".options__container"); 61371let details = document.querySelectorAll(".options__container .option.details"); 61372let floorplanDetails = document.querySelector(".floorplan__details"); 61373 61374for (let val of details) { 61375 val.addEventListener("click", () => { 61376 unit.innerHTML = val.innerHTML; 61377 unit.classList.add("select--valueselected"); 61378 floorplanDetails.classList.add("appear"); 61379 document.getElementById("floorplanExisitingImg").style.display = "none"; 61380 document.getElementById("floorplanImg").style.display = "block"; 61381 document.getElementById("floorplanImgLegend").style.display = "block"; 61382 document.getElementById("floorplanDesc").style.display = "block"; 61383 optionsContainer.classList.remove("active"); 61384 unit.classList.remove("active"); 61385 }); 61386} 61387 61388function doRedirect (thisParam, newtab) { 61389 var redirectionPath = thisParam.getAttribute('data-href'); 61390 var newtab = thisParam.getAttribute('data-target'); 61391 if (redirectionPath) { 61392 window.open(redirectionPath, newtab); 61393 } 61394} 61395 61396function selectRoom (thisParam) { 61397 61398 let getDetailJSONUrl = $('#roomSelect').data("action") + '.details.json?cfname='; 61399 getDetailJSONUrl += $('#roomSelect').find(":selected").val(); 61400 getDetailJSONUrl += '&cfvar=' + thisParam; 61401 $.ajax({ 61402 async : false, 61403 type: 'GET', 61404 dataType : 'text', 61405 url: getDetailJSONUrl, 61406 success: function (data) { 61407 let convertJSON = JSON.parse(data); 61408 let appendDropdownHTML = ''; 61409 let btnLabel = $(".floorplan").data("btnlabel"); 61410 for (let i = 0; i < convertJSON.data[0].details.length; i++) { 61411 let splitValue = convertJSON.data[0].details[i].split('||'); 61412 appendDropdownHTML += '<section class="floorplan__section">'; 61413 appendDropdownHTML += '<h6>'+splitValue[0]+'</h6>'; 61414 appendDropdownHTML += '<p class="para">'+splitValue[1]+'</p>'; 61415 appendDropdownHTML += '</section>'; 61416 } 61417 if(btnLabel){ 61418 appendDropdownHTML += '<button class="btn wdh-per--100" onclick="doRedirect(this)" data-href="' + convertJSON.data[0].pageRef + '"> ' + btnLabel +'</button>'; 61419 } 61420 $('.floorplan__details').html(appendDropdownHTML); 61421 $('#floorplanImg').attr('src', convertJSON.data[0].floorPlan); 61422 $('#floorplanImgLegend img').attr('src', convertJSON.data[0].legend); 61423 $('#floorplanDesc p').text(convertJSON.data[0].description.replace('<p>', '').replace('</p>', '')); 61424 //unit.innerHTML = thisParam.outerHTML.replace('onclick="selectRoom(this)"', ''); 61425 unit.classList.add("select--valueselected"); 61426 floorplanDetails.classList.add("appear"); 61427 document.getElementById("floorplanExisitingImg").style.display = "none"; 61428 document.getElementById("floorplanImg").style.display = "block"; 61429 document.getElementById("floorplanImgLegend").style.display = "block"; 61430 document.getElementById("floorplanDesc").style.display = "block"; 61431 $('.options__container').toggleClass("active"); 61432 $(".floorplan__details").show(); 61433 unit.classList.remove("active"); 61434 }, 61435 error: function (xhr, text, error) { 61436 status = false;// If 40x or 50x; errors 61437 console.error('Error: ' + error); 61438 } 61439 }); 61440 61441} 61442$(document).ready(function () { 61443 let responsiveWidth = 0 61444 if ($(window).width() >= 1024) { 61445 responsiveWidth = (($(window).width() - 980)/2); 61446 } else if ($(window).width() > 769) { 61447 responsiveWidth = $(window).width() - 980; 61448 } 61449 61450 var carSpeed = 7000; 61451 var carObj = { 61452 margin: $(window).width() > 768 ? 15 : 0, 61453 loop: true, 61454 items: 1, 61455 nav: true, 61456 autoplay: true, 61457 autoplayTimeout: carSpeed, 61458 navText:[ 61459 `<svg class="news--arrow " width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 61460 <path d="M12.0703 19.1133C12.5391 18.6445 12.4922 17.9414 12.0703 17.4727L6.39844 12.082H19.8984C20.5078 12.082 21.0234 11.6133 21.0234 10.957V9.45703C21.0234 8.84766 20.5078 8.33203 19.8984 8.33203H6.39844L12.0703 2.98828C12.4922 2.51953 12.5391 1.81641 12.0703 1.34766L11.0391 0.316406C10.6172 -0.105469 9.86719 -0.105469 9.44531 0.316406L0.351562 9.45703C-0.117188 9.87891 -0.117188 10.582 0.351562 11.0039L9.44531 20.1445C9.86719 20.5664 10.5703 20.5664 11.0391 20.1445L12.0703 19.1133Z" fill="#DEDCDC"/> 61461 </svg>`, 61462 `<svg class="news--arrow " width="20" height="20" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 61463 <path d="M8.90625 1.34766C8.4375 1.81641 8.48438 2.51953 8.90625 2.98828L14.5781 8.33203H1.125C0.46875 8.33203 0 8.84766 0 9.45703V10.957C0 11.6133 0.46875 12.082 1.125 12.082H14.5781L8.90625 17.4727C8.48438 17.9414 8.48438 18.6445 8.90625 19.1133L9.9375 20.1445C10.4062 20.5664 11.1094 20.5664 11.5312 20.1445L20.6719 11.0039C21.0938 10.582 21.0938 9.87891 20.6719 9.41016L11.5312 0.316406C11.1094 -0.105469 10.4062 -0.105469 9.9375 0.316406L8.90625 1.34766Z" fill="#ED1C24"/>
61463 61464 </svg>` 61465 ], 61466 responsive: { 61467 0: { 61468 items: 1, 61469 stagePadding: 0, 61470 }, 61471 480: { 61472 items: 1, 61473 stagePadding: 0, 61474 }, 61475 768: { 61476 items: 1, 61477 stagePadding: 0, 61478 }, 61479 1024: { 61480 items: 1, 61481 stagePadding: responsiveWidth, 61482 } 61483 } 61484 }; 61485 61486 if ($(".newbanner__slider").length) { 61487 const hasStop = $(".newbanner__slider").hasClass("stopAutoplay"); 61488 carObj.margin = 0; 61489 carObj.responsive[768].stagePadding = 0; 61490 carObj.responsive[1024].stagePadding = 0; 61491 carObj.autoplay = true; 61492 carObj.loop = true; 61493 carObj.nav = false; 61494 carObj.autoplayHoverPause = hasStop; 61495 carObj.autoplayTimeout = $(".newbanner__sliderspeed").val() ? $(".newbanner__sliderspeed").val() * 1000 : carObj.autoplayTimeout ; 61496 $(".newbanner__slider").owlCarousel(carObj); 61497 if (!$(".newbanner__slider").parents(".container--editmode").length) { 61498 $('.newbanner__img').css({'min-height': $('.newbanner__slider .owl-stage').height()}); 61499 } 61500 61501 /*setInterval(function(){ 61502 checkNPlayNewCarVideo(); 61503 }, carObj.autoplayTimeout); 61504 61505 $(document).on('click', '.newbanner__slider', function () { 61506 checkNPlayCarVideo(); 61507 });*/ 61508 } 61509 61510 function checkNPlayNewCarVideo () { 61511 for (var i = 0; i < $('.owl-item .fraservideo__player').length; i++) { 61512 $('.owl-item .fraservideo__player')[i].pause(); 61513 } 61514 if ($('.owl-item.active').find('.fraservideo__player').length) { 61515 $('.owl-item.active .fraservideo__player')[0].play(); 61516 } 61517 } 61518 61519 if ($(".infolink__listcont").length) { 61520 carObj.margin = 0; 61521 carObj.responsive[768].stagePadding = 0; 61522 carObj.responsive[1024].stagePadding = 0; 61523 carObj.autoplay = true; 61524 carObj.loop = true; 61525 carObj.dots = true; 61526 delete carObj.animateOut; 61527 delete carObj.animateIn; 61528 $(".infolink__listcont").owlCarousel(carObj); 61529 let carOwlItemWidth = $(".fraserproperty__listcont .owl-item").width(); 61530 $(".infolink__listcont .owl-item").css({width: parseInt(carOwlItemWidth)}); 61531 setInterval(function(){ 61532 setTimeout(function(){ 61533 $('.infolink__listcontleft').removeClass('animate__animated animate__fadeInFromUp animate__faster'); 61534 }, 1); 61535 setTimeout(function(){ 61536 $('.owl-item.active .infolink__listcontleft').addClass('animate__animated animate__fadeInFromUp animate__faster'); 61537 }, 2); 61538 }, carSpeed); 61539 61540 $(document).on('click', '.infolink__listcont', function () { 61541 setTimeout(function(){ 61542 $('.infolink__listcontleft').removeClass('animate__animated animate__fadeInFromUp animate__faster'); 61543 }, 1); 61544 setTimeout(function(){ 61545 $('.owl-item.active .infolink__listcontleft').addClass('animate__animated animate__fadeInFromUp animate__faster'); 61546 }, 2); 61547 let carOwlItemWidth = $(".infolink__listcont .owl-item").width(); 61548 $(".infolink__listcont .owl-item").css({width: parseInt(carOwlItemWidth) + 'px'}); 61549 }); 61550 } 61551 61552 if ($(".awardscont__listcont").length) { 61553 carObj.margin = 0; 61554 carObj.responsive[768].stagePadding = 0; 61555 carObj.responsive[1024].stagePadding = 0; 61556 carObj.autoplay = true; 61557 carObj.loop = false; 61558 carObj.dots = false; 61559 $(".awardscont__listcont").owlCarousel(carObj); 61560 } 61561 61562 if ($(".imagegallery__cardlistcont").length) { 61563 carObj.margin = 0; 61564 carObj.responsive[768].stagePadding = 0; 61565 carObj.responsive[1024].stagePadding = 0; 61566 carObj.autoplay = false; 61567 carObj.loop = false; 61568 carObj.nav = true; 61569 carObj.dots = false; 61570 $(".imagegallery__cardlistcont").owlCarousel(carObj); 61571 } 61572 61573 if ($(".imagegallery__cardlistcont").length) { 61574 var newCarObj = carObj; 61575 newCarObj.navText = [ 61576 `<svg class="news--arrow" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 61577 <path d="M12.0703 19.1133C12.5391 18.6445 12.4922 17.9414 12.0703 17.4727L6.39844 12.082H19.8984C20.5078 12.082 21.0234 11.6133 21.0234 10.957V9.45703C21.0234 8.84766 20.5078 8.33203 19.8984 8.33203H6.39844L12.0703 2.98828C12.4922 2.51953 12.5391 1.81641 12.0703 1.34766L11.0391 0.316406C10.6172 -0.105469 9.86719 -0.105469 9.44531 0.316406L0.351562 9.45703C-0.117188 9.87891 -0.117188 10.582 0.351562 11.0039L9.44531 20.1445C9.86719 20.5664 10.5703 20.5664 11.0391 20.1445L12.0703 19.1133Z" fill="#BEBABA"/> 61578 </svg> 61579 `, 61580 `<svg class="news--arrow" width="20" height="20" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 61581 <path d="M8.90625 1.34766C8.4375 1.81641 8.48438 2.51953 8.90625 2.98828L14.5781 8.33203H1.125C0.46875 8.33203 0 8.84766 0 9.45703V10.957C0 11.6133 0.46875 12.082 1.125 12.082H14.5781L8.90625 17.4727C8.48438 17.9414 8.48438 18.6445 8.90625 19.1133L9.9375 20.1445C10.4062 20.5664 11.1094 20.5664 11.5312 20.1445L20.6719 11.0039C21.0938 10.582 21.0938 9.87891 20.6719 9.41016L11.5312 0.316406C11.1094 -0.105469 10.4062 -0.105469 9.9375 0.316406L8.90625 1.34766Z" fill="#ED1C24"/>
61581 61582 </svg>` 61583 ]; 61584 $(".imagegallery__cardlistcont").owlCarousel(newCarObj); 61585 } 61586 61587 if ($(".frasernews__cardlistcont").length) { 61588 carObj.margin = 0; 61589 carObj.responsive[768].stagePadding = 0; 61590 carObj.responsive[1024].stagePadding = 0; 61591 carObj.autoplay = false; 61592 carObj.loop = false; 61593 carObj.nav = true; 61594 carObj.dots = false; 61595 // carObj.animateOut = 'fadeOut'; 61596 // carObj.animateIn = 'fadeIn'; 61597 $(".frasernews__cardlistcont").owlCarousel(carObj); 61598 } 61599 61600 61601 if ($(".frasernews__cardlistcont").length) { 61602 var newCarObj = carObj; 61603 newCarObj.navText = [ 61604 `<svg class="news--arrow" width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> 61605 <path d="M12.0703 19.1133C12.5391 18.6445 12.4922 17.9414 12.0703 17.4727L6.39844 12.082H19.8984C20.5078 12.082 21.0234 11.6133 21.0234 10.957V9.45703C21.0234 8.84766 20.5078 8.33203 19.8984 8.33203H6.39844L12.0703 2.98828C12.4922 2.51953 12.5391 1.81641 12.0703 1.34766L11.0391 0.316406C10.6172 -0.105469 9.86719 -0.105469 9.44531 0.316406L0.351562 9.45703C-0.117188 9.87891 -0.117188 10.582 0.351562 11.0039L9.44531 20.1445C9.86719 20.5664 10.5703 20.5664 11.0391 20.1445L12.0703 19.1133Z" fill="#BEBABA"/> 61606 </svg> 61607 `, 61608 `<svg class="news--arrow" width="20" height="20" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 61609 <path d="M8.90625 1.34766C8.4375 1.81641 8.48438 2.51953 8.90625 2.98828L14.5781 8.33203H1.125C0.46875 8.33203 0 8.84766 0 9.45703V10.957C0 11.6133 0.46875 12.082 1.125 12.082H14.5781L8.90625 17.4727C8.48438 17.9414 8.48438 18.6445 8.90625 19.1133L9.9375 20.1445C10.4062 20.5664 11.1094 20.5664 11.5312 20.1445L20.6719 11.0039C21.0938 10.582 21.0938 9.87891 20.6719 9.41016L11.5312 0.316406C11.1094 -0.105469 10.4062 -0.105469 9.9375 0.316406L8.90625 1.34766Z" fill="#ED1C24"/> 61610 </svg>` 61611 ]; 61612 fraserCarousel = $(".frasernews__cardlistcont").owlCarousel(newCarObj); 61613 } 61614 61615 if ($(".buildcard__listcont").length) { 61616 carObj.margin = 0; 61617 carObj.responsive[768].stagePadding = 0; 61618 carObj.responsive[1024].stagePadding = 0; 61619 carObj.autoplay = false; 61620 carObj.loop = false; 61621 carObj.dots = false; 61622 carObj.nav = true; 61623 delete carObj.animateOut; 61624 delete carObj.animateIn; 61625 $(".buildcard__listcont").owlCarousel(carObj); 61626 } 61627 61628 if ($(".fraserproperty__listcont").length) { 61629 carObj.margin = 0; 61630 carObj.responsive[768].stagePadding = 0; 61631 carObj.responsive[1024].stagePadding = 0; 61632 carObj.autoplay = true; 61633 carObj.loop = true; 61634 carObj.nav = false; 61635 carObj.dots = true; 61636 delete carObj.animateOut; 61637 delete carObj.animateIn; 61638 $(".fraserproperty__listcont").owlCarousel(carObj); 61639 let carOwlItemWidth = $(".fraserproperty__listcont .owl-item").width(); 61640 $(".fraserproperty__listcont .owl-item").css({width: parseInt(carOwlItemWidth)}); 61641 setInterval(function(){ 61642 setTimeout(function(){ 61643 $('.fraserproperty__listleft').removeClass('animate__animated animate__fadeInFromUp animate__slow'); 61644 }, 1); 61645 setTimeout(function(){ 61646 $('.owl-item.active .fraserproperty__listleft').addClass('animate__animated animate__fadeInFromUp animate__slow'); 61647 }, 2); 61648 }, carSpeed); 61649 61650 $(document).on('click', '.fraserproperty__listcont', function () { 61651 setTimeout(function(){ 61652 $('.fraserproperty__listleft').removeClass('animate__animated animate__fadeInFromUp animate__slow'); 61653 }, 1); 61654 setTimeout(function(){ 61655 $('.owl-item.active .fraserproperty__listleft').addClass('animate__animated animate__fadeInFromUp animate__slow'); 61656 }, 2); 61657 let carOwlItemWidth = $(".fraserproperty__listcont .owl-item").width(); 61658 $(".fraserproperty__listcont .owl-item").css({width: parseInt(carOwlItemWidth) + 'px'}); 61659 }); 61660 } 61661 61662 if ($(".fraserstrategy--boxlist").length) { 61663 carObj.margin = 0; 61664 carObj.responsive[768].stagePadding = 0; 61665 carObj.responsive[1024].stagePadding = 0; 61666 carObj.autoplay = false;
61667 carObj.loop = false; 61668 carObj.nav = true; 61669 carObj.dots = false; 61670 $(".fraserstrategy--boxlist").owlCarousel(carObj); 61671 } 61672 61673 $('.newselect__drpdwn').each(function(index, element) { 61674 $(element).on('change', function() { 61675 var drpDownVal = $(this).val(); 61676 var downloadBtn = $(this).closest('.fraser--row').find('.download__btn'); 61677 downloadBtn.removeAttr("data-href"); 61678 downloadBtn.removeAttr("data-target"); 61679 if (drpDownVal) { 61680 downloadBtn.removeAttr('disabled'); 61681 downloadBtn.attr("data-href", drpDownVal); 61682 downloadBtn.attr("data-target", "_blank"); 61683 } 61684 }); 61685 }); 61686 61687 61688 if ($('.reportstext__textarcmobile').length) { 61689 $('.reportstext__textarcmobile').css({bottom: '-' + $('.reportstext__textarcmobile').height() + 'px' }); 61690 } 61691 61692 if (navigator.appVersion.indexOf("Mac") === -1) { 61693 if ($('.tab__links .newlabel--variation1').length) { 61694 $('.tab__links .newlabel--variation1').css({height: '17px'}); 61695 } 61696 if ($('.hero__label--text').length) { 61697 $('.hero__label--text').css({padding: '12px 16px 13.5px'}); 61698 } 61699 if ($('.frasernews__cardblog').length) { 61700 $('.frasernews__cardblog').css({padding: '5px 9px 7px'}); 61701 } 61702 if ($('.fraserproperty__listtag').length) { 61703 $('.fraserproperty__listtag').css({padding: '5px 8px 6px'}); 61704 } 61705 } 61706 61707 var fraserstoryBox; 61708 $(window).on('resize', function(){ 61709 loadCarousal(); 61710 loadImageCarousal(); 61711 loadOnResizeNReady(); 61712 }); 61713 61714 $("#top-bar #close").click(function(){ 61715 loadOnResizeNReady(); 61716 }); 61717 61718 loadOnResizeNReady = function() { 61719 var customeHeightCal = $("#top-bar").is(":visible") ? 45 : 0; 61720 61721 if ($(window).width() > 991) { 61722 $('.newbanner').css({top: (customeHeightCal + 150) + 'px', height: ($(window).height() - 150 - customeHeightCal) + 'px'}); 61723 } 61724 if ($('.fraserimgrvideo__imgarc').length) { 61725 $('.fraserimgrvideo__imgarc').css({top: '-' + ($('.fraserimgrvideo__imgarc').height() - 3) + 'px'}) 61726 } 61727 if ($('.reportstext__textarc').length) { 61728 var arcWidth = parseInt($('.reportstext__textarc').width()) - 1; 61729 $('.reportstext__textarc').css({right: '-' + arcWidth + 'px' }); 61730 } 61731 if ($('.reportstext__textarcmobile').length) { 61732 $('.reportstext__textarcmobile').css({bottom: '-' + $('.reportstext__textarcmobile').height() + 'px' }); 61733 } 61734 setTimeout(function(){ 61735 let carOwlItemWidth = $(".fraserproperty__listcont .owl-item").width(); 61736 $(".fraserproperty__listcont .owl-item").css({width: parseInt(carOwlItemWidth) + 'px'}); 61737 }, 1000); 61738 61739 if ($(window).width() > 1440) { 61740 if ($('.newbanner__txt').length && $('.newbanner__imgarc.hide--mobile').is(':visible')){ 61741 var customHeight = 140 + customeHeightCal; 61742 if ($(window).width() >= 1920 || ($(".newbanner__txt").offset() + $(".newbanner__txt").height() >= $(".newbanner__imgarc.hide--mobile").offset())) { 61743 customHeight = 300 + customeHeightCal; 61744 } 61745 $('.newbanner__txt').css({bottom: $('.newbanner__imgarc.hide--mobile').height() + customHeight + 'px'}) 61746 } 61747 if ($('.newbanner__slider .owl-dots').length && $('.newbanner__imgarc.hide--mobile').is(':visible')){ 61748 $('.newbanner__slider .owl-dots').css({bottom: $('.newbanner__imgarc.hide--mobile').height() + 100 + 'px'}) 61749 } 61750 } else if ($(window).width() > 834) { 61751 var calculateBannerheight = $(window).height() - $('header').height() - customeHeightCal; 61752 if (!$(".newbanner__slider").parents(".container--editmode").length) { 61753 $('.newbanner__img').css({'min-height': calculateBannerheight + 'px'}); 61754 } 61755 if ($('.newbanner__txt').length && $('.newbanner__imgarc.hide--mobile').is(':visible')){ 61756 var customPos = $('.homecarousel').length ? 180 : 80; 61757 $('.newbanner__txt').css({bottom: $('.newbanner__imgarc.hide--mobile').height() + customPos + customeHeightCal + 'px'}) 61758 } 61759 if ($('.newbanner__slider .owl-dots').length && $('.newbanner__imgarc.hide--mobile').is(':visible')){ 61760 var customPos = $('.homecarousel').length ? 0 : 40; 61761 $('.newbanner__slider .owl-dots').css({bottom: $('.newbanner__imgarc.hide--mobile').height() + customPos + customeHeightCal + 'px'}) } 61762 } else { 61763 $('.newbanner__img').css({'min-height': 100 + 'px'}); 61764 if ($('.newbanner__txt').length && $('.newbanner__imgarc.hide--desktop').is(':visible')){ 61765 $('.newbanner__txt').css({bottom: $('.newbanner__imgarc.hide--desktop').height() + 150 + customeHeightCal + 'px'}) 61766 } 61767 if ($('.newbanner__slider .owl-dots').length && $('.newbanner__imgarc.hide--desktop').is(':visible')){ 61768 $('.newbanner__slider .owl-dots').css({bottom: $('.newbanner__imgarc.hide--desktop').height() + 20 + customeHeightCal + 'px'}) 61769 } 61770 } 61771 61772 if ($('.mar-top--deviceheight').length) { 61773 if ($(window).width() <= 834) { 61774 $('.mar-top--deviceheight').css({'margin-top': 95 + 'vh', overflow: 'visible'}); 61775 } else { 61776 $('.mar-top--deviceheight').css({'margin-top': $('.newbanner').height() + $('#header').height() + $('.globalheader nav.nav').height() + 65 - $('.newbanner__imgarc.hide--mobile').height() + 'px'}); 61777 } 61778 } 61779 if ($('.newbanner__imgarc.hide--mobile').length) { 61780 $('.newbanner__imgarc.hide--mobile').css({top: - + $('.newbanner__imgarc.hide--mobile').height() + 3 + 'px'}) 61781 } 61782 if ($('.newbanner__imgarc.hide--desktop').length) { 61783 $('.newbanner__imgarc.hide--desktop').css({top: - + $('.newbanner__imgarc.hide--desktop').height() + 3 + 'px'}) 61784 } 61785 61786 $(".newbanner__imglst").each(function(i, e){ 61787 var applystyle = { 61788 'background-image': 'url(' + $(e).attr('data-webimage') + ')' 61789 }; 61790 if ($(window).width() <= 834) { 61791 applystyle['background-image'] = 'url(' + $(e).attr('data-mobimage') + ')'; 61792 applystyle.height = '100vh'; 61793 } else { 61794 var windowHeight = $(window).height(); 61795 var headerHeight = $('header').outerHeight() || 0; // Get the header height or default to 0 if header doesn't exist 61796 var calculateBannerheight = windowHeight - headerHeight; 61797 applystyle.height = calculateBannerheight + 'px'; 61798 } 61799 $(e).css(applystyle); 61800 }); 61801 61802 $(".hero__banner").each(function(i, e){ 61803 var applystyle = { 61804 'background-image': 'url(' + $(e).attr('data-webimage') + ')' 61805 }; 61806 if ($(window).width() <= 834) { 61807 applystyle['background-image'] = 'url(' + $(e).attr('data-mobimage') + ')'; 61808 } 61809 $(e).css(applystyle); 61810 }); 61811 } 61812
61813 loadCarousal = function() { 61814 if ($(".fraserstory__boxes").length) { 61815 if ($(window).width() <= 834) { 61816 carObj.margin = 0; 61817 carObj.responsive[768].stagePadding = 0; 61818 carObj.responsive[1024].stagePadding = 0; 61819 carObj.autoplay = false; 61820 carObj.loop = false; 61821 carObj.nav = true; 61822 carObj.dots = false; 61823 fraserstoryBox = $(".fraserstory__boxes").owlCarousel(carObj); 61824 $(".fraserstory__boxes").addClass('owl-carousel'); 61825 } else if (fraserstoryBox && fraserstoryBox.data('owl.carousel')) { 61826 fraserstoryBox.data('owl.carousel').destroy(); 61827 $(".fraserstory__boxes").removeClass('owl-carousel'); 61828 } else { 61829 $(".fraserstory__boxes").removeClass('owl-carousel'); 61830 } 61831 } 61832 } 61833 61834 loadCarousal(); 61835 61836 loadImageCarousal = function() { 61837 if ($(".imagegallery__cardlistcont").length) { 61838 if ($(window).width() <= 834) { 61839 carObj.margin = 0; 61840 carObj.responsive[768].stagePadding = 0; 61841 carObj.responsive[1024].stagePadding = 0; 61842 carObj.autoplay = false; 61843 carObj.loop = false; 61844 carObj.nav = true; 61845 carObj.dots = false; 61846 $(".imagegallery__cardlistcont").owlCarousel(carObj); 61847 $(".imagegallery__cardlistcont").addClass('owl-carousel'); 61848 } else { 61849 $(".imagegallery__cardlistcont").removeClass('owl-carousel'); 61850 } 61851 } 61852 } 61853 61854 loadImageCarousal(); 61855 61856 $('.fraserfooternew__arrow').on('click', function(){ 61857 if ($(window).width() <= 834 && $(this).find('.fraserfooternew__arrow')) { 61858 $(this).parents('.fraserfooternew__heading').next().slideToggle(); 61859 $(this).parents('.fraserfooternew__heading').toggleClass('fraserfooternew--active'); 61860 } 61861 }); 61862 61863 const scrollTop = window.scrollY; 61864 const upImages = document.querySelectorAll('.apply__animationUp'); 61865 const animRightImages = document.querySelectorAll('.apply__animationfaderight'); 61866 revealPortfolioImages(scrollTop, upImages, 'apply__animationUp', 'animate__animated animate__fadeInUp animate__slow'); 61867 revealPortfolioImages(scrollTop, animRightImages, 'apply__animationright', 'animate__animated animate__onlyFadeInRight animate__slow'); 61868 61869 const upImagesOneByOne = document.querySelectorAll('.apply__animationuponebyone'); 61870 const upImagesnext = document.querySelectorAll('.apply__animationupnextbynext'); 61871 revealImagesOneByOne(scrollTop, upImagesOneByOne, 'apply__animationuponebyone', 'animate__animated animate__fadeInUp animate__slow'); 61872 revealImagesOneByOne(scrollTop, upImagesnext, 'apply__animationupnextbynext', 'animate__animated animate__fadeInUp animate__slow'); 61873 loadOnResizeNReady(); 61874}); 61875 61876const upImages = document.querySelectorAll('.apply__animationUp'); 61877const upImagesOneByOne = document.querySelectorAll('.apply__animationuponebyone'); 61878const animRightImages = document.querySelectorAll('.apply__animationfaderight'); 61879const upImagesnext = document.querySelectorAll('.apply__animationupnextbynext'); 61880document.addEventListener("scroll", function(e){ 61881 const scrollTop = window.scrollY; 61882 revealPortfolioImages(scrollTop, upImages, 'apply__animationUp', 'animate__animated animate__fadeInUp animate__slow'); 61883 revealPortfolioImages(scrollTop, animRightImages, 'apply__animationright', 'animate__animated animate__onlyFadeInRight animate__slow'); 61884 revealImagesOneByOne(scrollTop, upImagesOneByOne, 'apply__animationuponebyone', 'animate__animated animate__fadeInUp animate__slow'); 61885 revealImagesOneByOne(scrollTop, upImagesnext, 'apply__animationupnextbynext', 'animate__animated animate__fadeInUp animate__slow'); 61886}); 61887 61888const revealPortfolioImages = (scrollTop, type, removeClassName, className) =>{ 61889 var i = 1; 61890 if (scrollTop != 0) { 61891 type.forEach(ele =>{ 61892 if ( 61893 (scrollTop + window.innerHeight > $(ele).offset().top) 61894 && (scrollTop < $(ele).offset().top) 61895 && (!$(ele).hasClass('applied__animation'))) { 61896 $(ele).addClass(className); 61897 $(ele).removeClass(removeClassName); 61898 $(ele).addClass('applied__animation'); 61899 } 61900 i++; 61901 }); 61902 } 61903} 61904 61905const applyEffect = (type, removeClassName, className) => { 61906 type.forEach(ele =>{ 61907 if (!$(ele).hasClass('applied__animation')) { 61908 $(ele).addClass(className); 61909 $(ele).removeClass(removeClassName); 61910 $(ele).addClass('applied__animation'); 61911 } 61912 }); 61913}
61914var delay = 350; 61915if ($(window).width() <= 834) { 61916 delay = 0; 61917} 61918 61919$(window).on("resize", function () { 61920 if ($(window).width() <= 834) { 61921 delay = 0; 61922 } 61923}); 61924 61925const revealImagesOneByOne = (scrollTop, type, removeClassName, className) =>{ 61926 var i = 1; 61927 61928 if (scrollTop != 0) { 61929 type.forEach(ele =>{ 61930 if ( 61931 (scrollTop + window.innerHeight > $(ele).offset().top) 61932 && (scrollTop < $(ele).offset().top) 61933 && (!$(ele).hasClass('applied__animation'))) { 61934 setTimeout(function(){ 61935 $(ele).addClass(className); 61936 $(ele).removeClass(removeClassName); 61937 $(ele).addClass('applied__animation'); 61938 }, i * delay); 61939 } 61940 i++; 61941 }); 61942 } 61943} 61944 61945var appliedCount = {}; 61946function checkNApplyCount(scrollTop) { 61947 $('.count').each(function (i, e) { 61948 if ( 61949 (scrollTop + window.innerHeight > $(this).offset().top) 61950 && (scrollTop < $(this).offset().top) 61951 && (!$(this).hasClass('applied--count'))) { 61952 console.log(e); 61953 const str1 = ($(this).text()) 61954 const arrVal = []; 61955 let matchesNum = str1.match(/(\d+.\d+)/); 61956 if (matchesNum === null) { 61957 matchesNum = str1.match(/(\d+)/); 61958 } 61959 if (matchesNum) { 61960 arrVal[0] = Number(matchesNum[0]); 61961 } 61962 const matchesStr = str1.match(/(^[^\d]+)/); 61963 if (matchesStr) { 61964 arrVal[1] = matchesStr[0]; 61965 } 61966 if ((typeof arrVal[0] == "number") && (typeof arrVal[1] == "string")) { 61967 if (Number.isInteger(arrVal[0])) { 61968 $(this).prop('Counter', 0).animate({ 61969 Counter: arrVal[0] /*$(this).text()*/ 61970 }, { 61971 duration: 3000, 61972 easing: 'swing', 61973 step: function (now) { 61974 $(this).text(arrVal[1] + Math.ceil(now)); 61975 } 61976 }); 61977 } else { 61978 $(this).prop('Counter', 0).animate({ 61979 Counter: arrVal[0] 61980 }, { 61981 duration: 3000, 61982 easing: 'swing', 61983 step: function (now) { 61984 $(this).text(arrVal[1] + now.toFixed(1)); 61985 } 61986 }); 61987 } 61988 } 61989 else if ((typeof arrVal[0] == "number")) { 61990 if (Number.isInteger(arrVal[0])) { 61991 $(this).prop('Counter', 0).animate({ 61992 Counter: arrVal[0] /*$(this).text()*/ 61993 }, { 61994 duration: 3000, 61995 easing: 'swing', 61996 step: function (now) { 61997 $(this).text(Math.ceil(now)); 61998 } 61999 }); 62000 } else { 62001 $(this).prop('Counter', 0).animate({ 62002 Counter: arrVal[0] 62003 }, { 62004 duration: 3000, 62005 easing: 'swing', 62006 step: function (now) { 62007 $(this).text(now.toFixed(1)); 62008 } 62009 }); 62010 } 62011 } 62012 else { 62013 $(this).prop('Counter', 0).animate({ 62014 Counter: arrVal[0] 62015 }, { 62016 duration: 3000, 62017 easing: 'swing', 62018 step: function (now) { 62019 $(this).text(arrVal[1] + Math.ceil(now)); 62020 } 62021 }); 62022 } 62023 $(this).addClass('applied--count'); 62024 } 62025 }); 62026} 62027 62028const scrollTop = window.scrollY; 62029checkNApplyCount(scrollTop); 62030 62031document.addEventListener("scroll", function (e) { 62032 const scrollTop = window.scrollY; 62033 checkNApplyCount(scrollTop); 62034}); 62035 62036function openTab(evt, name, device) { 62037 var i, tabcontent, tablinks; 62038 tabcontent = document.getElementsByClassName("tab__cont"); 62039 tablinks = document.getElementsByClassName("tab__links"); 62040 62041 if (evt.currentTarget.className.indexOf('active') === -1 || (evt.currentTarget.className.indexOf('active') >= 0 && device == 'desktop')) { 62042 for (i = 0; i < tabcontent.length; i++) { 62043 tabcontent[i].style.display = 'none'; 62044 } 62045 62046 for (i = 0; i < tablinks.length; i++) { 62047 tablinks[i].className = tablinks[i].className.replace("active", ""); 62048 } 62049 document.getElementById(name).style.display = "block"; 62050 document.getElementById(name).style.animation = "fadeEffect 2s"; 62051 evt.currentTarget.className += " active"; 62052 } else { 62053 hideTab(); 62054 } 62055 if ($(".fraserprogress").length > 0) { 62056 var borderColor = $(".fraserprogress .tab__links.active").attr('data-border-color'); 62057 $(".fraserprogress .tab__links.active").attr('style', 'border-color: ' + borderColor + '!important').siblings().removeAttr("style"); 62058 } 62059} 62060if ($(".fraserprogress").length > 0) { 62061 var activeBorderColor = $(".fraserprogress .tab__links.active").attr('data-border-color'); 62062 $(".fraserprogress .tab__links.active").attr('style', 'border-color: ' + activeBorderColor + '!important'); 62063} 62064function hideTab() { 62065 var tabcontent = document.getElementsByClassName("tab__cont"); 62066 var tablinks = document.getElementsByClassName("tab__links"); 62067 for (i = 0; i < tabcontent.length; i++) { 62068 tabcontent[i].style.display = 'none'; 62069 } 62070 62071 for (i = 0; i < tablinks.length; i++) { 62072 tablinks[i].className = tablinks[i].className.replace("active", ""); 62073 } 62074} 62075 62076function calculateApply() { 62077 var calculateLeftNwdith = ($(window).width() - 980) / 2; 62078 $('.card__detailleft').css({ width: calculateLeftNwdith + 'px', left: '-' + calculateLeftNwdith + 'px' }); 62079 $('.card__detailright').css({ width: calculateLeftNwdith + 'px', right: '-' + calculateLeftNwdith + 'px' }); 62080} 62081calculateApply(); 62082 62083$('.susblock').click(function () { 62084 $('.fraserstrategy--boxlist').removeClass('disable--carousal'); 62085 if ($(window).width() <= 834) { 62086 $(this).parents('.fraserstrategy--boxlist').addClass('disable--carousal'); 62087 } 62088 $('.susblock').removeClass('active'); 62089 $('.fraserstrategy__boxlist').removeClass('active'); 62090 $(this).addClass('active'); 62091 $(this).parents('.fraserstrategy__boxlist').addClass('active'); 62092 $('.susblock__hide').removeClass('susblock__hideblock'); 62093 $('.susblock__detail').hide(); 62094 var elementId = $(this).attr("data-param"); 62095 $(this).closest('.container').next().find('#'+elementId).slideDown(); 62096 62097 const upImages = document.querySelectorAll('.apply__animationUp'); 62098 const leftImages = document.querySelectorAll('.apply__animationleft'); 62099 const rightImages = document.querySelectorAll('.apply__animationright'); 62100 applyEffect(upImages, 'apply__animationUp', 'animate__animated animate__fadeInUp animate__slow'); 62101 applyEffect(leftImages, 'apply__animationleft', 'animate__animated animate__fadeInLeft animate__slow'); 62102 applyEffect(rightImages, 'apply__animationright', 'animate__animated animate__fadeInRight animate__slow'); 62103}); 62104 62105$('.close__icon').click(function () { 62106 $('.susblock').removeClass('active'); 62107 $('.fraserstrategy--boxlist').removeClass('active'); 62108 $('.fraserstrategy--boxlist').removeClass('disable--carousal'); 62109 $('.susblock__detail').slideUp(); 62110}); 62111 62112$(window).on('resize', function () { 62113 if ($(window).width() <= 834) { 62114 hideTab(); 62115 } else { 62116 hideTab(); 62117 $('.hide--mobileflx .tab__links').removeAttr("style").first().addClass('active').attr('style', 'border-color: ' + activeBorderColor + '!important'); 62118 $("#tabCount0").show(); 62119 } 62120}); 62121 62122if ($(window).width() <= 834) { 62123 hideTab(); 62124} else { 62125 hideTab(); 62126 $('.hide--mobileflx .tab__links').first().addClass('active'); 62127 $("#tabCount0").show(); 62128}
62129$('.pressreleasepage .modal-head .icon-close').on('click',function () { 62130// window.history.back(); 62131 if(sessionStorage.getItem('redirectPath')){ 62132 window.location.href = sessionStorage.getItem('redirectPath'); 62133 } 62134}); 62135$('.residencehomefooter .fraserfooternew__copylink').on('click' , function(){ 62136 let redirectPath = window.location.href; 62137 sessionStorage.setItem('redirectPath', redirectPath); 62138}); 62139let noOfCharacter = 180; 62140let contents = document.querySelectorAll(".imagegallery_content"); 62141 62142contents.forEach(content => { 62143 if(content.textContent.length < noOfCharacter) { 62144 let showMoreLabel = content.parentElement.querySelector(".imagegallery__readmore"); 62145 if(showMoreLabel){ 62146 showMoreLabel.style.display = "none"; 62147 } 62148 } else { 62149 let displayText = content.textContent.slice(0, noOfCharacter); 62150 let moreText = content.textContent.slice(noOfCharacter); 62151 content.innerHTML = `${displayText}<span class="dots"> </span><span class="hide more">${moreText}</span>` 62152 } 62153}); 62154 62155function readMore(btn) { 62156 let post = btn.parentElement; 62157 post.querySelector(".dots").classList.toggle("hide"); 62158 post.querySelector(".more").classList.toggle("hide"); 62159 btn.textContent == "Read more" ? btn.textContent = "Read less" : btn.textContent = "Read more"; 62160} 62161$(document).ready(function() { 62162 $("#salutation").attr("style","display:block"); 62163}); 62164var mediaCenterRedesignComponent = $(".mediacenter-redesign"); 62165 62166if (mediaCenterRedesignComponent.length) { 62167 const init = () => { 62168 let filterBtn = document.getElementsByClassName("filter-text-media-redesign")[0]; 62169 let closeBtn = document.getElementsByClassName("modal-head-media-redesign")[0]; 62170 62171 if (filterBtn) { 62172 filterBtn.addEventListener("click", showFilterInMobileView); 62173 } 62174 if (closeBtn) { 62175 closeBtn.addEventListener("click", hideFilterInMobileView); 62176 } 62177 }; 62178 const showFilterInMobileView = () => { 62179 let mediaCentreDisplay = document.getElementById( 62180 "filter-modal-media-centre" 62181 ); 62182 if (mediaCentreDisplay) { 62183 mediaCentreDisplay.style.display = "block"; 62184 mediaCentreDisplay.classList.add("active"); 62185 } 62186 }; 62187 const hideFilterInMobileView = () => { 62188 let mediaCentreDisplay = document.getElementById( 62189 "filter-modal-media-centre" 62190 ); 62191 if (mediaCentreDisplay) { 62192 mediaCentreDisplay.style.display = "none"; 62193 mediaCentreDisplay.classList.remove("active"); 62194 } 62195 }; 62196 window.addEventListener("load", init); 62197 window.addEventListener("scroll", (event) => { 62198 let stickyBar = document.getElementsByClassName('sticky'); 62199 let nmcResultElement = document.getElementsByClassName('nmc-filter-reults'); 62200 let menuBarElement = document.getElementsByClassName('nmc-media-filter')[0]; 62201 let marginLeft = 5; 62202 62203 if (stickyBar && stickyBar[0] && nmcResultElement && nmcResultElement[0]) { 62204 marginLeft = (nmcResultElement[0].getElementsByClassName('inner-container')[0].offsetLeft + 40) - 100; 62205 } 62206 if (menuBarElement) { 62207 menuBarElement.style.marginLeft = marginLeft + 'px'; 62208 menuBarElement.style.maxWidth = '960px'; 62209 } 62210 }); 62211 62212 var mediaCenterRedesign = {}; 62213 mediaCenterRedesign.pageIndex = 1; 62214 mediaCenterRedesign.apiURL = $("[name=media-center-redesign-api]").val(); 62215 mediaCenterRedesign.paramsTarget = $(window).width() >= 991 ? mediaCenterRedesignComponent.find('[data-tab-filter]') : mediaCenterRedesignComponent.find('.filter-modal'); 62216 62217 mediaCenterRedesign.getSelectedParamString = function () { 62218 var params = { 62219 pageIndex: mediaCenterRedesign.pageIndex 62220 }; 62221 var typeParamString = "?"; 62222 mediaCenterRedesign.paramsTarget.find("[data-query]").each(function () { 62223 var prName = $(this).attr('data-query'); 62224 if (prName == 'period') { 62225 $(this).find('[data-query]').each(function () { 62226 var childPrName = $(this).attr('data-query'); 62227 var childPrVal = []; 62228 $(this).find('input:checked').each(function () { 62229 childPrVal.push($(this).val()); 62230 }); 62231 params[childPrName] = childPrVal.join(','); 62232 }); 62233 } 62234 else if (prName == 'type') { 62235 $(this).find('input:checked').each(function () { 62236 typeParamString = typeParamString + 'type=' + $(this).val() + "&"; 62237 }); 62238 } 62239 else { 62240 var childPrVal = [];
62241 $(this).find('input:checked').each(function () { 62242 childPrVal.push($(this).val()); 62243 }); 62244 params[prName] = childPrVal.join(','); 62245 } 62246 }); 62247 return typeParamString + $.param(params); 62248 }; 62249 62250 mediaCenterRedesign.getSelector = function () { 62251 return $("[data-query=type]").find('input:checked').length == 1 && $("[data-query=type]").find('input:checked').val() == 'pressrelease' ? 'pressrelease' : 'all'; 62252 }; 62253 62254 mediaCenterRedesign.renderMCR = function (e, loadMoreClicked) { 62255 $(".nmc-filter-reults .loader").removeClass("hidden"); 62256 if (!loadMoreClicked) { 62257 $(".nmc-content").html(""); 62258 } 62259 $(".nmc-content").isotope({ itemSelector: ".nmc-grid", layoutMode: "packery" }); 62260 mediaCenterRedesign.pageIndex = loadMoreClicked ? mediaCenterRedesign.pageIndex + 1 : 1; 62261 var paramString = mediaCenterRedesign.getSelectedParamString(); 62262 var selector = mediaCenterRedesign.getSelector(); 62263 var apiURLFinal = mediaCenterRedesign.apiURL + "." + selector + ".json" + paramString; 62264 var pageIndex = mediaCenterRedesign.pageIndex; 62265 $.get({ 62266 url: apiURLFinal, 62267 success: function (response) { 62268 var isExist = window.nmcAnalytics; 62269 var noResult = true, count = 0; 62270 var totalCount = response.totalCount || response.TotalCount || 0; 62271 window.filterCount = totalCount; 62272 if(isExist){ 62273 window.mediaCentreMethod(e, totalCount); 62274 } 62275 if (totalCount > 0) { 62276 var html = []; 62277 if (selector === "pressrelease" && response.press_release != "no result") { 62278 var pressReleases = JSON.parse(response.press_release.replace(/\\\//g, "/")); 62279 if (pressReleases.length) { 62280 noResult = false;
62281 count = pressReleases.length; 62282 $.each(pressReleases, function (k, v) { 62283 v.mediaType = v.mediaType || "Press Release"; 62284 var mediaClass = v.mediaType === 'Blog' ? 'blog' : (v.mediaType === 'Video' ? 'video' : 'press'); 62285 html = html.concat([ 62286 '<div class="nmc-grid">' + 62287 '<a href="' + v.url + '">' + 62288 '<div class="nmc-grid-info">' + 62289 (v.thumbnailimage ? '<div class="nmc-grid-img">' + 62290 '<img src="' + v.thumbnailimage + '" alt="" />' + 62291 '</div>' : '') + 62292 '<div class="nmc-grid-detail grid-desc">' + 62293 '<p>' + 62294 '<span class="nmc-grid-detail-category ' + mediaClass + '">' + v.mediaType + '</span>' + 62295 '</p>' + 62296 '<p class="desc">' + 62297 v.title + 62298 '</p>' + 62299 '<p class="date">' + (v.day + " " + moment().month(parseInt(v.month) - 1).format("MMM") + " " + v.year).toUpperCase() + '</p>' + 62300 '</div>' + 62301 '</div>' + 62302 '</a>' + 62303 '</div>' 62304 ]); 62305 // html = mediaCenterRedesign.appendCardHtml(html, v.thumbnailimage, v.title, v.mediaType, v.day + " " + moment().month(parseInt(v.month) - 1).format("MMM") + " " + v.year, v.url); 62306 }); 62307 } 62308 } 62309 else if (response.mediaListDto && response.mediaListDto.length) { 62310 noResult = false;
62311 count = response.mediaListDto.length; 62312 $.each(response.mediaListDto, function (k, v) { 62313 // html = mediaCenterRedesign.appendCardHtml(html, v.thumbnailImage, v.title, v.mediaType, moment(v.createdDate).format("DD MMM YYYY"), v.url); 62314 v.mediaType = v.mediaType || "Press Release"; 62315 var mediaClass = v.mediaType === 'Blog' ? 'blog' : (v.mediaType === 'Video' ? 'video' : 'press'); 62316 html = html.concat([ 62317 '<div class="nmc-grid media-centre-clickthrough" data-content-type="' + v.mediaType + '" data-link-url="' + v.url + '" data-link-name="' + v.title + '" data-component-item-title="' + v.title + '" data-component-item-position="' + (k+1) + '" >' + 62318 '<a href="' + v.url + '">' + 62319 '<div class="nmc-grid-info">' + 62320 (v.thumbnailImage ? '<div class="nmc-grid-img">' + 62321 '<img src="' + v.thumbnailImage + '" alt="" />' + 62322 '</div>' : '') + 62323 '<div class="nmc-grid-detail grid-desc">' + 62324 '<p>' + 62325 '<span class="nmc-grid-detail-category ' + mediaClass + '">' + v.mediaType + '</span>' + 62326 '</p>' + 62327 '<p class="desc">' + 62328 v.title + 62329 '</p>' + 62330 '<p class="date">' + moment(v.createdDate).format("DD MMM YYYY").toUpperCase() + '</p>' + 62331 '</div>' + 62332 '</div>' + 62333 '</a>' + 62334 '</div>' 62335 ]); 62336 }); 62337 } 62338 $(".nmc-content").isotope('insert', $(html.join(''))); 62339 $(".nmc-content").isotope({ 62340 itemSelector: '.nmc-grid', 62341 percentPosition: true, 62342 masonry: { 62343 columnWidth: 0 62344 } 62345 }); 62346 var showLoadMore = Math.ceil(totalCount / 6) > pageIndex; 62347 $(".nmc-filter-reults .loader").addClass("hidden"); 62348 $(".nmc-noresult").css("display", "none"); 62349 if (showLoadMore) { 62350 $(".nmc-loadmore-btn").removeAttr("style"); 62351 } 62352 else { 62353 $(".nmc-loadmore-btn").css("display", "none"); 62354 } 62355 // $(".nmc-content").removeAttr("style"); 62356 62357 } 62358 if (noResult) { 62359 $(".nmc-filter-reults .loader").addClass("hidden"); 62360 $(".nmc-noresult").css("display", "block"); 62361 $(".nmc-content").css("display", "none"); 62362 $(".nmc-loadmore-btn").css("display", "none"); 62363 $(".nmc-content").isotope('destroy'); 62364 } 62365 }, 62366 error: function (response) { 62367 $(".nmc-filter-reults .loader").addClass("hidden"); 62368 $(".nmc-noresult").css("display", "block"); 62369 $(".nmc-content").css("display", "none"); 62370 $(".nmc-loadmore-btn").css("display", "none"); 62371 $(".nmc-content").isotope('destroy'); 62372 } 62373 }); 62374 }; 62375 62376 mediaCenterRedesign.appendCardHtml = function (html, image, title, mediaType, date, url) { 62377 mediaType = mediaType || "Press Release"; 62378 var mediaClass = mediaType === 'Blog' ? 'blog' : (mediaType === 'Video' ? 'video' : 'press'); 62379 html = html.concat([ 62380 '<div class="nmc-grid">' + 62381 '<a href="' + url + '">' + 62382 '<div class="nmc-grid-info">' + 62383 '<div class="nmc-grid-img">' +
62384 '<img src="' + image + '" alt="" />' + 62385 '</div>' + 62386 '<div class="nmc-grid-detail grid-desc">' + 62387 '<p>' + 62388 '<span class="nmc-grid-detail-category ' + mediaClass + '">' + mediaType + '</span>' + 62389 '</p>' + 62390 '<p class="desc">' + 62391 title + 62392 '</p>' + 62393 '<p class="date">' + date.toUpperCase() + '</p>' + 62394 '</div>' + 62395 '</div>' + 62396 '</a>' + 62397 '</div>' 62398 ]); 62399 return html; 62400 } 62401 62402 $(".mediacenter-redesign .nmc-loadmore-btn").click(function () { 62403 mediaCenterRedesign.renderMCR(this, true); 62404 }); 62405 62406 $(".mediacenter-redesign .nmc-btn-apply").click(function (e) { 62407 window.nmcAnalytics = true; 62408 hideFilterInMobileView(); 62409 $('html, body').removeClass('no-scrolling'); 62410 var filter = $(this).closest(".caret"); 62411 if (filter.length) { 62412 var selectedFilters = filter.find('input:checked'), text = ""; 62413 if (selectedFilters.length == 0) { 62414 text = filter.find(".text-default").attr("data-default"); 62415 } 62416 else if (selectedFilters.length == 1) { 62417 text = $(selectedFilters[0]).next("span").text(); 62418 } 62419 else { 62420 text = $(selectedFilters[0]).next("span").text() + ",..." 62421 } 62422 62423 if(selectedFilters.length > 0){ 62424 var applyFiltersValue = ""; 62425 for (let a=0;a<selectedFilters.length;a++){ 62426 applyFiltersValue += $(selectedFilters[a]).next("span").text() + "," 62427 } 62428 var pos = applyFiltersValue.indexOf(','); 62429 if(selectedFilters[0].name === "filter-year-rad"){ 62430 window.finalFilter = "Year=" + $(selectedFilters[0]).next("span").text() + "," + "Month=" + applyFiltersValue.substring(pos + 1); 62431 window.filterName = $(".caret.tab.active")?.find('span').attr("data-default"); 62432 } 62433 else{ 62434 window.finalFilter = applyFiltersValue; 62435 window.filterName = $(".caret.tab.active")?.find('span').attr("data-default"); 62436 } 62437 } 62438 } 62439 else{ 62440 var mobileSelectedFilter = $(".filter-level-2.active")?.find('input:checkbox').filter(':checked') 62441 var mobileYearSelectedFilter = $(".filter-level-2.active")?.find("input[name='filter-year-rad']:checked").val(); 62442 if(mobileSelectedFilter){ 62443 var mobileApplyFilterValue = ""; 62444 for (var i=0; i<mobileSelectedFilter.length; i++){ 62445 mobileApplyFilterValue += $(mobileSelectedFilter[i]).next("span").text() + "," 62446 } 62447 if(mobileYearSelectedFilter){ 62448 window.finalFilter = "Year=" + mobileYearSelectedFilter + ", Month=" + mobileApplyFilterValue; 62449 window.filterName = $(".filter-level-2.active")?.prev('a').text(); 62450 } 62451 else{
62452 window.finalFilter = mobileApplyFilterValue; 62453 window.filterName = $(".filter-level-2.active")?.prev('a').text(); 62454 } 62455 } 62456 } 62457 filter.find(".text-default").text(text); 62458 mediaCenterRedesign.renderMCR(this); 62459 document.body.style.overflow = 'auto'; 62460 $(this).closest(".caret").removeClass("active"); 62461 }); 62462 $(".menu.overlap-up .caret .caret-header").click(function (e) { 62463 e.preventDefault(); 62464 if (!$(this).parent().hasClass("active")) { 62465 $(this).parent().siblings(".caret").removeClass("active"); 62466 $(this).parent().addClass("active"); 62467 } else { 62468 $(this).parent().removeClass("active"); 62469 } 62470 }); 62471 62472 mediaCenterRedesign.renderMCR(this); 62473 62474} 62475document.querySelectorAll('.prop-result.caret.tab > a').forEach(link => { 62476 link.addEventListener('click', function (e) { 62477 e.preventDefault(); 62478 e.stopPropagation(); 62479 e.stopImmediatePropagation(); 62480 62481 const parentPropResult = link.closest('.prop-result'); 62482 62483 if (parentPropResult) { 62484 parentPropResult.classList.toggle('active'); 62485 } 62486 62487 return false; 62488 }); 62489}); 62490 62491var slidePosition = 1; 62492// forward/Back controls 62493function plusSlides(n) { 62494 SlideShow(slidePosition += n); 62495} 62496 62497function SlideShow(n) { 62498 var i; 62499 let cardsDiv = document.getElementsByClassName("mobile-Carousel"); 62500 let arrowLeft = document.getElementsByClassName("arrow-left"); 62501 let arrowLeftDisabled = document.getElementsByClassName("arrow-left-disabled"); 62502 let arrowRight = document.getElementsByClassName("arrow-right"); 62503 let arrowRightDisabled = document.getElementsByClassName("arrow-right-disabled"); 62504 for (k = 0; k < arrowRight.length; k++) { 62505 if(n === cardsDiv.length){ 62506 arrowRight[k].classList.add('inactive_btn'); 62507 } else { 62508 arrowRight[k].classList.remove('inactive_btn'); 62509 } 62510 } 62511 for (k = 0; k < arrowRightDisabled.length; k++) { 62512 if(n === cardsDiv.length){ 62513 arrowRightDisabled[k].classList.remove('inactive_btn'); 62514 } else { 62515 arrowRightDisabled[k].classList.add('inactive_btn'); 62516 } 62517 } 62518 for (k = 0; k < arrowLeft.length; k++) { 62519 if(n>1){ 62520 arrowLeft[k].classList.remove('inactive_btn'); 62521 } else { 62522 arrowLeft[k].classList.add('inactive_btn'); 62523 } 62524 } 62525 for (k = 0; k < arrowRightDisabled.length; k++) { 62526 if(n>1){ 62527 arrowLeftDisabled[k].classList.add('inactive_btn'); 62528 } else { 62529 arrowLeftDisabled[k].classList.remove('inactive_btn'); 62530 } 62531 } 62532 for (i = 0; i < cardsDiv.length; i++) { 62533 cardsDiv[i].style.display = "none"; 62534 } 62535 cardsDiv[slidePosition - 1].style.display = "block"; 62536} 62537$(document).ready(function(){ 62538 const firstGridElement = document.querySelector('.grid-view'); 62539 let originalGridStyles = { 62540 borderColor: firstGridElement ? firstGridElement.style.borderColor : '', 62541 backgroundColor: firstGridElement ? firstGridElement.style.backgroundColor : '' 62542 }; 62543 addClassesBasedOnTextGrid(); 62544 addClassesBasedOnTextList(); 62545 62546 $('.search').on('input', function(el) { 62547 applyFilters(this) 62548 }); 62549 62550 document.querySelectorAll('.checkbox-container input[type="checkbox"]').forEach(function(checkbox) { 62551 checkbox.addEventListener("change", function() { 62552 var img = this.nextElementSibling.querySelector("img"); 62553 if (this.checked) { 62554 img.src = "/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/Checkedbox.svg"; 62555 } else { 62556 img.src = "/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/Checkbox.svg"; 62557 } 62558 }); 62559 }); 62560 62561 let filter = document.getElementById('filter-component'); 62562 document.addEventListener('click', function(event) { 62563 var target = event.target; 62564 if(target === filter) { 62565 closeFilter(); 62566 } 62567 }); 62568 updateTagClass(); 62569 const filterSections = document.querySelectorAll('.filter-section'); 62570 filterSections.forEach(section => { 62571 const downArrow = section.querySelector('.downArrow'); 62572 const filterListWrapper = section.querySelector('.filter_list_wrapper'); 62573 filterListWrapper.style.maxHeight = filterListWrapper.scrollHeight + "px"; 62574 62575 downArrow.addEventListener('click', function() { 62576 if (filterListWrapper.classList.contains('collapsed')) { 62577 filterListWrapper.style.maxHeight = filterListWrapper.scrollHeight + "px"; 62578 } else { 62579 filterListWrapper.style.maxHeight = 0; 62580 } 62581 filterListWrapper.classList.toggle('collapsed'); 62582 downArrow.classList.toggle('expanded'); 62583 }); 62584 }); 62585}); 62586 62587const elementWithDynamicClass = document.getElementById('grid-view'); 62588const dynamicClass = elementWithDynamicClass && elementWithDynamicClass.classList ? Array.from(elementWithDynamicClass.classList).find(cls => cls.startsWith('bor--')) : null; 62589 62590 62591 62592 62593const pValues = []; 62594$('.filter-type.filter-by-foodtype p').each(function() { 62595 const $pElement = $(this); 62596 pValues.push({ 62597 text: $pElement.text().trim(), 62598 foodtypetxtcolor: $pElement.data('foodtypetxtcolor'), 62599 foodtypebgcolor: $pElement.data('foodtypebgcolor') 62600 }); 62601}); 62602 62603const textToData = {};
62604pValues.forEach(item => { 62605 textToData[item.text] = { 62606 foodtypetxtcolor: item.foodtypetxtcolor, 62607 foodtypebgcolor: item.foodtypebgcolor 62608 }; 62609}); 62610 62611function updateTagClass() { 62612 const cards = document.querySelectorAll('.show-grid-view'); 62613 62614 cards.forEach(card => { 62615 const items = card.querySelectorAll('.grid-view-bottom .tag'); 62616 const itemsTagWrapper = card.querySelector('.grid-view-bottom .tags'); 62617 62618 if (items.length > 1 && itemsTagWrapper) { 62619 itemsTagWrapper.classList.add('multiple-tag-items'); 62620 } 62621 }); 62622} 62623 62624function addClassesBasedOnTextGrid() { 62625 $('.tag#food-preference').each(function() { 62626 const $tag = $(this); 62627 const $pElement = $tag.find('p'); 62628 const textContent = $pElement.text().trim(); 62629 const data = textToData[textContent]; 62630 62631 if (data) { 62632 // Add new classes 62633 $tag.css("background-color", data.foodtypebgcolor); 62634 $pElement.css("color", data.foodtypetxtcolor); 62635 } 62636 }); 62637} 62638 62639function addClassesBasedOnTextList() { 62640 $('.inner-container-right .tag').each(function() { 62641 const $pElement = $(this); 62642 const textContent = $pElement.text().trim(); 62643 const data = textToData[textContent]; 62644 62645 if (data) { 62646 $pElement.css("color", data.foodtypetxtcolor); 62647 $pElement.css("background-color", data.foodtypebgcolor); 62648 } 62649 }); 62650} 62651 62652// addClassesBasedOnText(); 62653 62654function changeIcon(iconClicked) { 62655 const $icon1 = $('#icon1'); 62656 const $icon2 = $('#icon2'); 62657 62658 if (iconClicked === $icon2[0]) { 62659 $('#icon1 img').attr('src', '/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/gridview_2.svg'); 62660 $('#icon2 img').attr('src', '/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/listview-white.svg'); 62661 $icon1.css('background', 'white'); 62662 $icon2.css('background', '#770E12'); 62663 $('#show-grid').hide(); 62664 $('#show-list').css('display', 'flex'); 62665 } else { 62666 $('#icon1 img').attr('src', '/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/gridview.svg'); 62667 $('#icon2 img').attr('src', '/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/listview.svg'); 62668 $icon1.css('background', '#770E12'); 62669 $icon2.css('background', 'white'); 62670 $('#show-grid').css('display', 'flex'); 62671 $('#show-list').hide(); 62672 } 62673} 62674 62675 62676function openFilter() { 62677 const $filter = $('#filter-component'); 62678 $filter.css({ 62679 width: '100%', 62680 height: '100%' 62681 }); 62682 $('#filter-pannel').css('padding', '40px 30px 0 32px'); 62683 $('body').css('overflow-y', 'hidden'); 62684} 62685 62686function closeFilter() { 62687 const $filter = $('#filter-component'); 62688 $filter.css({ 62689 width: '0px', 62690 height: '0px' 62691 }); 62692 $('#filter-pannel').css('padding', '0'); 62693 $('body').css('overflow-y', 'auto'); 62694} 62695 62696function viewDetail(clickedButton) { 62697 const gridData = $(clickedButton).closest('.grid-view').data(); 62698 const buttonData = $(clickedButton).data(); 62699 const dataIndex = gridData?.index || buttonData?.index; 62700 const dataStoreName = gridData?.storeName || buttonData?.storeName; 62701 const dataUnit = gridData?.unit || buttonData?.unit; 62702 const dataLogoURL = gridData?.logourl || buttonData?.logourl; 62703 const dataDescription = gridData?.description || buttonData?.description; 62704 const isHalal = gridData?.ishalal || buttonData?.ishalal; 62705 const dataContact = gridData?.contact || buttonData?.contact; 62706 const dataOpeningHours = gridData?.openinghours || buttonData?.openinghours; 62707 const cleanDataOpeningHours = $('<textarea/>').html(dataOpeningHours).text(); 62708 const findUs = gridData?.findus || buttonData?.findus; 62709 const dataWebsite = gridData?.website || buttonData?.website; 62710 const dataServices = gridData?.services || buttonData?.services; 62711 const dataCardDetailsColor = gridData?.carddetailscolor || buttonData?.carddetailscolor; 62712 const dataDataPointColor = gridData?.datapointcolor || buttonData?.datapointcolor; 62713 const servicesArray = dataServices?.split(','); 62714 const detailPage = $('#detail-page'); 62715 detailPage.css('display', 'flex')
62716 $('#directory-page').css('display', 'none'); 62717 $('.detail-page-container .detail-page-container-left .logo').attr('src',dataLogoURL); 62718 $('.detail-page-container .detail-page-container-right .inner-container-top .title').text(dataStoreName); 62719 $('.detail-page-container .detail-page-container-right .inner-container-middle .container-details .detail .data-point').text(findUs); 62720 $('.detail-page-container .detail-page-container-right .inner-container-middle .container-details .detail .contact').text(dataContact); 62721 $('.detail-page-container .detail-page-container-right .inner-container-bottom .container-details .detail .open-hours').html(cleanDataOpeningHours); 62722 $('.detail-page-container .detail-page-container-right .inner-container-bottom .container-details .detail .website').text("Link"); 62723 $('.detail-page-container .detail-page-container-right .inner-container-bottom .container-details .detail .website').attr("href", dataWebsite); 62724 $('.detail-page-description .description').html(dataDescription); 62725 62726 const parentElement = $('.detail-page-container .inner-container-top'); 62727 parentElement.find('.text, .ellipse').remove(); 62728 servicesArray?.forEach((item, index) => { 62729 const textSpan = $('<span>').addClass('text').text(item); 62730 parentElement.append(textSpan); 62731 if (index !== servicesArray.length - 1) { 62732 const ellipseSpan = $('<span>').addClass('ellipse'); 62733 parentElement.append(ellipseSpan); 62734 } 62735 }); 62736 $('.detail-page-container-right .text-info').removeClass(function(index, className) { 62737 return (className.match(/(^|\s)txt-clr\S+/g) || []).join(' '); 62738 }); 62739 const colorClass = dataCardDetailsColor ? dataCardDetailsColor : dataDataPointColor; 62740 if (colorClass) { 62741 $('.detail-page-container-right .text-info').css("color", colorClass); 62742 } 62743 window.scrollTo({ top: 0, behavior: 'smooth' }); 62744} 62745 62746function backToList() { 62747 $('#directory-page').css('display', 'block'); 62748 $('#detail-page').css('display', 'none'); 62749 $('.detail-page-container .detail-page-container-left .logo').removeAttr('src'); 62750 $('.detail-page-container .detail-page-container-right .inner-container-top .title').empty(); 62751 $('.detail-page-container .detail-page-container-right .inner-container-middle .container-details .detail .data-unit').empty(); 62752 $('.detail-page-container .detail-page-container-right .inner-container-middle .container-details .detail .contact').empty(); 62753 $('.detail-page-container .detail-page-container-right .inner-container-bottom .container-details .detail .open-hour').empty(); 62754 $('.detail-page-container .detail-page-container-right .inner-container-bottom .container-details .detail .website').empty(); 62755 $('.detail-page-description .description').empty(); 62756 62757 $('.detail-page-container-right .text-info').removeClass(function(index, className) { 62758 return (className.match(/(^|\s)txt-clr\S+/g) || []).join(' '); 62759 }); 62760} 62761 62762const dataElements = document.querySelectorAll('.grid-view'); 62763 const dataArray = []; 62764 let selectedValues = []; 62765 let filteredData = []; 62766 let filteredDataArray = []; 62767 dataElements.forEach(element => { 62768 const index = element.getAttribute('data-index'); 62769 if(index !== null){ 62770 const data = { 62771 index: element.getAttribute('data-index'), 62772 storeName: element.getAttribute('data-store-name'), 62773 unit: element.getAttribute('data-unit'), 62774 logoUrl: element.getAttribute('data-logourl'), 62775 description: element.getAttribute('data-description'), 62776 closingDate: element.getAttribute('data-closingdate'), 62777 openingDate: element.getAttribute('data-openingdate'), 62778 openingHours: element.getAttribute('data-openinghours'), 62779 isHalal: element.getAttribute('data-ishalal'), 62780 findUs: element.getAttribute('data-findus'), 62781 contact: element.getAttribute('data-contact'), 62782 website: element.getAttribute('data-website'), 62783 categories: element.getAttribute('data-categories'), 62784 foodType: element.getAttribute('data-foodtype'), 62785 level: element.getAttribute('data-level'), 62786 services: element.getAttribute('data-services'), 62787 discount: element.getAttribute('data-discount'), 62788 commercialBuilding: element.getAttribute('data-commercialbuilding'), 62789 borderColor: element.style.borderColor, 62790 backgroundColor: element.style.backgroundColor 62791 }; 62792 dataArray.push(data); 62793 } 62794 }); 62795 62796function applyFilters(clickedButton) { 62797 var searchQuery = $('.directory-component-menu .directory-component-menu-right .search-bar .search').val(); 62798 $('.directory-component-menu .directory-component-menu-left .text').empty(); 62799 62800 if ($(clickedButton).prop("tagName").toLowerCase() === "span") { 62801 const value = $(clickedButton).attr('value'); 62802 selectedValues = selectedValues.filter(item => item !== value); 62803 const checkbox = $(`input[type="checkbox"][value="${value}"]`); 62804 if (checkbox.length > 0) { 62805 checkbox.prop('checked', false); 62806 checkbox.siblings('label').find('img').attr('src', '/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/Checkbox.svg'); 62807 } 62808 } else { 62809 let selectedCheckboxes = $('.checkbox-square:checked'); 62810 selectedValues = selectedCheckboxes.map(function() { 62811 return $(this).val(); 62812 }).get(); 62813 closeFilter(); 62814 } 62815 62816 $('#applied-filters').css('display', 'flex'); 62817 displayAppliedFilters(selectedValues); 62818 filteredData = dataArray.filter(function(store) { 62819 return selectedValues.some(function(filter) { 62820 const foodTypeArray = store?.foodType ? store.foodType.split(',').map(type => type.trim()) : []; 62821 return store?.categories === filter || 62822 foodTypeArray.includes(filter.trim()); 62823 }); 62824 }); 62825 62826 if (selectedValues.length === 0) { 62827 filteredData = dataArray; 62828 } 62829 62830 if (searchQuery) { 62831 filteredData = filteredData.filter(function(store) { 62832 let searchQueryLower = searchQuery.toLowerCase(); 62833 let storeNameLower = store.storeName.toLowerCase(); 62834 return storeNameLower.includes(searchQueryLower); 62835 }); 62836 } 62837 62838 renderGrid(filteredData); 62839 renderList(filteredData); 62840 addClassesBasedOnTextGrid();
62841 addClassesBasedOnTextList(); 62842 $('.directory-component-menu .directory-component-menu-left .text').html(`About ${filteredData.length} results`); 62843 let nodata = document.querySelector('.no-data-found'); 62844 (filteredData.length === 0) ? nodata.style.display = 'block' : nodata.style.display = 'none'; 62845 62846 updateTagClass(); 62847} 62848 62849function clearAllFilters() { 62850 filteredDataArray = dataArray; 62851 var searchQuery = $('.directory-component-menu .directory-component-menu-right .search-bar .search').val(); 62852 $('.checkbox-square').prop('checked', false); 62853 document.querySelectorAll('.checkbox-container input[type="checkbox"]').forEach(function(checkbox) { 62854 var img = checkbox.nextElementSibling.querySelector("img"); 62855 img.src = "/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/Checkbox.svg"; 62856 }); 62857 $('#applied-filters .filters').remove(); 62858 $('#applied-filters').css('display', 'none'); 62859 62860 if (searchQuery) { 62861 filteredDataArray = dataArray.filter(function(store) { 62862 let searchQueryLower = searchQuery.toLowerCase(); 62863 let storeNameLower = store.storeName.toLowerCase(); 62864 return storeNameLower.includes(searchQueryLower); 62865 }); 62866 } 62867 renderGrid(filteredDataArray); 62868 renderList(filteredDataArray); 62869 addClassesBasedOnTextGrid(); 62870 addClassesBasedOnTextList(); 62871 $('.directory-component-menu .directory-component-menu-left .text').html(`About ${filteredDataArray.length} results`); 62872 let nodata = document.querySelector('.no-data-found'); 62873 (dataArray.length === 0) ? nodata.style.display = 'block' : nodata.style.display = 'none'; 62874} 62875 62876function clearAllCheckbox() { 62877 $('.checkbox-square').prop('checked', false); 62878 document.querySelectorAll('.checkbox-container input[type="checkbox"]').forEach(function(checkbox) { 62879 var img = checkbox.nextElementSibling.querySelector("img"); 62880 img.src = "/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/Checkbox.svg"; 62881 }); 62882} 62883 62884 62885function displayAppliedFilters(selectedValues) { 62886 const appliedFilters = $('#applied-filters'); 62887 appliedFilters.empty(); 62888 let classes = appliedFilters.attr("class"); 62889 let classList = classes.split(' '); 62890 var borClass = classList.filter(function(className) { 62891 return className.startsWith('bor--'); 62892 }); 62893 62894 if(selectedValues.length){ 62895 selectedValues.forEach(function(value) { 62896 let filterElement = $(`<div class="filters ${borClass}">`); 62897 filterElement.append('<span class="filter-title">' + value + '</span>'); 62898 filterElement.append(`<span class="cross" onclick="applyFilters(this)" value="${value}"><img class="logo" src="/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/icon-close-red.svg"/></span>`) 62899 62900 $('#applied-filters').append(filterElement); 62901 }); 62902 62903 let clearFiltersElement = $('<div class="clear-filter">'); 62904 clearFiltersElement.append('<p class="text" onclick="clearAllFilters(this)">Clear all filters</p>'); 62905 62906 $('#applied-filters').append(clearFiltersElement); 62907 } 62908} 62909 62910 62911function buildLocationHtml(commercialBuilding) { 62912 if (!commercialBuilding) { 62913 return ''; 62914 } 62915 return `<div class="location"> 62916 <img src="/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/location-filled.svg" alt="location" /> 62917 <span>${commercialBuilding}</span> 62918 </div>`; 62919} 62920 62921function buildDateRangeHtml(openingDate, closingDate) { 62922 if (!openingDate && !closingDate) { 62923 return ''; 62924 } 62925 let dateText = ''; 62926 if (openingDate) { 62927 dateText += openingDate; 62928 } 62929 if (openingDate && closingDate) { 62930 dateText += ' - '; 62931 } 62932 if (closingDate) { 62933 dateText += closingDate; 62934 } 62935 return `<div class="date-range"> 62936 <img src="/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/calendar.svg" alt="calendar" /> 62937 <span>${dateText}</span> 62938 </div>`; 62939} 62940 62941function renderGrid(data) { 62942 const showGridContainer = document.getElementById('show-grid'); 62943 showGridContainer.classList.remove(); 62944 showGridContainer.innerHTML = ''; 62945 data.forEach(store => { 62946 const foodTypeString = store?.foodType || ""; 62947 const foodTypes = foodTypeString.split(','); 62948 const showGrid = document.createElement('div'); 62949 showGrid.className = 'show-grid-view'; 62950 showGridContainer.appendChild(showGrid); 62951 const gridElement = document.createElement('div'); 62952 gridElement.setAttribute('data-index', store?.index); 62953 gridElement.setAttribute('data-store-name', store?.storeName); 62954 gridElement.setAttribute('data-unit', store?.unit); 62955 gridElement.setAttribute('data-contact', store?.contact); 62956 gridElement.setAttribute('data-logoURL', store?.logoUrl); 62957 gridElement.setAttribute('data-description', store?.description); 62958 gridElement.setAttribute('data-closingDate', store?.closingDate); 62959 gridElement.setAttribute('data-openingHours', store?.openingHours); 62960 gridElement.setAttribute('data-ishalal', store?.isHalal); 62961 gridElement.setAttribute('data-findUs', store?.findUs); 62962 gridElement.setAttribute('data-website', store?.website); 62963 gridElement.setAttribute('data-services', store?.services); 62964 gridElement.setAttribute('level', store?.level); 62965 gridElement.setAttribute('categories', store?.categories); 62966 gridElement.setAttribute('foodType', store?.foodType); 62967 gridElement.setAttribute('onclick', "viewDetail(this)"); 62968 62969 gridElement.style.borderColor = store.borderColor || ''; 62970 gridElement.style.backgroundColor = store.backgroundColor || ''; 62971 62972 gridElement.classList.add('grid-view'); 62973 gridElement.classList.add(dynamicClass); 62974 let tagsHtml = '';
62975 foodTypes.forEach((type) => { 62976 tagsHtml += `<div class="tag" id="food-preference"> 62977 <p>${type}</p> 62978 </div>`; 62979 }); 62980 gridElement.innerHTML = ` 62981 <div class="grid-view-top"> 62982 <div class="logo" style="background-image: url(${store?.logoUrl})"></div> 62983 ${store?.discount ? `<div class="discount-badge">${store.discount}</div>` : ''} 62984 </div> 62985 <div class="grid-view-bottom"> 62986 <div class="title"> 62987 <p class="text">${store?.storeName}</p> 62988 </div> 62989 ${buildLocationHtml(store?.commercialBuilding)} 62990 ${buildDateRangeHtml(store?.openingDate, store?.closingDate)} 62991 <div class="tags"> 62992 <div class="dietary-tag">${tagsHtml}</div> 62993 </div> 62994 </div> 62995 `; 62996 showGrid.appendChild(gridElement); 62997 }); 62998} 62999 63000function renderList(data) { 63001 const showListContainer = document.getElementById('show-list'); 63002 showListContainer.classList.remove(); 63003 showListContainer.innerHTML = ''; 63004 data.forEach(store => { 63005 const foodTypeString = store?.foodType || ""; 63006 const foodTypes = foodTypeString.split(','); 63007 const listElement = document.createElement('div'); 63008 listElement.setAttribute('data-index', store?.index); 63009 63010 listElement.style.borderColor = store.borderColor || ''; 63011 listElement.style.backgroundColor = store.backgroundColor || ''; 63012 63013 listElement.classList.add('list-view'); 63014 listElement.classList.add(dynamicClass); 63015 let tagsHtml = ''; 63016 foodTypes.forEach((type) => { 63017 tagsHtml += `<p class="tag">${type}</p>`; 63018 }); 63019 listElement.innerHTML = ` 63020 <div class="list-view-left"> 63021 <div class="logo" style="background-image: url(${store?.logoUrl})"></div> 63022 ${store?.discount ? `<div class="discount-badge">${store.discount}</div>` : ''} 63023 </div> 63024 <div class="list-view-rigth"> 63025 <div class="inner-container-left"> 63026 <p class="title">${store?.storeName}</p> 63027 ${buildLocationHtml(store?.commercialBuilding)} 63028 ${buildDateRangeHtml(store?.openingDate, store?.closingDate)} 63029 <div class="description">${store?.description}</div> 63030 <a class="view-details" 63031 data-index="${store?.index}" 63032 data-store-name="${store?.storeName}" 63033 data-unit="${store?.unit}" 63034 data-logourl="${store?.logoUrl}" 63035 data-description="${store?.description}" 63036 data-closingdate="${store?.closingDate}" 63037 data-openinghours="${store?.openingHours}" 63038 data-ishalal="${store?.isHalal}" 63039 data-findUs="${store?.findUs}" 63040 data-website="${store?.website}" 63041 data-categories="${store?.categories}" 63042 data-foodtype="${store?.foodType}" 63043 level="${store?.level}" 63044 data-services="${store?.services}" 63045 onclick="viewDetail(this)" 63046 >View details</a> 63047 </div> 63048 <div class="inner-container-right"> 63049 ${tagsHtml} 63050 </div> 63051 </div> 63052 `; 63053 showListContainer.appendChild(listElement); 63054 }); 63055} 63056 63057document.querySelectorAll(".detail-page-container .icon").forEach(el => { 63058 const color = el.getAttribute("data-icon-color"); 63059 const path = el.querySelector("svg path"); 63060 if (color) { 63061 path.setAttribute("fill", color); 63062 } 63063 }); 63064 63065 var mainLanguage = document.querySelector('.mainmenu .mega-menu .main.language_nav'); 63066 var subNav = mainLanguage && mainLanguage.querySelector('.sub-nav'); 63067 63068 function toggleSubNav() { 63069 subNav && subNav.classList.toggle('active'); 63070 let icon = mainLanguage.querySelector(".icon"); 63071 icon.style.color = "unset" 63072 63073 } 63074 63075 mainLanguage && mainLanguage.addEventListener('click', function(event) { 63076 event.stopPropagation(); 63077 toggleSubNav(); 63078 }); 63079 63080 document.addEventListener('click', function(event) { 63081 var target = event.target; 63082 if (subNav && !subNav.contains(target) && target !== mainLanguage) { 63083 subNav.classList.remove('active'); 63084 } 63085 }); 63086 63087document.addEventListener('DOMContentLoaded', function () { 63088 const videos = document.querySelectorAll('.mastheadvideo .fraservideo__player'); // Select only HTML5 video elements 63089 const playButtons = document.querySelectorAll('.play-button-btn-v2'); 63090 const mastheadtimes = document.querySelectorAll('.masthead__video-v2'); 63091 63092 // Create an array of start and end times from the dataset attributes of each masthead element 63093 const previewTimes = Array.from(mastheadtimes).map(mastheadtime => ({ 63094 previewStartTime: parseFloat(mastheadtime.dataset.previewstarttime), 63095 previewEndTime: parseFloat(mastheadtime.dataset.previewendtime) 63096 })); 63097 63098 let previewTimeouts = []; 63099 63100 videos.forEach((video, index) => { 63101 const playButton = playButtons[index]; 63102 const mastheadtime = mastheadtimes[index]; 63103 let firstPlay = true; // Flag to check if the video is being played for the first time 63104 63105 // Check if the video is a valid HTMLVideoElement 63106 if (video.tagName.toLowerCase() !== 'video') return; 63107 63108 // Extract the preview start and end times for this specific video 63109 const { previewStartTime, previewEndTime } = previewTimes[index]; 63110 63111 // Function to play the video for a specific duration in muted preview mode, then pause and loop 63112 function playPreview() { 63113 video.currentTime = previewStartTime || 0; // Start the video from the preview start time (default to 0) 63114 video.muted = true; // Mute the video in preview mode 63115 video.play(); 63116 63117 const previewDuration = (previewEndTime - previewStartTime) * 1000 || 6000; 63118 previewTimeouts[index] = setTimeout(() => { 63119 video.pause(); // Pause after the preview duration 63120 video.currentTime = previewStartTime || 0; // Start the video from the preview start time (default to 0) 63121 playPreview(); // Recursively loop the preview 63122 }, previewDuration); // Duration based on data or fallback to 6 seconds 63123 } 63124 63125 // Function to play the video (either from the beginning or from the paused position) 63126 function playVideo() { 63127 clearTimeout(previewTimeouts[index]); // Stop the preview loop 63128 videos.forEach((v, i) => { 63129 if (v.tagName.toLowerCase() === 'video' && !v.paused && v !== video) { 63130 v.pause(); 63131 v.muted = true; // Mute all other videos 63132 playButtons[i].style.display = 'flex'; 63133 mastheadtimes[i].classList.remove('video-playing'); // Remove the class when other videos pause 63134 } 63135 }); 63136 63137 if (firstPlay) { 63138 video.currentTime = 0; 63139 firstPlay = false; // After first play, set flag to false 63140 } 63141 63142 video.muted = false; // Unmute the current video when played 63143 video.play(); 63144 playButton.style.display = 'none'; // Hide play button 63145 mastheadtime.classList.add('video-playing'); // Add class to the parent container when video plays 63146 } 63147 63148 // Function to pause the video and show the play button again 63149 function pauseVideo() { 63150 video.pause(); 63151 playButton.style.display = 'flex'; // Show the play button again 63152 mastheadtime.classList.remove('video-playing'); // Remove class from the parent container when video pauses 63153 } 63154 63155 // Event listener for the play button click 63156 playButton.addEventListener('click', function () { 63157 playVideo(); 63158 }); 63159 63160 // Event listener for clicking the video to toggle play/pause 63161 video.addEventListener('click', function () { 63162 if (video.paused) { 63163 playVideo(); // Play the video 63164 } else { 63165 pauseVideo(); // Pause the video 63166 } 63167 }); 63168 63169 // Automatically start the preview loop if the play button has the autoplay class 63170 if (playButton.classList.contains('play-btn-autoplay')) { 63171 playPreview(); 63172 } 63173 }); 63174}); 63175 63176// Select all heading and list links 63177const links = document.querySelectorAll('.fraserfooternew__headinglink__new, .fraserfooternew__listlink__new'); 63178links.forEach(link => { 63179 // Add hover event listener to each link 63180 link.addEventListener('mouseenter', () => { 63181 // On hover, dim all links 63182 links.forEach(l => l.classList.add('dimmed')); 63183 // Remove dimmed class from the hovered link 63184 link.classList.add('active'); 63185 link.classList.remove('dimmed'); 63186 }); 63187 63188 // Remove dimmed effect when the mouse leaves the link 63189 link.addEventListener('mouseleave', () => { 63190 // Remove all dimmed and active classes 63191 links.forEach(l => l.classList.remove('dimmed', 'active')); 63192 }); 63193}); 63194$(document).ready(function() { 63195 var linkCount = $('.mainmenuV2 .list-padding').length; 63196 const links = document.querySelectorAll('.sub-nav-wrapper .effectonhover'); 63197 if (linkCount <= 5) { 63198 $('.mainmenuV2 .list-padding').addClass('less-links'); 63199 } 63200 63201 links.forEach(link => { 63202 link.addEventListener('mouseenter', () => { 63203 links.forEach(l => l.classList.add('dimmed')); 63204 link.classList.add('active'); 63205 link.classList.remove('dimmed'); 63206 }); 63207 link.addEventListener('mouseleave', () => { 63208 links.forEach(l => l.classList.remove('dimmed', 'active')); 63209 }); 63210}); 63211 63212 $('.mainmenuV2 .search').on('click', function(event) { 63213 event.preventDefault(); 63214 $('.mainmenuV2 #logo-menu').hide(); 63215}); 63216 63217if ($('.mainmenu').find('.mainmenuV2').length) { 63218 $('.mainmenu .icon-close').on('click', function(event) { 63219 event.preventDefault(); 63220 $('.mainmenu #logo-menu').show(); 63221 }); 63222} 63223}); 63224$(document).ready(function () { 63225 if ($(".mainmenuV2").length > 0) { 63226 $(".menu.overlap-up").addClass("mainmenu-sticky"); 63227 } 63228}); 63229 63230 63231 63232document.addEventListener('DOMContentLoaded', function () { 63233 const videoWrappers = document.querySelectorAll('.homebannervideo .fraservideo--newplayer');
63234 let currentPlayingVideo = null; 63235 63236 videoWrappers.forEach((wrapper, index) => { 63237 const video = wrapper.querySelector('.fraservideo__player'); 63238 const playButton = wrapper.querySelector('.fraservideo__newplayicon-v2'); 63239 const videoOverlay = wrapper.querySelector('.video-v2-overlay'); 63240 63241 // Validate the video element 63242 if (!video || !(video instanceof HTMLVideoElement)) { 63243 return; 63244 } 63245 63246 // Autoplay logic for videos without a poster 63247 const hasPoster = video.hasAttribute('poster'); 63248 if (!hasPoster) { 63249 video.muted = true; 63250 video.play() 63251 .then(() => { 63252 setTimeout(() => { 63253 video.pause(); 63254 showControls(playButton, videoOverlay); 63255 }, 3000); 63256 }) 63257 .catch(error => { 63258 showControls(playButton, videoOverlay); 63259 }); 63260 } else { 63261 showControls(playButton, videoOverlay); 63262 } 63263 63264 // Function to play the video 63265 function playVideo() { 63266 if (currentPlayingVideo && currentPlayingVideo !== video) { 63267 pauseVideo(currentPlayingVideo); 63268 } 63269 video.controls = true; 63270 video.play() 63271 .then(() => { 63272 hideControls(playButton, videoOverlay); 63273 currentPlayingVideo = video; 63274 }) 63275 } 63276 // Function to pause the video 63277 function pauseVideo(targetVideo) { 63278 targetVideo.pause(); 63279 targetVideo.controls = false; 63280 const parentWrapper = targetVideo.closest('.fraservideo--newplayer'); 63281 const button = parentWrapper.querySelector('.fraservideo__newplayicon-v2'); 63282 const overlay = parentWrapper.querySelector('.video-v2-overlay'); 63283 63284 showControls(button, overlay); 63285 63286 if (targetVideo === currentPlayingVideo) { 63287 currentPlayingVideo = null; 63288 } 63289 } 63290 63291 // Helper functions to toggle controls 63292 function showControls(button, overlay) { 63293 if (button) button.style.display = 'flex'; 63294 if (overlay) overlay.style.display = 'flex'; 63295 } 63296 63297 function hideControls(button, overlay) { 63298 if (button) button.style.display = 'none'; 63299 if (overlay) overlay.style.display = 'none'; 63300 } 63301 63302 // Event listeners for play and pause 63303 video.addEventListener('play', () => { 63304 hideControls(playButton, videoOverlay); 63305 video.controls = true; 63306 }); 63307 63308 video.addEventListener('pause', () => { 63309 showControls(playButton, videoOverlay); 63310 video.controls = true; 63311 }); 63312 63313 // Play button click handler 63314 if (playButton) { 63315 playButton.addEventListener('click', playVideo); 63316 } 63317 63318 // Video click handler for toggling play/pause 63319 wrapper.addEventListener('click', (e) => { 63320 if (!playButton.contains(e.target) && !video.controls) { 63321 if (video.paused) { 63322 playVideo(); 63323 } else { 63324 pauseVideo(video); 63325 } 63326 } 63327 }); 63328 }); 63329}); 63330document.addEventListener('DOMContentLoaded', function () { 63331 // Check if the user is on an iPhone 63332 const isiPhone = /iPhone/i.test(navigator.userAgent); 63333 63334 if (!isiPhone) { 63335 return; 63336 } 63337 63338 const videoWrappers = document.querySelectorAll('.fraservideo.masthead__video__container'); 63339 63340 videoWrappers.forEach((wrapper) => { 63341 const video = wrapper.querySelector('.fraservideo__player'); 63342 const playButton = wrapper.querySelector('.fraservideo__newplayicon'); 63343 63344 // Check if the red or grey supergraphics exist in the DOM 63345 const redSupergraphics = document.querySelector('.redg-homepage-red-supergraphics'); 63346 const greySupergraphics = document.querySelector('.redg-homepage-grey-supergraphics-v2'); 63347 63348 63349 const supergraphics = redSupergraphics || greySupergraphics; 63350 63351 if (!video || !(video instanceof HTMLVideoElement) || !supergraphics) { 63352 return; 63353 } 63354 63355 // Disable autoplay and ensure preload is minimal 63356 video.autoplay = false;
63357 video.preload = "metadata"; 63358 63359 // Function to show the play button and supergraphics 63360 function showPlayButtonAndSupergraphics() { 63361 if (playButton) playButton.style.display = 'flex'; 63362 supergraphics.style.display = 'block'; 63363 } 63364 63365 // Function to hide the play button and supergraphics 63366 function hidePlayButtonAndSupergraphics() { 63367 if (playButton) playButton.style.display = 'none'; 63368 supergraphics.style.display = 'none'; 63369 } 63370 63371 // Function to play the video 63372 function playVideo() { 63373 video.play() 63374 .then(() => { 63375 hidePlayButtonAndSupergraphics(); 63376 }) 63377 .catch((err) => { 63378 console.error('Error playing video:', err); 63379 }); 63380 } 63381 63382 // Function to pause the video 63383 function pauseVideo() { 63384 video.pause(); 63385 showPlayButtonAndSupergraphics(); 63386 } 63387 63388 // Ensure video is paused and reset on page load 63389 function resetVideo() { 63390 video.pause(); 63391 video.currentTime = 0; 63392 showPlayButtonAndSupergraphics(); 63393 } 63394 63395 // Event listener for the play button click 63396 if (playButton) { 63397 playButton.addEventListener('click', (event) => { 63398 event.stopPropagation(); 63399 playVideo(); 63400 }); 63401 } 63402 resetVideo(); 63403 video.addEventListener('loadeddata', () => { 63404 resetVideo(); 63405 }); 63406 63407 // Prevent accidental autoplay 63408 video.addEventListener('play', () => { 63409 if (document.readyState !== 'complete') { 63410 video.pause(); 63411 } 63412 }); 63413 63414 // Reload the page when exiting iPhone's native full-screen video player 63415 video.addEventListener('webkitendfullscreen', () => { 63416 if (supergraphics) { 63417 showPlayButtonAndSupergraphics(); 63418 } 63419 setTimeout(() => { 63420 window.location.reload(); 63421 }, 100); 63422 }); 63423 63424 // Toggle play/pause on wrapper click 63425 wrapper.addEventListener('click', (event) => { 63426 if (playButton.contains(event.target)) return; 63427 63428 if (video.paused) { 63429 playVideo(); 63430 } else { 63431 pauseVideo(); 63432 } 63433 }); 63434 63435 // Ensure supergraphics are shown when video ends 63436 video.addEventListener('ended', () => { 63437 if (supergraphics) { 63438 showPlayButtonAndSupergraphics(); 63439 } 63440 }); 63441 }); 63442}); 63443document.addEventListener("DOMContentLoaded", function () { 63444 const videos = document.querySelectorAll('video.fraservideo__player'); 63445 63446 videos.forEach(video => { 63447 const playIcon = video.nextElementSibling; 63448 63449 if (playIcon && playIcon.classList.contains('fraservideo__newplayicon-v2')) { 63450 function updatePlayIcon() { 63451 63452 if (video.hasAttribute('poster') && video.paused) { 63453 playIcon.classList.add('show-video-v2'); 63454 } else { 63455 playIcon.classList.remove('show-video-v2'); 63456 } 63457 } 63458 updatePlayIcon(); 63459 video.addEventListener('play', updatePlayIcon); 63460 video.addEventListener('pause', updatePlayIcon); 63461 video.addEventListener('loadeddata', updatePlayIcon); 63462 } 63463 }); 63464}); 63465 63466(function () { 63467 'use strict'; 63468 function initYoutubeConsentPlaceholders() { 63469 document.querySelectorAll('.youtube-video-wrapper').forEach(function (wrapper) { 63470 var iframe = wrapper.querySelector('.youtube-video-track'); 63471 var placeholder = wrapper.querySelector('.youtube-consent-placeholder'); 63472 if (!iframe || !placeholder) return; 63473 63474 var bgImage = placeholder.dataset.consentBgImage; 63475 if (bgImage) { 63476 placeholder.style.backgroundImage = `url('${bgImage}')`; 63477 placeholder.style.backgroundSize = 'cover'; 63478 placeholder.style.backgroundPosition = 'center'; 63479 } 63480 63481 function isBlocked() { 63482 return iframe.hasAttribute('data-cookieblock-src') && !iframe.getAttribute('src'); 63483 } 63484 63485 function reinitPlayer() { 63486 if (iframe.dataset.consentPlayerInited) return; 63487 if (!iframe.getAttribute('src')) return; 63488 if (!window.YT || typeof window.YT.Player !== 'function') return; 63489 if (typeof window.onVideoStateChange !== 'function') return; 63490 63491 iframe.dataset.consentPlayerInited = 'true'; 63492 var playerId = iframe.getAttribute('id'); 63493 if (!playerId) return; 63494 63495 var newPlayer = new YT.Player(playerId, { 63496 events: { 63497 onStateChange: window.onVideoStateChange 63498 } 63499 }); 63500 63501 if (Array.isArray(window.playersArr)) {
63502 window.playersArr.push(newPlayer); 63503 } 63504 } 63505 63506 function refreshState() { 63507 if (isBlocked()) { 63508 placeholder.classList.add('is-visible'); 63509 } else { 63510 placeholder.classList.remove('is-visible'); 63511 reinitPlayer(); 63512 } 63513 } 63514 63515 // Initial check on page load 63516 refreshState(); 63517 63518 // Button: opens the Cookiebot consent banner so the user can accept 63519 // marketing cookies. Placeholder hides once CookiebotOnAccept fires. 63520 var btn = placeholder.querySelector('.youtube-consent-placeholder__btn'); 63521 if (btn) { 63522 btn.addEventListener('click', function () { 63523 if (window.Cookiebot && typeof Cookiebot.renew === 'function') { 63524 Cookiebot.renew(); 63525 } 63526 }); 63527 } 63528 63529 window.addEventListener('CookiebotOnAccept', refreshState); 63530 window.addEventListener('CookiebotOnConsentReady', refreshState); 63531 63532 // Safety net: react the instant Cookiebot swaps the attributes back, 63533 // regardless of which event triggered the consent. 63534 var observer = new MutationObserver(refreshState); 63535 observer.observe(iframe, { 63536 attributes: true, 63537 attributeFilter: ['src', 'data-cookieblock-src'] 63538 }); 63539 }); 63540 } 63541 63542 if (document.readyState === 'loading') { 63543 document.addEventListener('DOMContentLoaded', initYoutubeConsentPlaceholders); 63544 } else { 63545 initYoutubeConsentPlaceholders(); 63546 } 63547 63548}()); 63549 63550$(document).ready(function() { 63551 var $fadeInElements = $('.fade-in'); 63552 var $fadeInElementsCta = $('.fade-in-introtext'); 63553 var $fadeInBannerportfolio = $('.fade-in-bottom-up'); 63554 var $fadeInTiles = $('.fade-in-tiles'); 63555 63556 function fadeInSectionCta() { 63557 $fadeInElementsCta.each(function() { 63558 var $element = $(this); 63559 if (isScrolledIntoView($element) && !$element.hasClass('fade-in-introtext-active')) { 63560 if ($element.hasClass('content-left')) { 63561 $element.addClass('fade-in-introtext-active'); 63562 setTimeout(function() { 63563 $('.content-right').addClass('fade-in-introtext-active'); 63564 }, 600); 63565 } 63566 } 63567 }); 63568 } 63569 63570 function fadeInSection() { 63571 $fadeInElements.each(function() { 63572 var $element = $(this); 63573 if (isScrolledIntoView($element) && !$element.hasClass('active')) { 63574 $element.addClass('active'); 63575 } 63576 }); 63577 } 63578 63579 function isScrolledIntoView($element) { 63580 var rect = $element[0].getBoundingClientRect(); 63581 var elemTop = rect.top; 63582 var elemBottom = rect.bottom; 63583 var isVisible = elemTop < $(window).height() && elemBottom >= 0; 63584 return isVisible; 63585 } 63586 63587 function bannerStockportfolio() { 63588 $fadeInBannerportfolio.each(function() { 63589 var $element = $(this); 63590 if (isScrolledIntoView($element) && !$element.hasClass('active')) { 63591 $element.addClass('active'); 63592 } 63593 }); 63594 } 63595 63596 function fadeInTiles() { 63597 var delay = 0; 63598 $fadeInTiles.each(function(index) { 63599 var $element = $(this); 63600 if (isScrolledIntoView($element) && !$element.hasClass('fade-in-tiles-active')) { 63601 setTimeout(function() { 63602 $element.addClass('fade-in-tiles-active'); 63603 }, delay); 63604 delay += 1000; 63605 } 63606 }); 63607 } 63608 63609 fadeInSection(); 63610 var debounceTimer; 63611 $(window).on('scroll', function() { 63612 clearTimeout(debounceTimer); 63613 debounceTimer = setTimeout(function() { 63614 fadeInSection(); 63615 fadeInSectionCta(); 63616 bannerStockportfolio(); 63617 fadeInTiles(); 63618 }, 100); 63619 }); 63620}); 63621 63622$(document).ready(function () { 63623 function isScrolledIntoView($element) { 63624 var rect = $element[0].getBoundingClientRect(); 63625 var elemTop = rect.top; 63626 var elemBottom = rect.bottom; 63627 var isVisible = elemTop < $(window).height() && elemBottom >= 0; 63628 return isVisible; 63629 } 63630 function fadeInSection() { 63631 $('.frasertxtnimg_bg_left, .frasertxtnimg_bg_right').each(function () { 63632 var $container = $(this);
63633 if (isScrolledIntoView($container)) { 63634 var $leftContent = $container.find('.content-left'); 63635 var $rightContent = $container.find('.content-right'); 63636 63637 if (!$leftContent.hasClass('fade-in-textplusimage-active')) { 63638 $leftContent.addClass('fade-in-textplusimage-active'); 63639 } 63640 63641 if (!$rightContent.hasClass('fade-in-textplusimage-active')) { 63642 setTimeout(function () { 63643 $rightContent.addClass('fade-in-textplusimage-active'); 63644 }, 600); 63645 } 63646 } 63647 }); 63648 } 63649 63650 function fadeInSectionAccordion(){ 63651 $('.textimageaccordion .frasertxtnimg_bg_left, .textimageaccordion .frasertxtnimg_bg_right').each(function() { 63652 if ($(this).hasClass('frasertxtnimg_bg_left')) { 63653 $(this).find('.frasernewimgtxt__inner').addClass('content-right'); 63654 $(this).find('.frasernewimgtxt__imgcont').addClass('content-left'); 63655 } else if ($(this).hasClass('frasertxtnimg_bg_right')) { 63656 $(this).find('.frasernewimgtxt__inner').addClass('content-left'); 63657 $(this).find('.frasernewimgtxt__imgcont').addClass('content-right'); 63658 } 63659 63660 var $container = $(this); 63661 if (isScrolledIntoView($container)) { 63662 var $leftContent = $container.find('.content-left'); 63663 var $rightContent = $container.find('.content-right'); 63664 63665 if (!$leftContent.hasClass('fade-in-textplusimage-active')) { 63666 $leftContent.addClass('fade-in-textplusimage-active'); 63667 } 63668 63669 if (!$rightContent.hasClass('fade-in-textplusimage-active')) { 63670 setTimeout(function () { 63671 $rightContent.addClass('fade-in-textplusimage-active'); 63672 },600); 63673 } 63674 } 63675 }); 63676 } 63677 fadeInSection(); 63678 $(window).on('scroll', function () { 63679 fadeInSection(); 63680 fadeInSectionAccordion() 63681 }); 63682}); 63683 63684$(document).ready(function () { 63685 const slideshows = document.querySelectorAll('.slideshow-shocase-v2'); // Select all slideshow elements by class 63686 if ($('.showcase').length > 0 && slideshows.length > 0) { 63687 63688 slideshows.forEach((slideshow, idx) => { // Loop through each slideshow instance 63689 let slideIndex = -1; 63690 const imageNames = slideshow.closest('.showcase').querySelectorAll('.image-name-v2'); 63691 let slideInterval; 63692 let isHovered = false; 63693 63694 function showSlide(index) { 63695 const imageUrl = imageNames[index]?.getAttribute('data-image'); 63696 slideshow.style.backgroundImage = imageUrl; 63697 // Trigger fade-in effect 63698 slideshow.classList.remove('show'); 63699 void slideshow.offsetWidth; // Trigger reflow 63700 slideshow.classList.add('show'); 63701 63702 imageNames.forEach(name => { 63703 if (parseInt(name.dataset.index) === index) { 63704 name.classList.add('active-name'); 63705 } else { 63706 name.classList.remove('active-name'); 63707 } 63708 }); 63709 } 63710 63711 function nextSlide() { 63712 if (!isHovered) { 63713 slideIndex = (slideIndex + 1) % imageNames.length; 63714 showSlide(slideIndex); 63715 } 63716 } 63717 63718 function startSlideInterval() { 63719 slideInterval = setInterval(nextSlide, 4000); 63720 } 63721 63722 function stopSlideInterval() { 63723 clearInterval(slideInterval); 63724 } 63725 63726 nextSlide(); 63727 startSlideInterval(); 63728 63729 // Handle hover on the slideshow container 63730 slideshow.addEventListener('mouseover', () => { 63731 isHovered = true; 63732 stopSlideInterval(); 63733 }); 63734 63735 slideshow.addEventListener('mouseleave', () => { 63736 isHovered = false;
63737 startSlideInterval(); 63738 }); 63739 63740 // Handle hover on image names 63741 imageNames.forEach(name => { 63742 name.addEventListener('mouseover', () => { 63743 const index = parseInt(name.dataset.index); 63744 showSlide(index); 63745 isHovered = true; 63746 stopSlideInterval(); 63747 }); 63748 63749 name.addEventListener('mouseleave', () => { 63750 isHovered = false; 63751 startSlideInterval(); 63752 }); 63753 }); 63754 63755 function setOverlayOpacity(opacity) { 63756 let showcaseOverlays = slideshow.closest('.showcase').querySelectorAll(".showcase-overlay-v2"); 63757 if (showcaseOverlays.length > 0) { // Check if elements are found 63758 showcaseOverlays.forEach(function (overlay) { 63759 overlay.style.opacity = opacity; // Apply opacity to each overlay 63760 }); 63761 } 63762 } 63763 63764 // Example usage: Change the opacity to 0.5 after DOM is ready 63765 setOverlayOpacity(parseFloat($(slideshow).data('opacity'))); 63766 }); 63767 } 63768}); 63769$(document).ready(function() { 63770 const tiles = $('.tiles'); 63771 const $threeTilesContainer = $('.tiles-image-content.col-var-3 .tiles-container'); 63772 const $fourTilesContainer = $('.tiles-image-content.col-var-4 .tiles-container'); 63773 const thereTilesCount = $threeTilesContainer.find('.tiles').length; 63774 const fourTilesCount = $fourTilesContainer.find('.tiles').length; 63775 63776 if (thereTilesCount > 3) { 63777 $threeTilesContainer.addClass('owl-carousel'); 63778 $threeTilesContainer.owlCarousel({ 63779 items: 3, 63780 loop: false, 63781 margin: 24, 63782 nav: true, 63783 dots: false, 63784 navText: [ 63785 '<span class="owl-nav-prev">â¹</span>', 63786 '<span class="owl-nav-next">âº</span>' 63787 ], 63788 responsive: { 63789 0: { 63790 items: 1, 63791 stagePadding: 60 63792 }, 63793 1191: { 63794 items: 3 63795 } 63796 } 63797 }); 63798 } 63799 63800 if (fourTilesCount > 4) { 63801 $fourTilesContainer.addClass('owl-carousel'); 63802 $fourTilesContainer.owlCarousel({ 63803 items: 3, 63804 loop: false, 63805 margin: 24, 63806 nav: true, 63807 dots: false, 63808 navText: [ 63809 '<span class="owl-nav-prev">â¹</span>', 63810 '<span class="owl-nav-next">âº</span>' 63811 ], 63812 responsive: { 63813 0: { 63814 items: 1, 63815 stagePadding: 60 63816 }, 63817 1191: { 63818 items: 4 63819 } 63820 } 63821 }); 63822 } 63823 63824 if ($('.col-var-3 .tiles-container').length && !$('.col-var-3 .tiles-container').hasClass('owl-carousel')) { 63825 $('.tiles').css('width', 'calc((100% - (3 * 24px)) / 3)'); 63826 } else if ($('.col-var-4 .tiles-container').length && !$('.col-var-4 .tiles-container').hasClass('owl-carousel')) { 63827 $('.tiles').css('width', 'calc((100% - (4 * 24px)) / 4)'); 63828 } 63829 if ($('.textandimagefeatured').length > 0) { 63830 if ($(window).width() >= 834) { // Minimum width check (e.g., 768px) 63831 var testPosition = $(".fraserproperty__txt div").position(); 63832 const textHeigt = $('.fraserproperty__txt div').height(); 63833 const owlPosition = testPosition.top + textHeigt + 20; 63834 $('.fraserproperty__listcont .owl-dots').css({ 'top': owlPosition + 'px' }); 63835 } 63836 } 63837 63838 $(".textandimagefeatured .fraserproperty__imgcont").each(function () { 63839 const $cont = $(this); 63840 const imgSrc = $cont.find("img.potrait-img").attr("src"); 63841 63842 if (imgSrc) { 63843 $cont.css("--bg-img", `url('${imgSrc}')`); 63844 } 63845 }); 63846}); 63847$(document).ready(function() { 63848 function applyJSBasedOnWidth($carouselElement) { 63849 const carouselTileCount = $carouselElement.find('.owl-item').length; 63850 if (window.innerWidth > 1191) { 63851 modifyCarousel($carouselElement); 63852 } 63853 } 63854 63855 function modifyCarousel($carouselElement) { 63856 setTimeout(() => { 63857 $carouselElement.find('.owl-item').css('width', 'calc((100% - (3 * 24px)) / 3)'); 63858 $carouselElement.find('.frasernews__cardhead').addClass('less-than-four'); 63859 }, 0); 63860 } 63861 63862 $('.carouselnewsevents .carousel-tiles-container,.gridnewsevents .carousel-tiles-container').each(function() { 63863 const $carouselTiles = $(this); 63864 const carouselTileCount = $carouselTiles.find('.frasernews__cardlist').length; 63865 const hasMoreThanThreeCards = carouselTileCount > 3; 63866 63867 if (carouselTileCount > 1) { 63868 $carouselTiles.addClass('owl-carousel'); 63869 $carouselTiles.owlCarousel({ 63870 loop: false, 63871 margin: 24, 63872 nav: true, 63873 dots: false, 63874 navText: [ 63875 '<span class="owl-nav-prev">â¹</span>', 63876 '<span class="owl-nav-next">âº</span>' 63877 ], 63878 responsive: { 63879 0: { 63880 items: 1, 63881 stagePadding: 20, 63882 slideBy: 1, 63883 }, 63884 600: { 63885 items: 2, 63886 stagePadding: 20, 63887 slideBy: 1, 63888 }, 63889 1191: { 63890 items: 3, 63891 stagePadding: hasMoreThanThreeCards ? 60 : 0, 63892 slideBy: 2, 63893 onInitialized: debounce(() => adjustOwlItemsPadding($carouselTiles), 100), 63894 onTranslate: debounce(() => adjustOwlItemsPadding($carouselTiles), 100), 63895 onTranslated: debounce(() => adjustOwlItemsPadding($carouselTiles), 100) 63896 } 63897 } 63898 }); 63899 applyJSBasedOnWidth($carouselTiles); 63900 $(window).on('resize', debounce(() =>
63900 applyJSBasedOnWidth($carouselTiles), 100)); 63901 } 63902 }); 63903 63904 $('.article-carousel-card-container').each(function() { 63905 const $carouselTiles = $(this); 63906 const carouselTileCount = $carouselTiles.find('.frasernews__cardlist').length; 63907 63908 if (carouselTileCount > 1) { 63909 $carouselTiles.addClass('owl-carousel'); 63910 $carouselTiles.owlCarousel({ 63911 loop: false, 63912 margin: 24, 63913 nav: true, 63914 dots: false, 63915 navText: [ 63916 '<span class="owl-nav-prev">â¹</span>', 63917 '<span class="owl-nav-next">âº</span>' 63918 ], 63919 responsive: { 63920 0: { 63921 items: 1, 63922 stagePadding: 20, 63923 slideBy: 1, 63924 margin: 24, 63925 }, 63926 600: { 63927 items: 2, 63928 stagePadding: 20, 63929 slideBy: 1, 63930 }, 63931 1191: { 63932 items: 3, 63933 slideBy: 1, 63934 onInitialized: debounce(() => adjustOwlItemsPadding($carouselTiles), 100), 63935 onTranslate: debounce(() => adjustOwlItemsPadding($carouselTiles), 100), 63936 onTranslated: debounce(() => adjustOwlItemsPadding($carouselTiles), 100) 63937 } 63938 } 63939 }); 63940 applyJSBasedOnWidth($carouselTiles); 63941 } 63942 }); 63943 63944 function debounce(func, wait) { 63945 let timeout; 63946 return function (...args) { 63947 clearTimeout(timeout); 63948 timeout = setTimeout(() => func.apply(this, args), wait); 63949 }; 63950 } 63951 63952 function adjustOwlItemsPadding($carouselElement) { 63953 const $owlStage = $carouselElement.find('.owl-stage'); 63954 const $owlItems = $carouselElement.find('.owl-item'); 63955 const $owlItemsActive = $carouselElement.find('.owl-item.active'); 63956 63957 if ($owlItems.length <= 3) { 63958 $owlStage.css({ 63959 'padding-left': '0px', 63960 'padding-right': '0px' 63961 }); 63962 return; 63963 } 63964 if ($owlItemsActive.first().index() === 0) { 63965 $owlStage.css({ 63966 'padding-left': '0px', 63967 'padding-right': '105px' 63968 }); 63969 } else { 63970 $owlStage.css({ 63971 'padding-left': '105px', 63972 'padding-right': '0px' 63973 }); 63974 } 63975 } 63976}); 63977$(document).ready(function () { 63978 const galleries = document.querySelectorAll('.gallery-main-v2'); 63979 const body = document.body; 63980 63981 const leftArrow = document.querySelector('.carousel-arrow-left'); 63982 const rightArrow = document.querySelector('.carousel-arrow-right'); 63983 const images = document.querySelectorAll('.gallery-mage-v-2'); 63984 const closeButtons = document.querySelectorAll('.popup-close-btn'); 63985 const allGalleryItems = Array.from(document.querySelectorAll('[data-popup^="popup-"]')); 63986 63987 let isMouseDown = false; 63988 let startX, scrollLeft; 63989 63990 if (galleries) { 63991 // Mouse drag functionality 63992 galleries.forEach(gallery => { 63993 const track = gallery.querySelector('.carousel-track-v2'); 63994 63995 gallery.addEventListener('mousedown', (e) => { 63996 isMouseDown = true; 63997 startX = e.pageX - gallery.offsetLeft; 63998 scrollLeft = gallery.scrollLeft; 63999 gallery.style.cursor = 'grabbing'; 64000 }); 64001 64002 // Stop sliding when mouse is released, regardless of where the mouse is 64003 window.addEventListener('mouseup', () => { 64004 if (isMouseDown) { 64005 isMouseDown = false; 64006 gallery.style.cursor = 'grab'; 64007 } 64008 }); 64009 64010 // Stop sliding when mouse leaves the gallery 64011 gallery.addEventListener('mouseleave', () => { 64012 if (isMouseDown) { 64013 isMouseDown = false; 64014 gallery.style.cursor = 'grab'; 64015 } 64016 }); 64017 64018 // Handle sliding while the mouse is moving 64019 gallery.addEventListener('mousemove', (e) => { 64020 if (!isMouseDown) return; 64021 e.preventDefault(); 64022 const x = e.pageX - gallery.offsetLeft; 64023 const walk = (x - startX) * 2; // Adjust scroll speed 64024 gallery.scrollLeft = scrollLeft - walk; 64025 }); 64026 64027 // Arrow navigation functionality 64028 leftArrow.addEventListener('click', () => { 64029 const scrollAmount = gallery.clientWidth; 64030 gallery.scrollBy({ 64031 left: -scrollAmount, 64032 behavior: 'smooth' 64033 }); 64034 updateArrowColorsAndDisable(); 64035 }); 64036 64037 rightArrow.addEventListener('click', () => { 64038 const scrollAmount = gallery.clientWidth; 64039 gallery.scrollBy({ 64040 left: scrollAmount, 64041 behavior: 'smooth' 64042 }); 64043 updateArrowColorsAndDisable(); 64044 }); 64045 64046 // Touch functionality for mobile and tablet 64047 let startTouchX = 0; 64048 let endTouchX = 0; 64049 64050 gallery.addEventListener('touchstart', (e) => { 64051 startTouchX = e.touches[0].pageX; 64052 gallery.style.cursor = 'grabbing'; 64053 }); 64054 64055 gallery.addEventListener('touchend', (e) => { 64056 endTouchX = e.changedTouches[0].pageX; 64057 gallery.style.cursor = 'grab'; 64058 const swipeDistance = endTouchX - startTouchX; 64059 64060 if (Math.abs(swipeDistance) > 50) { 64061 if (swipeDistance > 0) { 64062 // Swipe right-left arrow click 64063 leftArrow.click(); 64064 } else { 64065 // Swipe left- arrow click 64066 rightArrow.click(); 64067 } 64068 } 64069 }); 64070 64071 // Update arrow states dynamically 64072 gallery.addEventListener('scroll', updateArrowColorsAndDisable); 64073 64074 function updateArrowColorsAndDisable() { 64075 const scrollAmount = gallery.scrollLeft; 64076 const maxScrollLeft = gallery.scrollWidth - gallery.clientWidth; 64077 64078 if (scrollAmount === 0) { 64079 leftArrow.querySelector('path').setAttribute('fill', '#817979'); 64080 rightArrow.querySelector('path').setAttribute('fill', '#ED1C24'); 64081 leftArrow.classList.add('disabled'); 64082 rightArrow.classList.remove('disabled'); 64083 } else if (scrollAmount >= maxScrollLeft) { 64084 rightArrow.querySelector('path').setAttribute('fill', '#817979'); 64085 leftArrow.querySelector('path').setAttribute('fill', '#ED1C24'); 64086 rightArrow.classList.add('disabled'); 64087 leftArrow.classList.remove('disabled'); 64088 } else { 64089 leftArrow.querySelector('path').setAttribute('fill', '#ED1C24'); 64090 rightArrow.querySelector('path').setAttribute('fill', '#ED1C24'); 64091 leftArrow.classList.remove('disabled'); 64092 rightArrow.classList.remove('disabled'); 64093 } 64094 } 64095 64096 // Initial state of arrows on page load 64097 updateArrowColorsAndDisable(); 64098 }); 64099 } 64100 64101 // Open the respective popup when an image is clicked
64102 images.forEach(image => { 64103 image.addEventListener('click', () => { 64104 const popupId = image.getAttribute('data-popup'); 64105 const popup = document.getElementById(popupId); 64106 popup.style.display = 'flex'; 64107 popup.dataset.currentIndex = allGalleryItems.indexOf(image); 64108 body.style.overflow = 'hidden'; 64109 }); 64110 }); 64111 64112 // Close the popup when the close button is clicked 64113 closeButtons.forEach(button => { 64114 button.addEventListener('click', (e) => { 64115 const popup = e.target.closest('.popup-container-v2'); 64116 popup.style.display = 'none'; 64117 popup.classList.remove("show--popup"); 64118 body.style.overflow = ''; 64119 }); 64120 }); 64121 64122 // Optional: Close the popup when clicking outside the popup content 64123 window.addEventListener('click', (e) => { 64124 if (e.target.classList.contains('popup-container-v2')) { 64125 e.target.style.display = 'none'; 64126 e.target.classList.remove("show--popup"); 64127 body.style.overflow = ''; 64128 } 64129 }); 64130 document.addEventListener('click', function(e) { 64131 const popup = e.target.closest('.popup-container-v2'); 64132 if (!popup) return; 64133 64134 if (e.target.closest('.popup-arrow-right')) { 64135 const currentIndex = parseInt(popup.dataset.currentIndex); 64136 const nextIndex = (currentIndex + 1) % allGalleryItems.length; 64137 navigateToPopup(popup, nextIndex); 64138 } 64139 64140 if (e.target.closest('.popup-arrow-left')) { 64141 const currentIndex = parseInt(popup.dataset.currentIndex); 64142 const prevIndex = (currentIndex - 1 + allGalleryItems.length) % allGalleryItems.length; 64143 navigateToPopup(popup, prevIndex); 64144 } 64145 }); 64146 64147 function navigateToPopup(currentPopup, newIndex) { 64148 const newPopupId = allGalleryItems[newIndex].getAttribute('data-popup'); 64149 const newPopup = document.getElementById(newPopupId); 64150 currentPopup.style.display = 'none'; 64151 newPopup.style.display = 'flex'; 64152 newPopup.dataset.currentIndex = newIndex; 64153 } 64154}); 64155document.addEventListener('DOMContentLoaded', function () { 64156 // Get all tab containers 64157 const tabContainers = document.querySelectorAll('.tabs-v2-container'); 64158 if (tabContainers.length === 0) return; 64159 64160 tabContainers.forEach(container => { 64161 const tabContents = container.querySelectorAll(".tabcontent-v2"); 64162 const tabLinks = container.querySelectorAll(".tablinks-v2"); 64163 const dropdown = container.querySelector('.tab-dropdown-v2'); 64164 64165 if (tabContents.length === 0 || tabLinks.length === 0) return; 64166 64167 if (tabLinks.length > 5) { 64168 tabLinks.forEach(link => { 64169 link.style.display = 'none'; 64170 }); 64171 if (dropdown) dropdown.style.display = 'block'; 64172 } else { 64173 tabLinks.forEach(link => { 64174 link.style.display = 'inline-block'; 64175 }); 64176 if (dropdown) dropdown.style.display = 'none'; 64177 } 64178 64179 // Function to show only the selected tab content 64180 function showTabContent(tabName) { 64181 tabContents.forEach(content => { 64182 content.style.display = (content.id === tabName) ? "block" : "none"; 64183 }); 64184 } 64185 64186 // Set up click event for desktop tabs 64187 tabLinks.forEach(link => { 64188 link.addEventListener('click', function () { 64189 const tabName = this.getAttribute('data-tab'); 64190 if (!tabName) return; 64191 64192 // Update active tab link and display content 64193 tabLinks.forEach(link => link.classList.remove("active")); 64194 this.classList.add("active"); 64195 showTabContent(tabName); 64196 }); 64197 }); 64198 64199 // Set up change event for mobile dropdown 64200 if (dropdown) { 64201 dropdown.addEventListener('change', function () { 64202 showTabContent(this.value); 64203 //analytics call 64204 let linkJson = window.analyticsMethods.getWebPageLinkDetails(this, this.options[this.selectedIndex].text, "tab dropdown", ""); 64205 let compJson = window.analyticsMethods.getComponentDetails(this, "click", "", "", "", this.options[this.selectedIndex].text, this.selectedIndex + 1); 64206 window.analyticsMethods.setAnalytic(linkJson, compJson); 64207 }); 64208 64209 // Populate dropdown with tab options dynamically 64210 dropdown.innerHTML = ''; // Clear existing options 64211 tabLinks.forEach(link => { 64212 const tabName = link.getAttribute('data-tab'); 64213 if (tabName) { 64214 const option = document.createElement('option'); 64215 option.value = tabName; 64216 option.textContent = link.textContent; 64217 dropdown.appendChild(option); 64218 } 64219 }); 64220 } 64221 64222 // Activate the first tab by default 64223 const firstTabName = tabLinks[0]?.getAttribute('data-tab'); 64224 if (firstTabName) { 64225 tabLinks[0].classList.add("active"); 64226 showTabContent(firstTabName); 64227 64228 // Set the dropdown to the first tab by default 64229 if (dropdown) dropdown.value = firstTabName; 64230 } 64231 }); 64232}); 64233 64234$(document).ready(function() { 64235 const qouteWithImageCarousel = $('.quotewithimage .quoteWithImageCarousel') 64236 const quoteImageContainer = $('.quotewithimage .longQuoteImageContainer') 64237 const shortQouteWithImageCarousel = $('.quotewithimage .shortQuoteWithImageCarousel') 64238 const shortQuoteImageContainer = $('.quotewithimage .shortQuoteImageContainer') 64239 if(quoteImageContainer && quoteImageContainer.length > 1){ 64240 qouteWithImageCarousel && qouteWithImageCarousel.addClass('owl-carousel'); 64241 qouteWithImageCarousel && qouteWithImageCarousel.owlCarousel({ 64242 items: 1, 64243 loop: false, 64244 margin: 24, 64245 nav: true, 64246 dots: false, 64247 navText: [ 64248 '<span class="owl-nav-prev">â¹</span>', 64249 '<span class="owl-nav-next">âº</span>' 64250 ], 64251 }); 64252 } 64253 64254 if(shortQuoteImageContainer && shortQuoteImageContainer.length > 1){ 64255 shortQouteWithImageCarousel && shortQouteWithImageCarousel.addClass('owl-carousel'); 64256 shortQouteWithImageCarousel && shortQouteWithImageCarousel.owlCarousel({ 64257 items: 2, 64258 slideBy: 2, 64259 loop: false, 64260 margin: 24, 64261 nav: true, 64262 dots: false, 64263 navText: [ 64264 '<span class="owl-nav-prev">â¹</span>', 64265 '<span class="owl-nav-next">âº</span>' 64266 ], 64267 responsive: { 64268 0: { 64269 items: 1, 64270 slideBy: 1 64271 }, 64272 834: { 64273 items: 2, 64274 slideBy: 2 64275 } 64276 } 64277 }); 64278 } 64279}); 64280document.addEventListener('DOMContentLoaded', function () { 64281 function toggleDropdown(header) { 64282 if (!header) return; 64283 64284 const allContents = document.querySelectorAll('.dropdown-content-v2'); 64285 const allHeaders = document.querySelectorAll('.accordian-dropdown-header-v2'); 64286 const allArrows = document.querySelectorAll('.accordian-arrow-v2'); 64287 64288 const isOpen = header.classList.contains('open'); 64289 64290 // Close all dropdowns
64291 allContents.forEach(content => content.style.display = "none"); 64292 allHeaders.forEach(header => header.classList.remove('open')); 64293 allArrows.forEach(arrow => arrow.classList.remove('open')); 64294 64295 // If the clicked header was open, just leave everything closed 64296 if (isOpen) { 64297 return; 64298 } 64299 64300 // Now toggle the clicked dropdown open 64301 const content = header.nextElementSibling; 64302 const arrow = header.querySelector('.accordian-arrow-v2'); 64303 64304 if (!content || !arrow) return; 64305 64306 content.style.display = "flex"; 64307 arrow.classList.add('open'); 64308 header.classList.add('open'); 64309 } 64310 64311 // Attach event listeners to all dropdown headers 64312 const headers = document.querySelectorAll('.accordian-dropdown-header-v2'); 64313 headers.forEach(header => { 64314 header.addEventListener('click', function () { 64315 toggleDropdown(this); 64316 }); 64317 }); 64318 64319 // Open the first tab by default and add 'open' class to it 64320 if (headers.length > 0) { 64321 const firstHeader = headers[0]; 64322 const firstContent = firstHeader.nextElementSibling; 64323 const firstArrow = firstHeader.querySelector('.accordian-arrow-v2'); 64324 64325 // Set the display and add the 'open' class 64326 firstHeader.classList.add('open'); 64327 if (firstContent) firstContent.style.display = "flex"; 64328 if (firstArrow) firstArrow.classList.add('open'); 64329 } 64330}); 64331 64332$(document).ready(function() { 64333 let autoPlayInterval; 64334 let currentIndex = 0; 64335 let $accordion = null; 64336 let isInView = false; 64337 64338 // Manual Accordion Functionality 64339 function initManualAccordion(container) { 64340 const $accordion = $(container); 64341 const $activeItem = $accordion.find('.accordion__item.active'); 64342 64343 if ($activeItem.length === 0) { 64344 $accordion.find('.accordion__item:first-child') 64345 .addClass('active') 64346 .find('.accordion__panel') 64347 .show(); 64348 } 64349 64350 $accordion.find('.accordion__header').off('click').on('click', function () { 64351 const $item = $(this).closest('.accordion__item'); 64352 if (!$item.hasClass('active')) { 64353 $accordion.find('.accordion__item.active .accordion__panel').slideUp(function () { 64354 $(this).closest('.accordion__item').removeClass('active'); 64355 }); 64356 64357 $item.addClass('active').find('.accordion__panel').slideDown(); 64358 } else { 64359 $item.removeClass('active').find('.accordion__panel').slideUp(); 64360 } 64361 }); 64362 } 64363 64364 // Auto Accordion Functionality 64365 function startAutoPlay() { 64366 autoPlayInterval = setInterval(function() { 64367 let $items = $accordion.find('.accordion__item'); 64368 $items.eq(currentIndex).removeClass('active').find('.accordion__panel').slideUp(); 64369 currentIndex = (currentIndex + 1) % $items.length; 64370 $items.eq(currentIndex).addClass('active').find('.accordion__panel').slideDown(); 64371 }, 3000); 64372 } 64373 64374 function initAutoAccordion(container) { 64375 $accordion = $(container); 64376 $accordion.find('.accordion__item').removeClass('active').find('.accordion__panel').hide(); 64377 const $items = $accordion.find('.accordion__item'); 64378 currentIndex = $items.index($accordion.find('.accordion__item.active')); 64379 64380 if (currentIndex === -1) { 64381 currentIndex = 0; 64382 $items.eq(currentIndex).addClass('active').find('.accordion__panel').show(); 64383 } 64384 64385 clearInterval(autoPlayInterval); 64386 startAutoPlay(); 64387 64388 $accordion.find('.accordion__header').on('mouseenter', function() { 64389 clearInterval(autoPlayInterval); 64390 const $item = $(this).closest('.accordion__item'); 64391 currentIndex = $accordion.find('.accordion__item').index($item); 64392 $accordion.find('.accordion__item').not($item).removeClass('active').find('.accordion__panel').slideUp(); 64393 $item.addClass('active').find('.accordion__panel').slideDown(); 64394 }).on('mouseleave', function() { 64395 startAutoPlay(); 64396 }); 64397 } 64398 64399 function createObserver() { 64400 const observer = new IntersectionObserver((entries) => {
64401 entries.forEach(entry => { 64402 if (entry.isIntersecting) { 64403 isInView = true; 64404 startAutoPlay(); 64405 } else { 64406 isInView = false; 64407 clearInterval(autoPlayInterval); 64408 } 64409 }); 64410 }, { threshold: 0.1,rootMargin: '-150px 0px 0px 0px' }); 64411 64412 const $target = $('.textimageaccordion'); 64413 if ($target.length) { 64414 observer.observe($target.get(0)); 64415 } 64416 } 64417 64418 function updateAccordionClasses() { 64419 var $accordion = $('.textimageaccordion'); 64420 $accordion.each(function () { 64421 const $currentActiveItem = $(this).find('.accordion__item.active'); 64422 const currentActiveIndex = $currentActiveItem.index(); 64423 64424 if ($(window).width() <= 883) { 64425 if ($(this).hasClass('auto-accordion')) { 64426 $(this).removeClass('auto-accordion').addClass('manual-accordion'); 64427 initManualAccordion(this); 64428 } else if ($(this).hasClass('manual-accordion')) { 64429 initManualAccordion(this); 64430 } 64431 } else { 64432 if ($(this).hasClass('auto-accordion')) { 64433 initAutoAccordion(this); 64434 } else if ($(this).hasClass('manual-accordion')) { 64435 initManualAccordion(this); 64436 } 64437 } 64438 64439 if (currentActiveIndex !== -1) { 64440 const $items = $(this).find('.accordion__item'); 64441 $items.eq(currentActiveIndex).addClass('active').find('.accordion__panel').show(); 64442 } else { 64443 $(this).find('.accordion__item:first-child').addClass('active').find('.accordion__panel').show(); 64444 } 64445 }); 64446 } 64447 64448 createObserver(); 64449 updateAccordionClasses(); 64450 $(window).resize(updateAccordionClasses); 64451}); 64452document.addEventListener("DOMContentLoaded", () => { 64453 const dropdownBtn = document.getElementById("dropdown-btn"); 64454 const dropdownMenu = document.getElementById("dropdown-menu"); 64455 const dropdownItems = document.querySelectorAll(".dropdown-item"); 64456 const dataDivs = document.querySelectorAll(".featureawards__data"); 64457 const responseContainer = document.getElementById("response-container"); 64458 const yearFilter = document.getElementById("year-filter"); 64459 const arrow = dropdownBtn.querySelector(".awards-arrow"); 64460 const viewMoreBtn = document.querySelector(".view-more-btn"); 64461 const viewMoreBtnArrow = document.querySelector(".yearfilter-arrow"); 64462 const yearFilterContainer = document.getElementById("year-filter-container"); 64463 const defaultYear = yearFilterContainer?.dataset.yearDefaultValue?.trim() || "all"; 64464 64465 let selectedValue = ""; 64466 let awardsData = {}; 64467 let isHideRecipient = false; 64468 const INITIAL_DISPLAY_COUNT = 12; 64469 let currentPage = 0; 64470 let selectedYear = "all"; 64471 64472 const getHashValue = () => { 64473 return decodeURIComponent(window.location.hash.replace("#", "")).trim(); 64474 }; 64475 64476 const getItemByValue = (value) => { 64477 if (!value) return null; 64478 return Array.from(dropdownItems).find((item) => item.dataset.value === value) || null; 64479 }; 64480 64481 const makeApiCall = (tabAttr) => { 64482 const selectedItem = document.querySelector(`.dropdown-item[data-value="${tabAttr}"]`); 64483 if (!selectedItem) { 64484 return; 64485 } 64486 64487 const apiPath = selectedItem.dataset.apiPath; 64488 if (!apiPath) { 64489 return; 64490 } 64491 64492 $.ajax({ 64493 url: apiPath, 64494 type: "GET", 64495 dataType: "html", 64496 success: function (response) { 64497 try { 64498 const jsonResponse = JSON.parse(response); 64499 awardsData[tabAttr] = jsonResponse.PageItems; 64500 selectedYear = "all"; 64501 isHideRecipient = jsonResponse.IsHideRecipients; 64502 renderAwardsData(jsonResponse.PageItems, selectedYear, 0, isHideRecipient); 64503 populateYearFilter(jsonResponse.PageItems); 64504 const selectedEl = document.querySelector('.dropdown-item.selected'); 64505 const filteredResults = jsonResponse.PageItems.length; 64506 if (isUserAction && typeof window.featureAwardListFilterTrack === "function") { 64507 window.featureAwardListFilterTrack(selectedEl, filteredResults); 64508 isUserAction = false;
64509 } 64510 } catch (error) { 64511 console.error("Error parsing JSON response:", error); 64512 } 64513 }, 64514 error: function (xhr, status, error) { 64515 console.error("API call failed:", status, error); 64516 }, 64517 }); 64518 }; 64519 64520 const handleCommaSeparatedRecipients = () => { 64521 const recipientElements = document.querySelectorAll(".awardlist-v2-recipient"); 64522 64523 recipientElements.forEach((el, index) => { 64524 const titleEl = el.closest("li").querySelector(".awardlist-v2-title"); 64525 const titleText = titleEl ? titleEl.textContent.trim() : ""; 64526 const items = el.textContent.split(",").map(i => i.trim()).filter(Boolean); 64527 64528 if (items.length > 1) { 64529 const firstItemText = items[0]; 64530 const remainingItemsText = items.slice(1).join(", "); 64531 64532 const toggleBtn = document.createElement("button"); 64533 toggleBtn.className = "recipient-toggle"; 64534 toggleBtn.innerHTML = `Read more <span class="awards-arrow" 64535 data-feature-award-arrow-track="" 64536 data-component-item-title="${titleText}" 64537 data-component-item-position="${index + 1}"> 64538 </span>`; 64539 64540 el.innerHTML = `${firstItemText}, <span class="more-items hidden">${remainingItemsText}</span>`; 64541 el.appendChild(toggleBtn); 64542 64543 toggleBtn.addEventListener("click", () => { 64544 const moreItems = el.querySelector(".more-items"); 64545 const isExpanded = !moreItems.classList.contains("hidden"); 64546 64547 moreItems.classList.toggle("hidden"); 64548 const label = isExpanded ? "Read more" : "Read less"; 64549 const arrowClass = isExpanded ? "" : "up"; 64550 64551 toggleBtn.innerHTML = ` 64552 ${label} 64553 <span 64554 class="awards-arrow ${arrowClass}" 64555 data-feature-award-arrow-track="" 64556 data-component-item-title="${titleText}" 64557 data-component-item-position="${index + 1}" 64558 ></span> 64559 `; 64560 }); 64561 } 64562 }); 64563}; 64564 64565 const handleListRecipients = () => { 64566 const recipientLists = document.querySelectorAll(".awardlist-v2-recipient-list"); 64567 64568 recipientLists.forEach((list) => { 64569 const items = Array.from(list.children).filter(child => child.tagName === "LI"); 64570 64571 // Clean up any existing display styles or classes 64572 items.forEach(item => { 64573 item.classList.remove("hidden", "d-list-item"); 64574 }); 64575 64576 if (items.length > 1) { 64577 // Hide all except the first 64578 items.forEach((item, index) => { 64579 if (index >= 1) item.classList.add("hidden"); 64580 }); 64581 64582 const toggleBtn = document.createElement("button"); 64583 toggleBtn.className = "recipient-toggle"; 64584 toggleBtn.innerHTML = `Read more <span class="awards-arrow"></span>`; 64585 list.appendChild(toggleBtn); 64586 64587 toggleBtn.addEventListener("click", () => { 64588 const isExpanded = toggleBtn.textContent.includes("Read less"); 64589 64590 items.forEach((item, index) => { 64591 if (index >= 1) { 64592 item.classList.toggle("hidden", isExpanded); 64593 item.classList.toggle("d-list-item", !isExpanded); 64594 } 64595 }); 64596 64597 toggleBtn.innerHTML = isExpanded 64598 ? `Read more <span class="awards-arrow"></span>` 64599 : `Read less <span class="awards-arrow up"></span>`; 64600 }); 64601 } 64602 }); 64603 }; 64604 64605 const renderAwardsData = (awards, filterYear, page, isHideRecipient) => { 64606 if (!responseContainer) return; 64607 64608 if (page === 0) responseContainer.innerHTML = ""; 64609 currentPage = page; 64610 awards = awards 64611 .map((award) => { 64612 if (!award.awardYear || award.awardYear.trim() === "") return null; 64613 return { ...award, year: award.awardYear.trim() }; 64614 }) 64615 .filter((award) => award !== null); 64616 64617 let filteredAwards = 64618 filterYear === "all" 64619 ? awards 64620 : awards.filter((award) => award.year === filterYear); 64621 64622 let displayedCount = (page + 1) * INITIAL_DISPLAY_COUNT; 64623 let awardsToShow = filteredAwards.slice(0, displayedCount); 64624 64625 responseContainer.innerHTML = ""; 64626 64627 if (awardsToShow.length === 0) { 64628 responseContainer.innerHTML = `<p class="no-data">No awards available for ${filterYear === "all years" ? "all years" : filterYear}.</p>`; 64629 viewMoreBtn.style.display = "none"; 64630 yearFilterContainer.style.setProperty("display", "none", "important"); 64631 return; 64632 } else { 64633 yearFilterContainer.style.display = "block"; 64634 } 64635 64636 let awardsByYear = {}; 64637 awardsToShow.forEach((award) => { 64638 if (!awardsByYear[award.year]) awardsByYear[award.year] = []; 64639 awardsByYear[award.year].push(award); 64640 }); 64641 64642 Object.keys(awardsByYear) 64643 .sort((a, b) => b - a) 64644 .forEach((year) => { 64645 let yearContainer = document.createElement("div"); 64646 yearContainer.classList.add("year-awrdsdata-container"); 64647 yearContainer.dataset.year = year; 64648 64649 let yearDiv = document.createElement("div"); 64650 yearDiv.classList.add("listing-year-container");
64651 yearDiv.textContent = year; 64652 64653 let awardsDiv = document.createElement("div"); 64654 awardsDiv.classList.add("awrdsdata-container"); 64655 let awardsList = document.createElement("ul"); 64656 awardsList.classList.add("awards-list-v2"); 64657 64658 awardsByYear[year].forEach((award) => { 64659 let awardItem = document.createElement("li"); 64660 awardItem.innerHTML = `<h3 class="awardlist-v2-title">${award.title}</h3>`; 64661 64662 let awardNameElement = document.createElement("p"); 64663 awardNameElement.classList.add("awardlist-v2-name"); 64664 awardNameElement.textContent = award.awardName; 64665 64666 let recipientWrapper = document.createElement("p"); 64667 64668 if (award.recipient.includes("â¢")) { 64669 let recipientList = document.createElement("ul"); 64670 recipientList.classList.add("awardlist-v2-recipient-list"); 64671 64672 award.recipient.split("â¢").forEach((item) => { 64673 if (item.trim() !== "") { 64674 let listItem = document.createElement("li"); 64675 listItem.textContent = item.trim(); 64676 recipientList.appendChild(listItem); 64677 } 64678 }); 64679 64680 recipientWrapper.appendChild(recipientList); 64681 } else { 64682 let singleRecipient = document.createElement("p"); 64683 singleRecipient.classList.add("awardlist-v2-recipient"); 64684 singleRecipient.textContent = award.recipient; 64685 recipientWrapper.appendChild(singleRecipient); 64686 } 64687 64688 awardItem.appendChild(awardNameElement); 64689 if(!isHideRecipient){ 64690 awardItem.appendChild(recipientWrapper); 64691 } 64692 awardsList.appendChild(awardItem); 64693 }); 64694 64695 awardsDiv.appendChild(awardsList); 64696 yearContainer.appendChild(yearDiv); 64697 yearContainer.appendChild(awardsDiv); 64698 responseContainer.appendChild(yearContainer); 64699 }); 64700 64701 toggleViewMoreButton(displayedCount, filteredAwards.length); 64702 handleCommaSeparatedRecipients(); 64703 handleListRecipients(); 64704 }; 64705 64706 const toggleViewMoreButton = (displayedRows, totalRows) => { 64707 viewMoreBtn.style.display = displayedRows < totalRows ? "inline" : "none"; 64708 }; 64709 64710 const populateYearFilter = (awards) => { 64711 if (!yearFilterContainer) return; 64712 64713 // Extract all years from awards data using the `awardYear` key 64714 const allYears = awards 64715 .map((award) => award.awardYear?.trim()) 64716 .filter((year) => year && year.trim() !== ""); 64717 const yearsWithData = allYears.filter((year) => { 64718 return awards.some((award) => award.awardYear?.trim() === year); 64719 }); 64720 const uniqueYears = Array.from(new Set(yearsWithData)).sort((a, b) => b - a); 64721 64722 document.getElementById("selected-year").textContent = "All Years"; 64723 64724 const yearFilterList = document.getElementById("year-filter"); 64725 yearFilterList.innerHTML = `<li data-year="all" class="year-filter-item selected">All Years</li>`; 64726 uniqueYears.forEach((year) => { 64727 const listItem = document.createElement("li"); 64728 listItem.textContent = year; 64729 listItem.setAttribute("data-year", year); 64730 listItem.classList.add("year-filter-item"); 64731 yearFilterList.appendChild(listItem); 64732 }); 64733 64734 selectedYear = "all"; 64735 64736 // Ensure the year filter can open and close properly 64737 yearFilterList.classList.remove("year__show"); 64738 yearFilterList.classList.add("year__hide"); 64739 viewMoreBtnArrow.classList.remove("up"); 64740 64741 document.getElementById("year-filter-btn").onclick = (event) => { 64742 event.stopPropagation(); 64743 viewMoreBtnArrow.classList.toggle("up"); 64744 yearFilterList.classList.toggle("year__show"); 64745 yearFilterList.classList.toggle("year__hide"); 64746 }; 64747 64748 document.addEventListener("click", (event) => { 64749 if (!yearFilterContainer.contains(event.target)) { 64750 viewMoreBtnArrow.classList.remove("up"); 64751 yearFilterList.classList.remove("year__show"); 64752 yearFilterList.classList.add("year__hide"); 64753 } 64754 }); 64755 64756 // Reattach event listeners for year selection 64757 document.querySelectorAll(".year-filter-item").forEach((item) => { 64758 item.addEventListener("click", () => { 64759 isUserAction = true; 64760 document.querySelectorAll(".year-filter-item").forEach((el) => el.classList.remove("selected")); 64761 item.classList.add("selected"); 64762 64763 selectedYear = item.dataset.year; 64764 document.getElementById("selected-year").textContent = item.textContent; 64765 viewMoreBtnArrow.classList.remove("up"); 64766 yearFilterList.classList.remove("year__show"); 64767 yearFilterList.classList.add("year__hide"); 64768 64769 renderAwardsData(awardsData[selectedValue] || [], selectedYear, 0, isHideRecipient); 64770 const selectedEl = document.querySelector('.awardslisting-year-filter'); 64771 const filteredResults = (awardsData[selectedValue] || []).filter(a => 64772 selectedYear === "all" ? true : a.awardYear?.trim() === selectedYear 64773 ).length;
64774 if (typeof analyticsMethods.getWebPageLinkDetails === "function" && typeof analyticsMethods.getComponentDetails === "function" && typeof analyticsMethods.setAnalytic === "function" 64775 && typeof window.Analytics.trackFilterInteraction === "function") { 64776 const linkJson = analyticsMethods.getWebPageLinkDetails(selectedEl, selectedYear); 64777 const compJson = analyticsMethods.getComponentDetails(selectedEl,"click","","","",selectedYear); 64778 const filterCombination = ("yes|" + "year|" + selectedYear).toLowerCase(); 64779 const interactedFilter = ("year|" + selectedYear).toLowerCase(); 64780 const currentFilters = ("year|" + selectedYear).toLowerCase(); 64781 analyticsMethods.setAnalytic(linkJson, compJson); 64782 window.Analytics.trackFilterInteraction(interactedFilter, currentFilters, filterCombination, filteredResults, compJson); 64783 isUserAction = false; 64784 } 64785 }); 64786 }); 64787 }; 64788 64789 64790 viewMoreBtn.addEventListener("click", () => { 64791 currentPage++; 64792 renderAwardsData(awardsData[selectedValue] || [], selectedYear, currentPage, isHideRecipient); 64793 const currentEl = document.querySelector('.view-more-btn.btn-primary-V2'); 64794 if (typeof window.featureAwardButtonTrack === "function") { 64795 window.featureAwardButtonTrack(currentEl, currentPage+1); 64796 } 64797 }); 64798 64799 const selectDropdownItem = (item, shouldUpdateHash = false) => { 64800 if (!item) return; 64801 64802 selectedValue = item.dataset.value; 64803 dropdownBtn.querySelector(".button-text").textContent = item.textContent; 64804 64805 dropdownItems.forEach((i) => i.classList.remove("selected")); 64806 item.classList.add("selected"); 64807 64808 dataDivs.forEach((div) => { 64809 div.style.display = div.id === selectedValue ? "block" : "none"; 64810 }); 64811 64812 dropdownMenu.classList.remove("show"); 64813 arrow.classList.remove("up"); 64814 64815 selectedYear = "all"; 64816 document.getElementById("selected-year").textContent = "All Years"; 64817 64818 if (!awardsData[selectedValue]) { 64819 makeApiCall(selectedValue); 64820 } else { 64821 renderAwardsData(awardsData[selectedValue], selectedYear, 0, isHideRecipient); 64822 populateYearFilter(awardsData[selectedValue]); 64823 } 64824 64825 if (shouldUpdateHash && selectedValue && getHashValue() !== selectedValue) { 64826 history.replaceState(null, "", `#${encodeURIComponent(selectedValue)}`); 64827 } 64828 }; 64829 64830 const showDefaultTab = () => { 64831 const hashValue = getHashValue(); 64832 const hashMatchedItem = getItemByValue(hashValue); 64833 const defaultDropdownItem = hashMatchedItem || dropdownItems[0]; 64834 64835 if (defaultDropdownItem) { 64836 selectDropdownItem(defaultDropdownItem, false); 64837 } 64838 }; 64839 64840 dropdownItems.forEach((item) => { 64841 item.addEventListener("click", (event) => { 64842 event.stopPropagation(); 64843 isUserAction = true; 64844 selectDropdownItem(item, true); 64845 }); 64846 }); 64847 64848 dropdownBtn.addEventListener("click", (event) => { 64849 event.stopPropagation(); 64850 dropdownMenu.classList.toggle("show"); 64851 arrow.classList.toggle("up"); 64852 }); 64853 document.addEventListener("click", () => { 64854 dropdownMenu.classList.remove("show"); 64855 arrow.classList.remove("up"); 64856 }); 64857 64858 window.addEventListener("hashchange", () => { 64859 const hashValue = getHashValue(); 64860 if (!hashValue) return; 64861 64862 const matchingItem = getItemByValue(hashValue); 64863 if (matchingItem) { 64864 selectDropdownItem(matchingItem, false); 64865 } 64866 }); 64867 64868 showDefaultTab(); 64869}); 64870 64871 64872document.addEventListener('DOMContentLoaded', () => { 64873 const body = document.body; 64874 64875 if (body) { 64876 const userAgent = navigator.userAgent; 64877 const platform = navigator.platform || ""; 64878 64879 const isAndroid = /Android/i.test(userAgent) && !/Windows/i.test(platform); 64880 64881 const isIOS = /iPhone|iPad|iPod/i.test(userAgent); 64882 64883 const isMacChrome = /Macintosh/i.test(userAgent) && /Chrome/i.test(userAgent); 64884 64885 const isMacSafari = /Macintosh/i.test(userAgent) && /Safari/i.test(userAgent) && !/Chrome/i.test(userAgent); 64886 64887 if (isAndroid) { 64888 body.classList.add('android--device'); 64889 } 64890 64891 if (isIOS) { 64892 body.classList.add('ios--device'); 64893 } 64894 64895 if (isMacChrome) { 64896 body.classList.add('mac--chrome'); 64897 } 64898 64899 if (isMacSafari) { 64900 body.classList.add('mac--safari'); 64901 } 64902 } 64903}); 64904 64905document.addEventListener("DOMContentLoaded", () => { 64906 async function fetchTimelineEvents() { 64907 const timelineWrapper = document.querySelector(".timeline-wrapper"); 64908 const apiurl = timelineWrapper?.getAttribute("data-api-url"); 64909 if(apiurl){
64910 try { 64911 const response = await fetch(apiurl, { 64912 method: "GET", 64913 headers: { 64914 "Content-Type": "application/json", 64915 }, 64916 }); 64917 if (!response.ok) { 64918 throw new Error(`HTTP error! Status: ${response.status}`); 64919 } 64920 const data = await response.json(); 64921 return data; 64922 } catch (error) { 64923 console.error("Error fetching timeline events:", error); 64924 } 64925 } 64926 } 64927 64928 async function renderDropdown(data) { 64929 const eyebrowText = document.querySelector( 64930 ".timeline-header .eyebrow-text" 64931 ); 64932 const dropdownIcon = document.querySelector( 64933 ".timeline-header .dropdown-icon" 64934 ); 64935 if (eyebrowText) { 64936 eyebrowText.style.display = "block"; 64937 } 64938 if (dropdownIcon) { 64939 dropdownIcon.style.display = "block"; 64940 } 64941 const button = document.querySelector(".dropdown-button h2"); 64942 if (button) { 64943 button.textContent = data[0]?.name; 64944 } 64945 const dropdownMenu = document.querySelector(".dropdown-menu"); 64946 dropdownMenu.innerHTML = ""; 64947 data.forEach((item, idx) => { 64948 dropdownMenu.innerHTML += ` 64949 <li> 64950 <a data-link-name="${item.name}" data-component-item-position="${idx + 1}" data-component-item-title="${item.name}" data-container-id=${item.id}>${item.name}</a> 64951 </li> 64952 `; 64953 }); 64954 } 64955 64956 async function renderTimelineAndYear(data) { 64957 const timelineWrapper = document.querySelector(".timeline-wrapper"); 64958 const timelineText = timelineWrapper?.getAttribute("data-timeline-text"); 64959 const yearMenu = document.querySelector(".timeline-year-section"); 64960 const eventMenu = document.querySelector(".timeline-events-wrapper"); 64961 let yearMenuContent = ""; 64962 let eventMenuContent = ""; 64963 64964 data.forEach((item, index) => { 64965 const yearDisplay = index === 0 ? "flex" : "none"; 64966 yearMenuContent += `<div class="timeline-year-container" id="${item.id}" time-wrapper-id="year-${item.id}" style="display: ${yearDisplay};">`; 64967 64968 const eventDisplay = index === 0 ? "flex" : "none"; 64969 eventMenuContent += `<div class="time-inner-event-wrapper" id="year-${item.id}" style="display: ${eventDisplay};">`; 64970 64971 item.link.forEach((year, idx) => { 64972 const isActive = idx === 0 ? "active" : ""; 64973 yearMenuContent += `<div class="year ${isActive}" data-target-id="${item.id}-year-${year.yearId}" data-link-name="${year.yearId}" data-component-item-position="${idx + 1}">${year.yearId}</div>`; 64974 64975 eventMenuContent += `<div class="timeline-events" id="${item.id}-year-${year.yearId}">`; 64976 64977 const title = 64978 idx === 0 64979 ? timelineText 64980 ? `<p class="timeline-title">${timelineText}</p>` 64981 : "" 64982 : ""; 64983 eventMenuContent += ` 64984 <div class="year-header"> 64985 <h2 class="timeline-year">${year.yearId}</h2> 64986 ${title} 64987 </div> 64988 ${idx === 0 ? '<div class="dragLogo"><img src="/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/Indicator.png" class="indicator" /></div>' : ""} 64989 <div class="event-list"> 64990 `; 64991 64992 year.data.forEach((event, idx) => { 64993 const eventPositionClass = event.even ? "bottom" : "top"; 64994 const eventDataClass = event.even ? "event-bottom" : "event-top"; 64995 const descriptionEllipsis = 64996 !event.hideDescription && event.description 64997 ? "descriptionEllipsis" 64998 : ""; 64999 const titleEllipsis = 65000 !event.hideTitle && event.historyTitle ? "titleEllipsis" : ""; 65001 const dotsPosition = event.even 65002 ? ` 65003 <span class="dots"></span> 65004 <span class="date">${event.month ? event.month : ""}</span> 65005 <div class="event-content"> 65006 ${ 65007 event.hideImage 65008 ? "" 65009 : event.showModal ? 65010 `<a href="#" data-timeline-event-track data-link-location="image" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" class="open-modal" data-image="${ 65011 event.image ? event.image : "" 65012 }" data-history-title="${ 65013 event.historyTitle ? event.historyTitle : "" 65014 }" data-description="${ 65015 event.description ? event.description : "" 65016 }" data-displayMode="${event.displayMode}"><img class="content-img" src="${event.image}"> </a>` 65017 : `<img class="content-img" src="${event.image}">` 65018 } 65019 ${ 65020 event.hideTitle 65021 ? "" 65022 : event.hideDescription && !event.showModal 65023 ? `<h2 class="title">${event.historyTitle}</h2>` 65024 : event.showModal 65025 ? `<a href="#" data-timeline-event-track data-link-location="text" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" class="open-modal" data-image="${ 65026 event.image ? event.image : "" 65027 }" data-history-title="${ 65028 event.historyTitle ? event.historyTitle : "" 65029 }" data-description="${ 65030 event.description ? event.description : "" 65031 }" data-displayMode="${event.displayMode}"><h2 class="title ${titleEllipsis}">${event.historyTitle}</h2></a>` 65032 : `<h2 class="title ${titleEllipsis}">${event.historyTitle}</h2>` 65033 } 65034 ${ 65035 !(event.hideImage || event.hideTitle || event.hideDescription) 65036 ? "" 65037 : event.hideDescription 65038 ? "" 65039 : 65040 event.showModal ? `<a href="#" class="open-modal" data-timeline-event-track data-link-location="text" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" data-image="${ 65041 event.image ? event.image : "" 65042 }" data-history-title="${ 65043 event.historyTitle ? event.historyTitle : "" 65044 }" data-description="${ 65045 event.description ? event.description : "" 65046 }" data-displayMode="${event.displayMode}"><p class="desc ${descriptionEllipsis} ">${event.description}</p></a>` 65047 : `<p class="desc ${descriptionEllipsis} ">${event.description}</p>` 65048 } 65049 ${ 65050 event.showModal 65051 ? ` 65052 <div> 65053 <a href="#" data-timeline-event-track data-link-location="icon" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" class="icon-button open-modal" data-image="${ 65054 event.image ? event.image : "" 65055 }" data-history-title="${ 65056 event.historyTitle ? event.historyTitle : "" 65057 }" data-description="${ 65058 event.description ? event.description : "" 65059 }" data-displayMode="${event.displayMode}">
65060 <span> 65061 <img src="/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/arrow-up-right.png"> 65062 </span> 65063 </a> 65064 </div> 65065 ` 65066 : "" 65067 } 65068 </div> 65069 ` 65070 : ` 65071 <span class="date">${event.month ? event.month : ""}</span> 65072 <div class="event-content"> 65073 ${ 65074 event.hideImage 65075 ? "" 65076 : event.showModal ? 65077 `<a href="#" data-timeline-event-track data-link-location="image" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" class="open-modal" data-image="${ 65078 event.image ? event.image : "" 65079 }" data-history-title="${ 65080 event.historyTitle ? event.historyTitle : "" 65081 }" data-description="${ 65082 event.description ? event.description : "" 65083 }" data-displayMode="${event.displayMode}"><img class="content-img" src="${event.image}"> </a>` 65084 : `<img class="content-img" src="${event.image}">` 65085 } 65086 ${ 65087 event.hideTitle 65088 ? "" 65089 : event.hideDescription && !event.showModal 65090 ? `<h2 class="title">${event.historyTitle}</h2>` 65091 : event.showModal 65092 ? `<a href="#" data-timeline-event-track data-link-location="text" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" class="open-modal" data-image="${ 65093 event.image ? event.image : "" 65094 }" data-history-title="${ 65095 event.historyTitle ? event.historyTitle : "" 65096 }" data-description="${ 65097 event.description ? event.description : "" 65098 }" data-displayMode="${event.displayMode}"><h2 class="title ${titleEllipsis}">${event.historyTitle}</h2></a>` 65099 : `<h2 class="title ${titleEllipsis}">${event.historyTitle}</h2>` 65100 } 65101 ${ 65102 !(event.hideImage || event.hideTitle || event.hideDescription) 65103 ? "" 65104 : event.hideDescription 65105 ? "" 65106 : event.showModal ? `<a href="#" data-timeline-event-track data-link-location="text" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" class="open-modal" data-image="${ 65107 event.image ? event.image : "" 65108 }" data-history-title="${ 65109 event.historyTitle ? event.historyTitle : "" 65110 }" data-description="${ 65111 event.description ? event.description : "" 65112 }" data-displayMode="${event.displayMode}"><p class="desc ${descriptionEllipsis} ">${event.description}</p></a>` 65113 : `<p class="desc ${descriptionEllipsis} ">${event.description}</p>` 65114 } 65115 ${ 65116 event.showModal 65117 ? ` 65118 <div> 65119 <a href="#" data-timeline-event-track data-link-location="icon" data-link-name="${event.historyTitle}" data-component-item-position="${idx + 1}" class="icon-button open-modal" data-image="${ 65120 event.image ? event.image : "" 65121 }" data-history-title="${ 65122 event.historyTitle ? event.historyTitle : "" 65123 }" data-description="${ 65124 event.description ? event.description : "" 65125 }" data-displayMode="${event.displayMode}"> 65126 <span> 65127 <img src="/etc.clientlibs/frasersproperty/clientlibs/clientlib-redesign/resources/images/arrow-up-right.png"> 65128 </span> 65129 </a> 65130 </div> 65131 ` 65132 : "" 65133 } 65134 </div>
65135 <span class="dots"></span>`; 65136 eventMenuContent += ` 65137 <div class="event timeline-event-content ${eventPositionClass}"> 65138 <div class="${eventDataClass}"> 65139 ${dotsPosition} 65140 </div> 65141 </div> 65142 `; 65143 }); 65144 65145 eventMenuContent += `</div></div>`; 65146 }); 65147 65148 yearMenuContent += `</div>`; 65149 eventMenuContent += `</div>`; 65150 }); 65151 65152 yearMenu.innerHTML = yearMenuContent; 65153 eventMenu.innerHTML = eventMenuContent; 65154 65155 const componentHeader = document.querySelector(".timeline-header .eyebrow-text")?.textContent || "na"; 65156 eventMenu.querySelectorAll("[data-timeline-event-track]").forEach(function (el) { 65157 el.addEventListener("click", function (e) { 65158 65159 const eventWrapperContainerId = this.closest(".time-inner-event-wrapper")?.getAttribute("id"); 65160 const componentItemTitle = document.querySelector(`[data-container-id='${eventWrapperContainerId.split("year-")[1]}']`)?.textContent || "na"; 65161 let linkJson = window.analyticsMethods.getWebPageLinkDetails(this); 65162 let compJson = window.analyticsMethods.getComponentDetails(this, "click", "", "timeline 2025", componentHeader, componentItemTitle, ""); 65163 window.analyticsMethods.setAnalytic(linkJson, compJson); 65164 }); 65165 }); 65166 } 65167 65168 async function allFunctionality() { 65169 const yearContainerValue = document.querySelectorAll( 65170 '.timeline-year-container[style*="display: flex"]' 65171 )[0]; 65172 let yearContainerId; 65173 if(yearContainerValue){ 65174 yearContainerId = yearContainerValue.getAttribute("id"); 65175 } 65176 const dropdownMenu = document.querySelector(".dropdown-menu"); 65177 const dropdownIcon = document.querySelector(".dropdown-icon"); 65178 const dropdownButton = document.querySelector(".dropdown-button"); 65179 const exploreTimelineButton = document.getElementById("explore-timeline"); 65180 const exitTimelineButton = document.getElementById("exit-timeline"); 65181 const timelineContainers = document.getElementsByClassName("timeline-container"); 65182 let yearContainer; 65183 let years; 65184 yearContainer = document.getElementById(yearContainerId); 65185 if(yearContainerValue){ 65186 years = yearContainerValue.querySelectorAll(".year"); 65187 } 65188 65189 const timelineSection = document.querySelector(".timeline-year-section"); 65190 if (timelineSection) { 65191 timelineSection.addEventListener("click", (event) => { 65192 const target = event.target; 65193 scrollToCenter(target); 65194 }); 65195 const timelineContainers = document.querySelectorAll( 65196 ".timeline-container" 65197 ); 65198 } 65199 65200// Add scroll button functionality 65201 const scrollLeftBtn = document.querySelector(".timeline-scroll-left"); 65202 const scrollRightBtn = document.querySelector(".timeline-scroll-right"); 65203 65204 function getVisibleYearContainer() { 65205 // Always get the currently visible .timeline-year-container 65206 const containers = document.querySelectorAll('.timeline-year-container'); 65207 for (const c of containers) { 65208 if (c.style.display !== 'none') return c; 65209 } 65210 return null; 65211 } 65212 65213 function updateScrollButtonStates() { 65214 const container = getVisibleYearContainer(); 65215 if (!container || !scrollLeftBtn || !scrollRightBtn) return; 65216 const firstYear = container.querySelector('.year'); 65217 let firstYearVisible = true; 65218 if (firstYear) { 65219 const containerRect = container.getBoundingClientRect(); 65220 const yearRect = firstYear.getBoundingClientRect(); 65221 // If the left edge of the first year is at or past the left edge of the container, it's visible 65222 firstYearVisible = yearRect.left - containerRect.left >= -2; // allow for subpixel rounding 65223 } 65224 scrollLeftBtn.disabled = firstYearVisible; 65225 // Check if at the end 65226 if (container.scrollLeft + container.offsetWidth >= container.scrollWidth - 10) { 65227 scrollRightBtn.disabled = true; 65228 } else { 65229 scrollRightBtn.disabled = false; 65230 } 65231 } 65232 65233 function scrollToYear(direction) { 65234 if (!(scrollLeftBtn && scrollRightBtn)) return; 65235 const container = getVisibleYearContainer(); 65236 if (!container) return; 65237 const years = Array.from(container.querySelectorAll('.year')); 65238 // Find the year closest to the center 65239 let center = container.scrollLeft + container.offsetWidth / 2; 65240 let closestIdx = 0; 65241 let minDist = Infinity;
65242 years.forEach((year, idx) => { 65243 const yearLeft = year.offsetLeft + year.offsetWidth / 2; 65244 const dist = Math.abs(yearLeft - center); 65245 if (dist < minDist) { 65246 minDist = dist; 65247 closestIdx = idx; 65248 } 65249 }); 65250 let jump = 4; 65251 let targetIdx = direction === 'right' ? closestIdx + jump : closestIdx - jump; 65252 if (targetIdx < 0) targetIdx = 0; 65253 if (targetIdx >= years.length) targetIdx = years.length - 1; 65254 const targetYear = years[targetIdx]; 65255 // Center the target year 65256 const scrollTo = targetYear.offsetLeft - (container.offsetWidth / 2) + (targetYear.offsetWidth / 2); 65257 container.scrollTo({ left: scrollTo, behavior: 'smooth' }); 65258 setTimeout(updateScrollButtonStates, 300); 65259 } 65260 65261 if (scrollLeftBtn && scrollRightBtn) { 65262 scrollLeftBtn.addEventListener("click", () => scrollToYear('left')); 65263 scrollRightBtn.addEventListener("click", () => scrollToYear('right')); 65264 } 65265 65266 // Attach scroll event to each .timeline-year-container instead of document 65267 const yearContainers = document.querySelectorAll('.timeline-year-container'); 65268 yearContainers.forEach(container => { 65269 container.addEventListener('scroll', updateScrollButtonStates, true); 65270 }); 65271 65272 // Initial state check 65273 setTimeout(updateScrollButtonStates, 200); 65274 65275 exploreTimelineButton?.addEventListener("click", function () { 65276 exploreTimelineButton.style.display = "none"; 65277 exitTimelineButton.style.display = "block"; 65278 Array.from(timelineContainers).forEach((container) => { 65279 container.style.overflow = "auto"; 65280 container.classList.remove("dimmer"); 65281 }); 65282 }); 65283 65284 exitTimelineButton?.addEventListener("click", function () { 65285 exploreTimelineButton.style.display = "block"; 65286 exitTimelineButton.style.display = "none"; 65287 Array.from(timelineContainers).forEach((container) => { 65288 container.style.overflow = "hidden"; 65289 container.classList.add("dimmer"); 65290 }); 65291 const targetId = yearContainer.querySelectorAll(".year")[0]; 65292 scrollToCenter(targetId); 65293 }); 65294 65295 function toggleDropdown() { 65296 dropdownMenu.style.display = 65297 dropdownMenu.style.display === "block" ? "none" : "block"; 65298 if (dropdownMenu.style.display === "block") { 65299 dropdownIcon.style.transform = "rotate(180deg)"; 65300 } else { 65301 dropdownIcon.style.transform = "unset"; 65302 } 65303 } 65304 65305 dropdownButton?.addEventListener("click", (e) => { 65306 e.stopPropagation(); 65307 toggleDropdown(); 65308 }); 65309 65310 document.addEventListener("click", (e) => { 65311 if ( 65312 !dropdownMenu.contains(e.target) && 65313 dropdownMenu.style.display === "block" 65314 ) { 65315 dropdownMenu.style.display = "none"; 65316 dropdownIcon.style.transform = "unset"; 65317 } 65318 }); 65319 65320 dropdownMenu?.addEventListener("click", (event) => { 65321 const h2Content = document.querySelector(".dropdown-button .dropdown-heading"); 65322 const target = event.target; 65323 if(h2Content.textContent === target.textContent){ 65324 const dropdown = document.querySelector(".timeline-header .dropdown"); 65325 dropdown.querySelector(".dropdown-menu").style.display = "none"; 65326 if (dropdownMenu.style.display === "block") { 65327 dropdownIcon.style.transform = "rotate(180deg)"; 65328 } else { 65329 dropdownIcon.style.transform = "unset"; 65330 } 65331 }else{ 65332 h2Content.textContent = target.textContent; 65333 if (target.tagName === "A" && target.closest("li")) { 65334 event.preventDefault(); 65335 const containerId = target.getAttribute("data-container-id"); 65336 const allContainers = document.querySelectorAll( 65337 ".timeline-year-container" 65338 ); 65339 allContainers.forEach((container) => { 65340 container.style.display = "none"; 65341 }); 65342 const targetContainer = document.getElementById(containerId); 65343 if (targetContainer) { 65344 targetContainer.style.display = "flex"; 65345 yearContainer = targetContainer; 65346 years = targetContainer.querySelectorAll(".year"); 65347 const allWrappers = document.querySelectorAll( 65348 ".time-inner-event-wrapper" 65349 );
65350 allWrappers.forEach((wrapper) => { 65351 wrapper.style.display = "none"; 65352 }); 65353 const timelineContainerId = 65354 targetContainer.getAttribute("time-wrapper-id"); 65355 const timelineContainer = 65356 document.getElementById(timelineContainerId); 65357 if (timelineContainer) { 65358 timelineContainer.style.display = "flex"; 65359 } 65360 dropdownMenu.style.display = "none"; 65361 dropdownIcon.style.transform = "unset"; 65362 const ele = yearContainer.querySelectorAll(".year")[0]; 65363 scrollToCenter(ele); 65364 // Update scroll button states for new container 65365 const scrollLeftBtn = document.querySelector(".timeline-scroll-left"); 65366 const scrollRightBtn = document.querySelector(".timeline-scroll-right"); 65367 if (scrollLeftBtn && scrollRightBtn) { 65368 setTimeout(() => { 65369 // Check if at the start 65370 if (yearContainer.scrollLeft <= 0) { 65371 scrollLeftBtn.disabled = true; 65372 } else { 65373 scrollLeftBtn.disabled = false; 65374 } 65375 // Check if at the end 65376 if (yearContainer.scrollLeft + yearContainer.offsetWidth >= yearContainer.scrollWidth - 10) { 65377 scrollRightBtn.disabled = true; 65378 } else { 65379 scrollRightBtn.disabled = false; 65380 } 65381 }, 100); 65382 } 65383 } 65384 } 65385 } 65386 // analytics tracking for dropdown selection 65387 const componentHeader = document.querySelector(".timeline-header .eyebrow-text"); 65388 let linkJson = window.analyticsMethods.getWebPageLinkDetails(target, "", "dropdown"); 65389 let compJson = window.analyticsMethods.getComponentDetails(target, "click", "", "timeline 2025", componentHeader.textContent, "", ""); 65390 window.analyticsMethods.setAnalytic(linkJson, compJson); 65391 }); 65392 65393 function scrollDetection() { 65394 const currentScrollLeft = document.querySelector(".timeline-container").scrollLeft; 65395 if(currentScrollLeft !== 0){ 65396 const indicator = document.querySelectorAll(".dragLogo"); 65397 indicator.forEach((dragIndicator)=> { 65398 dragIndicator.classList.add("hideIndicator"); 65399 }) 65400 } 65401 const container = document.querySelector(".timeline-container"); 65402 const shiftValue = 300; 65403 const screenWidth = window.innerWidth; 65404 65405 if (!container) return; 65406 65407 let virtualBoxLowerLmt, virtualBoxUpperLmt; 65408 65409 if (screenWidth <= 834) { 65410 virtualBoxLowerLmt = container.offsetHeight / 2 + 100; 65411 virtualBoxUpperLmt = virtualBoxLowerLmt + 100; 65412 } else { 65413 virtualBoxLowerLmt = (container.offsetWidth * 9) / 10 - shiftValue; 65414 virtualBoxUpperLmt = virtualBoxLowerLmt + 100; 65415 } 65416 65417 const allEventValue = document.querySelector( 65418 '.time-inner-event-wrapper[style*="display: flex"]' 65419 ); 65420 65421 if (!allEventValue) return; 65422 65423 const allEventList = allEventValue.querySelectorAll(".timeline-events"); 65424 65425 if (allEventList.length) { 65426 for (let node of allEventList) { 65427 const elementPosition = node.getBoundingClientRect(); 65428 65429 const isInRange = 65430 screenWidth <= 834 65431 ? elementPosition.top < virtualBoxUpperLmt && 65432 elementPosition.bottom > virtualBoxLowerLmt 65433 : elementPosition.left < virtualBoxUpperLmt && 65434 elementPosition.right > virtualBoxLowerLmt; 65435 65436 if (isInRange) { 65437 const activateYearId = node.getAttribute("id"); 65438 const activeYear = document.querySelector(".year.active"); 65439 if (activeYear) { 65440 activeYear.classList.remove("active"); 65441 } 65442 65443 if (activateYearId) { 65444 const ele = document.querySelector( 65445 `.year[data-target-id=${activateYearId}]` 65446 ); 65447 ele.classList.add("active"); 65448 65449 if (yearContainer) { 65450 const containerWidth = yearContainer.offsetWidth; 65451 const elementWidth = ele.offsetWidth; 65452 const elementLeft = ele.offsetLeft; 65453 65454 yearContainer.scroll({ 65455 left: elementLeft - containerWidth / 2 + elementWidth / 2, 65456 behavior: "smooth", 65457 }); 65458 } 65459 } 65460 break; 65461 } 65462 } 65463 } 65464 } 65465 65466 async function scrollMainContent(target) { 65467 var targetElement = document.querySelector(target); 65468 if (targetElement) { 65469 const parentContainer = 65470 document.getElementsByClassName("timeline-container")[0]; 65471 65472 if (window.innerWidth <= 834) { 65473 const scrollAmount = 65474 targetElement.getBoundingClientRect().top - 65475 parentContainer.getBoundingClientRect().top + 65476 parentContainer.scrollTop; 65477 65478 parentContainer.scrollTo({ 65479 top: scrollAmount, 65480 behavior: "smooth", 65481 }); 65482 } else { 65483 const scrollAmount = 65484 targetElement.offsetLeft - parentContainer.offsetLeft; 65485 parentContainer.scrollTo({ 65486 left: scrollAmount, 65487 behavior: "smooth", 65488 }); 65489 } 65490 } 65491 } 65492 65493 async function scrollToCenter(element) { 65494 const containerWidth = yearContainer.offsetWidth; 65495 const elementWidth = element.offsetWidth; 65496 const elementLeft = element.offsetLeft; 65497 65498 yearContainer.scroll({ 65499 left: elementLeft - containerWidth / 2 + elementWidth / 2, 65500 behavior: "smooth", 65501 }); 65502
65503 years.forEach((year) => year.classList.remove("active")); 65504 element.classList.add("active"); 65505 let targetId = element.getAttribute("data-target-id"); 65506 if (targetId) { 65507 await scrollMainContent("#" + targetId); 65508 } 65509 } 65510 65511 let timeline = document.querySelector(".timeline-container"); 65512 timeline.addEventListener('wheel', ()=>{ 65513 scrollDetection(); 65514 }); 65515 65516 let isDown = false; 65517 let startX; 65518 let scrollLeft; 65519 65520 timeline.addEventListener('mousedown', (e) => { 65521 isDown = true; 65522 startX = e.pageX - timeline.offsetLeft; 65523 scrollLeft = timeline.scrollLeft; 65524 }); 65525 65526 timeline.addEventListener('mouseleave', () => { 65527 isDown = false; 65528 }); 65529 65530 timeline.addEventListener('mouseup', () => { 65531 isDown = false; 65532 }); 65533 65534 timeline.addEventListener('mousemove', (e) => { 65535 if (!isDown) return; 65536 e.preventDefault(); 65537 let x = e.pageX - timeline.offsetLeft; 65538 let walk = (x - startX) * 2; 65539 timeline.scrollLeft = scrollLeft - walk; 65540 scrollDetection(); 65541 }); 65542 65543 timeline.addEventListener('touchstart', scrollDetection); 65544 } 65545 65546 async function initialize() { 65547 const data = await fetchTimelineEvents(); 65548 if (data) { 65549 await renderDropdown(data); 65550 await renderTimelineAndYear(data); 65551 } 65552 await allFunctionality(); 65553 65554 if (window.innerWidth >= 834) { 65555 const timelineHeader = document.querySelector(".timeline-header"); 65556 const zoomLevel = document.querySelector(".timeline-container").style.zoom; 65557 if (timelineHeader) { 65558 const timelineHeaderLeft = timelineHeader.getBoundingClientRect().left; 65559 const timelineContainers = document.querySelectorAll( 65560 ".time-inner-event-wrapper" 65561 ); 65562 65563 timelineContainers.forEach((timelineContainer) => { 65564 const eventList = timelineContainer.querySelector(".timeline-events"); 65565 if(!eventList) return; 65566 let newPadding = timelineHeaderLeft; 65567 if(zoomLevel<1){ 65568 newPadding = newPadding / zoomLevel; 65569 }; 65570 eventList.style.paddingLeft = `${newPadding}px`; 65571 }); 65572 } 65573 65574 const observer = new IntersectionObserver(entries => { 65575 entries.forEach(entry => { 65576 if (entry.isIntersecting) { 65577 entry.target.classList.add('visible'); 65578 }else{ 65579 entry.target.classList.remove('visible'); 65580 } 65581 }); 65582 }, { threshold: 0.5 }); 65583 65584 document.querySelectorAll('.timeline-event-content').forEach(container => { 65585 observer.observe(container); 65586 }); 65587 65588 } 65589 } 65590 function applyZoom() { 65591 var checkMobileSize = /Mobi|Android|iPhone/i.test(navigator.userAgent); 65592 var container = document.querySelector('.timeline-container'); 65593 var containerHeight = container.offsetHeight; 65594 var scaleFactor = (window.innerHeight -270) / 640; 65595 var innerHeight = window.innerHeight - 140 65596 if (!checkMobileSize && innerHeight < 640) { 65597 container.style.zoom = scaleFactor; 65598 if(scaleFactor < 1){ 65599 container.classList.add('zoom-level'); 65600 } 65601 } else { 65602 container.style.zoom = 1; 65603 } 65604 } 65605 function isSpecificIPad() { 65606 const userAgent = navigator.userAgent || navigator.vendor || window.opera; 65607 const isIPad = /iPad|Macintosh/.test(userAgent) && navigator.maxTouchPoints > 1; 65608 65609 if (!isIPad) { 65610 return false; 65611 } 65612 65613 if (navigator.platform === "iPad") { 65614 return true; 65615 } 65616 const iPadModels = [ 65617 "iPad14", 65618 "iPad13", 65619 "iPad5", 65620 "iPad8", 65621 "iPad6", 65622 "iPad7" 65623 ]; 65624 65625 return iPadModels.some(model => userAgent.includes(model)); 65626 } 65627 65628 function handleResize() { 65629 if (isSpecificIPad()) { 65630 initialize(); 65631 } else { 65632 return 65633 } 65634 } 65635 window.addEventListener("resize", handleResize); 65636 window.addEventListener("orientationchange", handleResize); 65637 65638 initialize(); 65639 applyZoom(); 65640}); 65641 65642document.addEventListener("DOMContentLoaded", () => { 65643 document.body.addEventListener("click", (e) => { 65644 if (e.target.closest(".open-modal")) { 65645 e.preventDefault(); 65646 65647 const iconButton = e.target.closest(".open-modal"); 65648 const event = { 65649 image: iconButton.dataset.image, 65650 historyTitle: iconButton.dataset.historyTitle, 65651 description: iconButton.dataset.description, 65652 displayMode: iconButton.dataset.displaymode, 65653 }; 65654 65655 65656 const description = event.description 65657 ? event.description.replace(/\n/g, "<br>") 65658 : ''; 65659
65660 const modalHtml = ` 65661 <div class="modal-popup-container" id="dynamic-data"> 65662 <div class="modal-popup ${event.displayMode}"> 65663 <span class="modal-popup-close-btn">×</span> 65664 <div class="modal-popup-content"> 65665 <div class="modal-image-container"> 65666 ${event.image ? `<img class="modal-image" src="${event.image}" alt="${event.historyTitle}">` : ''} 65667 </div> 65668 <div class="modal-content-container"> 65669 ${event.historyTitle ? `<h3 class="modal-heading">${event.historyTitle}</h3>`: ''} 65670 ${event.description ? `<p class="modal-description">${description}</p> `: ''} 65671 </div> 65672 </div> 65673 </div> 65674 </div> 65675 `; 65676 65677 document.body.insertAdjacentHTML("beforeend", modalHtml); 65678 document.body.style.overflow = "hidden"; 65679 65680 const modal = document.getElementById("dynamic-data"); 65681 modal.querySelector(".modal-popup-close-btn").addEventListener("click", () => { 65682 modal.remove(); 65683 document.body.style.overflow = "auto"; 65684 }); 65685 } 65686 }); 65687 }); 65688 65689document.addEventListener('DOMContentLoaded', function () { 65690 const featureSections = document.querySelectorAll('.textAndImageFeatureMainSection'); 65691 65692 featureSections.forEach(section => { 65693 const itemTitles = section.querySelectorAll('.textAndImageFeatureList .item-title'); 65694
65695 itemTitles.forEach(itemTitle => { 65696 itemTitle.addEventListener('click', function () { 65697 const parentListItem = this.closest('.list-item'); 65698 if (!parentListItem) return; 65699 65700 const listItems = section.querySelectorAll('.list-item'); 65701 listItems.forEach(item => item.classList.remove('active')); 65702 parentListItem.classList.add('active'); 65703 65704 const dataSrc = parentListItem.getAttribute('data-src'); 65705 const dataAltText = parentListItem.getAttribute('data-alt-text'); 65706 const dataFeaturedSrc = parentListItem.getAttribute('data-featured-src'); 65707 const dataFeaturedAltText = parentListItem.getAttribute('data-featured-alt-text'); 65708 const dataCtaLink = parentListItem.getAttribute('data-ctalink'); 65709 65710 const mainImage = section.querySelector('.textAndImageFeaturedImage img'); 65711 if (mainImage) { 65712 if (dataSrc) mainImage.src = dataSrc; 65713 if (dataAltText) mainImage.alt = dataAltText; 65714 } 65715 65716 const cardImage = section.querySelector('.feature-card-img img'); 65717 if (cardImage) { 65718 if (dataFeaturedSrc) cardImage.src = dataFeaturedSrc; 65719 if (dataFeaturedAltText) cardImage.alt = dataFeaturedAltText; 65720 } 65721 65722 const cardText = section.querySelector('.feature-card-text'); 65723 if (cardText) { 65724 cardText.textContent = this.textContent.trim(); 65725 } 65726 65727 const ctaLink = section.querySelector(".feature-card-link"); 65728 if(ctaLink){ 65729 if (dataCtaLink) ctaLink.href = dataCtaLink; 65730 } 65731 }); 65732 }); 65733 65734 if (itemTitles.length > 0) { 65735 itemTitles[0].click(); 65736 } 65737 }); 65738}); 65739document.addEventListener('DOMContentLoaded', function () { 65740 if (document.querySelector(".mapboxfirst_container")) { 65741 // Initialize Mapbox map 65742 mapboxgl.accessToken = 'pk.eyJ1IjoiYXNoaXNoLW1laHJhOTciLCJhIjoiY2x2MGplb3d1MGVlcjJpcDhpeWtxYWR2MiJ9.tJ2gma-XWOvKnGUvJ9zhpA'; 65743 const map = new mapboxgl.Map({ 65744 container: 'map', 65745 projection: 'globe', 65746 center: [0, 20], 65747 zoom: 1 65748 }); 65749 const container = document.querySelector('.mapboxfirst_container'); 65750 65751 const apiUrl = container.getAttribute('data-api-url'); 65752 const basePath = container.getAttribute('data-base-path'); 65753 const element = document.querySelector('[data-fp-path]'); 65754 65755 // Read attributes 65756 const fpPathsRaw = element.getAttribute('data-fp-path') || ""; 65757 const fpiPathsRaw = element.getAttribute('data-fpi-path') || ""; 65758 65759 // Convert comma-separated paths â array 65760 const fpPaths = fpPathsRaw.split(',').filter(Boolean); 65761 const fpiPaths = fpiPathsRaw.split(',').filter(Boolean); 65762 65763 const searchIcon = document.querySelector(".mapboxfirst_container .search-filter .search-icon"); 65764 const crossIcon = document.querySelector(".mapboxfirst_container .search-filter .cross-icon"); 65765 65766 // Build query params 65767 const params = []; 65768 65769 // For each fp path 65770 fpPaths.forEach(path => { 65771 params.push(`fpPath=${encodeURIComponent(path)}`); 65772 }); 65773 65774 // For each fpi path 65775 fpiPaths.forEach(path => { 65776 params.push(`fpiPath=${encodeURIComponent(path)}`); 65777 }); 65778 65779 65780 65781 // API endpoints 65782 const PROPERTY_INFO_API = 65783 `${apiUrl}.propertyInfo.json?` + params.join("&"); 65784 console.log(PROPERTY_INFO_API); 65785 // State management 65786 let currentMarkers = []; 65787 let globalData = null; 65788 let countryDataMap = new Map(); 65789 let propertyDataByBU = {}; 65790 let selectedBU = 'all'; 65791 let selectedPropertyTypes = new Set(); 65792 let selectedStatus = new Set(); 65793 let currentView = 'map'; 65794 let filteredProperties = {}; 65795 let searchTerm = ''; 65796 let countryMarkers = []; 65797 let propertyMarkers = []; 65798 let currentSlide = 0; 65799 let isDragging = false; 65800 let startPos = 0; 65801 let currentTranslate = 0; 65802 let prevTranslate = 0; 65803 let animationID; 65804 let sliderItems = []; 65805 let currentCountry = null; 65806 let selectedSearchProperties = null; 65807 let featuredProperties = []; 65808 65809 // DOM element cache with null checks 65810 const elements = { 65811 propertyList: document.getElementById('propertyListMap'), 65812 propertyCount: document.getElementById('propertyCountMap'), 65813 dropdownToggle: document.getElementById('dropdownToggleMap'), 65814 dropdownWrapper: document.querySelector('.custom-dropdownMap'), 65815 dropdownLabel: document.querySelector('.dropdown-labelMap'), 65816 buDropdown: document.getElementById('buDropdownMap'), 65817 statusFilterContainer: document.getElementById('statusFilterContainer'), 65818 viewToggler: document.getElementById('viewTogglerMap'), 65819 searchFilter: document.getElementById('searchFilterMap'), 65820 cardViewContainer: document.getElementById('cardViewContainerMap'), 65821 propertySearch: document.getElementById('propertySearchMap'), 65822 modalElement: document.querySelector('.property-modalMap'), 65823 closeModal: document.querySelector('.modal-closeMap'), 65824 modalPropertyName: document.getElementById('modal-property-name'), 65825 modalPropertyDescription: document.getElementById('modal-property-description'), 65826 modalPropertySubDescription: document.getElementById('modal-property-sub-description'), 65827 detailsGrid: document.querySelector('.details-gridMap'), 65828 sliderTrack: document.querySelector('.slider-trackMap'), 65829 sliderNav: document.querySelector('.slider-navMap'), 65830 prevButton: document.querySelector('.prevMapbox'), 65831 nextButton: document.querySelector('.nextMapbox'), 65832 galleryModal: document.querySelector('.gallery-modalMap'), 65833 closeGallery: document.querySelector('.gallery-closeMap'), 65834 accordionItem: document.querySelector('.accordion-itemMap'), 65835 searchSuggestionsMap: document.querySelector('.search-suggestionsMap'), 65836 statusCheckboxes: document.querySelectorAll('.status-type-option input[type="checkbox"]'), 65837 propertyTypeCheckboxes: document.querySelectorAll('.property-type-option input[type="checkbox"]') 65838 }; 65839 65840 // Safe event listener function 65841 function safeAddEventListener(element, event, handler) { 65842 if (element) { 65843 element.addEventListener(event, handler); 65844 } 65845 } 65846 65847 // Fetch data with proper error handling 65848 async function fetchData() { 65849 try { 65850 // Show loading state 65851 if (elements.propertyList) elements.propertyList.innerHTML = '<p>Loading data...</p>'; 65852 65853 // First fetch country data 65854 const countryResponse = await fetch(PROPERTY_INFO_API); 65855 if (!countryResponse.ok) throw new Error(`Country API error: ${countryResponse.status}`); 65856 const countryData = await countryResponse.json(); 65857 const propertyData =countryData; 65858 65859 // Store global data 65860 globalData = { 65861 totalCount: countryData.totalCount || 0, 65862 countries: countryData.properties || [] 65863 }; 65864 65865 // Create country data map 65866 let allProperties = []; 65867 65868 if (countryData) {
65869 Object.entries(countryData).forEach(([countryName, countryInfo]) => { 65870 if (countryName === 'totalCount') return; 65871 65872 // Add all properties from this country to the allProperties array 65873 if (countryInfo.properties && Array.isArray(countryInfo.properties)) { 65874 allProperties = allProperties.concat(countryInfo.properties); 65875 } 65876 65877 countryDataMap.set(countryName, { 65878 name: countryName, 65879 lat: countryInfo.latitude, 65880 long: countryInfo.longitude, 65881 count: countryInfo.count, 65882 statusCounts: countryInfo.statusCounts || {}, 65883 properties: countryInfo.properties 65884 }); 65885 }); 65886 } 65887 // Update global count 65888 updatePropertyCount(globalData.totalCount); 65889 65890 // Store property data by BU 65891 propertyDataByBU = propertyData; 65892 65893 // Ensure featured property flag exists 65894 ensureFeaturedPropertyFlag(); 65895 65896 // Populate country properties 65897 populateCountryProperties(); 65898 65899 65900 // Show country markers initially 65901 showCountryMarkers(); 65902 65903 // Initialize application with both datasets 65904 initApplication(); 65905 65906 // Initialize featured properties slider 65907 initFeaturedPropertiesSlider(); 65908 65909 handleDropdownSelection("buDropdownMap", ".dropdown-labelMap", ".featured-card-container"); 65910 65911 } catch (error) { 65912 65913 showErrorMessage(error); 65914 } 65915 } 65916 65917 // Ensure all properties have isFeatured flag 65918 function ensureFeaturedPropertyFlag() { 65919 65920 65921 // Process BU properties 65922 Object.entries(propertyDataByBU).forEach(([buName, buData]) => { 65923 if (buData?.properties) { 65924 buData.properties.forEach(p => { 65925 if (typeof p.isFeatured === 'undefined') { 65926 p.isFeatured = false; 65927 } 65928 if (p.isFeatured) { 65929 65930 } 65931 }); 65932 } 65933 }); 65934 65935 // Process country properties 65936 countryDataMap.forEach((country, countryName) => { 65937 if (country?.properties) { 65938 country.properties.forEach(p => { 65939 if (typeof p.isFeatured === 'undefined') { 65940 p.isFeatured = false; 65941 } 65942 }); 65943 } 65944 }); 65945 } 65946 // Populate properties for each country 65947 function populateCountryProperties() { 65948 // Clear any existing properties 65949 countryDataMap.forEach((country, name) => { 65950 country.properties = []; 65951 }); 65952 65953 // Get all properties across all BUs 65954 const allProperties = []; 65955 Object.values(propertyDataByBU).forEach(bu => { 65956 if (bu && bu.properties && Array.isArray(bu.properties)) { 65957 allProperties.push(...bu.properties); 65958 } 65959 }); 65960 65961 // Assign properties to their respective countries 65962 allProperties.forEach(property => { 65963 if (property.country) { 65964 const country = countryDataMap.get(property.country); 65965 if (country) { 65966 country.properties.push(property); 65967 } 65968 } 65969 }); 65970 } 65971 65972 // Initialize the application 65973 function initApplication() { 65974 collectFilterOptionsFromDOM(); 65975 setupEventListeners(); 65976 initializeDropdown(); 65977 updateStatusFilter(); 65978 filterProperties(); 65979 } 65980 65981 // Collect filter options from DOM 65982 function collectFilterOptionsFromDOM() { 65983 selectedPropertyTypes.clear(); 65984 selectedStatus.clear(); 65985 65986 // Collect initially checked property types
65987 elements.propertyTypeCheckboxes.forEach(checkbox => { 65988 if (checkbox.checked && checkbox.id) { 65989 selectedPropertyTypes.add(checkbox.id); 65990 if (checkbox.closest('.property-type-option')) { 65991 checkbox.closest('.property-type-option').classList.add('selected'); 65992 } 65993 } 65994 }); 65995 65996 // Collect initially checked status types 65997 elements.statusCheckboxes.forEach(checkbox => { 65998 if (checkbox.checked && checkbox.id) { 65999 selectedStatus.add(checkbox.id); 66000 if (checkbox.closest('.status-type-option')) { 66001 checkbox.closest('.status-type-option').classList.add('selected'); 66002 } 66003 } 66004 }); 66005 } 66006 66007 // Initialize featured properties slider 66008 function initFeaturedPropertiesSlider() { 66009 66010 // Clear previous slick instance if exists 66011 const slider = document.querySelector('.featuredmap-slider'); 66012 if (slider && $(slider).hasClass('slick-initialized')) { 66013 $(slider).slick('unslick'); 66014 } 66015 66016 // Get the appropriate properties based on current view 66017 let propertiesToFilter = []; 66018 66019 if (currentCountry) { 66020 const country = countryDataMap.get(currentCountry); 66021 propertiesToFilter = country?.properties || []; 66022 66023 } else if (selectedBU === 'all') { 66024 propertiesToFilter = getAllProperties(); 66025 66026 } else { 66027 propertiesToFilter = propertyDataByBU[selectedBU]?.properties || []; 66028 66029 } 66030 66031 // Filter featured properties 66032 featuredProperties = propertiesToFilter.filter(p => { 66033 const isFeatured = p.isFeatured === true; 66034 return isFeatured; 66035 }); 66036 66037 updateFeaturedSlider(featuredProperties); 66038 } 66039 // Update featured slider with properties 66040 function updateFeaturedSlider(properties) { 66041 const slider = document.querySelector('.featuredmap-slider'); 66042 const container = document.querySelector('.featured-card-container'); 66043 66044 if (!slider || !container) { 66045 return; 66046 } 66047 66048 // Clear existing content 66049 slider.innerHTML = ''; 66050 66051 if (properties.length === 0) { 66052 container.style.display = 'none'; 66053 return; 66054 } 66055 66056 container.style.setProperty("display", "block"); 66057 66058 // Create cards dynamically 66059 properties.forEach(property => { 66060 const card = document.createElement('div'); 66061 card.className = 'cardmap'; 66062 card.innerHTML = ` 66063 <img src="${property.primaryImage || 'https://via.placeholder.com/80'}" alt="${property.title || 'Property Image'}" 66064 class="cardmap-img"> 66065 <div class="cardmap-body"> 66066 <h3 class="cardmap-title">${property.title}</h3> 66067 <p class="cardmap-subtitle">${property.propertyType || 'Property'}</p> 66068 </div>`; 66069 66070 card.addEventListener('click', () => { 66071 if (property.longitude && property.latitude) { 66072 // Add 3D map effect with pitch and bearing 66073 map.flyTo({ 66074 center: [parseFloat(property.longitude), parseFloat(property.latitude)], 66075 zoom: 20, 66076 pitch: 60, 66077 bearing: 0, 66078 essential: true 66079 }); 66080 enable3DEffects(); 66081 } 66082 openPropertyModal(property); 66083 }); 66084 66085 slider.appendChild(card); 66086 }); 66087 66088 // Destroy existing slick (avoid duplicate init) 66089 if ($(slider).hasClass('slick-initialized')) { 66090 $(slider).slick('unslick'); 66091 } 66092 66093 // Initialize slick slider 66094 if (properties.length > 0) { 66095 const initSlick = () => { 66096 if (slider.offsetWidth > 0) { 66097 $(slider).slick({ 66098 dots: false, 66099 autoplay: false, 66100 infinite: properties.length > 4, 66101 speed: 300, 66102 slidesToShow: 4, 66103 slidesToScroll: 1, 66104 arrows: true, 66105 prevArrow: '<button type="button" class="feature-slick-prev">â</button>', 66106 nextArrow: '<button type="button" class="feature-slick-next">â</button>', 66107 responsive: [ 66108 { breakpoint: 1220, settings: { slidesToShow: 3 } }, 66109 { breakpoint: 920, settings: { slidesToShow: 2 } }, 66110 { 66111 breakpoint: 768, 66112 settings: { 66113 slidesToShow: 1, 66114 centerMode: true, 66115 centerPadding: '0px' 66116 } 66117 } 66118 ] 66119 }); 66120 66121 $(slider).on('afterChange', function () { 66122 updateSliderButtonStates(slider, properties.length); 66123 }); 66124 66125 updateSliderButtonStates(slider, properties.length); 66126 } else { 66127 requestAnimationFrame(initSlick); 66128 } 66129 }; 66130 66131 initSlick(); 66132 } 66133 66134 } 66135 66136 // Helper function to update button disabled states 66137 function updateSliderButtonStates(slider, totalSlides) { 66138 const slickInstance = $(slider).slick('getSlick'); 66139 const currentSlide = slickInstance.currentSlide; 66140 const slidesToShow = slickInstance.options.slidesToShow; 66141 66142 const prevButton = slider.parentElement.querySelector('.feature-slick-prev'); 66143 const nextButton = slider.parentElement.querySelector('.feature-slick-next'); 66144 66145 if (!prevButton || !nextButton) return; 66146 66147 // Disable prev button if on first slide 66148 if (currentSlide === 0) { 66149 prevButton.classList.add('slick-disabled'); 66150 prevButton.disabled = true; 66151 } else { 66152 prevButton.classList.remove('slick-disabled'); 66153 prevButton.disabled = false;
66154 } 66155 66156 // Disable next button if on last slide (considering slidesToShow) 66157 const maxSlide = totalSlides - slidesToShow; 66158 if (currentSlide >= maxSlide) { 66159 nextButton.classList.add('slick-disabled'); 66160 nextButton.disabled = true; 66161 } else { 66162 nextButton.classList.remove('slick-disabled'); 66163 nextButton.disabled = false; 66164 } 66165 } 66166 const sliderFeature = document.querySelector('.featuredmap-slider'); 66167 const toggleBtn = document.querySelector('.featuredmap-toggle'); 66168 if (toggleBtn) { 66169 toggleBtn.addEventListener('click', function (e) { 66170 e.preventDefault(); 66171 if (sliderFeature.style.display === 'none') { 66172 sliderFeature.style.display = 'block'; 66173 this.textContent = 'Hide'; 66174 } else { 66175 sliderFeature.style.display = 'none'; 66176 this.textContent = 'Show'; 66177 } 66178 }); 66179 } 66180 // Add this function to enable 3D effects on the map 66181 function enable3DEffects() { 66182 // Check if 3D terrain is already added 66183 if (!map.getSource('mapbox-dem')) { 66184 // Add terrain source 66185 map.addSource('mapbox-dem', { 66186 'type': 'raster-dem', 66187 'url': 'mapbox://mapbox.mapbox-terrain-dem-v1', 66188 'tileSize': 512, 66189 'maxzoom': 20 66190 }); 66191 66192 // Add terrain with exaggeration 66193 map.setTerrain({ 66194 'source': 'mapbox-dem', 66195 'exaggeration': 1.5 66196 }); 66197 } 66198 66199 // Add 3D buildings layer if not already added 66200 if (!map.getLayer('3d-buildings')) { 66201 map.addLayer({ 66202 'id': '3d-buildings', 66203 'source': 'composite', 66204 'source-layer': 'building', 66205 'filter': ['==', 'extrude', 'true'], 66206 'type': 'fill-extrusion', 66207 'minzoom': 20, // show earlier 66208 'paint': { 66209 'fill-extrusion-color': '#aaa', 66210 'fill-extrusion-height': [ 66211 'interpolate', 66212 ['linear'], 66213 ['zoom'], 66214 10, 66215 ['*', ['get', 'height'], 2], 66216 20, 66217 ['*', ['get', 'height'], 2] 66218 ], 66219 'fill-extrusion-base': [ 66220 'interpolate', 66221 ['linear'], 66222 ['zoom'], 66223 10, 66224 ['*', ['get', 'min_height'], 2], // exaggerate base 66225 20, 66226 ['*', ['get', 'min_height'], 2] 66227 ], 66228 'fill-extrusion-opacity': 0.6 66229 } 66230 }, 'waterway-label'); 66231 } 66232 } 66233 66234 // Show country markers with data from countryDataMap 66235 function showCountryMarkers() { 66236 filterProperties(); 66237 clearCountryMarkers(); 66238 // Function to create individual property markers with the same SVG style 66239 function createIndividualPropertyMarkers(properties, countryName) { 66240 properties.forEach((property, index) => { 66241 const propLat = parseFloat(property.latitude); 66242 const propLong = parseFloat(property.longitude); 66243 66244 if (isNaN(propLat) || isNaN(propLong)) return; 66245 66246 const propMarkerElement = document.createElement('div'); 66247 propMarkerElement.className = 'property-marker mapboxgl-marker mapboxgl-marker-anchor-center'; 66248 propMarkerElement.setAttribute('aria-label', 'Property marker'); 66249 propMarkerElement.setAttribute('role', 'button'); 66250 propMarkerElement.setAttribute('tabindex', '0'); 66251 propMarkerElement.setAttribute('aria-expanded', 'false'); 66252 propMarkerElement.style.cursor = 'pointer'; 66253 propMarkerElement.innerHTML = ` 66254 <svg display="block" height="41px" width="27px" viewBox="0 0 27 41"> 66255 <defs> 66256 <radialGradient id="shadowGradient${index}"> 66257 <stop offset="10%" stop-opacity="0.4"></stop> 66258 <stop offset="100%" stop-opacity="0.05"></stop> 66259 </radialGradient> 66260 </defs> 66261 <ellipse cx="13.5" cy="34.8" rx="10.5" ry="5.25" fill="url(#shadowGradient${index})"></ellipse> 66262 <path fill="#ED1C24" d="M27,13.5C27,19.07 20.25,27 14.75,34.5C14.02,35.5 12.98,35.5 12.25,34.5C6.75,27 0,19.22 0,13.5C0,6.04 6.04,0 13.5,0C20.96,0 27,6.04 27,13.5Z"></path> 66263 <path opacity="0.25" d="M13.5,0C6.04,0 0,6.04 0,13.5C0,19.22 6.75,27 12.25,34.5C13,35.52 14.02,35.5 14.75,34.5C20.25,27 27,19.07 27,13.5C27,6.04 20.96,0 13.5,0ZM13.5,1C20.42,1 26,6.58 26,13.5C26,15.9 24.5,19.18 22.22,22.74C19.95,26.3 16.71,30.14 13.94,33.91C13.74,34.18 13.61,34.32 13.5,34.44C13.39,34.32 13.26,34.18 13.06,33.91C10.28,30.13 7.41,26.31 5.02,22.77C2.62,19.23 1,15.95 1,13.5C1,6.58 6.58,1 13.5,1Z"></path> 66264 <circle fill="white" cx="13.5" cy="13.5" r="5.5"></circle> 66265 </svg> 66266 `; 66267 66268 const propPopupContent = document.createElement('div'); 66269 propPopupContent.innerHTML = ` 66270 <h4>${property.title || 'No Title'}</h4> 66271 <p><strong>Address:</strong> ${property.address || 'N/A'}</p> 66272 <p><strong>Type:</strong> ${property.propertyType || 'N/A'}</p> 66273 <p><strong>Status:</strong> ${property.status || 'N/A'}</p> 66274 <p><strong>Country:</strong> ${countryName}</p> 66275 ${property.pagePath ? `<a href="${property.pagePath}" target="_blank" style="color: #007bff;">View Details</a>` : ''} 66276 `; 66277 66278 const propMarker = new mapboxgl.Marker({ 66279 element: propMarkerElement 66280 }) 66281 .setLngLat([propLong, propLat]) 66282 .setPopup(new mapboxgl.Popup({ 66283 offset: 15, 66284 closeButton: true, 66285 closeOnClick: false 66286 }).setDOMContent(propPopupContent)) 66287 .addTo(map); 66288 66289 propertyMarkers.push(propMarker); 66290 }); 66291 }}; 66292 // Clear country markers 66293 function clearCountryMarkers() {
66294 countryMarkers.forEach(marker => marker.remove()); 66295 countryMarkers = []; 66296 } 66297 66298 // Clear property markers 66299 function clearPropertyMarkers() { 66300 propertyMarkers.forEach(marker => marker.remove()); 66301 propertyMarkers = []; 66302 } 66303 66304 // Clear all markers 66305 function clearMarkers() { 66306 clearCountryMarkers(); 66307 clearPropertyMarkers(); 66308 } 66309 function updateMapAnimationClass(hasAnimation) { 66310 const mapContainer = document.getElementById('map'); 66311 if (mapContainer) { 66312 if (hasAnimation) { 66313 mapContainer.parentElement.classList.add('mapanimation'); 66314 } else { 66315 mapContainer.parentElement.classList.remove('mapanimation'); 66316 } 66317 } 66318 } 66319 // Zoom to country and show its properties 66320 function zoomToCountry(countryName, long, lat) { 66321 // Reset any previous BU selection when selecting a country 66322 selectedBU = 'all'; 66323 if (elements.dropdownLabel) elements.dropdownLabel.textContent = 'Globally'; 66324 66325 currentCountry = countryName; 66326 66327 if (currentView !== 'map') { 66328 currentView = 'map'; 66329 document.querySelectorAll('.view-option').forEach(opt => { 66330 opt.classList.toggle('active', opt.dataset.view === 'map'); 66331 }); 66332 toggleView(); 66333 } 66334 // Add map animation class when zooming to a country 66335 updateMapAnimationClass(true); 66336 66337 const country = countryDataMap.get(countryName); 66338 if (!country) return; 66339 66340 // Update property count with country-specific count 66341 updatePropertyCount(country.count); 66342 66343 if (country.properties.length > 0) { 66344 // Create bounds from all properties in the country 66345 const bounds = new mapboxgl.LngLatBounds(); 66346 country.properties.forEach(property => { 66347 if (property.longitude && property.latitude) { 66348 bounds.extend([parseFloat(property.longitude), parseFloat(property.latitude)]); 66349 } 66350 }); 66351 66352 // Fit bounds with padding 66353 map.fitBounds(bounds, { 66354 padding: 50, 66355 maxZoom: 10 66356 }); 66357 66358 // Show all properties for this country 66359 showAllPropertiesInCountry(countryName); 66360 } else { 66361 // Fallback to simple zoom if no properties with coordinates 66362 map.flyTo({ 66363 center: [long, lat], 66364 zoom: 15, 66365 essential: true 66366 }); 66367 } 66368 66369 // Update featured properties slider 66370 initFeaturedPropertiesSlider(); 66371 } 66372 66373 // Show properties for a specific BU 66374 function showBUProperties(bu) { 66375 const buData = propertyDataByBU[bu]; 66376 if (!buData || !buData.properties) return; 66377 66378 // Reset camera to a more overview perspective 66379 map.flyTo({ 66380 pitch: 0, 66381 bearing: 0, 66382 essential: true 66383 }); 66384 66385 // Create bounds from all properties in this BU 66386 if (buData.properties.length > 0) { 66387 const bounds = new mapboxgl.LngLatBounds(); 66388 buData.properties.forEach(property => { 66389 if (property.longitude && property.latitude) { 66390 bounds.extend([parseFloat(property.longitude), parseFloat(property.latitude)]); 66391 } 66392 }); 66393 66394 // Fit bounds with padding to show all BU properties 66395 map.fitBounds(bounds, { 66396 padding: 50, 66397 maxZoom: 10, 66398 duration: 1000 66399 }); 66400 } 66401 66402 // Group properties by type for display 66403 filteredProperties = {};
66404 buData.properties.forEach(property => { 66405 const type = property.propertyType || 'Unknown'; 66406 if (!filteredProperties[type]) { 66407 filteredProperties[type] = []; 66408 } 66409 filteredProperties[type].push(property); 66410 }); 66411 66412 // Update property count 66413 updatePropertyCount(buData.properties.length); 66414 66415 // Show property markers and update UI 66416 if (currentView === 'map') { 66417 addPropertyMarkers(filteredProperties); 66418 displayPropertyList(filteredProperties); 66419 } else { 66420 displayPropertyCards(filteredProperties); 66421 } 66422 } 66423 66424 // Zoom back to BU view when same BU is reselected 66425 function zoomBackToBUView(bu) { 66426 const buData = propertyDataByBU[bu]; 66427 if (!buData || !buData.properties) return; 66428 66429 // Reset camera to a more overview perspective 66430 map.flyTo({ 66431 pitch: 0, 66432 bearing: 0, 66433 essential: true 66434 }); 66435 66436 // Create bounds from all properties in this BU 66437 if (buData.properties.length > 0) { 66438 const bounds = new mapboxgl.LngLatBounds(); 66439 buData.properties.forEach(property => { 66440 if (property.longitude && property.latitude) { 66441 bounds.extend([parseFloat(property.longitude), parseFloat(property.latitude)]); 66442 } 66443 }); 66444 66445 // Fit bounds with padding to show entire BU area 66446 map.fitBounds(bounds, { 66447 padding: 100, 66448 maxZoom: 8, 66449 duration: 1000 66450 }); 66451 } 66452 66453 // Re-show all properties for this BU 66454 showBUProperties(bu); 66455 66456 // Update featured properties slider 66457 initFeaturedPropertiesSlider(); 66458 } 66459 66460 // Zoom back to country view when same country is reselected (for country marker clicks) 66461 function zoomBackToCountryView(countryName, country) { 66462 map.flyTo({ 66463 pitch: 0, 66464 bearing: 0, 66465 essential: true 66466 }); 66467 66468 if (country.properties.length > 0) { 66469 // Create bounds from all properties in the country 66470 const bounds = new mapboxgl.LngLatBounds(); 66471 country.properties.forEach(property => { 66472 if (property.longitude && property.latitude) { 66473 bounds.extend([parseFloat(property.longitude), parseFloat(property.latitude)]); 66474 } 66475 }); 66476 66477 // Fit bounds with padding to show entire country 66478 map.fitBounds(bounds, { 66479 padding: 100, 66480 maxZoom: 8, 66481 duration: 1000 66482 }); 66483 } else { 66484 // Fallback to country center coordinates 66485 const lat = parseFloat(country.lat); 66486 const long = parseFloat(country.long); 66487 if (!isNaN(lat) && !isNaN(long)) { 66488 map.flyTo({ 66489 center: [long, lat], 66490 zoom: 6, 66491 duration: 1000, 66492 essential: true 66493 }); 66494 } 66495 } 66496 66497 // Show all properties for this country 66498 showAllPropertiesInCountry(countryName); 66499 66500 // Update featured properties slider 66501 initFeaturedPropertiesSlider(); 66502 } 66503 66504 // Show all properties in a specific country 66505 function showAllPropertiesInCountry(countryName) { 66506 const country = countryDataMap.get(countryName); 66507 if (!country) return; 66508 66509 // Group properties by type 66510 filteredProperties = {}; 66511 country.properties.forEach(property => { 66512 const type = property.propertyType || 'Unknown'; 66513 if (!filteredProperties[type]) { 66514 filteredProperties[type] = []; 66515 } 66516 filteredProperties[type].push(property); 66517 }); 66518 66519 // Update UI 66520 if (currentView === 'map') { 66521 addPropertyMarkers(filteredProperties); 66522 displayPropertyList(filteredProperties); 66523 } else { 66524 displayPropertyCards(filteredProperties); 66525 } 66526 } 66527 66528 // Filter properties by country 66529 function filterPropertiesByCountry(countryName) { 66530 updateMapAnimationClass(true); 66531 const country = countryDataMap.get(countryName); 66532 if (!country) return; 66533 66534 // Reset all filters except country 66535 selectedBU = 'all'; 66536 selectedPropertyTypes.clear(); 66537 selectedStatus.clear(); 66538 66539 // Update UI to reflect reset filters 66540 if (elements.dropdownLabel) elements.dropdownLabel.textContent = countryName;
66541 elements.propertyTypeCheckboxes.forEach(checkbox => { 66542 checkbox.checked = false; 66543 if (checkbox.closest('.property-type-option')) { 66544 checkbox.closest('.property-type-option').classList.remove('selected'); 66545 } 66546 }); 66547 66548 // Update property count with country count 66549 updatePropertyCount(country.count); 66550 66551 // Group by property type 66552 filteredProperties = {}; 66553 country.properties.forEach(property => { 66554 const type = property.propertyType || 'Unknown'; 66555 if (!filteredProperties[type]) { 66556 filteredProperties[type] = []; 66557 } 66558 filteredProperties[type].push(property); 66559 }); 66560 66561 // Update UI 66562 if (currentView === 'map') { 66563 addPropertyMarkers(filteredProperties); 66564 displayPropertyList(filteredProperties); 66565 } else { 66566 displayPropertyCards(filteredProperties); 66567 } 66568 66569 updateStatusFilter(); 66570 } 66571 66572 // Get all properties across all BUs 66573 function getAllProperties() { 66574 const allProperties = []; 66575 if (propertyDataByBU && typeof propertyDataByBU === 'object') { 66576 Object.values(propertyDataByBU).forEach(bu => { 66577 if (bu && bu.properties && Array.isArray(bu.properties)) { 66578 allProperties.push(...bu.properties); 66579 } 66580 }); 66581 } 66582 return allProperties; 66583 } 66584 66585 // Add property markers to the map 66586 function addPropertyMarkers(properties) { 66587 clearPropertyMarkers(); 66588 66589 const markerColor = '#ED1C24'; 66590 66591 Object.entries(properties).forEach(([type, items]) => { 66592 items.forEach(property => { 66593 if (!property.longitude || !property.latitude) return; 66594 66595 try { 66596 const popupContent = document.createElement('div'); 66597 popupContent.className = 'mapbox-popup-container'; 66598 popupContent.innerHTML = ` 66599 <div class="popup-left-container"> 66600 <img src="${property.primaryImage || 'https://via.placeholder.com/150'}" alt="${property.title}"> 66601 </div> 66602 <div class="popup-right-container"> 66603 <h2>${property.title}</h2> 66604 <p>${property.propertyType}</p> 66605 <a class="popup-view-more" data-page-id="${property.pageId || ''}">View Details</a> 66606 </div> 66607 `; 66608 66609 const marker = new mapboxgl.Marker({ 66610 color: markerColor, // use same color for all 66611 draggable: false 66612 }) 66613 .setLngLat([parseFloat(property.longitude), parseFloat(property.latitude)]) 66614 .setPopup(new mapboxgl.Popup({ offset: 25 }).setDOMContent(popupContent)) 66615 .addTo(map); 66616 66617 safeAddEventListener(marker.getElement(), 'click', () => { 66618 map.flyTo({ 66619 center: [parseFloat(property.longitude), parseFloat(property.latitude)], 66620 zoom: 20, 66621 essential: true 66622 }); 66623 }); 66624 66625 safeAddEventListener(popupContent.querySelector('.popup-view-more'), 'click', (e) => { 66626 if (e) { 66627 e.preventDefault(); 66628 const popupContainer = e.target.closest('.mapboxgl-popup'); 66629 if (popupContainer) popupContainer.style.display = 'none'; 66630 map.flyTo({ 66631 center: [parseFloat(property.longitude), parseFloat(property.latitude)], 66632 zoom: 20, 66633 pitch: 60, 66634 bearing: 0, 66635 essential: true 66636 }); 66637 openPropertyModal({ 66638 ...property, 66639 pageId: e.target.getAttribute('data-page-id') || property.pageId 66640 }); 66641 } 66642 }); 66643 66644 propertyMarkers.push(marker); 66645 // Handle zoom-out when the built-in close button is clicked (supports multiple popups) 66646 marker.getPopup().on('open', () => { 66647 const popupContainer = marker.getPopup()._container; 66648 66649 if (!popupContainer) return; 66650 66651 const closeButton = popupContainer.querySelector('.mapboxgl-popup-close-button'); 66652 66653 if (closeButton) { 66654 safeAddEventListener(closeButton, 'click', (e) => { 66655 e.preventDefault(); 66656 e.stopPropagation(); 66657 66658 map.easeTo({ 66659 zoom: 8, 66660 duration: 3000, 66661 essential: true 66662 }); 66663 }); 66664 } 66665 }); 66666 } catch (e) { 66667 console.error('Error creating property marker:', e); 66668 } 66669 }); 66670 }); 66671 } 66672 66673 // Initialize dropdown with BUs 66674 function initializeDropdown() { 66675 if (!elements.buDropdown) return; 66676 66677 elements.buDropdown.innerHTML = ''; 66678 66679 const allOption = document.createElement('li'); 66680 allOption.textContent = 'Globally'; 66681 allOption.dataset.value = 'all'; 66682 safeAddEventListener(allOption, 'click', () => { 66683 selectBU('all'); 66684 currentCountry = null; 66685 }); 66686 elements.buDropdown.appendChild(allOption); 66687 66688 if (propertyDataByBU && typeof propertyDataByBU === 'object') {
66689 Object.keys(propertyDataByBU).forEach(bu => { 66690 if (propertyDataByBU[bu]?.properties?.length > 0) { 66691 const li = document.createElement('li'); 66692 li.textContent = bu; 66693 li.dataset.value = bu; 66694 safeAddEventListener(li, 'click', () => { 66695 selectBU(bu); 66696 }); 66697 elements.buDropdown.appendChild(li); 66698 } 66699 }); 66700 } 66701 } 66702 66703 function clearCountrySelection() { 66704 currentCountry = null; 66705 // Also clear any visual indicators of country selection 66706 const countryMarkers = document.querySelectorAll('.country-marker'); 66707 countryMarkers.forEach(marker => { 66708 marker.classList.remove('selected-country'); 66709 }); 66710 } 66711 // function to clear search 66712 function clearSearch() { 66713 if (elements.propertySearch) { 66714 elements.propertySearch.value = ""; 66715 } 66716 searchTerm = ""; 66717 selectedSearchProperties = null; 66718 document.getElementById("searchSuggestions").style.display = "none"; 66719 } 66720 // Select BU 66721 function selectBU(bu) { 66722 if (elements.dropdownWrapper) elements.dropdownWrapper.classList.remove('open'); 66723 clearSearch(); 66724 if (bu === 'all') { 66725 // Global view 66726 clearCountrySelection(); 66727 selectedBU = bu; 66728 if (elements.dropdownLabel) elements.dropdownLabel.textContent = 'Globally'; 66729 66730 updateMapAnimationClass(false); 66731 // Global view - disable 3D effects for better performance 66732 disable3DEffects(); 66733 map.setStyle('mapbox://mapbox.mapbox-terrain-dem-v1'); 66734 // Global view 66735 map.setProjection('globe'); 66736 map.setZoom(1); 66737 // Reset camera to top-down view 66738 map.flyTo({ 66739 pitch: 0, 66740 bearing: 0 66741 }); 66742 currentCountry = null; 66743 66744 if (elements.viewToggler) elements.viewToggler.style.display = 'flex'; 66745 if (elements.searchFilter) elements.searchFilter.style.display = 'block'; 66746 if (elements.cardViewContainer) elements.cardViewContainer.style.display = 'block'; 66747 66748 // Show global count and country markers 66749 updatePropertyCount(getAllProperties().length); 66750 showCountryMarkers(); 66751 } else { 66752 // Check if we're already viewing this same BU 66753 if (selectedBU === bu && !currentCountry) { 66754 // Same BU selected again - zoom back to BU overview 66755 zoomBackToBUView(bu); 66756 return; 66757 } 66758 66759 // Clear country selection when switching to BU view 66760 currentCountry = null; 66761 selectedBU = bu; 66762 if (elements.dropdownLabel) elements.dropdownLabel.textContent = bu; 66763 clearSearch(); 66764 // Add animation class when selecting a specific BU 66765 updateMapAnimationClass(true); 66766 // BU-specific view - enable 3D effects 66767 enable3DEffects(); 66768 // BU-specific view 66769 map.setProjection('mercator'); 66770 map.setStyle('mapbox://mapbox.mapbox-terrain-dem-v1'); 66771 if (elements.viewToggler) elements.viewToggler.style.display = 'flex'; 66772 if (elements.searchFilter) elements.searchFilter.style.display = 'block'; 66773 66774 // Filter and show properties for this BU 66775 showBUProperties(bu); 66776 } 66777 66778 updateStatusFilter(); 66779 filterProperties() 66780 initFeaturedPropertiesSlider(); 66781 } 66782 // Add function to disable 3D effects 66783 function disable3DEffects() { 66784 // Remove terrain 66785 if (map.getTerrain()) { 66786 map.setTerrain(null); 66787 } 66788 66789 // Remove 3D buildings layer 66790 if (map.getLayer('3d-buildings')) { 66791 map.removeLayer('3d-buildings'); 66792 } 66793 66794 // Remove terrain source 66795 if (map.getSource('mapbox-dem')) { 66796 map.removeSource('mapbox-dem'); 66797 } 66798 } 66799 // Update status filter 66800 function updateStatusFilter() { 66801 if (!elements.statusFilterContainer) return; 66802 elements.statusFilterContainer.innerHTML = ''; 66803 66804 const statusData = getStatusDataForBU(selectedBU); 66805
66806 Object.entries(statusData).forEach(([status, { count }]) => { 66807 const statusId = status.toLowerCase().replace(/\s+/g, '-'); 66808 const option = document.createElement('div'); 66809 option.className = 'status-filter-option'; 66810 option.innerHTML = ` 66811 <input type="checkbox" id="${statusId}" class="status-checkbox" ${selectedStatus.has(status) ? 'checked' : ''}> 66812 <label for="${statusId}">${status}</label> 66813 <span class="status-count">(${count})</span> 66814 `; 66815 66816 safeAddEventListener(option, 'click', (e) => { 66817 if (e.target.tagName !== 'INPUT') { 66818 const checkbox = option.querySelector('input'); 66819 if (checkbox) { 66820 checkbox.checked = !checkbox.checked; 66821 toggleStatusFilter(status); 66822 } 66823 } 66824 }); 66825 66826 const checkbox = option.querySelector('input'); 66827 if (checkbox) { 66828 safeAddEventListener(checkbox, 'change', function () { 66829 toggleStatusFilter(status); 66830 }); 66831 } 66832 66833 elements.statusFilterContainer.appendChild(option); 66834 }); 66835 } 66836 66837 // Get status data for BU 66838 function getStatusDataForBU(bu) { 66839 const statusData = {}; 66840 let buProperties = []; 66841 66842 if (currentCountry) { 66843 // If viewing a country, use its status counts if available 66844 const country = countryDataMap.get(currentCountry); 66845 if (country && country.statusCounts) { 66846 return country.statusCounts; 66847 } 66848 // Fallback to calculating from properties 66849 buProperties = country ? country.properties : []; 66850 } else if (bu === 'all') { 66851 // For global view, calculate from all properties 66852 buProperties = getAllProperties(); 66853 } else { 66854 // For BU view, use properties from that BU 66855 buProperties = propertyDataByBU[bu]?.properties || []; 66856 } 66857 66858 // Calculate status counts 66859 buProperties.forEach(property => { 66860 const status = property.status || 'Unknown'; 66861 if (!statusData[status]) { 66862 statusData[status] = { count: 0 }; 66863 } 66864 statusData[status].count++; 66865 }); 66866 66867 return statusData; 66868 } 66869 66870 // Toggle status filter 66871 function toggleStatusFilter(status) { 66872 if (selectedStatus.has(status)) { 66873 selectedStatus.delete(status); 66874 } else { 66875 selectedStatus.add(status); 66876 } 66877 filterProperties(); 66878 } 66879 66880 let filterTimeout; 66881 66882 function debounce(fn, delay = 300) { 66883 return (...args) => { 66884 clearTimeout(filterTimeout); 66885 filterTimeout = setTimeout(() => fn(...args), delay); 66886 }; 66887 } 66888 66889 function getSelectedPropertyTypes() { 66890 const checked = Array.from(document.querySelectorAll('.property-type-checkbox:checked')).map(el => el.id); 66891 return checked.length ? new Set(checked) : null; 66892 } 66893 66894 function getSelectedStatusTypes() { 66895 const checked = Array.from(document.querySelectorAll('.status-type-checkbox:checked')).map(el => el.id); 66896 return checked.length ? new Set(checked) : null; 66897 } 66898 66899 function filterProperties() { 66900 clearPropertyMarkers(); 66901 66902 const selectedPropertyTypes = getSelectedPropertyTypes(); 66903 const selectedStatus = getSelectedStatusTypes(); 66904 66905 let availableProperties = []; 66906 let totalCount = 0; 66907 66908 if (selectedSearchProperties) { 66909 availableProperties = selectedSearchProperties; 66910 totalCount = availableProperties.length; 66911 } else if (currentCountry) { 66912 const country = countryDataMap.get(currentCountry); 66913 availableProperties = country?.properties || []; 66914 totalCount = country?.count || 0; 66915 } else if (selectedBU === 'all') { 66916 availableProperties = getAllProperties(); 66917 totalCount = availableProperties.length; 66918 } else { 66919 availableProperties = propertyDataByBU?.[selectedBU]?.properties || []; 66920 totalCount = availableProperties.length; 66921 } 66922 66923 availableProperties = availableProperties.filter(p => 66924 (!selectedPropertyTypes || (p.propertyType && selectedPropertyTypes.has(p.propertyType))) && (!selectedStatus || (p.status && selectedStatus.has(p.status))) 66925 ); 66926 66927 if (searchTerm && !selectedSearchProperties) { 66928 showSearchSuggestions(availableProperties); 66929 } 66930 66931 totalCount = availableProperties.length; 66932 66933 filteredProperties = availableProperties.reduce((acc, property) => { 66934 const type = property.propertyType || 'Unknown'; 66935 (acc[type] ||= []).push(property); 66936 return acc; 66937 }, {}); 66938 66939 if (currentView === 'map') { 66940 addPropertyMarkers(filteredProperties); 66941 displayPropertyList(filteredProperties); 66942 } else { 66943 displayPropertyCards(filteredProperties); 66944 } 66945 66946 updatePropertyCount(totalCount); 66947 initFeaturedPropertiesSlider(); 66948 } 66949 66950 const debouncedFilter = debounce(filterProperties, 200); 66951 66952 document.querySelectorAll('.property-type-checkbox, .status-type-checkbox').forEach(el => { 66953 el.addEventListener('change', debouncedFilter); 66954 }); 66955 66956 const searchInput = document.querySelector('#propertySearchInput'); 66957 if (searchInput) { 66958 searchInput.addEventListener('input', debouncedFilter); 66959 } 66960 66961 66962 // Builds and shows search suggestions dynamically. 66963 66964 66965 function showSearchSuggestions(properties) { 66966 const suggestionsBox = document.getElementById("searchSuggestions"); 66967 const suggestionsList = document.getElementById("suggestionsList"); 66968 suggestionsList.innerHTML = ""; 66969 66970 // Show only if user typed something 66971 if (!searchTerm || searchTerm.length === 0) { 66972 suggestionsBox.style.display = "none"; 66973 return; 66974 } 66975 66976 const matches = properties.filter(p => 66977 (p.title && p.title.toLowerCase().includes(searchTerm)) || 66978 (p.description && p.description.toLowerCase().includes(searchTerm)) 66979 ); 66980 66981 if (matches.length === 0) { 66982 suggestionsBox.style.display = "none"; 66983 return; 66984 } 66985
66986 matches.forEach(p => { 66987 const li = document.createElement("li"); 66988 li.classList.add("suggestion-item"); 66989 66990 // ð¹ Build suggestion UI 66991 li.innerHTML = ` 66992 <div class="suggestion-card"> 66993 <img src="${p.primaryImage || 'placeholder.jpg'}" class="suggestion-img" /> 66994 <div class="suggestion-info"> 66995 <div class="suggestion-title">${p.title || 'Untitled'}</div> 66996 <div class="suggestion-type">${p.status || 'Unknown'}</div> 66997 </div> 66998 </div> 66999 `; 67000 67001 li.addEventListener("click", () => { 67002 elements.propertySearch.value = p.title; 67003 67004 // Store matching properties globally 67005 selectedSearchProperties = properties.filter(prop => 67006 prop.title === elements.propertySearch.value 67007 ); 67008 // Fly to the property location on map from search 67009 if (p.longitude && p.latitude) { 67010 map.flyTo({ 67011 center: [parseFloat(p.longitude), parseFloat(p.latitude)], 67012 zoom: 15, 67013 essential: true 67014 }); 67015 setTimeout(() => { 67016 openPropertyModal(p); 67017 }, 1000); 67018 } 67019 67020 filterProperties(); // Refresh UI 67021 suggestionsBox.style.display = "none"; 67022 }); 67023 67024 suggestionsList.appendChild(li); 67025 }); 67026 67027 suggestionsBox.style.display = "block"; 67028 } 67029 function resetSearch() { 67030 elements.propertySearch.value = ""; 67031 searchTerm = ""; 67032 selectedSearchProperties = null; 67033 // If we're resetting from a country view back to global, remove animation 67034 if (selectedBU === 'all' && !currentCountry) { 67035 updateMapAnimationClass(false); 67036 } 67037 filterProperties(); 67038 document.getElementById("searchSuggestions").style.display = "none"; 67039 } 67040 67041 // Display property cards 67042 function displayPropertyCards(propertiesDisplay) { 67043 if (!elements.cardViewContainer) return; 67044 elements.cardViewContainer.innerHTML = ''; 67045 67046 if (Object.keys(propertiesDisplay).length === 0) { 67047 elements.cardViewContainer.innerHTML = '<p>No results found.</p>'; 67048 return; 67049 } 67050 67051 const cardsContainer = document.createElement('div'); 67052 cardsContainer.className = 'property-cards'; 67053
67054 Object.values(propertiesDisplay).forEach(propertyList => { 67055 propertyList.forEach(property => { 67056 const card = document.createElement('div'); 67057 card.className = 'property-card'; 67058 card.innerHTML = ` 67059 <img src="${property.primaryImage}" alt="${property.title}"> 67060 <div class="property-card-content"> 67061 <span class="status property-card-status"><b class="${property.status ? property.status : 'status-null'}">${property.status}</b></span> 67062 <h3 class="property-card-title">${property.title}</h3> 67063 <p class="property-card-address"><b>${property.address}<b></p> 67064 </div> 67065 `; 67066 67067 safeAddEventListener(card, 'click', () => { 67068 openPropertyModal(property); 67069 map.flyTo({ 67070 center: [parseFloat(property.longitude), parseFloat(property.latitude)], 67071 zoom: 15 67072 }); 67073 }); 67074 67075 cardsContainer.appendChild(card); 67076 }); 67077 }); 67078 67079 elements.cardViewContainer.appendChild(cardsContainer); 67080 } 67081 67082 // Display property list 67083 function displayPropertyList(displayPropertyList) { 67084 if (!elements.propertyList) return; 67085 elements.propertyList.innerHTML = ''; 67086 67087 if (Object.keys(displayPropertyList).length === 0) { 67088 elements.propertyList.innerHTML = '<p>No displayPropertyList match the selected filters</p>'; 67089 return; 67090 } 67091 67092 Object.entries(displayPropertyList).forEach(([type, items]) => { 67093 const typeHeader = document.createElement('h3'); 67094 typeHeader.textContent = type; 67095 elements.propertyList.appendChild(typeHeader); 67096 67097 items.forEach(property => { 67098 const propDiv = document.createElement('div'); 67099 propDiv.className = 'property-item'; 67100 propDiv.innerHTML = ` 67101 <h4>${property.title}</h4> 67102 <p>${property.address}</p> 67103 <p><small>Status: ${property.status}</small></p> 67104 `; 67105 safeAddEventListener(propDiv, 'click', () => { 67106 map.flyTo({ 67107 center: [parseFloat(property.longitude), parseFloat(property.latitude)], 67108 zoom: 15 67109 }); 67110 const marker = propertyMarkers.find(m => { 67111 const lngLat = m.getLngLat(); 67112 return lngLat.lng.toFixed(4) === parseFloat(property.longitude).toFixed(4) && 67113 lngLat.lat.toFixed(4) === parseFloat(property.latitude).toFixed(4); 67114 }); 67115 if (marker) marker.getPopup().addTo(map); 67116 }); 67117 elements.propertyList.appendChild(propDiv); 67118 }); 67119 }); 67120 } 67121 67122 // Update property count 67123 function updatePropertyCount(count) { 67124 if (!elements.propertyCount) return; 67125 elements.propertyCount.textContent = count; 67126 } 67127 67128 // Fit map to markers 67129 function fitMapToMarkers() { 67130 if (propertyMarkers.length === 0) return; 67131 67132 const bounds = new mapboxgl.LngLatBounds(); 67133 propertyMarkers.forEach(marker => { 67134 bounds.extend(marker.getLngLat()); 67135 }); 67136 67137 map.fitBounds(bounds, { 67138 padding: 50, 67139 maxZoom: 12 67140 }); 67141 } 67142 67143 // Toggle view between map and cards 67144 function toggleView() { 67145 if (currentView === 'map') { 67146 if (document.getElementById('map')) document.getElementById('map').style.display = 'block'; 67147 if (elements.cardViewContainer) elements.cardViewContainer.style.display = 'none'; 67148 if (elements.searchFilter) elements.searchFilter.style.display = 'block'; 67149 addPropertyMarkers(filteredProperties); 67150 } else { 67151 if (document.getElementById('map')) document.getElementById('map').style.display = 'none'; 67152 if (elements.cardViewContainer) elements.cardViewContainer.style.display = 'block'; 67153 if (elements.searchFilter) elements.searchFilter.style.display = 'block'; 67154 displayPropertyCards(filteredProperties); 67155 } 67156 } 67157 67158 // Open property modal with additional data fetching 67159 async function openPropertyModal(property) { 67160 const arrowBtn = document.getElementById("Mapbox__toggle__ExpandBtn"); 67161 67162 if (arrowBtn) { 67163 arrowBtn.classList.add("removeBtn"); 67164 } 67165 if (leftContainer1 && rightContainer1 && window.getComputedStyle(leftContainer1).display === "none") { 67166 isleftPanel = true 67167 isExpanded = false;
67168 leftContainer1.style.display = "flex"; 67169 rightContainer1.style.width = "70%"; 67170 mapTogglearrow.classList.remove("maptogglerotate"); 67171 map.resize(); 67172 map.on('load', setupEventListeners()); 67173 } 67174 67175 // Enable 3D effects when opening property modal 67176 67177 67178 enable3DEffects(); 67179 map.flyTo({ 67180 center: [parseFloat(property.longitude), parseFloat(property.latitude)], 67181 zoom: 20, 67182 pitch: 60, // Add 3D perspective 67183 bearing: 0, 67184 essential: true 67185 }); 67186 67187 // Show loading state 67188 if (elements.modalPropertyName) elements.modalPropertyName.textContent = "Loading..."; 67189 if (elements.modalPropertyDescription) { 67190 elements.modalPropertyDescription.textContent = 'Loading property details...'; 67191 } 67192 if (elements.detailsGrid) elements.detailsGrid.innerHTML = ''; 67193 if (elements.sliderTrack) elements.sliderTrack.innerHTML = '<p>Loading images...</p>'; 67194 if (elements.sliderNav) elements.sliderNav.innerHTML = ''; 67195 67196 if (elements.modalElement) elements.modalElement.style.display = 'block'; 67197 67198 try { 67199 // Fetch additional property details using pageId 67200 const propertyDetails = await fetchPropertyDetails(property.pageId); 67201 67202 // Update modal with the fetched details 67203 updateModalContent(property, propertyDetails); 67204 } catch (error) { 67205 showModalError(error); 67206 } 67207 } 67208 67209 // Fetch additional property details 67210 async function fetchPropertyDetails(pageId) { 67211 if (!pageId) throw new Error('No pageId provided for property'); 67212 67213 const PROPERTY_DETAILS_API = `${apiUrl}.propertyView.json?pageId=${pageId}`; 67214 67215 const response = await fetch(PROPERTY_DETAILS_API); 67216 if (!response.ok) throw new Error(`Property details API error: ${response.status}`); 67217 67218 return await response.json(); 67219 } 67220 67221 // Update modal content with fetched details 67222 function updateModalContent(property, details) { 67223 // Use the detailed data if available, fall back to basic property data 67224 const fullDetails = details || property; 67225 67226 // Update modal title with unique class 67227 if (elements.modalPropertyName) { 67228 elements.modalPropertyName.textContent = fullDetails.title || property.title; 67229 elements.modalPropertyName.classList.add('modal-property-title'); // Unique class 67230 } 67231 67232 // Update description with unique class 67233 if (elements.modalPropertyDescription) { 67234 elements.modalPropertyDescription.textContent = fullDetails.description || property.description || ''; 67235 elements.modalPropertyDescription.classList.add('modal-property-description'); // Unique class 67236 } 67237 if (elements.modalPropertySubDescription) { 67238 const shouldHide = fullDetails.hideSubDescription === true; 67239 elements.modalPropertySubDescription.style.display = shouldHide ? 'none' : 'block'; 67240 67241 if (!shouldHide) { 67242 elements.modalPropertySubDescription.textContent = fullDetails.subDescription || property.subDescription || ''; 67243 elements.modalPropertySubDescription.classList.add('modal-property-subdescription'); 67244 } 67245 } 67246 const featuredTitle = document.querySelector('.feature-title'); 67247 if (featuredTitle) { 67248 if (fullDetails.isFeatured === true) { 67249 featuredTitle.classList.add('featuredtrue'); 67250 } else { 67251 featuredTitle.classList.remove('featuredtrue'); 67252 } 67253 } 67254 // Clear and rebuild details grid with unique classes 67255 if (elements.detailsGrid) { 67256 elements.detailsGrid.innerHTML = ''; 67257 elements.detailsGrid.classList.add('modal-details-grid'); 67258 67259 const detailsToShow = [ 67260 { icon: 'ð¢', label: 'Type', value: fullDetails.propertyType || property.propertyType || 'N/A' }, 67261 { icon: 'ð ', label: 'Completion', value: fullDetails.completionDate ? new Date(fullDetails.completionDate).toLocaleDateString() : 'N/A' }, 67262 { icon: 'ð', label: 'Status', value: fullDetails.status || property.status || 'N/A' }, 67263 { 67264 icon: `<svg width="10" height="12" viewBox="0 0 10 12" fill="none" xmlns="http://www.w3.org/2000/svg"> 67265 <path d="M8.375 4.5C8.375 2.64844 6.85156 1.125 5 1.125C3.125 1.125 1.625 2.64844 1.625 4.5C1.625 4.89844 1.78906 5.48438 2.1875 6.28125C2.58594 7.03125 3.10156 7.82812 3.64062 8.57812C4.13281 9.23438 4.60156 9.82031 5 10.2891C5.375 9.82031 5.84375 9.23438 6.33594 8.57812C6.875 7.82812 7.39062 7.
6726503125 7.78906 6.28125C8.1875 5.48438 8.375 4.89844 8.375 4.5ZM9.5 4.5C9.5 6.46875 7.01562 9.63281 5.72656 11.1562C5.28125 11.6953 5 12 5 12C5 12 4.69531 11.6953 4.25 11.1562C2.96094 9.63281 0.5 6.46875 0.5 4.5C0.5 2.01562 2.51562 0 5 0C7.48438 0 9.5 2.01562 9.5 4.5ZM5.75 4.5C5.75 4.10156 5.39844 3.75 5 3.75C4.57812 3.75 4.25 4.10156 4.25 4.5C4.25 4.92188 4.57812 5.25 5 5.25C5.39844 5.25 5.75 4.92188 5.75 4.5ZM3.125 4.5C3.125 3.84375 3.47656 3.23438 4.0625 2.88281C4.625 2.55469 5.35156 2.55469 5.9375 2.88281C6.5 3.23438 6.875 3.84375 6.875 4.5C6.875 5.17969 6.5 5.78906 5.9375 6.14062C5.35156 6.46875 4.625 6.46875 4.0625 6.14062C3.47656 5.78906 3.125 5.17969 3.125 4.5Z" fill="#817979"/> 67266 </svg> 67267 `, label: 'Address', value: fullDetails.address || property.address || 'N/A' 67268 }, 67269 { icon: `<svg xmlns="http://www.w3.org/2000/svg" width="10" height="12" viewBox="0 0 10 12" fill="none"> 67270 <path fill-rule="evenodd" clip-rule="evenodd" d="M5 0L10 4.84893V5.07007V12H5.80645V7.9488H4.19355V12H0V4.84893L5 0ZM9.03226 5.29121L5 1.38078L0.967742 5.29121V10.9872H3.22581V6.936H6.77419V10.9872H9.03226V5.29121Z" fill="#817979"/> 67271 </svg>`, label: 'Price Range', value: fullDetails.priceRange || 'N/A' }, 67272 { icon: `<svg xmlns="http://www.w3.org/2000/svg" width="10" height="12" viewBox="0 0 10 12" fill="none"> 67273 <path fill-rule="evenodd" clip-rule="evenodd" d="M5 0L10 4.84893V5.07007V12H5.80645V7.9488H4.19355V12H0V4.84893L5 0ZM9.03226 5.29121L5 1.38078L0.967742 5.29121V10.9872H3.22581V6.936H6.77419V10.9872H9.03226V5.29121Z" fill="#817979"/> 67274 </svg>`, label: 'Carpet Area', value: fullDetails.carpetArea || 'N/A' }, 67275 { icon: `<svg xmlns="http://www.w3.org/2000/svg" width="10" height="12" viewBox="0 0 10 12" fill="none"> 67276 <path fill-rule="evenodd" clip-rule="evenodd" d="M5 0L10 4.84893V5.07007V12H5.80645V7.9488H4.19355V12H0V4.84893L5 0ZM9.03226 5.29121L5 1.38078L0.967742 5.29121V10.9872H3.22581V6.936H6.77419V10.9872H9.03226V5.29121Z" fill="#817979"/> 67277 </svg>`, label: 'Ownership', value: fullDetails.ownership || 'N/A' } 67278 ].filter(item => item.value !== 'N/A'); 67279 67280 // ð Helper: convert label to safe class 67281 const labelMap = label => label.toLowerCase().replace(/\s+/g, '-'); 67282 67283 detailsToShow.forEach((detail, index) => { 67284 const detailItem = document.createElement('div'); 67285 detailItem.className = `detail-item detail-item-${index} ${labelMap(detail.label)}`; 67286 detailItem.innerHTML = ` 67287 <i class="detail-icon">${detail.icon}</i> 67288 <div class="detail-text"> 67289 <h4 class="detail-label">${detail.label}</h4> 67290 <p class="detail-value">${detail.value}</p> 67291 </div> 67292 `; 67293 elements.detailsGrid.appendChild(detailItem); 67294 }); 67295 } 67296 67297 // Initialize slider with images from the detailed response 67298 initPropertySlider(fullDetails); 67299 const target = document.querySelector("#modal-property-name"); 67300 67301 if (target) { 67302 const observer = new MutationObserver(() => { 67303 checkLines("#modal-property-name", "has-two-lines"); 67304 }); 67305 67306 observer.observe(target, { 67307 childList: true, 67308 subtree: true, 67309 characterData: true 67310 }); 67311 67312 checkLines("#modal-property-name", "has-two-lines"); 67313 } 67314 } 67315 67316 // Initialize property image slider 67317 function initPropertySlider(property) { 67318 if (!elements.sliderTrack || !elements.sliderNav) return; 67319 67320 // Clear existing content 67321 elements.sliderTrack.innerHTML = ''; 67322 elements.sliderNav.innerHTML = ''; 67323 67324 // Get images array 67325 const images = property.galleryImages || 67326 (property.primaryImage ? [{ url: property.primaryImage }] : []); 67327 67328 if (images.length === 0) { 67329 elements.sliderTrack.innerHTML = '<p>No images available</p>'; 67330 return; 67331 } 67332 67333 sliderItems = images; 67334 67335 // Create slides
67336 images.forEach((img, index) => { 67337 const slide = document.createElement('div'); 67338 slide.className = 'slide'; 67339 67340 const imgElement = document.createElement('img'); 67341 imgElement.src = img.url || img; 67342 imgElement.alt = img.title || `${property.title} image ${index + 1}`; 67343 67344 safeAddEventListener(imgElement, 'click', () => { 67345 openImageGallery(images.map(i => i.url || i), index, property); 67346 }); 67347 67348 slide.appendChild(imgElement); 67349 elements.sliderTrack.appendChild(slide); 67350 67351 // Create navigation dots 67352 const dot = document.createElement('div'); 67353 dot.className = 'slider-dot'; 67354 if (index === 0) dot.classList.add('active'); 67355 safeAddEventListener(dot, 'click', () => goToSlide(index)); 67356 elements.sliderNav.appendChild(dot); 67357 }); 67358 67359 // Initialize slider state 67360 currentSlide = 0; 67361 updateSlider(); 67362 setupDrag(); 67363 67364 // Set initial button states 67365 updateSliderButtons(); 67366 // Just ensure the slider track has the right total width for scrolling 67367 const slideWidth = 289 + 16; // CSS slide width + gap 67368 const totalWidth = sliderItems.length * slideWidth; 67369 elements.sliderTrack.style.width = `${totalWidth}px`; 67370 67371 // Add page path container after the slider 67372 if (property.pagePath) { 67373 // First, remove any existing page path container to avoid duplicates 67374 const existingContainer = document.querySelector('.page-path-bottom-container'); 67375 if (existingContainer) { 67376 existingContainer.remove(); 67377 } 67378 67379 // Create new container 67380 const pagePathContainer = document.createElement('div'); 67381 pagePathContainer.className = 'page-path-bottom-container'; 67382 67383 const pageLink = document.createElement('a'); 67384 pageLink.href = property.pagePath; 67385 pageLink.className = 'page-path-bottom-link'; 67386 pageLink.target = "_blank"; 67387 pageLink.rel = "noopener noreferrer"; 67388 pageLink.innerHTML = ` 67389 67390 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 67391<path d="M19.6562 4V17.5H16.6562V9.15625L7.1875 18.5781L6.15625 19.6562L4 17.5L5.07812 16.4688L14.5 7H6.15625V4H19.6562Z" fill="white"/> 67392</svg> 67393 67394 `; 67395 67396 pagePathContainer.appendChild(pageLink); 67397 67398 // Insert after the slider's parent container 67399 const sliderParent = elements.sliderTrack.closest('.slider-containerMap') || 67400 elements.sliderTrack.parentElement; 67401 67402 if (sliderParent) { 67403 sliderParent.insertAdjacentElement('afterend', pagePathContainer); 67404 } else { 67405 // Fallback - append to modal body 67406 elements.modalElement?.appendChild(pagePathContainer); 67407 } 67408 } 67409 } 67410 67411 // Show error in modal 67412 function showModalError(error) { 67413 if (elements.modalPropertyName) elements.modalPropertyName.textContent = 'Error'; 67414 if (elements.modalPropertyDescription) { 67415 elements.modalPropertyDescription.textContent = 'Failed to load property details.'; 67416 } 67417 if (elements.detailsGrid) { 67418 elements.detailsGrid.innerHTML = ` 67419 <div class="error-message"> 67420 <p>${error.message || 'Unknown error occurred'}</p> 67421 </div> 67422 `; 67423 } 67424 if (elements.sliderTrack) { 67425 elements.sliderTrack.innerHTML = '<p>Failed to load images</p>'; 67426 } 67427 } 67428 67429 function openImageGallery(images, startIndex = 0, property) { 67430 if (!elements.galleryModal) return; 67431 67432 const galleryContent = elements.galleryModal.querySelector('.gallery-modal-content'); 67433 if (!galleryContent) return; 67434 67435 // Clear previous content 67436 galleryContent.innerHTML = ''; 67437 67438 // Create main slider container 67439 const mainSlider = document.createElement('div'); 67440 mainSlider.className = 'main-slider'; 67441 galleryContent.appendChild(mainSlider); 67442 67443 // Create main slides
67444 images.forEach((img, index) => { 67445 const mainSlide = document.createElement('div'); 67446 mainSlide.innerHTML = `<img src="${img}" alt="Gallery image ${index + 1}">`; 67447 mainSlider.appendChild(mainSlide); 67448 }); 67449 67450 // Init main slider 67451 $(mainSlider).slick({ 67452 slidesToShow: 1, 67453 slidesToScroll: 1, 67454 arrows: true, 67455 fade: true, 67456 initialSlide: startIndex, 67457 autoplay: false, 67458 infinite: false, 67459 asNavFor: (property?.modalType !== 'modal-text') ? '.thumbnail-slider' : null 67460 }); 67461 67462 // Add title/description for modal-text 67463 if (property?.modalType === 'modal-text' && property.description) { 67464 const descriptionDivTitle = document.createElement('div'); 67465 descriptionDivTitle.className = 'gallery-text-modal-mobile'; 67466 let innerHTML = '<div>'; 67467 if (property.isFeatured === true) { 67468 innerHTML += `<p class="featured-label--gallery_text">Featured</p>`; 67469 } 67470 innerHTML += `<p class="title--gallery-text">${property.title}</p></div>`; 67471 descriptionDivTitle.innerHTML = innerHTML; 67472 galleryContent.appendChild(descriptionDivTitle); 67473 } 67474 67475 // CASE 1: modal-images â Show thumbnails 67476 if (!property || property.modalType !== 'modal-text') { 67477 // Clean up existing thumbnail slider if any 67478 const existingThumbSlider = galleryContent.querySelector('.thumbnail-slider'); 67479 if (existingThumbSlider) { 67480 if ($(existingThumbSlider).hasClass('slick-initialized')) { 67481 $(existingThumbSlider).slick('unslick'); 67482 } 67483 existingThumbSlider.remove(); 67484 } 67485 67486 // Create thumbnail slider 67487 const thumbnailSlider = document.createElement('div'); 67488 thumbnailSlider.className = 'thumbnail-slider'; 67489 galleryContent.appendChild(thumbnailSlider); 67490 67491 // Add thumbnail images 67492 images.forEach((img, index) => { 67493 const thumbSlide = document.createElement('div'); 67494 thumbSlide.innerHTML = `<img src="${img}" alt="Thumbnail ${index + 1}">`; 67495 thumbnailSlider.appendChild(thumbSlide); 67496 }); 67497 67498 // â Apply class BEFORE initializing slick 67499 if (images.length <= 6) { 67500 thumbnailSlider.classList.add('custom-slick-fix'); 67501 } else { 67502 thumbnailSlider.classList.remove('custom-slick-fix'); 67503 } 67504 67505 // Init thumbnail slick 67506 $(thumbnailSlider).slick({ 67507 slidesToShow: 5, 67508 asNavFor: '.main-slider', 67509 dots: false, 67510 autoplay: false, 67511 focusOnSelect: true, 67512 arrows: false, 67513 centerMode: true, 67514 variableWidth: true, 67515 swipe: false, 67516 draggable: false, 67517 infinite: false // very important to avoid cloned slides 67518 }); 67519 } 67520 67521 // CASE 2: modal-text â Description with optional subDescription 67522 if (property?.modalType === 'modal-text' && property.description) { 67523 const descriptionDiv = document.createElement('div'); 67524 descriptionDiv.className = 'gallery-text-modal'; 67525 descriptionDiv.innerHTML = ` 67526 <div> 67527 <p>${property.title}</p> 67528 ${property.hideSubDescription === false ? `<p class="modal-text-disc">${property.subDescription}</p>` : ''} 67529 </div>`; 67530 galleryContent.appendChild(descriptionDiv); 67531 } 67532 67533 // Show the modal 67534 elements.galleryModal.style.display = 'block'; 67535} 67536 67537 67538 67539 // Close image gallery 67540 function closeImageGallery() { 67541 if (!elements.galleryModal) return; 67542 elements.galleryModal.style.display = 'none'; 67543 67544 // Clean up sliders 67545 if ($('.main-slider').hasClass('slick-initialized')) { 67546 $('.main-slider').slick('unslick'); 67547 } 67548 if ($('.thumbnail-slider').hasClass('slick-initialized')) { 67549 $('.thumbnail-slider').slick('unslick'); 67550 } 67551
67552 // Clean up description 67553 const existingDescription = elements.galleryModal.querySelector('.gallery-description'); 67554 if (existingDescription) { 67555 existingDescription.remove(); 67556 } 67557 } 67558 67559 // Slider navigation 67560 function goToSlide(index) { 67561 currentSlide = index; 67562 updateSlider(); 67563 } 67564 67565 function updateSlider() { 67566 if (!elements.sliderTrack) return; 67567 const slideWidth = 289 + 16; 67568 elements.sliderTrack.style.transform = `translateX(-${currentSlide * slideWidth}px)`; 67569 67570 const dots = document.querySelectorAll('.slider-dot'); 67571 dots.forEach((dot, index) => { 67572 dot.classList.toggle('active', index === currentSlide); 67573 }); 67574 } 67575 67576 // Simple function to hide/show buttons 67577 function updateSliderButtons() { 67578 if (!elements.prevButton || !elements.nextButton) return; 67579 67580 // Hide buttons if only 1 slide or no slides 67581 if (!sliderItems || sliderItems.length <= 1) { 67582 elements.prevButton.style.display = 'none'; 67583 elements.nextButton.style.display = 'none'; 67584 } else { 67585 elements.prevButton.style.display = 'block'; 67586 elements.nextButton.style.display = 'block'; 67587 } 67588 } 67589 67590 // Slider drag functionality 67591 function setupDrag() { 67592 if (!elements.sliderTrack) return; 67593 elements.sliderTrack.classList.add('draggable'); 67594 safeAddEventListener(elements.sliderTrack, 'touchstart', touchStart); 67595 safeAddEventListener(elements.sliderTrack, 'touchend', touchEnd); 67596 safeAddEventListener(elements.sliderTrack, 'touchmove', touchMove); 67597 safeAddEventListener(elements.sliderTrack, 'mousedown', touchStart); 67598 safeAddEventListener(elements.sliderTrack, 'mouseup', touchEnd); 67599 safeAddEventListener(elements.sliderTrack, 'mouseleave', touchEnd); 67600 safeAddEventListener(elements.sliderTrack, 'mousemove', touchMove); 67601 } 67602 67603 function touchStart(e) { 67604 if (e.type === 'mousedown') e.preventDefault(); 67605 isDragging = true; 67606 startPos = getPositionX(e); 67607 prevTranslate = currentTranslate; 67608 if (elements.sliderTrack) elements.sliderTrack.classList.add('dragging'); 67609 cancelAnimationFrame(animationID); 67610 } 67611 67612 function touchEnd() { 67613 isDragging = false; 67614 if (elements.sliderTrack) elements.sliderTrack.classList.remove('dragging'); 67615 const movedBy = currentTranslate - prevTranslate; 67616 67617 // Use better threshold for 289px slide width (about 1/3 of slide width) 67618 const threshold = 100; 67619 if (movedBy < -threshold && currentSlide < sliderItems.length - 1) { 67620 currentSlide++; 67621 } else if (movedBy > threshold && currentSlide > 0) { 67622 currentSlide--; 67623 } 67624 setPositionByIndex(); 67625 } 67626 67627 function touchMove(e) { 67628 if (isDragging && elements.sliderTrack) { 67629 const currentPosition = getPositionX(e); 67630 currentTranslate = prevTranslate + currentPosition - startPos; 67631 67632 // Use slide width (289px + 16px gap) for bounds calculation 67633 const slideWidth = 289 + 16; 67634 const minTranslate = -currentSlide * slideWidth; 67635 const maxTranslate = (sliderItems.length - 1 - currentSlide) * slideWidth; 67636 67637 if (currentTranslate < -minTranslate) currentTranslate = -minTranslate; 67638 else if (currentTranslate > -maxTranslate) currentTranslate = -maxTranslate; 67639 elements.sliderTrack.style.transform = `translateX(${currentTranslate}px)`; 67640 } 67641 } 67642 67643 function getPositionX(e) { 67644 return e.type.includes('mouse') ? e.pageX : e.touches[0].clientX; 67645 } 67646 67647 function setPositionByIndex() { 67648 if (!elements.sliderTrack) return; 67649 67650 // Use slide width (289px + 16px gap) for position calculation 67651 const slideWidth = 289 + 16; 67652 currentTranslate = -currentSlide * slideWidth; 67653 elements.sliderTrack.style.transform = `translateX(${currentTranslate}px)`; 67654 updateSlider(); 67655 } 67656 67657 // Show error message 67658 function showErrorMessage(error) { 67659 if (elements.propertyList) { 67660 elements.propertyList.innerHTML = ` 67661 <div class="error-message"> 67662 <p>Failed to load data. Please try again later.</p> 67663 <p><small>${error.message}</small></p> 67664 </div> 67665 `; 67666 } 67667 } 67668 67669 // Setup event listeners 67670 function setupEventListeners() { 67671 // Dropdown toggle 67672 safeAddEventListener(elements.dropdownToggle, 'click', () => { 67673 if (elements.dropdownWrapper) { 67674 elements.dropdownWrapper.classList.toggle('open'); 67675 } 67676 }); 67677 67678 // Close dropdown when clicking outside 67679 safeAddEventListener(document, 'click', (e) => { 67680 if (elements.dropdownWrapper && elements.dropdownToggle && 67681 !elements.dropdownWrapper.contains(e.target) && 67682 !elements.dropdownToggle.contains(e.target)) { 67683 elements.dropdownWrapper.classList.remove('open'); 67684 } 67685 67686 if (elements.searchSuggestionsMap && elements.searchFilter && 67687 !elements.searchFilter.contains(e.target)) { 67688 elements.searchSuggestionsMap.style.display = 'none'; 67689 } 67690 }); 67691 67692 // ð¹ Add event listener for typing 67693 safeAddEventListener(elements.propertySearch, 'input', (e) => { 67694 searchTerm = e.target.value.toLowerCase(); 67695 if (searchTerm.length === 0) { 67696 if(searchIcon && crossIcon){ 67697 searchIcon.style.display = "block"; 67698 crossIcon.style.display = "none"; 67699 } 67700 resetSearch(); // Clear when empty 67701 } else { 67702 if(searchIcon && crossIcon){ 67703 searchIcon.style.display = "none"; 67704 crossIcon.style.display = "block"; 67705 } 67706 filterProperties(); 67707 } 67708 }); 67709 67710 function updateMapView() { 67711 if (!map) return; 67712 const selectedCountry = document.querySelector(".dropdown-labelMap")?.innerText.trim(); 67713 67714 if (!selectedCountry || selectedCountry === "Globally") { 67715 map.setProjection('globe'); 67716 map.setZoom(1); 67717 map.flyTo({ 67718 pitch: 0, 67719 bearing: 0 67720 }); 67721 return; 67722 } 67723 67724 const country = countryDataMap.get(selectedCountry); 67725 67726 if (country) { 67727 zoomBackToBUView(country.name); 67728 } 67729 } 67730 67731 document.querySelectorAll('.cross-icon').forEach(icon => { 67732 icon.addEventListener('click', function () { 67733 elements.propertySearch.value = ""; 67734 if(elements.propertySearch.value.length === 0) { 67735 if(searchIcon && crossIcon){ 67736 searchIcon.style.display = "block"; 67737 crossIcon.style.display = "none"; 67738 } 67739 resetSearch(); 67740 } else { 67741 if(searchIcon && crossIcon){ 67742 searchIcon.style.display = "none"; 67743 crossIcon.style.display = "block"; 67744 } 67745 } 67746 filterProperties(); 67747 updateMapView() 67748 if (elements.modalElement) elements.modalElement.style.display = 'none'; 67749 const arrowBtn = document.getElementById("Mapbox__toggle__ExpandBtn"); 67750 if (arrowBtn) { 67751 arrowBtn.classList.remove("removeBtn"); 67752 } 67753 if (leftContainer1 && rightContainer1 && isleftPanel) { 67754 isExpanded = true; 67755 isleftPanel = false;
67756 leftContainer1.style.display = "none"; 67757 rightContainer1.style.width = "100%"; 67758 mapTogglearrow.classList.add("maptogglerotate"); 67759 } 67760 }); 67761 }); 67762 67763 // View toggler 67764 document.querySelectorAll('.view-option').forEach(option => { 67765 safeAddEventListener(option, 'click', () => { 67766 currentView = option.dataset.view; 67767 document.querySelectorAll('.view-option').forEach(opt => { 67768 67769 opt.classList.toggle('active', opt.dataset.view === currentView); 67770 }); 67771 toggleView(); 67772 map.resize(); 67773 }); 67774 }); 67775 67776 // Modal close buttons 67777 safeAddEventListener(elements.closeModal, 'click', () => { 67778 if (elements.modalElement) elements.modalElement.style.display = 'none'; 67779 const arrowBtn = document.getElementById("Mapbox__toggle__ExpandBtn"); 67780 67781 if (arrowBtn) { 67782 arrowBtn.classList.remove("removeBtn"); 67783 } 67784 if (leftContainer1 && rightContainer1 && isleftPanel) { 67785 isExpanded = true; 67786 isleftPanel = false; 67787 leftContainer1.style.display = "none"; 67788 rightContainer1.style.width = "100%"; 67789 mapTogglearrow.classList.add("maptogglerotate"); 67790 map.resize(); 67791 map.on('load', setupEventListeners()); 67792 } 67793 }); 67794 67795 safeAddEventListener(elements.modalElement, 'click', (e) => { 67796 if (e.target === elements.modalElement) { 67797 elements.modalElement.style.display = 'none'; 67798 } 67799 }); 67800 67801 safeAddEventListener(elements.closeGallery, 'click', closeImageGallery); 67802 67803 safeAddEventListener(elements.galleryModal, 'click', (e) => { 67804 if (e.target === elements.galleryModal) { 67805 closeImageGallery(); 67806 } 67807 }); 67808 67809 67810 const selectAllPropertyTypesCheckbox = document.querySelector('#select-all-property-types'); 67811 67812 if (selectAllPropertyTypesCheckbox) { 67813 safeAddEventListener(selectAllPropertyTypesCheckbox, 'change', function () { 67814 const allOptions = document.querySelectorAll('.property-type-option'); 67815 if (this.checked) { 67816 // Select all property types 67817 allOptions.forEach(option => { 67818 const checkbox = option.querySelector('input'); 67819 if (checkbox && !checkbox.checked) { 67820 checkbox.checked = true; 67821 selectedPropertyTypes.add(checkbox.id); 67822 option.classList.add('selected'); 67823 } 67824 }); 67825 } else { 67826 // Unselect all property types 67827 allOptions.forEach(option => { 67828 const checkbox = option.querySelector('input'); 67829 if (checkbox && checkbox.checked) { 67830 checkbox.checked = false; 67831 selectedPropertyTypes.delete(checkbox.id); 67832 option.classList.remove('selected'); 67833 } 67834 }); 67835 } 67836 filterProperties(); 67837 }); 67838 } 67839 function updateSelectAllPropertyTypesCheckbox() { 67840 const allOptions = document.querySelectorAll('.property-type-option input'); 67841 const allChecked = Array.from(allOptions).every(chk => chk.checked); 67842 if (selectAllPropertyTypesCheckbox) { 67843 selectAllPropertyTypesCheckbox.checked = allChecked; 67844 } 67845 } 67846 67847 document.querySelectorAll('.property-type-option').forEach(option => { 67848 safeAddEventListener(option, 'click', (e) => { 67849 if (e.target.tagName !== 'INPUT') { 67850 const checkbox = option.querySelector('input'); 67851 if (checkbox) { 67852 checkbox.checked = !checkbox.checked; 67853 const type = checkbox.id; 67854 if (checkbox.checked) { 67855 selectedPropertyTypes.add(type); 67856 option.classList.add('selected'); 67857 } else { 67858 selectedPropertyTypes.delete(type); 67859 option.classList.remove('selected'); 67860 } 67861 updateSelectAllPropertyTypesCheckbox(); 67862 67863 filterProperties(); 67864 } 67865 } 67866 }); 67867 67868 const checkbox = option.querySelector('input'); 67869 if (checkbox) { 67870 safeAddEventListener(checkbox, 'change', function () { 67871 const type = this.id; 67872 if (this.checked) { 67873 selectedPropertyTypes.add(type); 67874 option.classList.add('selected'); 67875 } else { 67876 selectedPropertyTypes.delete(type); 67877 option.classList.remove('selected'); 67878 } 67879 updateSelectAllPropertyTypesCheckbox(); 67880 filterProperties(); 67881 }); 67882 } 67883 }); 67884 67885 const selectAllCheckbox = document.querySelector('#select-all-status'); // new select all checkbox element 67886 67887 // Listen to the select all checkbox toggle 67888 if (selectAllCheckbox) { 67889 safeAddEventListener(selectAllCheckbox, 'change', function() { 67890 const allOptions = document.querySelectorAll('.status-type-option'); 67891 if (this.checked) { 67892 // Select all 67893 allOptions.forEach(option => { 67894 const checkbox = option.querySelector('input'); 67895 if (checkbox && !checkbox.checked) { 67896 checkbox.checked = true; 67897 selectedStatus.add(checkbox.id); 67898 option.classList.add('selected'); 67899 } 67900 }); 67901 } else { 67902 // Unselect all 67903 allOptions.forEach(option => { 67904 const checkbox = option.querySelector('input'); 67905 if (checkbox && checkbox.checked) { 67906 checkbox.checked = false;
67907 selectedStatus.delete(checkbox.id); 67908 option.classList.remove('selected'); 67909 } 67910 }); 67911 } 67912 filterProperties(); 67913 }); 67914 } 67915 document.querySelectorAll('.status-type-option').forEach(option => { 67916 safeAddEventListener(option, 'click', (e) => { 67917 if (e.target.tagName !== 'INPUT') { 67918 const checkbox = option.querySelector('input'); 67919 if (checkbox) { 67920 checkbox.checked = !checkbox.checked; 67921 const type = checkbox.id; 67922 if (checkbox.checked) { 67923 selectedStatus.add(type); 67924 option.classList.add('selected'); 67925 } else { 67926 selectedStatus.delete(type); 67927 option.classList.remove('selected'); 67928 } 67929 updateSelectAllCheckbox(); 67930 filterProperties(); 67931 } 67932 } 67933 }); 67934 67935 const checkbox = option.querySelector('input'); 67936 if (checkbox) { 67937 safeAddEventListener(checkbox, 'change', function () { 67938 const type = this.id; 67939 if (this.checked) { 67940 selectedStatus.add(type); 67941 option.classList.add('selected'); 67942 } else { 67943 selectedStatus.delete(type); 67944 option.classList.remove('selected'); 67945 } 67946 updateSelectAllCheckbox(); 67947 filterProperties(); 67948 }); 67949 } 67950 }); 67951 // Helper function to sync the Select All checkbox state 67952 function updateSelectAllCheckbox() { 67953 const allOptions = document.querySelectorAll('.status-type-option input'); 67954 const allChecked = Array.from(allOptions).every(chk => chk.checked); 67955 selectAllCheckbox.checked = allChecked; 67956 } 67957 67958 // Status accordion toggle 67959 const statusAccordion = document.querySelector('#statusAccordion .accordion-header'); 67960 safeAddEventListener(statusAccordion, 'click', function () { 67961 this.parentElement.classList.toggle('open'); 67962 }); 67963 67964 // Property type accordion toggle 67965 if (elements.accordionItem) { 67966 const accordionHeader = elements.accordionItem.querySelector('.accordion-header'); 67967 safeAddEventListener(accordionHeader, 'click', () => { 67968 elements.accordionItem.classList.toggle('open'); 67969 }); 67970 } 67971 67972 // Simple Slider navigation buttons 67973 safeAddEventListener(elements.prevButton, 'click', () => { 67974 if (currentSlide > 0) { 67975 currentSlide--; 67976 updateSlider(); 67977 } 67978 }); 67979 67980 safeAddEventListener(elements.nextButton, 'click', () => { 67981 if (currentSlide < sliderItems.length - 1) { 67982 currentSlide++; 67983 updateSlider(); 67984 } 67985 }); 67986 } 67987 const hamburger = document.getElementById("hamburgerMap"); 67988 const leftContainer = document.getElementById('leftContainerMap') 67989 const closeBtn = document.getElementById("hamburger-closeBtn"); 67990 67991 hamburger.addEventListener("click", () => { 67992 leftContainer.classList.add("active"); 67993 hamburger.style.display = "none"; 67994 }); 67995 67996 closeBtn.addEventListener("click", () => { 67997 leftContainer.classList.remove("active"); 67998 hamburger.style.display = "block"; 67999 }); 68000 function handleDropdownSelection(dropdownId, labelSelector, targetDivSelector) { 68001 const $label = $(labelSelector); 68002 const $targetDiv = $(targetDivSelector); 68003 68004 function showDiv() { 68005 $targetDiv.removeClass("hidden-important").addClass("visible-important"); 68006 } 68007 function hideDiv() { 68008 $targetDiv.removeClass("visible-important").addClass("hidden-important"); 68009 } 68010 68011 // Initial check 68012 if ($label.text().trim() === "Globally") { 68013 hideDiv(); 68014 } else { 68015 showDiv(); 68016 } 68017 68018 // Handle clicks 68019 $(`#${dropdownId} li`).on("click", function () { 68020 $label.text($(this).text()); 68021 68022 if ($(this).text().trim() === "Globally") { 68023 hideDiv(); 68024 } else { 68025 showDiv(); 68026 } 68027 }); 68028 } 68029 document.querySelectorAll(".view-option").forEach(option => { 68030 option.addEventListener("click", function () { 68031 // remove active from all 68032 const searchFilter = document.querySelector(".search-filter"); 68033 68034 if (this.dataset.view === "cards") { 68035 searchFilter.classList.add("cards-active"); 68036 searchFilter.classList.remove("map-active"); 68037 } else if (this.dataset.view === "map") { 68038 searchFilter.classList.add("map-active"); 68039 searchFilter.classList.remove("cards-active"); 68040 } 68041 }); 68042 }); 68043 const toggleBtn1 = document.getElementById("Mapbox__toggle__ExpandBtn"); 68044 const leftContainer1 = document.querySelector(".mapboxfirst_left_container"); 68045 const rightContainer1 = document.querySelector(".mapboxfirst_right_container"); 68046 const propertyMmodal = document.querySelector(".property-modalMap"); 68047 const mapTogglearrow = document.querySelector(".map-roggle-arrow") 68048 68049 let isExpanded = false;
68050 let isleftPanel = false; 68051 68052 toggleBtn1.addEventListener("click", () => { 68053 isExpanded = !isExpanded; 68054 68055 if (isExpanded) { 68056 leftContainer1.style.display = "none"; 68057 rightContainer1.style.width = "100%"; 68058 mapTogglearrow.classList.add("maptogglerotate"); 68059 map.resize(); 68060 map.on('load', setupEventListeners()); 68061 } else { 68062 leftContainer1.style.display = "flex"; 68063 rightContainer1.style.width = "70%"; // or original % 68064 mapTogglearrow.classList.remove("maptogglerotate"); 68065 map.resize(); 68066 map.on('load', setupEventListeners()); 68067 } 68068 }); 68069 document.querySelectorAll('.status-title-container').forEach(header => { 68070 header.addEventListener('click', function () { 68071 const item = this.closest('.status-accordion-item'); 68072 if (!item) return; 68073 item.classList.toggle('active'); 68074 if (item.classList.contains('active')) { 68075 item.classList.remove('status-map-close'); 68076 } else { 68077 item.classList.add('status-map-close'); 68078 } 68079 }); 68080 }); 68081 // Reuse the existing cross button inside your gallery modal 68082 const galleryModal1 = document.querySelector(".gallery-modalMap"); 68083 68084 if (galleryModal1) { 68085 const closeBtn1 = galleryModal1.querySelector(".close-gallery"); 68086 68087 if (closeBtn1) { 68088 closeBtn1.addEventListener("click", () => { 68089 // Hide modal 68090 galleryModal1.style.display = "none"; 68091 68092 // Destroy slick sliders 68093 if ($(".main-slider").hasClass("slick-initialized")) { 68094 $(".main-slider").slick("unslick"); 68095 } 68096 if ($(".thumbnail-slider").hasClass("slick-initialized")) { 68097 $(".thumbnail-slider").slick("unslick"); 68098 } 68099 }); 68100 } 68101 } 68102 function observeModalDisplayChange() { 68103 const toggleButton = document.getElementById("Mapbox__toggle__ExpandBtn"); 68104 68105 if (!toggleButton) return; 68106 68107 const observer = new MutationObserver(() => { 68108 const modal = document.querySelector('.property-modalMap'); 68109 if (!modal) return; 68110 68111 const display = window.getComputedStyle(modal).display; 68112 68113 if (display === "flex") { 68114 toggleButton.style.display = "none"; 68115 } else { 68116 toggleButton.style.display = ""; 68117 } 68118 }); 68119 68120 // Start observing changes to the whole body 68121 observer.observe(document.body, { 68122 childList: true, 68123 subtree: true, 68124 attributes: true, 68125 }); 68126 } 68127 68128 // Start the application when map is loaded 68129 map.on('load', function () { 68130 fetchData(); 68131 observeModalDisplayChange() 68132 // Hide controls initially 68133 const controls = document.querySelector(".map-animation-contaols"); 68134 68135 if (controls) { 68136 // Show once when DOM loads 68137 controls.classList.add("show"); 68138 controls.style.display = "flex"; // or block 68139 68140 // Close on outside click - keep listener active 68141 document.addEventListener("click", (e) => { 68142 if (controls.classList.contains("show") && !controls.contains(e.target)) { 68143 controls.classList.add("hide"); 68144 controls.addEventListener("transitionend", () => { 68145 controls.classList.remove("show", "hide"); 68146 controls.style.display = "none"; 68147 }, { once: true }); 68148 } 68149 }); // No { once: true } - keeps working! 68150 } 68151 map.easeTo({ 68152 zoom: map.getZoom() * 1.1, 68153 duration: 3000, 68154 easing: t => t 68155 }); 68156 68157 // Animate "globe rotation" by changing the center longitude 68158 let lng = 0; 68159 const rotateInterval = setInterval(() => { 68160 lng -= 2; 68161 map.setCenter([lng, 20]); 68162 }, 30); 68163 68164 // After 6s stop rotation and fly to target region 68165 setTimeout(() => { 68166 clearInterval(rotateInterval); 68167 68168 map.flyTo({ 68169 center: [133.7751, -25.2744], 68170 zoom: 1.5, 68171 bearing: 0, 68172 duration: 1000, 68173 essential: true 68174 }); 68175 map.once('moveend', () => { 68176 map.setStyle('mapbox://mapbox.mapbox-terrain-dem-v1'); 68177 }); 68178 }, 2000); 68179 68180 }); 68181 68182 } 68183 68184 function checkLines(selector, className) { 68185 document.querySelectorAll(selector).forEach(el => { 68186 const style = getComputedStyle(el); 68187 let lineHeight = parseFloat(style.lineHeight); 68188 68189 if (isNaN(lineHeight)) { 68190 lineHeight = parseFloat(style.fontSize) * 1.2; 68191 } 68192 68193 const textHeight = el.scrollHeight; 68194 const numLines = Math.round(textHeight / lineHeight); 68195 68196 const parent = el.parentElement; 68197 if (!parent) return; 68198 68199 if (numLines >= 2) { 68200 parent.classList.add(className); 68201 } else { 68202 parent.classList.remove(className); 68203 } 68204 }); 68205 } 68206}); 68207document.addEventListener("DOMContentLoaded", function () { 68208 const videoComponents = document.querySelectorAll(".featured-card-video-component"); 68209 if (!videoComponents.length) return; 68210
68211 videoComponents.forEach((videoComponent) => { 68212 const type = videoComponent.dataset?.type || ""; 68213 const src = videoComponent.dataset?.src || ""; 68214 const autoplayVal = videoComponent.dataset?.autoplay; 68215 const autoplay = autoplayVal === "true" || (videoComponent.hasAttribute("data-autoplay") && autoplayVal !== "false"); 68216 const poster = videoComponent.querySelector(".featured-card-video-poster"); 68217 const playBtn = videoComponent.querySelector(".featured-card-video-play-btn"); 68218 68219 if (!playBtn || !src) return; 68220 68221 let hasRendered = false; 68222 68223 const renderVideo = function (autoPlayRequested) { 68224 if (hasRendered) return; 68225 hasRendered = true; 68226 68227 if (poster) poster.remove(); 68228 68229 // YOUTUBE 68230 if (type === "youtube") { 68231 const iframe = document.createElement("iframe"); 68232 const autoPlayQuery = autoPlayRequested ? "autoplay=1&mute=1&playsinline=1" : "autoplay=1"; 68233 const ytId = (src.match(/(?:v=|\/)([0-9A-Za-z_-]{11})/) || [])[1] || Date.now(); 68234 iframe.id = "featured-yt-" + ytId; 68235 iframe.className = "youtube-video-track"; 68236 iframe.src = convertYouTubeUrlToEmbed(src) + `?${autoPlayQuery}&rel=0&enablejsapi=1`; 68237 iframe.allow = "autoplay; encrypted-media"; 68238 iframe.allowFullscreen = true; 68239 Object.assign(iframe.style, { width: "100%", height: "100%", border: "0" }); 68240 videoComponent.replaceChildren(iframe); 68241 if (window.YT && YT.Player && typeof onVideoStateChange === "function") { 68242 new YT.Player(iframe.id, { events: { onStateChange: onVideoStateChange } }); 68243 } 68244 return; 68245 } 68246 68247 // APRIMO IFRAME EMBED 68248 if (src.includes("<iframe")) { 68249 const tempDiv = document.createElement("div"); 68250 tempDiv.innerHTML = src.trim(); 68251 68252 const iframe = tempDiv.querySelector("iframe"); 68253 if (!iframe) { 68254 hasRendered = false; 68255 return; 68256 } 68257 68258 let iframeSrc = iframe.getAttribute("src") || ""; 68259 const autoPlayQuery = autoPlayRequested ? "autoplay=1&mute=1" : "autoplay=1"; 68260 iframeSrc += iframeSrc.includes("?") ? `&${autoPlayQuery}` : `?${autoPlayQuery}`; 68261 iframe.setAttribute("src", iframeSrc); 68262 68263 iframe.allow = "autoplay; encrypted-media"; 68264 iframe.allowFullscreen = true; 68265 Object.assign(iframe.style, { width: "100%", height: "100%", border: "0" }); 68266 68267 videoComponent.replaceChildren(iframe); 68268 return; 68269 } 68270 68271 // DAM / HTML5 VIDEO 68272 const video = document.createElement("video"); 68273 video.src = src; 68274 video.controls = true; 68275 video.autoplay = true; 68276 if (autoPlayRequested) { 68277 // Browsers typically require muted media for autoplay without user gesture. 68278 video.muted = true; 68279 video.defaultMuted = true; 68280 video.setAttribute("muted", ""); 68281 } 68282 video.playsInline = true; 68283 video.classList.add("asset-video-track"); 68284 video.setAttribute("data-video-url", src); 68285 video.setAttribute("data-component-name", videoComponent.dataset.componentName || "Featured Video and Articles"); 68286 Object.assign(video.style, { width: "100%", height: "100%" }); 68287 68288 videoComponent.replaceChildren(video); 68289 if (typeof window.initAssetVideoTrack === "function") { 68290 window.initAssetVideoTrack(video); 68291 } 68292 video.play(); 68293 }; 68294 68295 playBtn.addEventListener("click", function () { 68296 renderVideo(false); 68297 }); 68298 68299 if (autoplay) { 68300 // Trigger renderVideo when the component scrolls into view (>= 50% visible). 68301 var observer = new IntersectionObserver( 68302 function (entries, obs) { 68303 entries.forEach(function (entry) { 68304 if (entry.isIntersecting) { 68305 renderVideo(true); 68306 obs.unobserve(videoComponent); // fire once only 68307 } 68308 }); 68309 }, 68310 { threshold: 0.5 } 68311 ); 68312 observer.observe(videoComponent); 68313 } 68314 }); 68315 68316 function isTruthy(value) { 68317 return ["true", "1", "yes", "on"].includes((value || "").toLowerCase()); 68318 } 68319 68320 function convertYouTubeUrlToEmbed(url) { 68321 if (!url) return ""; 68322 const match = url.match(/(?:v=|\/)([0-9A-Za-z_-]{11})/); 68323 return match ? `https://www.youtube.com/embed/${match[1]}` : url; 68324 } 68325}); 68326 68327(function () { 68328 'use strict'; 68329 68330 const MONTHS = { 68331 Jan: 0, FEB: 1, Mar: 2, APR: 3, May: 4, Jun: 5, 68332 Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11, 68333 JAN: 0, MAR: 2, JUN: 5, JUL: 6, AUG: 7, SEP: 8, OCT: 9, NOV: 10, DEC: 11 68334 }; 68335 68336 function parseDate(value) { 68337 if (!value) return null; 68338 68339 const raw = value.trim(); 68340
68341 // 1) Primary format: "07 Mar 2025" (or variable year) 68342 const parts = raw.split(' ').filter(Boolean); 68343 if (parts.length >= 2) { 68344 const day = parseInt(parts[0].replace(/[^0-9]/g, ''), 10); 68345 const monthKey = parts[1].replace('.', '').toUpperCase(); 68346 const month = MONTHS[monthKey] !== undefined ? MONTHS[monthKey] : MONTHS[parts[1]]; 68347 const year = parts.length > 2 ? parseInt(parts[2], 10) : new Date().getFullYear(); 68348 if (!isNaN(day) && month !== undefined && !isNaN(year)) { 68349 const monthLabel = parts[1].length > 0 ? parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase() : parts[1]; 68350 return { day, month, year, monthLabel }; 68351 } 68352 } 68353 68354 // 2) Accept ISO / date string fallback 68355 const dt = new Date(raw); 68356 if (!isNaN(dt)) { 68357 const day = dt.getDate(); 68358 const month = dt.getMonth(); 68359 const monthLabel = dt.toLocaleDateString('en-US', { month: 'short' }); 68360 const year = dt.getFullYear(); 68361 return { day, month, year, monthLabel }; 68362 } 68363 68364 return null; 68365 } 68366 68367 function setNodeText(node, value) { 68368 if (!node) return; 68369 node.textContent = value || ''; 68370 } 68371 68372 function renderDateBlock(wrapper) { 68373 const start = parseDate(wrapper.getAttribute('data-start-date')); 68374 const end = parseDate(wrapper.getAttribute('data-end-date')); 68375 68376 const allDesigns = wrapper.querySelectorAll('.date-design'); 68377 allDesigns.forEach((block) => { 68378 block.classList.remove('active'); 68379 block.style.display = 'none'; 68380 }); 68381 68382 if (!start && !end) { 68383 // nothing to show 68384 return; 68385 } 68386 68387 if ((!start || !end) || (start.day === end?.day && start.month === end?.month && start.year === end?.year)) { 68388 // single date fallback when one date is missing or equal 68389 const single = start || end; 68390 const block = wrapper.querySelector('.date-design.single-date'); 68391 if (!block || !single) return; 68392 block.classList.add('active'); 68393 block.style.display = 'inline-flex'; 68394 setNodeText(block.querySelector('.date-day'), String(single.day)); 68395 setNodeText(block.querySelector('.date-month'), single.monthLabel); 68396 return; 68397 } 68398 68399 if (start.year === end.year && start.month === end.month) { 68400 // range within same month 68401 const block = wrapper.querySelector('.date-design.range-same-month'); 68402 if (!block) return; 68403 block.classList.add('active'); 68404 block.style.display = 'inline-flex'; 68405 setNodeText(block.querySelector('.date-day'), `${start.day} - ${end.day}`); 68406 setNodeText(block.querySelector('.date-month'), start.monthLabel); 68407 return; 68408 } 68409 68410 // range across months 68411 const block = wrapper.querySelector('.date-design.range-different-month'); 68412 if (!block) return; 68413 block.classList.add('active'); 68414 block.style.display = 'inline-flex'; 68415
68416 const startNode = block.querySelector('.start-date'); 68417 const endNode = block.querySelector('.end-date'); 68418 68419 setNodeText(startNode?.querySelector('.date-day'), String(start.day)); 68420 setNodeText(startNode?.querySelector('.date-month'), start.monthLabel); 68421 setNodeText(endNode?.querySelector('.date-day'), String(end.day)); 68422 setNodeText(endNode?.querySelector('.date-month'), end.monthLabel); 68423 } 68424 68425 function initializeDateDesigns() { 68426 document.querySelectorAll('.date-wrapper-image').forEach((wrapper) => { 68427 renderDateBlock(wrapper); 68428 }); 68429 } 68430 68431 if (document.readyState === 'loading') { 68432 document.addEventListener('DOMContentLoaded', initializeDateDesigns); 68433 } else { 68434 initializeDateDesigns(); 68435 } 68436})(); 68437document.addEventListener("DOMContentLoaded", function () { 68438 const containers = document.querySelectorAll(".text-image-sup-graphics .article-text-image-container"); 68439 68440 if (!containers.length) { 68441 return; 68442 } 68443 68444 function setHeightForContainer(container) { 68445 const img = container.querySelector(".frasertxtnimg__img"); 68446 if (!img) { 68447 return; 68448 } 68449 68450 const caption = container.querySelector(".article-text-image-caption-text"); 68451 const captionHeight = caption ? caption.offsetHeight + 16 : 0; 68452 // +110 is the design bleed for the supergraphic PNG (bottom-aligned). 68453 // Grow further only when multi-line captions need extra coverage. 68454 const imgHeight = img.offsetHeight + Math.max(110, captionHeight + 24); 68455 container.style.setProperty("--img-height", imgHeight + "px"); 68456 } 68457 68458 function syncAllHeights() { 68459 containers.forEach(setHeightForContainer); 68460 } 68461 68462 containers.forEach(function (container) { 68463 const img = container.querySelector(".frasertxtnimg__img"); 68464 if (!img) { 68465 return; 68466 } 68467 68468 if (img.complete) { 68469 setHeightForContainer(container); 68470 } else { 68471 img.addEventListener("load", function () { 68472 setHeightForContainer(container); 68473 }, { once: true }); 68474 } 68475 }); 68476 68477 window.addEventListener("resize", syncAllHeights); 68478 window.addEventListener("load", syncAllHeights); 68479 68480}); 68481function setDotsPosition() { 68482 if ($('.textandimagefeatcaptions').length > 0 && $(window).width() >= 834) { 68483 var $text = $(".fraserproperty__txt div"); 68484 if ($text.length) { 68485 var pos = $text.position(); 68486 var height = $text.outerHeight(); 68487 var owlPosition = pos.top + height + 20; 68488 $('.fraserproperty__listcont .owl-dots').css({ 68489 position: 'absolute', 68490 top: owlPosition + 'px' 68491 }); 68492 } 68493 } 68494} 68495 68496$(document).ready(function () { 68497 setDotsPosition(); 68498 $('.owl-carousel').on('initialized.owl.carousel', function () { 68499 setDotsPosition(); 68500 }); 68501 $(window).on('resize', setDotsPosition); 68502}); 68503 68504$(".textandimagefeatcaptions .fraserproperty__imgcont").each(function () { 68505 const $cont = $(this); 68506 const imgSrc = $cont.find("img.potrait-img").attr("src"); 68507 if (imgSrc) { 68508 $cont.css("--bg-img", `url('${imgSrc}')`); 68509 } 68510}); 68511$(document).ready(function () { 68512 // Tunable motion constants for image inertia while pinned. 68513 var EASE_FACTOR = 0.15; 68514 var SCROLL_FACTOR = 0.25; 68515 var MAX_OFFSET = 16; 68516 68517 // Cache stable selectors used on every scroll frame. 68518 var $window = $(window); 68519 var $articleTextImageContainers = $('.article-text-image-container'); 68520 var previousScrollTop = $window.scrollTop(); 68521 var imageOffset = 0; 68522 var targetOffset = 0; 68523 var rafId = null; 68524 var textImageTicking = false; 68525 var lastPinnedImg = null; 68526 var DESKTOP_TOP_GAP = 160; 68527 var MOBILE_TOP_GAP = 0; 68528 var MOBILE_SUPGRAPHIC_EXTRA_PIN_OFFSET = 65; 68529 68530 function isMobile() { 68531 return window.matchMedia('(max-width: 834px)').matches; 68532 } 68533 68534 // CSS top gap value used on .sticky-image-container.is-pinned. 68535 function getStickyCssTopGap() { 68536 return isMobile() ? MOBILE_TOP_GAP : DESKTOP_TOP_GAP; 68537 } 68538 68539 function hasMobileSupgraphicOffset($container) { 68540 var $root = $container.closest('.article-text-and-image'); 68541 return $root.hasClass('text-image-sup-graphics-2'); 68542 } 68543 68544 // Effective visual gap used to determine start/end pin thresholds. 68545 function getEffectiveTopGap($container) { 68546 var topGap = getStickyCssTopGap(); 68547 if (isMobile() && hasMobileSupgraphicOffset($container)) { 68548 topGap += MOBILE_SUPGRAPHIC_EXTRA_PIN_OFFSET; 68549 } 68550 return topGap; 68551 } 68552 68553 // Lightweight easing for smooth follow motion. 68554 function ease(current, target, factor) { 68555 return current + (target - current) * factor; 68556 } 68557
68558 // Keeps only one sticky state class active at a time. 68559 function setStickyState($stickyImgWrap, state) { 68560 $stickyImgWrap.removeClass('is-before-pin is-pinned is-after-pin').addClass(state); 68561 } 68562 68563 // Mirrors sticky state on the container so layout/CSS can react to pinning. 68564 function setContainerPinState($container, state) { 68565 $container.removeClass('ati-before-pin ati-is-pinned ati-after-pin').addClass(state); 68566 } 68567 68568 // Drives inertial image movement while pinned, and eases out on release. 68569 function animateImage() { 68570 imageOffset = ease(imageOffset, targetOffset, EASE_FACTOR); 68571 68572 if (lastPinnedImg) { 68573 if (Math.abs(imageOffset) < 0.2 && Math.abs(targetOffset) < 0.2) { 68574 imageOffset = 0; 68575 targetOffset = 0; 68576 lastPinnedImg.css('transform', 'none'); 68577 lastPinnedImg = null; 68578 rafId = null; 68579 } else { 68580 lastPinnedImg.css('transform', 'translateY(' + imageOffset + 'px)'); 68581 rafId = requestAnimationFrame(animateImage); 68582 } 68583 } else if (Math.abs(imageOffset) >= 0.2 || Math.abs(targetOffset) >= 0.2) { 68584 // Continue easing toward 0 after unpin so start/end don't hard-snap. 68585 rafId = requestAnimationFrame(animateImage); 68586 } else { 68587 imageOffset = 0; 68588 targetOffset = 0; 68589 rafId = null; 68590 } 68591 } 68592 68593 // Soft-release inertia instead of instantly clearing translateY. 68594 function releaseInertia($img) { 68595 targetOffset = 0; 68596 if ($img && $img.length && Math.abs(imageOffset) >= 0.2) { 68597 lastPinnedImg = $img; 68598 if (!rafId) { 68599 rafId = requestAnimationFrame(animateImage); 68600 } 68601 } else if (lastPinnedImg && lastPinnedImg[0] === ($img && $img[0])) { 68602 lastPinnedImg = null; 68603 if ($img) $img.css('transform', 'none'); 68604 } 68605 } 68606 68607 // Computes pin state per container and updates active image behavior. 68608 function applyVideoImagePin() { 68609 var stickyCssTopGap = getStickyCssTopGap(); 68610 var scrollTop = $window.scrollTop(); 68611 var delta = scrollTop - previousScrollTop; 68612 var foundPinned = false; 68613 68614 $articleTextImageContainers.each(function () { 68615 var $container = $(this); 68616 var $stickyImgWrap = $container.find('.sticky-image-container'); 68617 if (!$stickyImgWrap.length) return; 68618 var $pinCol = $stickyImgWrap.parent(); 68619 var $pinSpacer = $stickyImgWrap.next('.ati-pin-spacer'); 68620 if (!$pinSpacer.length) {
68621 $pinSpacer = $('<div class="ati-pin-spacer" aria-hidden="true"></div>'); 68622 $stickyImgWrap.after($pinSpacer); 68623 } 68624 68625 var $img = $stickyImgWrap.find('.frasertxtnimg__img'); 68626 // Measure size before toggling position modes to avoid layout jump. 68627 var imageHeight = $stickyImgWrap.outerHeight(); 68628 // Column height must be read before state changes; absolute pin-end is relative to this column. 68629 var pinColHeight = Math.max($pinCol.outerHeight(), imageHeight); 68630 var effectiveTopGap = getEffectiveTopGap($container); 68631 68632 // Use in-flow top (sticky when relative, spacer when fixed/absolute) so pin start 68633 // matches the image's real position â avoids the jump from container-top math. 68634 var isPinnedOrAfter = $stickyImgWrap.hasClass('is-pinned') || $stickyImgWrap.hasClass('is-after-pin'); 68635 var stickyFlowTop = isPinnedOrAfter ? $pinSpacer.offset().top : $stickyImgWrap.offset().top; 68636 var startPin = stickyFlowTop - effectiveTopGap; 68637 // End pin when the image has traveled to the bottom of its column (matches after-pin absolute top). 68638 var endPin = startPin + Math.max(0, pinColHeight - imageHeight); 68639 68640 // Always size from the column so the image fills col--5 (not the shrunk sticky width). 68641 var wrapperWidth = $pinCol.width(); 68642 var wrapperLeft = $pinCol.offset().left; 68643 68644 // Before pin range: image remains in normal document flow. 68645 if (scrollTop < startPin) { 68646 $pinSpacer.css({ 68647 display: 'block', 68648 height: '0px' 68649 }); 68650 $container.css('--ati-mobile-hide-px', '0px'); 68651 setContainerPinState($container, 'ati-before-pin'); 68652 setStickyState($stickyImgWrap, 'is-before-pin'); 68653 $stickyImgWrap.css({ 68654 top: '', 68655 left: '', 68656 width: '' 68657 }); 68658 if (lastPinnedImg && lastPinnedImg[0] === $img[0]) { 68659 releaseInertia($img); 68660 } else { 68661 $img.css('transform', 'none'); 68662 } 68663 // Pin range: wrapper is fixed, image gets inertial translateY motion. 68664 } else if (scrollTop >= startPin && scrollTop <= endPin) { 68665 var scrolledPx = scrollTop - startPin; 68666 if (isMobile() && hasMobileSupgraphicOffset($container)) { 68667 scrolledPx = Math.max(0, scrolledPx - MOBILE_SUPGRAPHIC_EXTRA_PIN_OFFSET); 68668 } 68669 var $scrollContent = $container.find('.scroll-content'); 68670 var scrollContentHeight = $scrollContent.length ? $scrollContent[0].scrollHeight : 0; 68671 var clippedPx = Math.min(scrolledPx, scrollContentHeight); 68672 $pinSpacer.css({ 68673 display: 'block', 68674 height: imageHeight + 'px' 68675 }); 68676 $container.css('--ati-mobile-hide-px', clippedPx + 'px'); 68677 setContainerPinState($container, 'ati-is-pinned'); 68678 // Set pin vars on the container so ::after supergraphic can use --ati-top-gap. 68679 $container.css('--ati-top-gap', stickyCssTopGap + 'px'); 68680 $stickyImgWrap.css({ 68681 '--ati-top-gap': stickyCssTopGap + 'px', 68682 '--ati-left': wrapperLeft + 'px', 68683 '--ati-width': wrapperWidth + 'px' 68684 }); 68685 setStickyState($stickyImgWrap, 'is-pinned'); 68686 if (!lastPinnedImg || lastPinnedImg[0] !== $img[0]) { 68687 // Entering pin: start from rest so the first frame is not jumpy. 68688 imageOffset = 0; 68689 targetOffset = 0; 68690 $img.css('transform', 'none'); 68691 } 68692 lastPinnedImg = $img; 68693 foundPinned = true; 68694 // After pin range: wrapper is anchored at the bottom of its column. 68695 } else { 68696 // Keep spacer height so container/endPin math stays stable across frames. 68697 $pinSpacer.css({ 68698 display: 'block', 68699 height: imageHeight + 'px' 68700 });
68701 var $scrollContentAfter = $container.find('.scroll-content'); 68702 var fullHeight = $scrollContentAfter.length ? $scrollContentAfter[0].scrollHeight : 9999; 68703 $container.css('--ati-mobile-hide-px', fullHeight + 'px'); 68704 setContainerPinState($container, 'ati-after-pin'); 68705 var absoluteTop = Math.max(0, pinColHeight - imageHeight); 68706 $stickyImgWrap.css({ 68707 '--ati-absolute-top': absoluteTop + 'px', 68708 '--ati-width': wrapperWidth + 'px' 68709 }); 68710 setStickyState($stickyImgWrap, 'is-after-pin'); 68711 if (lastPinnedImg && lastPinnedImg[0] === $img[0]) { 68712 releaseInertia($img); 68713 } else { 68714 $img.css('transform', 'none'); 68715 } 68716 } 68717 }); 68718 68719 if (foundPinned && lastPinnedImg) { 68720 // Convert scroll delta into bounded target offset for inertia. 68721 targetOffset -= delta * SCROLL_FACTOR; 68722 targetOffset = Math.max(Math.min(targetOffset, MAX_OFFSET), -MAX_OFFSET); 68723 if (!rafId) { 68724 rafId = requestAnimationFrame(animateImage); 68725 } 68726 } else { 68727 // No active pinned image: ease inertia out instead of cancelling mid-offset. 68728 targetOffset = 0; 68729 if (!rafId && Math.abs(imageOffset) >= 0.2) { 68730 rafId = requestAnimationFrame(animateImage); 68731 } else if (Math.abs(imageOffset) < 0.2) { 68732 imageOffset = 0; 68733 if (!rafId) { 68734 lastPinnedImg = null; 68735 } 68736 } 68737 } 68738 68739 previousScrollTop = scrollTop; 68740 } 68741 68742 // Throttles scroll handler work to one update per paint frame. 68743 function onScroll() { 68744 if (!textImageTicking) { 68745 requestAnimationFrame(function () { 68746 applyVideoImagePin(); 68747 textImageTicking = false; 68748 }); 68749 textImageTicking = true; 68750 } 68751 } 68752 68753 window.addEventListener('scroll', onScroll); 68754 window.addEventListener('resize', applyVideoImagePin); 68755 window.addEventListener('load', applyVideoImagePin); 68756}); 68757 68758$(document).ready(function () { 68759 var DESKTOP_TOP_GAP = 160; 68760 var MOBILE_TOP_GAP = 90; 68761 var STEP_SCROLL_RATIO = 0.65; 68762 var FINAL_HEADING_PHASE_STEPS = 1; 68763 var CONTENT_ANIMATION_OFFSET = 60; // px 68764 // Cache stable selectors used on every animation frame. 68765 var $window = $(window); 68766 var $articleMultipleTextImageContainers = $('.article-multiple-text-image-container'); 68767 var ticking = false; 68768 68769 // Returns the fixed top offset used while the container is pinned. 68770 function getTopGap() { 68771 return window.matchMedia('(max-width: 834px)').matches ? MOBILE_TOP_GAP : DESKTOP_TOP_GAP; 68772 } 68773 68774 // Interpolates heading color from black to brand red based on progress (0..1). 68775 function getHeadingColor(progress) { 68776 var p = Math.max(0, Math.min(1, progress)); 68777 var start = { r: 0, g: 0, b: 0 }; 68778 var end = { r: 237, g: 28, b: 36 }; 68779 var r = Math.round(start.r + (end.r - start.r) * p); 68780 var g = Math.round(start.g + (end.g - start.g) * p); 68781 var b = Math.round(start.b + (end.b - start.b) * p); 68782 return 'rgb(' + r + ',' + g + ',' + b + ')'; 68783 } 68784 68785 // Splits heading text into per-character spans once, enabling progressive color animation. 68786 function ensureHeadingChars($heading) { 68787 if (!$heading.length || $heading.data('mtiSplit')) return; 68788 68789 var text = $heading.text() || ''; 68790 var html = text.split('').map(function (ch, i) { 68791 // Preserve spaces as so word gaps are not collapsed when wrapping each char in a span. 68792 return '<span class="mti-char" data-char-index="' + i + '">' + 68793 (ch === ' ' ? ' ' : ch) + 68794 '</span>'; 68795 }).join(''); 68796 68797 $heading.html(html); 68798 $heading.data('mtiSplit', true); 68799 } 68800 68801 // Applies left-to-right heading color progression using the generated character spans. 68802 function applyHeadingColorProgress($heading, progress) { 68803 ensureHeadingChars($heading); 68804 68805 var $chars = $heading.find('.mti-char'); 68806 var total = $chars.length; 68807 if (!total) return; 68808 68809 var p = Math.max(0, Math.min(1, progress)); 68810 var reveal = p * total; 68811 68812 $chars.each(function (idx) { 68813 // Each character transitions as the reveal cursor passes it. 68814 var charProgress = Math.max(0, Math.min(1, reveal - idx)); 68815 this.style.color = getHeadingColor(charProgress); 68816 }); 68817 } 68818 68819 // Applies visual state for all items: active/inactive visibility, content motion, heading color, and media opacity. 68820 function setItemState($items, primaryIndex, primaryOpacity, secondaryIndex, secondaryOpacity, headingProgress, contentYProgress, contentExtraUp, headingAnimationEnabled) { 68821 var extraUp = Math.max(0, contentExtraUp || 0); 68822 $items.each(function (idx) { 68823 var $item = $(this); 68824 var $content = $item.find('.article-text-image__content'); 68825 var $media = $item.find('.article-text-image__media'); 68826 var $heading = $item.find('.article-text-image__content h2'); 68827 var isPrimary = idx === primaryIndex; 68828 var isSecondary = idx === secondaryIndex; 68829 var isVisible = isPrimary || isSecondary; 68830 var primaryValue = isPrimary ? primaryOpacity : 0; 68831 var secondaryValue = isSecondary ? secondaryOpacity : 0; 68832 var mediaOpacity = Math.max(primaryValue, secondaryValue); 68833 mediaOpacity = Math.max(0, Math.min(1, mediaOpacity)); 68834 68835 $item.css({ 68836 opacity: 1, 68837 visibility: isVisible ? 'visible' : 'hidden', 68838 pointerEvents: isPrimary ? 'auto' : 'none' 68839 }); 68840 68841 if (isPrimary) { 68842 // Slide content up from CONTENT_ANIMATION_OFFSET to 0 based on scroll progress 68843 var translateY = ((1 - contentYProgress) * CONTENT_ANIMATION_OFFSET) - extraUp; 68844 var contentOpacity = Math.max(0, Math.min(1, contentYProgress)); 68845 $content.css({ 68846 transform: 'translateY(' + translateY + 'px)', 68847 opacity: contentOpacity, 68848 visibility: 'visible' 68849 }); 68850 } else { 68851 // Reset non-active items to offset so they slide in again next time they become active 68852 $content.css({ 68853 transform: 'translateY(' + CONTENT_ANIMATION_OFFSET + 'px)', 68854 opacity: 0, 68855 visibility: 'hidden' 68856 }); 68857 } 68858 68859 // Heading black-to-red animation is opt-in via dialog checkbox. 68860 if (headingAnimationEnabled) { 68861 applyHeadingColorProgress($heading, isPrimary ? headingProgress : 0); 68862 } 68863 68864 $media.css({ 68865 opacity: mediaOpacity, 68866 visibility: isVisible ? 'visible' : 'hidden' 68867 }); 68868 }); 68869 } 68870
68871 // Main scroll driver: computes pin phase, per-block timing, long-text reveal, heading animation, and crossfades. 68872 function applyMultipleImageAnimation() { 68873 var scrollTop = $window.scrollTop(); 68874 var windowHeight = $window.height(); 68875 var topGap = getTopGap(); 68876 68877 $articleMultipleTextImageContainers.each(function () { 68878 var $mainContainer = $(this); 68879 var $items = $mainContainer.find('.article-text-multiple-image-item-wrapper'); 68880 var $supergraphic = $mainContainer.find('.mti-supergraphic'); 68881 var headingAnimationEnabled = $mainContainer.hasClass('mti-heading-animation'); 68882 if (!$items.length) return; 68883 var availableHeight = Math.max(0, windowHeight - topGap - 24); 68884 68885 // A single item should behave like normal page content with no pin/crossfade logic. 68886 if ($items.length === 1) { 68887 var $singleAnchor = $mainContainer.prev('.article-mti-pin-anchor'); 68888 var $singleSpacer = $mainContainer.next('.article-mti-pin-spacer'); 68889 var $singleContent = $items.first().find('.article-text-image__content'); 68890 var isSingleOverflow = ($singleContent.outerHeight(true) || 0) > availableHeight; 68891 68892 $mainContainer.addClass('mti-single-item'); 68893 $mainContainer.toggleClass('mti-has-text-overflow', isSingleOverflow); 68894 $items.first().toggleClass('mti-text-overflow', isSingleOverflow); 68895 68896 $mainContainer.css({ 68897 position: 'relative', 68898 top: '0px', 68899 left: 'auto', 68900 width: '100%', 68901 height: 'auto', 68902 zIndex: 'auto', 68903 overflow: 'visible' 68904 }); 68905 68906 if ($singleAnchor.length) { 68907 $singleAnchor.css('display', 'none'); 68908 } 68909 if ($singleSpacer.length) { 68910 $singleSpacer.css('display', 'none'); 68911 } 68912 68913 $supergraphic.css('visibility', 'hidden'); 68914 setItemState($items, 0, 1, -1, 0, 1, 1, 0, headingAnimationEnabled); 68915 return; 68916 } 68917 68918 $mainContainer.removeClass('mti-single-item'); 68919 68920 var $anchor = $mainContainer.prev('.article-mti-pin-anchor'); 68921 if (!$anchor.length) { 68922 $anchor = $('<div class="article-mti-pin-anchor" aria-hidden="true"></div>'); 68923 $mainContainer.before($anchor); 68924 } 68925 68926 var $spacer = $mainContainer.next('.article-mti-pin-spacer'); 68927 if (!$spacer.length) {
68928 $spacer = $('<div class="article-mti-pin-spacer"></div>'); 68929 $mainContainer.after($spacer); 68930 } 68931 68932 var maxItemHeight = 0; 68933 $items.each(function () { 68934 var h = $(this).outerHeight(true); 68935 if (h > maxItemHeight) maxItemHeight = h; 68936 }); 68937 if (!maxItemHeight) return; 68938 68939 // The pinned container can only use the visible viewport area below the fixed top gap. 68940 var renderHeight = Math.min(maxItemHeight, availableHeight); 68941 68942 var contentOverflows = []; 68943 var hasAnyOverflow = false; 68944 $items.each(function (idx) { 68945 var $item = $(this); 68946 var contentHeight = $item.find('.article-text-image__content').outerHeight(true) || 0; 68947 // Extra scroll budget reserved so long text can fully pass through before advancing. 68948 contentOverflows[idx] = Math.max(0, contentHeight - renderHeight); 68949 var hasOverflow = contentOverflows[idx] > 0; 68950 $item.toggleClass('mti-text-overflow', hasOverflow); 68951 hasAnyOverflow = hasAnyOverflow || hasOverflow; 68952 }); 68953 $mainContainer.toggleClass('mti-has-text-overflow', hasAnyOverflow); 68954 68955 var stepScroll = windowHeight * STEP_SCROLL_RATIO; 68956 // Drop the heading-phase scroll budget when heading animation is disabled. 68957 var headingPortion = headingAnimationEnabled ? (stepScroll * 0.3) : 0; 68958 var activeStepScroll = headingAnimationEnabled ? stepScroll : (stepScroll * 0.7); 68959 var transitionCount = Math.max(1, $items.length - 1); 68960 var transitionStepDistances = []; 68961 var totalPinScroll = 0; 68962 for (var t = 0; t < transitionCount; t++) { 68963 // Each transition step gets a base scroll distance plus any extra text overflow. 68964 transitionStepDistances[t] = activeStepScroll + contentOverflows[t]; 68965 totalPinScroll += transitionStepDistances[t]; 68966 } 68967 // The final block has no fade-to-next, but still needs entrance/text/(optional heading) scroll time. 68968 var finalStepDistance = (activeStepScroll * FINAL_HEADING_PHASE_STEPS) + contentOverflows[$items.length - 1]; 68969 totalPinScroll += finalStepDistance; 68970 68971 $mainContainer.css('height', renderHeight + 'px'); 68972 68973 var anchorTop = $anchor.offset().top; 68974 var startPinPoint = anchorTop - topGap; 68975 var endPinPoint = startPinPoint + totalPinScroll; 68976 68977 // Before pin start, keep the first item visible in its resting state. 68978 if (scrollTop < startPinPoint) { 68979 $mainContainer.removeClass('mti-is-pinned'); 68980 $spacer.css('display', 'none'); 68981 $mainContainer.css({ 68982 position: 'relative', 68983 top: '0px', 68984 left: 'auto', 68985 width: '100%', 68986 zIndex: 'auto' 68987 }); 68988 // Supergraphic tracks the component's scroll position; hide when outside the viewport. 68989 var sgPreTop = anchorTop - scrollTop - topGap; 68990 $supergraphic.css({ 68991 top: sgPreTop + 'px', 68992 visibility: (sgPreTop < windowHeight) ? 'visible' : 'hidden' 68993 }); 68994 setItemState($items, 0, 1, -1, 0, 0, 1, 0, headingAnimationEnabled); 68995 return; 68996 } 68997 68998 // After pin end, leave the last item in its fully completed state. 68999 if (scrollTop > endPinPoint) { 69000 $mainContainer.removeClass('mti-is-pinned'); 69001 $spacer.css({ 69002 display: 'block', 69003 height: totalPinScroll + 'px' 69004 }); 69005 $mainContainer.css({ 69006 position: 'relative', 69007 top: totalPinScroll + 'px', 69008 left: 'auto', 69009 width: '100%', 69010 zIndex: 'auto' 69011 }); 69012 // Supergraphic tracks the container's position as it scrolls away; hide when fully above viewport. 69013 var sgPostTop = anchorTop + totalPinScroll - scrollTop - topGap; 69014 $supergraphic.css({ 69015 top: sgPostTop + 'px', 69016 visibility: (sgPostTop + renderHeight > 0) ? 'visible' : 'hidden' 69017 }); 69018 setItemState($items, $items.length - 1, 1, -1, 0, 1, 1, contentOverflows[$items.length - 1], headingAnimationEnabled); 69019 return; 69020 } 69021 69022 // Pinned phase: freeze the container in place and drive the active block from scroll offset. 69023 $mainContainer.addClass('mti-is-pinned'); 69024 // Supergraphic is pinned at the very top of the viewport. 69025 $supergraphic.css({ 69026 top: '0px', 69027 visibility: 'visible' 69028 }); 69029 var rect = $mainContainer[0].getBoundingClientRect(); 69030 var containerLeft = rect.left + window.pageXOffset; 69031 var containerWidth = rect.width; 69032 $spacer.css({ 69033 display: 'block', 69034 height: (renderHeight + totalPinScroll) + 'px' 69035 }); 69036 69037 $mainContainer.css({ 69038 position: 'fixed', 69039 top: topGap + 'px', 69040 left: containerLeft + 'px', 69041 width: containerWidth + 'px', 69042 zIndex: 998 69043 }); 69044 69045 var pinnedOffset = scrollTop - startPinPoint; 69046 var baseIndex = 0; 69047 var stepOffset = pinnedOffset; 69048 var currentStepDistance = transitionStepDistances[0]; 69049 var inFinalStep = false;
69050 69051 // Find which block step the current pinned scroll offset belongs to. 69052 for (var s = 0; s < transitionCount; s++) { 69053 if (stepOffset <= transitionStepDistances[s]) { 69054 baseIndex = s; 69055 currentStepDistance = transitionStepDistances[s]; 69056 break; 69057 } 69058 stepOffset -= transitionStepDistances[s]; 69059 baseIndex = s + 1; 69060 } 69061 69062 if (baseIndex >= transitionCount) { 69063 // Past all transition steps means we are in the dedicated last-block phase. 69064 inFinalStep = true; 69065 baseIndex = $items.length - 1; 69066 currentStepDistance = finalStepDistance; 69067 stepOffset = Math.max(0, Math.min(finalStepDistance, stepOffset)); 69068 } 69069 69070 var localProgress = currentStepDistance ? (stepOffset / currentStepDistance) : 0; 69071 localProgress = Math.max(0, Math.min(1, localProgress)); 69072 69073 var nextIndex = Math.min(baseIndex + 1, $items.length - 1); 69074 var contentYProgress = 0; 69075 var contentExtraUp = 0; 69076 var headingProgress = 0; 69077 var primaryOpacity = 1; 69078 var secondaryOpacity = 0; 69079 var textOverflow = contentOverflows[baseIndex] || 0; 69080 var entranceDist = stepScroll * 0.2; 69081 var headingDist = headingPortion; 69082 var fadeDist = inFinalStep ? 0 : (stepScroll * 0.5); 69083 var textDist = textOverflow; 69084 var localOffset = localProgress * currentStepDistance; 69085 69086 // Phase 1: content enters from 60px below and fades in. 69087 if (localOffset < entranceDist) { 69088 contentYProgress = entranceDist ? (localOffset / entranceDist) : 1; 69089 headingProgress = 0; 69090 setItemState($items, baseIndex, 1, inFinalStep ? -1 : nextIndex, 0, headingProgress, contentYProgress, 0, headingAnimationEnabled); 69091 return; 69092 } 69093 69094 // Phase 2: if text is long, keep block active and scroll content upward until fully readable. 69095 var afterEntrance = localOffset - entranceDist; 69096 if (afterEntrance < textDist) { 69097 contentYProgress = 1; 69098 contentExtraUp = textDist ? (afterEntrance / textDist) * textDist : 0; 69099 headingProgress = 0; 69100 setItemState($items, baseIndex, 1, inFinalStep ? -1 : nextIndex, 0, headingProgress, contentYProgress, contentExtraUp, headingAnimationEnabled); 69101 return; 69102 } 69103 69104 // Phase 3: once the text is fully revealed, animate the heading from black to red. 69105 var afterText = afterEntrance - textDist; 69106 if (afterText < headingDist) { 69107 contentYProgress = 1; 69108 contentExtraUp = textDist; 69109 headingProgress = headingDist ? (afterText / headingDist) : 1; 69110 setItemState($items, baseIndex, 1, inFinalStep ? -1 : nextIndex, 0, headingProgress, contentYProgress, contentExtraUp, headingAnimationEnabled); 69111 return; 69112 } 69113 69114 // Phase 4: crossfade media to the next block, except for the final block. 69115 contentYProgress = 1; 69116 contentExtraUp = textDist; 69117 headingProgress = 1; 69118 69119 if (inFinalStep || fadeDist <= 0) { 69120 setItemState($items, baseIndex, 1, -1, 0, headingProgress, contentYProgress, contentExtraUp, headingAnimationEnabled); 69121 return; 69122 } 69123 69124 var fadeOffset = afterText - headingDist; 69125 var fadeMix = Math.max(0, Math.min(1, fadeOffset / fadeDist)); 69126 primaryOpacity = 1 - fadeMix; 69127 secondaryOpacity = fadeMix; 69128 69129 setItemState($items, baseIndex, primaryOpacity, nextIndex, secondaryOpacity, headingProgress, contentYProgress, contentExtraUp, headingAnimationEnabled); 69130 }); 69131 } 69132 69133 // Throttles scroll-driven animation updates to the browser paint cycle. 69134 function onScroll() { 69135 if (!ticking) { 69136 requestAnimationFrame(function () { 69137 applyMultipleImageAnimation(); 69138 ticking = false;
69139 }); 69140 ticking = true; 69141 } 69142 } 69143 69144 applyMultipleImageAnimation(); 69145 $window.on('scroll', onScroll); 69146 $window.on('resize', applyMultipleImageAnimation); 69147}); 69148 69149$(document).ready(function () { 69150 $('.tabs-v3-container .cmp-tabs-v3').each(function () { 69151 const $container = $(this); 69152 const $tabs = $container.find('.cmp-tabs__tab'); 69153 69154 const $wrapper = $container.find('.tabs-v2-dropdown-container'); 69155 const $btn = $wrapper.find('.tabs-v3-dropdown__btn'); 69156 const $list = $wrapper.find('.tabs-v3-list'); 69157 69158 if (!$list.length) return; 69159 69160 $list.empty(); 69161 69162 // Build list 69163 $tabs.each(function (index) { 69164 const $tab = $(this); 69165 const text = $tab.text().trim(); 69166 const isActive = $tab.hasClass('cmp-tabs__tab--active'); 69167 69168 const $item = $(` 69169 <li class="tabs-v3-list__item ${isActive ? 'active' : ''}" data-index="${index}"> 69170 ${text} 69171 </li> 69172 `); 69173 69174 $list.append($item); 69175 69176 if (isActive) { 69177 $btn.text(text); 69178 } 69179 }); 69180 69181 // Toggle list 69182 $wrapper.find('.tabs-v3-dropdown').on('click', function (e) { 69183 e.stopPropagation(); 69184 $wrapper.toggleClass('open'); 69185 }); 69186 69187 // Click item 69188 $wrapper.on('click', '.tabs-v3-list__item', function () { 69189 const index = $(this).data('index'); 69190 const text = $(this).text(); 69191 69192 $tabs.eq(index).trigger('click'); 69193 69194 $btn.text(text); 69195 69196 $list.find('.tabs-v3-list__item').removeClass('active'); 69197 $(this).addClass('active'); 69198 69199 $wrapper.removeClass('open'); 69200 }); 69201 69202 // Sync with tabs 69203 $tabs.on('click', function () { 69204 const index = $(this).index(); 69205 const text = $(this).text().trim(); 69206 69207 $btn.text(text); 69208 69209 $list.find('.tabs-v3-list__item').removeClass('active'); 69210 $list.find(`[data-index="${index}"]`).addClass('active'); 69211 }); 69212 69213 // Outside click 69214 $(document).on('click', function () { 69215 $wrapper.removeClass('open'); 69216 }); 69217 }); 69218});
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.