├── .gitignore ├── .gitreview ├── MANIFEST.in ├── README.txt ├── setup.py ├── tox.ini └── xstatic ├── __init__.py └── pkg ├── __init__.py └── jquery_migrate ├── __init__.py └── data ├── jquery-migrate.js └── jquery-migrate.min.js /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.sw? 3 | *.sqlite3 4 | .DS_STORE 5 | *.egg-info 6 | .venv 7 | .tox 8 | build 9 | dist 10 | -------------------------------------------------------------------------------- /.gitreview: -------------------------------------------------------------------------------- 1 | [gerrit] 2 | host=review.opendev.org 3 | port=29418 4 | project=openstack/xstatic-jquery-migrate.git 5 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.txt 2 | recursive-include xstatic/pkg/jquery_migrate * 3 | 4 | global-exclude *.pyc 5 | global-exclude *.pyo 6 | global-exclude *.orig 7 | global-exclude *.rej 8 | 9 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | XStatic-JQuery-Migrate 2 | ---------------------- 3 | 4 | .. warning:: 5 | This package contains convenience copies of one or more Javascript libraries 6 | which in some cases contain known security vulnerabilities. They are 7 | included for testing purposes and not intended for security sensitive 8 | production deployments. It's assumed that downstream repackaging and 9 | distribution channels will supply their own repacement Javascript libraries 10 | with backported security fixes when relevant. 11 | 12 | JQuery-Migrate JavaScript library packaged for setuptools (easy_install) / pip. 13 | 14 | This package is intended to be used by **any** project that needs these files. 15 | 16 | It intentionally does **not** provide any extra code except some metadata 17 | **nor** has any extra requirements. You MAY use some minimal support code from 18 | the XStatic base package, if you like. 19 | 20 | You can find more info about the xstatic packaging way in the package `XStatic`. 21 | 22 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from xstatic.pkg import jquery_migrate as xs 2 | 3 | # The README.txt file should be written in reST so that PyPI can use 4 | # it to generate your project's PyPI page. 5 | long_description = open('README.txt').read() 6 | 7 | from setuptools import setup, find_packages 8 | 9 | setup( 10 | name=xs.PACKAGE_NAME, 11 | version=xs.PACKAGE_VERSION, 12 | description=xs.DESCRIPTION, 13 | long_description=long_description, 14 | classifiers=xs.CLASSIFIERS, 15 | keywords=xs.KEYWORDS, 16 | maintainer=xs.MAINTAINER, 17 | maintainer_email=xs.MAINTAINER_EMAIL, 18 | license=xs.LICENSE, 19 | url=xs.HOMEPAGE, 20 | platforms=xs.PLATFORMS, 21 | packages=find_packages(), 22 | namespace_packages=['xstatic', 'xstatic.pkg', ], 23 | include_package_data=True, 24 | zip_safe=False, 25 | install_requires=[], # nothing! :) 26 | # if you like, you MAY use the 'XStatic' package. 27 | ) 28 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | minversion = 1.6 3 | skipsdist = True 4 | envlist = py27,py34 5 | 6 | [testenv:venv] 7 | basepython = python3 8 | commands = {posargs} 9 | -------------------------------------------------------------------------------- /xstatic/__init__.py: -------------------------------------------------------------------------------- 1 | __import__('pkg_resources').declare_namespace(__name__) 2 | -------------------------------------------------------------------------------- /xstatic/pkg/__init__.py: -------------------------------------------------------------------------------- 1 | __import__('pkg_resources').declare_namespace(__name__) 2 | -------------------------------------------------------------------------------- /xstatic/pkg/jquery_migrate/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | XStatic resource package 3 | 4 | See package 'XStatic' for documentation and basic tools. 5 | """ 6 | 7 | DISPLAY_NAME = 'JQuery-Migrate' # official name, upper/lowercase allowed, no spaces 8 | PACKAGE_NAME = 'XStatic-%s' % DISPLAY_NAME # name used for PyPi 9 | 10 | NAME = __name__.split('.')[-1] # package name (e.g. 'foo' or 'foo_bar') 11 | # please use a all-lowercase valid python 12 | # package name 13 | 14 | VERSION = '3.3.2' # version of the packaged files, please use the upstream 15 | # version number 16 | BUILD = '1' # our package build number, so we can release new builds 17 | # with fixes for xstatic stuff. 18 | PACKAGE_VERSION = VERSION + '.' + BUILD # version used for PyPi 19 | 20 | DESCRIPTION = "%s %s (XStatic packaging standard)" % (DISPLAY_NAME, VERSION) 21 | 22 | PLATFORMS = 'any' 23 | CLASSIFIERS = [] 24 | KEYWORDS = '%s xstatic' % NAME 25 | 26 | # XStatic-* package maintainer: 27 | MAINTAINER = 'Radomir Dopieralski' 28 | MAINTAINER_EMAIL = 'openstack@sheep.art.pl' 29 | 30 | # this refers to the project homepage of the stuff we packaged: 31 | HOMEPAGE = 'https://github.com/jquery/jquery-migrate' 32 | 33 | # this refers to all files: 34 | LICENSE = '(same as %s)' % DISPLAY_NAME 35 | 36 | from os.path import join, dirname 37 | BASE_DIR = join(dirname(__file__), 'data') 38 | # linux package maintainers just can point to their file locations like this: 39 | #BASE_DIR = '/usr/share/javascript/jquery_migrate' 40 | 41 | LOCATIONS = { 42 | # CDN locations (if no public CDN exists, use an empty dict) 43 | # if value is a string, it is a base location, just append relative 44 | # path/filename. if value is a dict, do another lookup using the 45 | # relative path/filename you want. 46 | # your relative path/filenames should usually be without version 47 | # information, because either the base dir/url is exactly for this 48 | # version or the mapping will care for accessing this version. 49 | } 50 | -------------------------------------------------------------------------------- /xstatic/pkg/jquery_migrate/data/jquery-migrate.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * jQuery Migrate - v3.3.2 - 2020-11-17T23:22Z 3 | * Copyright OpenJS Foundation and other contributors 4 | */ 5 | ( function( factory ) { 6 | "use strict"; 7 | 8 | if ( typeof define === "function" && define.amd ) { 9 | 10 | // AMD. Register as an anonymous module. 11 | define( [ "jquery" ], function( jQuery ) { 12 | return factory( jQuery, window ); 13 | } ); 14 | } else if ( typeof module === "object" && module.exports ) { 15 | 16 | // Node/CommonJS 17 | // eslint-disable-next-line no-undef 18 | module.exports = factory( require( "jquery" ), window ); 19 | } else { 20 | 21 | // Browser globals 22 | factory( jQuery, window ); 23 | } 24 | } )( function( jQuery, window ) { 25 | "use strict"; 26 | 27 | jQuery.migrateVersion = "3.3.2"; 28 | 29 | // Returns 0 if v1 == v2, -1 if v1 < v2, 1 if v1 > v2 30 | function compareVersions( v1, v2 ) { 31 | var i, 32 | rVersionParts = /^(\d+)\.(\d+)\.(\d+)/, 33 | v1p = rVersionParts.exec( v1 ) || [ ], 34 | v2p = rVersionParts.exec( v2 ) || [ ]; 35 | 36 | for ( i = 1; i <= 3; i++ ) { 37 | if ( +v1p[ i ] > +v2p[ i ] ) { 38 | return 1; 39 | } 40 | if ( +v1p[ i ] < +v2p[ i ] ) { 41 | return -1; 42 | } 43 | } 44 | return 0; 45 | } 46 | 47 | function jQueryVersionSince( version ) { 48 | return compareVersions( jQuery.fn.jquery, version ) >= 0; 49 | } 50 | 51 | ( function() { 52 | 53 | // Support: IE9 only 54 | // IE9 only creates console object when dev tools are first opened 55 | // IE9 console is a host object, callable but doesn't have .apply() 56 | if ( !window.console || !window.console.log ) { 57 | return; 58 | } 59 | 60 | // Need jQuery 3.0.0+ and no older Migrate loaded 61 | if ( !jQuery || !jQueryVersionSince( "3.0.0" ) ) { 62 | window.console.log( "JQMIGRATE: jQuery 3.0.0+ REQUIRED" ); 63 | } 64 | if ( jQuery.migrateWarnings ) { 65 | window.console.log( "JQMIGRATE: Migrate plugin loaded multiple times" ); 66 | } 67 | 68 | // Show a message on the console so devs know we're active 69 | window.console.log( "JQMIGRATE: Migrate is installed" + 70 | ( jQuery.migrateMute ? "" : " with logging active" ) + 71 | ", version " + jQuery.migrateVersion ); 72 | 73 | } )(); 74 | 75 | var warnedAbout = {}; 76 | 77 | // By default each warning is only reported once. 78 | jQuery.migrateDeduplicateWarnings = true; 79 | 80 | // List of warnings already given; public read only 81 | jQuery.migrateWarnings = []; 82 | 83 | // Set to false to disable traces that appear with warnings 84 | if ( jQuery.migrateTrace === undefined ) { 85 | jQuery.migrateTrace = true; 86 | } 87 | 88 | // Forget any warnings we've already given; public 89 | jQuery.migrateReset = function() { 90 | warnedAbout = {}; 91 | jQuery.migrateWarnings.length = 0; 92 | }; 93 | 94 | function migrateWarn( msg ) { 95 | var console = window.console; 96 | if ( !jQuery.migrateDeduplicateWarnings || !warnedAbout[ msg ] ) { 97 | warnedAbout[ msg ] = true; 98 | jQuery.migrateWarnings.push( msg ); 99 | if ( console && console.warn && !jQuery.migrateMute ) { 100 | console.warn( "JQMIGRATE: " + msg ); 101 | if ( jQuery.migrateTrace && console.trace ) { 102 | console.trace(); 103 | } 104 | } 105 | } 106 | } 107 | 108 | function migrateWarnProp( obj, prop, value, msg ) { 109 | Object.defineProperty( obj, prop, { 110 | configurable: true, 111 | enumerable: true, 112 | get: function() { 113 | migrateWarn( msg ); 114 | return value; 115 | }, 116 | set: function( newValue ) { 117 | migrateWarn( msg ); 118 | value = newValue; 119 | } 120 | } ); 121 | } 122 | 123 | function migrateWarnFunc( obj, prop, newFunc, msg ) { 124 | obj[ prop ] = function() { 125 | migrateWarn( msg ); 126 | return newFunc.apply( this, arguments ); 127 | }; 128 | } 129 | 130 | if ( window.document.compatMode === "BackCompat" ) { 131 | 132 | // JQuery has never supported or tested Quirks Mode 133 | migrateWarn( "jQuery is not compatible with Quirks Mode" ); 134 | } 135 | 136 | var findProp, 137 | class2type = {}, 138 | oldInit = jQuery.fn.init, 139 | oldFind = jQuery.find, 140 | 141 | rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/, 142 | rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g, 143 | 144 | // Support: Android <=4.0 only 145 | // Make sure we trim BOM and NBSP 146 | rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; 147 | 148 | jQuery.fn.init = function( arg1 ) { 149 | var args = Array.prototype.slice.call( arguments ); 150 | 151 | if ( typeof arg1 === "string" && arg1 === "#" ) { 152 | 153 | // JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0 154 | migrateWarn( "jQuery( '#' ) is not a valid selector" ); 155 | args[ 0 ] = []; 156 | } 157 | 158 | return oldInit.apply( this, args ); 159 | }; 160 | jQuery.fn.init.prototype = jQuery.fn; 161 | 162 | jQuery.find = function( selector ) { 163 | var args = Array.prototype.slice.call( arguments ); 164 | 165 | // Support: PhantomJS 1.x 166 | // String#match fails to match when used with a //g RegExp, only on some strings 167 | if ( typeof selector === "string" && rattrHashTest.test( selector ) ) { 168 | 169 | // The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0 170 | // First see if qS thinks it's a valid selector, if so avoid a false positive 171 | try { 172 | window.document.querySelector( selector ); 173 | } catch ( err1 ) { 174 | 175 | // Didn't *look* valid to qSA, warn and try quoting what we think is the value 176 | selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) { 177 | return "[" + attr + op + "\"" + value + "\"]"; 178 | } ); 179 | 180 | // If the regexp *may* have created an invalid selector, don't update it 181 | // Note that there may be false alarms if selector uses jQuery extensions 182 | try { 183 | window.document.querySelector( selector ); 184 | migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] ); 185 | args[ 0 ] = selector; 186 | } catch ( err2 ) { 187 | migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] ); 188 | } 189 | } 190 | } 191 | 192 | return oldFind.apply( this, args ); 193 | }; 194 | 195 | // Copy properties attached to original jQuery.find method (e.g. .attr, .isXML) 196 | for ( findProp in oldFind ) { 197 | if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) { 198 | jQuery.find[ findProp ] = oldFind[ findProp ]; 199 | } 200 | } 201 | 202 | // The number of elements contained in the matched element set 203 | migrateWarnFunc( jQuery.fn, "size", function() { 204 | return this.length; 205 | }, 206 | "jQuery.fn.size() is deprecated and removed; use the .length property" ); 207 | 208 | migrateWarnFunc( jQuery, "parseJSON", function() { 209 | return JSON.parse.apply( null, arguments ); 210 | }, 211 | "jQuery.parseJSON is deprecated; use JSON.parse" ); 212 | 213 | migrateWarnFunc( jQuery, "holdReady", jQuery.holdReady, 214 | "jQuery.holdReady is deprecated" ); 215 | 216 | migrateWarnFunc( jQuery, "unique", jQuery.uniqueSort, 217 | "jQuery.unique is deprecated; use jQuery.uniqueSort" ); 218 | 219 | // Now jQuery.expr.pseudos is the standard incantation 220 | migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos, 221 | "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos" ); 222 | migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos, 223 | "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos" ); 224 | 225 | // Prior to jQuery 3.1.1 there were internal refs so we don't warn there 226 | if ( jQueryVersionSince( "3.1.1" ) ) { 227 | migrateWarnFunc( jQuery, "trim", function( text ) { 228 | return text == null ? 229 | "" : 230 | ( text + "" ).replace( rtrim, "" ); 231 | }, 232 | "jQuery.trim is deprecated; use String.prototype.trim" ); 233 | } 234 | 235 | // Prior to jQuery 3.2 there were internal refs so we don't warn there 236 | if ( jQueryVersionSince( "3.2.0" ) ) { 237 | migrateWarnFunc( jQuery, "nodeName", function( elem, name ) { 238 | return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 239 | }, 240 | "jQuery.nodeName is deprecated" ); 241 | 242 | migrateWarnFunc( jQuery, "isArray", Array.isArray, 243 | "jQuery.isArray is deprecated; use Array.isArray" 244 | ); 245 | } 246 | 247 | if ( jQueryVersionSince( "3.3.0" ) ) { 248 | 249 | migrateWarnFunc( jQuery, "isNumeric", function( obj ) { 250 | 251 | // As of jQuery 3.0, isNumeric is limited to 252 | // strings and numbers (primitives or objects) 253 | // that can be coerced to finite numbers (gh-2662) 254 | var type = typeof obj; 255 | return ( type === "number" || type === "string" ) && 256 | 257 | // parseFloat NaNs numeric-cast false positives ("") 258 | // ...but misinterprets leading-number strings, e.g. hex literals ("0x...") 259 | // subtraction forces infinities to NaN 260 | !isNaN( obj - parseFloat( obj ) ); 261 | }, 262 | "jQuery.isNumeric() is deprecated" 263 | ); 264 | 265 | // Populate the class2type map 266 | jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol". 267 | split( " " ), 268 | function( _, name ) { 269 | class2type[ "[object " + name + "]" ] = name.toLowerCase(); 270 | } ); 271 | 272 | migrateWarnFunc( jQuery, "type", function( obj ) { 273 | if ( obj == null ) { 274 | return obj + ""; 275 | } 276 | 277 | // Support: Android <=2.3 only (functionish RegExp) 278 | return typeof obj === "object" || typeof obj === "function" ? 279 | class2type[ Object.prototype.toString.call( obj ) ] || "object" : 280 | typeof obj; 281 | }, 282 | "jQuery.type is deprecated" ); 283 | 284 | migrateWarnFunc( jQuery, "isFunction", 285 | function( obj ) { 286 | return typeof obj === "function"; 287 | }, 288 | "jQuery.isFunction() is deprecated" ); 289 | 290 | migrateWarnFunc( jQuery, "isWindow", 291 | function( obj ) { 292 | return obj != null && obj === obj.window; 293 | }, 294 | "jQuery.isWindow() is deprecated" 295 | ); 296 | } 297 | 298 | // Support jQuery slim which excludes the ajax module 299 | if ( jQuery.ajax ) { 300 | 301 | var oldAjax = jQuery.ajax, 302 | rjsonp = /(=)\?(?=&|$)|\?\?/; 303 | 304 | jQuery.ajax = function( ) { 305 | var jQXHR = oldAjax.apply( this, arguments ); 306 | 307 | // Be sure we got a jQXHR (e.g., not sync) 308 | if ( jQXHR.promise ) { 309 | migrateWarnFunc( jQXHR, "success", jQXHR.done, 310 | "jQXHR.success is deprecated and removed" ); 311 | migrateWarnFunc( jQXHR, "error", jQXHR.fail, 312 | "jQXHR.error is deprecated and removed" ); 313 | migrateWarnFunc( jQXHR, "complete", jQXHR.always, 314 | "jQXHR.complete is deprecated and removed" ); 315 | } 316 | 317 | return jQXHR; 318 | }; 319 | 320 | // Only trigger the logic in jQuery <4 as the JSON-to-JSONP auto-promotion 321 | // behavior is gone in jQuery 4.0 and as it has security implications, we don't 322 | // want to restore the legacy behavior. 323 | if ( !jQueryVersionSince( "4.0.0" ) ) { 324 | 325 | // Register this prefilter before the jQuery one. Otherwise, a promoted 326 | // request is transformed into one with the script dataType and we can't 327 | // catch it anymore. 328 | jQuery.ajaxPrefilter( "+json", function( s ) { 329 | 330 | // Warn if JSON-to-JSONP auto-promotion happens. 331 | if ( s.jsonp !== false && ( rjsonp.test( s.url ) || 332 | typeof s.data === "string" && 333 | ( s.contentType || "" ) 334 | .indexOf( "application/x-www-form-urlencoded" ) === 0 && 335 | rjsonp.test( s.data ) 336 | ) ) { 337 | migrateWarn( "JSON-to-JSONP auto-promotion is deprecated" ); 338 | } 339 | } ); 340 | } 341 | 342 | } 343 | 344 | var oldRemoveAttr = jQuery.fn.removeAttr, 345 | oldToggleClass = jQuery.fn.toggleClass, 346 | rmatchNonSpace = /\S+/g; 347 | 348 | jQuery.fn.removeAttr = function( name ) { 349 | var self = this; 350 | 351 | jQuery.each( name.match( rmatchNonSpace ), function( _i, attr ) { 352 | if ( jQuery.expr.match.bool.test( attr ) ) { 353 | migrateWarn( "jQuery.fn.removeAttr no longer sets boolean properties: " + attr ); 354 | self.prop( attr, false ); 355 | } 356 | } ); 357 | 358 | return oldRemoveAttr.apply( this, arguments ); 359 | }; 360 | 361 | jQuery.fn.toggleClass = function( state ) { 362 | 363 | // Only deprecating no-args or single boolean arg 364 | if ( state !== undefined && typeof state !== "boolean" ) { 365 | return oldToggleClass.apply( this, arguments ); 366 | } 367 | 368 | migrateWarn( "jQuery.fn.toggleClass( boolean ) is deprecated" ); 369 | 370 | // Toggle entire class name of each element 371 | return this.each( function() { 372 | var className = this.getAttribute && this.getAttribute( "class" ) || ""; 373 | 374 | if ( className ) { 375 | jQuery.data( this, "__className__", className ); 376 | } 377 | 378 | // If the element has a class name or if we're passed `false`, 379 | // then remove the whole classname (if there was one, the above saved it). 380 | // Otherwise bring back whatever was previously saved (if anything), 381 | // falling back to the empty string if nothing was stored. 382 | if ( this.setAttribute ) { 383 | this.setAttribute( "class", 384 | className || state === false ? 385 | "" : 386 | jQuery.data( this, "__className__" ) || "" 387 | ); 388 | } 389 | } ); 390 | }; 391 | 392 | function camelCase( string ) { 393 | return string.replace( /-([a-z])/g, function( _, letter ) { 394 | return letter.toUpperCase(); 395 | } ); 396 | } 397 | 398 | var oldFnCss, 399 | internalSwapCall = false, 400 | ralphaStart = /^[a-z]/, 401 | 402 | // The regex visualized: 403 | // 404 | // /----------\ 405 | // | | /-------\ 406 | // | / Top \ | | | 407 | // /--- Border ---+-| Right |-+---+- Width -+---\ 408 | // | | Bottom | | 409 | // | \ Left / | 410 | // | | 411 | // | /----------\ | 412 | // | /-------------\ | | |- END 413 | // | | | | / Top \ | | 414 | // | | / Margin \ | | | Right | | | 415 | // |---------+-| |-+---+-| Bottom |-+----| 416 | // | \ Padding / \ Left / | 417 | // BEGIN -| | 418 | // | /---------\ | 419 | // | | | | 420 | // | | / Min \ | / Width \ | 421 | // \--------------+-| |-+---| |---/ 422 | // \ Max / \ Height / 423 | rautoPx = /^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/; 424 | 425 | // If this version of jQuery has .swap(), don't false-alarm on internal uses 426 | if ( jQuery.swap ) { 427 | jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) { 428 | var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get; 429 | 430 | if ( oldHook ) { 431 | jQuery.cssHooks[ name ].get = function() { 432 | var ret; 433 | 434 | internalSwapCall = true; 435 | ret = oldHook.apply( this, arguments ); 436 | internalSwapCall = false; 437 | return ret; 438 | }; 439 | } 440 | } ); 441 | } 442 | 443 | jQuery.swap = function( elem, options, callback, args ) { 444 | var ret, name, 445 | old = {}; 446 | 447 | if ( !internalSwapCall ) { 448 | migrateWarn( "jQuery.swap() is undocumented and deprecated" ); 449 | } 450 | 451 | // Remember the old values, and insert the new ones 452 | for ( name in options ) { 453 | old[ name ] = elem.style[ name ]; 454 | elem.style[ name ] = options[ name ]; 455 | } 456 | 457 | ret = callback.apply( elem, args || [] ); 458 | 459 | // Revert the old values 460 | for ( name in options ) { 461 | elem.style[ name ] = old[ name ]; 462 | } 463 | 464 | return ret; 465 | }; 466 | 467 | if ( jQueryVersionSince( "3.4.0" ) && typeof Proxy !== "undefined" ) { 468 | 469 | jQuery.cssProps = new Proxy( jQuery.cssProps || {}, { 470 | set: function() { 471 | migrateWarn( "JQMIGRATE: jQuery.cssProps is deprecated" ); 472 | return Reflect.set.apply( this, arguments ); 473 | } 474 | } ); 475 | } 476 | 477 | // Create a dummy jQuery.cssNumber if missing. It won't be used by jQuery but 478 | // it will prevent code adding new keys to it unconditionally from crashing. 479 | if ( !jQuery.cssNumber ) { 480 | jQuery.cssNumber = {}; 481 | } 482 | 483 | function isAutoPx( prop ) { 484 | 485 | // The first test is used to ensure that: 486 | // 1. The prop starts with a lowercase letter (as we uppercase it for the second regex). 487 | // 2. The prop is not empty. 488 | return ralphaStart.test( prop ) && 489 | rautoPx.test( prop[ 0 ].toUpperCase() + prop.slice( 1 ) ); 490 | } 491 | 492 | oldFnCss = jQuery.fn.css; 493 | 494 | jQuery.fn.css = function( name, value ) { 495 | var camelName, 496 | origThis = this; 497 | if ( name && typeof name === "object" && !Array.isArray( name ) ) { 498 | jQuery.each( name, function( n, v ) { 499 | jQuery.fn.css.call( origThis, n, v ); 500 | } ); 501 | return this; 502 | } 503 | if ( typeof value === "number" ) { 504 | camelName = camelCase( name ); 505 | if ( !isAutoPx( camelName ) && !jQuery.cssNumber[ camelName ] ) { 506 | migrateWarn( "Number-typed values are deprecated for jQuery.fn.css( \"" + 507 | name + "\", value )" ); 508 | } 509 | } 510 | 511 | return oldFnCss.apply( this, arguments ); 512 | }; 513 | 514 | var oldData = jQuery.data; 515 | 516 | jQuery.data = function( elem, name, value ) { 517 | var curData, sameKeys, key; 518 | 519 | // Name can be an object, and each entry in the object is meant to be set as data 520 | if ( name && typeof name === "object" && arguments.length === 2 ) { 521 | curData = jQuery.hasData( elem ) && oldData.call( this, elem ); 522 | sameKeys = {}; 523 | for ( key in name ) { 524 | if ( key !== camelCase( key ) ) { 525 | migrateWarn( "jQuery.data() always sets/gets camelCased names: " + key ); 526 | curData[ key ] = name[ key ]; 527 | } else { 528 | sameKeys[ key ] = name[ key ]; 529 | } 530 | } 531 | 532 | oldData.call( this, elem, sameKeys ); 533 | 534 | return name; 535 | } 536 | 537 | // If the name is transformed, look for the un-transformed name in the data object 538 | if ( name && typeof name === "string" && name !== camelCase( name ) ) { 539 | curData = jQuery.hasData( elem ) && oldData.call( this, elem ); 540 | if ( curData && name in curData ) { 541 | migrateWarn( "jQuery.data() always sets/gets camelCased names: " + name ); 542 | if ( arguments.length > 2 ) { 543 | curData[ name ] = value; 544 | } 545 | return curData[ name ]; 546 | } 547 | } 548 | 549 | return oldData.apply( this, arguments ); 550 | }; 551 | 552 | // Support jQuery slim which excludes the effects module 553 | if ( jQuery.fx ) { 554 | 555 | var intervalValue, intervalMsg, 556 | oldTweenRun = jQuery.Tween.prototype.run, 557 | linearEasing = function( pct ) { 558 | return pct; 559 | }; 560 | 561 | jQuery.Tween.prototype.run = function( ) { 562 | if ( jQuery.easing[ this.easing ].length > 1 ) { 563 | migrateWarn( 564 | "'jQuery.easing." + this.easing.toString() + "' should use only one argument" 565 | ); 566 | 567 | jQuery.easing[ this.easing ] = linearEasing; 568 | } 569 | 570 | oldTweenRun.apply( this, arguments ); 571 | }; 572 | 573 | intervalValue = jQuery.fx.interval || 13; 574 | intervalMsg = "jQuery.fx.interval is deprecated"; 575 | 576 | // Support: IE9, Android <=4.4 577 | // Avoid false positives on browsers that lack rAF 578 | // Don't warn if document is hidden, jQuery uses setTimeout (#292) 579 | if ( window.requestAnimationFrame ) { 580 | Object.defineProperty( jQuery.fx, "interval", { 581 | configurable: true, 582 | enumerable: true, 583 | get: function() { 584 | if ( !window.document.hidden ) { 585 | migrateWarn( intervalMsg ); 586 | } 587 | return intervalValue; 588 | }, 589 | set: function( newValue ) { 590 | migrateWarn( intervalMsg ); 591 | intervalValue = newValue; 592 | } 593 | } ); 594 | } 595 | 596 | } 597 | 598 | var oldLoad = jQuery.fn.load, 599 | oldEventAdd = jQuery.event.add, 600 | originalFix = jQuery.event.fix; 601 | 602 | jQuery.event.props = []; 603 | jQuery.event.fixHooks = {}; 604 | 605 | migrateWarnProp( jQuery.event.props, "concat", jQuery.event.props.concat, 606 | "jQuery.event.props.concat() is deprecated and removed" ); 607 | 608 | jQuery.event.fix = function( originalEvent ) { 609 | var event, 610 | type = originalEvent.type, 611 | fixHook = this.fixHooks[ type ], 612 | props = jQuery.event.props; 613 | 614 | if ( props.length ) { 615 | migrateWarn( "jQuery.event.props are deprecated and removed: " + props.join() ); 616 | while ( props.length ) { 617 | jQuery.event.addProp( props.pop() ); 618 | } 619 | } 620 | 621 | if ( fixHook && !fixHook._migrated_ ) { 622 | fixHook._migrated_ = true; 623 | migrateWarn( "jQuery.event.fixHooks are deprecated and removed: " + type ); 624 | if ( ( props = fixHook.props ) && props.length ) { 625 | while ( props.length ) { 626 | jQuery.event.addProp( props.pop() ); 627 | } 628 | } 629 | } 630 | 631 | event = originalFix.call( this, originalEvent ); 632 | 633 | return fixHook && fixHook.filter ? fixHook.filter( event, originalEvent ) : event; 634 | }; 635 | 636 | jQuery.event.add = function( elem, types ) { 637 | 638 | // This misses the multiple-types case but that seems awfully rare 639 | if ( elem === window && types === "load" && window.document.readyState === "complete" ) { 640 | migrateWarn( "jQuery(window).on('load'...) called after load event occurred" ); 641 | } 642 | return oldEventAdd.apply( this, arguments ); 643 | }; 644 | 645 | jQuery.each( [ "load", "unload", "error" ], function( _, name ) { 646 | 647 | jQuery.fn[ name ] = function() { 648 | var args = Array.prototype.slice.call( arguments, 0 ); 649 | 650 | // If this is an ajax load() the first arg should be the string URL; 651 | // technically this could also be the "Anything" arg of the event .load() 652 | // which just goes to show why this dumb signature has been deprecated! 653 | // jQuery custom builds that exclude the Ajax module justifiably die here. 654 | if ( name === "load" && typeof args[ 0 ] === "string" ) { 655 | return oldLoad.apply( this, args ); 656 | } 657 | 658 | migrateWarn( "jQuery.fn." + name + "() is deprecated" ); 659 | 660 | args.splice( 0, 0, name ); 661 | if ( arguments.length ) { 662 | return this.on.apply( this, args ); 663 | } 664 | 665 | // Use .triggerHandler here because: 666 | // - load and unload events don't need to bubble, only applied to window or image 667 | // - error event should not bubble to window, although it does pre-1.7 668 | // See http://bugs.jquery.com/ticket/11820 669 | this.triggerHandler.apply( this, args ); 670 | return this; 671 | }; 672 | 673 | } ); 674 | 675 | jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + 676 | "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 677 | "change select submit keydown keypress keyup contextmenu" ).split( " " ), 678 | function( _i, name ) { 679 | 680 | // Handle event binding 681 | jQuery.fn[ name ] = function( data, fn ) { 682 | migrateWarn( "jQuery.fn." + name + "() event shorthand is deprecated" ); 683 | return arguments.length > 0 ? 684 | this.on( name, null, data, fn ) : 685 | this.trigger( name ); 686 | }; 687 | } ); 688 | 689 | // Trigger "ready" event only once, on document ready 690 | jQuery( function() { 691 | jQuery( window.document ).triggerHandler( "ready" ); 692 | } ); 693 | 694 | jQuery.event.special.ready = { 695 | setup: function() { 696 | if ( this === window.document ) { 697 | migrateWarn( "'ready' event is deprecated" ); 698 | } 699 | } 700 | }; 701 | 702 | jQuery.fn.extend( { 703 | 704 | bind: function( types, data, fn ) { 705 | migrateWarn( "jQuery.fn.bind() is deprecated" ); 706 | return this.on( types, null, data, fn ); 707 | }, 708 | unbind: function( types, fn ) { 709 | migrateWarn( "jQuery.fn.unbind() is deprecated" ); 710 | return this.off( types, null, fn ); 711 | }, 712 | delegate: function( selector, types, data, fn ) { 713 | migrateWarn( "jQuery.fn.delegate() is deprecated" ); 714 | return this.on( types, selector, data, fn ); 715 | }, 716 | undelegate: function( selector, types, fn ) { 717 | migrateWarn( "jQuery.fn.undelegate() is deprecated" ); 718 | return arguments.length === 1 ? 719 | this.off( selector, "**" ) : 720 | this.off( types, selector || "**", fn ); 721 | }, 722 | hover: function( fnOver, fnOut ) { 723 | migrateWarn( "jQuery.fn.hover() is deprecated" ); 724 | return this.on( "mouseenter", fnOver ).on( "mouseleave", fnOut || fnOver ); 725 | } 726 | } ); 727 | 728 | var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, 729 | origHtmlPrefilter = jQuery.htmlPrefilter, 730 | makeMarkup = function( html ) { 731 | var doc = window.document.implementation.createHTMLDocument( "" ); 732 | doc.body.innerHTML = html; 733 | return doc.body && doc.body.innerHTML; 734 | }, 735 | warnIfChanged = function( html ) { 736 | var changed = html.replace( rxhtmlTag, "<$1>" ); 737 | if ( changed !== html && makeMarkup( html ) !== makeMarkup( changed ) ) { 738 | migrateWarn( "HTML tags must be properly nested and closed: " + html ); 739 | } 740 | }; 741 | 742 | jQuery.UNSAFE_restoreLegacyHtmlPrefilter = function() { 743 | jQuery.htmlPrefilter = function( html ) { 744 | warnIfChanged( html ); 745 | return html.replace( rxhtmlTag, "<$1>" ); 746 | }; 747 | }; 748 | 749 | jQuery.htmlPrefilter = function( html ) { 750 | warnIfChanged( html ); 751 | return origHtmlPrefilter( html ); 752 | }; 753 | 754 | var oldOffset = jQuery.fn.offset; 755 | 756 | jQuery.fn.offset = function() { 757 | var elem = this[ 0 ]; 758 | 759 | if ( elem && ( !elem.nodeType || !elem.getBoundingClientRect ) ) { 760 | migrateWarn( "jQuery.fn.offset() requires a valid DOM element" ); 761 | return arguments.length ? this : undefined; 762 | } 763 | 764 | return oldOffset.apply( this, arguments ); 765 | }; 766 | 767 | // Support jQuery slim which excludes the ajax module 768 | // The jQuery.param patch is about respecting `jQuery.ajaxSettings.traditional` 769 | // so it doesn't make sense for the slim build. 770 | if ( jQuery.ajax ) { 771 | 772 | var oldParam = jQuery.param; 773 | 774 | jQuery.param = function( data, traditional ) { 775 | var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; 776 | 777 | if ( traditional === undefined && ajaxTraditional ) { 778 | 779 | migrateWarn( "jQuery.param() no longer uses jQuery.ajaxSettings.traditional" ); 780 | traditional = ajaxTraditional; 781 | } 782 | 783 | return oldParam.call( this, data, traditional ); 784 | }; 785 | 786 | } 787 | 788 | var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack; 789 | 790 | jQuery.fn.andSelf = function() { 791 | migrateWarn( "jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()" ); 792 | return oldSelf.apply( this, arguments ); 793 | }; 794 | 795 | // Support jQuery slim which excludes the deferred module in jQuery 4.0+ 796 | if ( jQuery.Deferred ) { 797 | 798 | var oldDeferred = jQuery.Deferred, 799 | tuples = [ 800 | 801 | // Action, add listener, callbacks, .then handlers, final state 802 | [ "resolve", "done", jQuery.Callbacks( "once memory" ), 803 | jQuery.Callbacks( "once memory" ), "resolved" ], 804 | [ "reject", "fail", jQuery.Callbacks( "once memory" ), 805 | jQuery.Callbacks( "once memory" ), "rejected" ], 806 | [ "notify", "progress", jQuery.Callbacks( "memory" ), 807 | jQuery.Callbacks( "memory" ) ] 808 | ]; 809 | 810 | jQuery.Deferred = function( func ) { 811 | var deferred = oldDeferred(), 812 | promise = deferred.promise(); 813 | 814 | deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) { 815 | var fns = arguments; 816 | 817 | migrateWarn( "deferred.pipe() is deprecated" ); 818 | 819 | return jQuery.Deferred( function( newDefer ) { 820 | jQuery.each( tuples, function( i, tuple ) { 821 | var fn = typeof fns[ i ] === "function" && fns[ i ]; 822 | 823 | // Deferred.done(function() { bind to newDefer or newDefer.resolve }) 824 | // deferred.fail(function() { bind to newDefer or newDefer.reject }) 825 | // deferred.progress(function() { bind to newDefer or newDefer.notify }) 826 | deferred[ tuple[ 1 ] ]( function() { 827 | var returned = fn && fn.apply( this, arguments ); 828 | if ( returned && typeof returned.promise === "function" ) { 829 | returned.promise() 830 | .done( newDefer.resolve ) 831 | .fail( newDefer.reject ) 832 | .progress( newDefer.notify ); 833 | } else { 834 | newDefer[ tuple[ 0 ] + "With" ]( 835 | this === promise ? newDefer.promise() : this, 836 | fn ? [ returned ] : arguments 837 | ); 838 | } 839 | } ); 840 | } ); 841 | fns = null; 842 | } ).promise(); 843 | 844 | }; 845 | 846 | if ( func ) { 847 | func.call( deferred, deferred ); 848 | } 849 | 850 | return deferred; 851 | }; 852 | 853 | // Preserve handler of uncaught exceptions in promise chains 854 | jQuery.Deferred.exceptionHook = oldDeferred.exceptionHook; 855 | 856 | } 857 | 858 | return jQuery; 859 | } ); 860 | -------------------------------------------------------------------------------- /xstatic/pkg/jquery_migrate/data/jquery-migrate.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Migrate v3.3.2 | (c) OpenJS Foundation and other contributors | jquery.org/license */ 2 | "undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e,window)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery"),window):t(jQuery,window)}(function(s,n){"use strict";function e(e){return 0<=function(e,t){for(var r=/^(\d+)\.(\d+)\.(\d+)/,n=r.exec(e)||[],o=r.exec(t)||[],i=1;i<=3;i++){if(+o[i]<+n[i])return 1;if(+n[i]<+o[i])return-1}return 0}(s.fn.jquery,e)}s.migrateVersion="3.3.2",n.console&&n.console.log&&(s&&e("3.0.0")||n.console.log("JQMIGRATE: jQuery 3.0.0+ REQUIRED"),s.migrateWarnings&&n.console.log("JQMIGRATE: Migrate plugin loaded multiple times"),n.console.log("JQMIGRATE: Migrate is installed"+(s.migrateMute?"":" with logging active")+", version "+s.migrateVersion));var r={};function u(e){var t=n.console;s.migrateDeduplicateWarnings&&r[e]||(r[e]=!0,s.migrateWarnings.push(e),t&&t.warn&&!s.migrateMute&&(t.warn("JQMIGRATE: "+e),s.migrateTrace&&t.trace&&t.trace()))}function t(e,t,r,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return u(n),r},set:function(e){u(n),r=e}})}function o(e,t,r,n){e[t]=function(){return u(n),r.apply(this,arguments)}}s.migrateDeduplicateWarnings=!0,s.migrateWarnings=[],void 0===s.migrateTrace&&(s.migrateTrace=!0),s.migrateReset=function(){r={},s.migrateWarnings.length=0},"BackCompat"===n.document.compatMode&&u("jQuery is not compatible with Quirks Mode");var i,a,c,d={},l=s.fn.init,p=s.find,f=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,y=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,m=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;for(i in s.fn.init=function(e){var t=Array.prototype.slice.call(arguments);return"string"==typeof e&&"#"===e&&(u("jQuery( '#' ) is not a valid selector"),t[0]=[]),l.apply(this,t)},s.fn.init.prototype=s.fn,s.find=function(t){var r=Array.prototype.slice.call(arguments);if("string"==typeof t&&f.test(t))try{n.document.querySelector(t)}catch(e){t=t.replace(y,function(e,t,r,n){return"["+t+r+'"'+n+'"]'});try{n.document.querySelector(t),u("Attribute selector with '#' must be quoted: "+r[0]),r[0]=t}catch(e){u("Attribute selector with '#' was not fixed: "+r[0])}}return p.apply(this,r)},p)Object.prototype.hasOwnProperty.call(p,i)&&(s.find[i]=p[i]);o(s.fn,"size",function(){return this.length},"jQuery.fn.size() is deprecated and removed; use the .length property"),o(s,"parseJSON",function(){return JSON.parse.apply(null,arguments)},"jQuery.parseJSON is deprecated; use JSON.parse"),o(s,"holdReady",s.holdReady,"jQuery.holdReady is deprecated"),o(s,"unique",s.uniqueSort,"jQuery.unique is deprecated; use jQuery.uniqueSort"),t(s.expr,"filters",s.expr.pseudos,"jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"),t(s.expr,":",s.expr.pseudos,"jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"),e("3.1.1")&&o(s,"trim",function(e){return null==e?"":(e+"").replace(m,"")},"jQuery.trim is deprecated; use String.prototype.trim"),e("3.2.0")&&(o(s,"nodeName",function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},"jQuery.nodeName is deprecated"),o(s,"isArray",Array.isArray,"jQuery.isArray is deprecated; use Array.isArray")),e("3.3.0")&&(o(s,"isNumeric",function(e){var t=typeof e;return("number"==t||"string"==t)&&!isNaN(e-parseFloat(e))},"jQuery.isNumeric() is deprecated"),s.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){d["[object "+t+"]"]=t.toLowerCase()}),o(s,"type",function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?d[Object.prototype.toString.call(e)]||"object":typeof e},"jQuery.type is deprecated"),o(s,"isFunction",function(e){return"function"==typeof e},"jQuery.isFunction() is deprecated"),o(s,"isWindow",function(e){return null!=e&&e===e.window},"jQuery.isWindow() is deprecated")),s.ajax&&(a=s.ajax,c=/(=)\?(?=&|$)|\?\?/,s.ajax=function(){var e=a.apply(this,arguments);return e.promise&&(o(e,"success",e.done,"jQXHR.success is deprecated and removed"),o(e,"error",e.fail,"jQXHR.error is deprecated and removed"),o(e,"complete",e.always,"jQXHR.complete is deprecated and removed")),e},e("4.0.0")||s.ajaxPrefilter("+json",function(e){!1!==e.jsonp&&(c.test(e.url)||"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&c.test(e.data))&&u("JSON-to-JSONP auto-promotion is deprecated")}));var g=s.fn.removeAttr,h=s.fn.toggleClass,v=/\S+/g;function j(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}s.fn.removeAttr=function(e){var r=this;return s.each(e.match(v),function(e,t){s.expr.match.bool.test(t)&&(u("jQuery.fn.removeAttr no longer sets boolean properties: "+t),r.prop(t,!1))}),g.apply(this,arguments)};var Q,b=!(s.fn.toggleClass=function(t){return void 0!==t&&"boolean"!=typeof t?h.apply(this,arguments):(u("jQuery.fn.toggleClass( boolean ) is deprecated"),this.each(function(){var e=this.getAttribute&&this.getAttribute("class")||"";e&&s.data(this,"__className__",e),this.setAttribute&&this.setAttribute("class",!e&&!1!==t&&s.data(this,"__className__")||"")}))}),w=/^[a-z]/,x=/^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;s.swap&&s.each(["height","width","reliableMarginRight"],function(e,t){var r=s.cssHooks[t]&&s.cssHooks[t].get;r&&(s.cssHooks[t].get=function(){var e;return b=!0,e=r.apply(this,arguments),b=!1,e})}),s.swap=function(e,t,r,n){var o,i,a={};for(i in b||u("jQuery.swap() is undocumented and deprecated"),t)a[i]=e.style[i],e.style[i]=t[i];for(i in o=r.apply(e,n||[]),t)e.style[i]=a[i];return o},e("3.4.0")&&"undefined"!=typeof Proxy&&(s.cssProps=new Proxy(s.cssProps||{},{set:function(){return u("JQMIGRATE: jQuery.cssProps is deprecated"),Reflect.set.apply(this,arguments)}})),s.cssNumber||(s.cssNumber={}),Q=s.fn.css,s.fn.css=function(e,t){var r,n,o=this;return e&&"object"==typeof e&&!Array.isArray(e)?(s.each(e,function(e,t){s.fn.css.call(o,e,t)}),this):("number"==typeof t&&(r=j(e),n=r,w.test(n)&&x.test(n[0].toUpperCase()+n.slice(1))||s.cssNumber[r]||u('Number-typed values are deprecated for jQuery.fn.css( "'+e+'", value )')),Q.apply(this,arguments))};var A,k,S,M,N=s.data;s.data=function(e,t,r){var n,o,i;if(t&&"object"==typeof t&&2===arguments.length){for(i in n=s.hasData(e)&&N.call(this,e),o={},t)i!==j(i)?(u("jQuery.data() always sets/gets camelCased names: "+i),n[i]=t[i]):o[i]=t[i];return N.call(this,e,o),t}return t&&"string"==typeof t&&t!==j(t)&&(n=s.hasData(e)&&N.call(this,e))&&t in n?(u("jQuery.data() always sets/gets camelCased names: "+t),2");t!==e&&T(e)!==T(t)&&u("HTML tags must be properly nested and closed: "+e)}var O=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,q=s.htmlPrefilter;s.UNSAFE_restoreLegacyHtmlPrefilter=function(){s.htmlPrefilter=function(e){return P(e),e.replace(O,"<$1>")}},s.htmlPrefilter=function(e){return P(e),q(e)};var D,_=s.fn.offset;s.fn.offset=function(){var e=this[0];return!e||e.nodeType&&e.getBoundingClientRect?_.apply(this,arguments):(u("jQuery.fn.offset() requires a valid DOM element"),arguments.length?this:void 0)},s.ajax&&(D=s.param,s.param=function(e,t){var r=s.ajaxSettings&&s.ajaxSettings.traditional;return void 0===t&&r&&(u("jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),t=r),D.call(this,e,t)});var E,F,J=s.fn.andSelf||s.fn.addBack;return s.fn.andSelf=function(){return u("jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"),J.apply(this,arguments)},s.Deferred&&(E=s.Deferred,F=[["resolve","done",s.Callbacks("once memory"),s.Callbacks("once memory"),"resolved"],["reject","fail",s.Callbacks("once memory"),s.Callbacks("once memory"),"rejected"],["notify","progress",s.Callbacks("memory"),s.Callbacks("memory")]],s.Deferred=function(e){var i=E(),a=i.promise();return i.pipe=a.pipe=function(){var o=arguments;return u("deferred.pipe() is deprecated"),s.Deferred(function(n){s.each(F,function(e,t){var r="function"==typeof o[e]&&o[e];i[t[1]](function(){var e=r&&r.apply(this,arguments);e&&"function"==typeof e.promise?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[t[0]+"With"](this===a?n.promise():this,r?[e]:arguments)})}),o=null}).promise()},e&&e.call(i,i),i},s.Deferred.exceptionHook=E.exceptionHook),s}); 3 | --------------------------------------------------------------------------------