|
1 | 1 | /*! |
2 | | - * jQuery JavaScript Library v1.3.2 |
| 2 | + * jQuery JavaScript Library v1.3.3-sec |
3 | 3 | * http://jquery.com/ |
4 | 4 | * |
5 | 5 | * Copyright (c) 2009 John Resig |
6 | 6 | * Dual licensed under the MIT and GPL licenses. |
7 | 7 | * http://docs.jquery.com/License |
8 | 8 | * |
9 | | - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) |
10 | | - * Revision: 6246 |
| 9 | + * Date: |
| 10 | + * Revision: |
11 | 11 | */ |
12 | 12 | (function(){ |
13 | 13 |
|
|
27 | 27 | }, |
28 | 28 |
|
29 | 29 | // A simple way to check for HTML strings or ID strings |
30 | | - // (both of which we optimize for) |
31 | | - quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, |
| 30 | + // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) |
| 31 | + // Strict HTML recognition (#11290: must start with <) |
| 32 | + quickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, |
| 33 | + |
32 | 34 | // Is it a simple selector |
33 | 35 | isSimple = /^.[^:#\[\.,]*$/; |
34 | 36 |
|
@@ -58,11 +60,11 @@ jQuery.fn = jQuery.prototype = { |
58 | 60 |
|
59 | 61 | // HANDLE: $("#id") |
60 | 62 | else { |
61 | | - var elem = document.getElementById( match[3] ); |
| 63 | + var elem = document.getElementById( match[2] ); |
62 | 64 |
|
63 | 65 | // Handle the case where IE and Opera return items |
64 | 66 | // by name instead of ID |
65 | | - if ( elem && elem.id != match[3] ) |
| 67 | + if ( elem && elem.id != match[2] ) |
66 | 68 | return jQuery().find( selector ); |
67 | 69 |
|
68 | 70 | // Otherwise, we inject the element directly into the jQuery object |
@@ -97,7 +99,7 @@ jQuery.fn = jQuery.prototype = { |
97 | 99 | selector: "", |
98 | 100 |
|
99 | 101 | // The current version of jQuery being used |
100 | | - jquery: "1.3.2", |
| 102 | + jquery: "1.3.3-sec", |
101 | 103 |
|
102 | 104 | // The number of elements contained in the matched element set |
103 | 105 | size: function() { |
@@ -588,8 +590,9 @@ jQuery.extend = jQuery.fn.extend = function() { |
588 | 590 | for ( var name in options ) { |
589 | 591 | var src = target[ name ], copy = options[ name ]; |
590 | 592 |
|
| 593 | + // Prevent Object.prototype pollution |
591 | 594 | // Prevent never-ending loop |
592 | | - if ( target === copy ) |
| 595 | + if ( name === "__proto__" || target === copy ) |
593 | 596 | continue; |
594 | 597 |
|
595 | 598 | // Recurse if we're merging object values |
@@ -870,21 +873,10 @@ jQuery.extend({ |
870 | 873 |
|
871 | 874 | // Convert html string into DOM nodes |
872 | 875 | if ( typeof elem === "string" ) { |
873 | | - // Fix "XHTML"-style tags in all browsers |
874 | | - elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ |
875 | | - return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? |
876 | | - all : |
877 | | - front + "></" + tag + ">"; |
878 | | - }); |
879 | | - |
880 | 876 | // Trim whitespace, otherwise indexOf won't work as expected |
881 | 877 | var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); |
882 | 878 |
|
883 | 879 | var wrap = |
884 | | - // option or optgroup |
885 | | - !tags.indexOf("<opt") && |
886 | | - [ 1, "<select multiple='multiple'>", "</select>" ] || |
887 | | - |
888 | 880 | !tags.indexOf("<leg") && |
889 | 881 | [ 1, "<fieldset>", "</fieldset>" ] || |
890 | 882 |
|
@@ -1266,150 +1258,150 @@ jQuery.each({ |
1266 | 1258 | function num(elem, prop) { |
1267 | 1259 | return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0; |
1268 | 1260 | } |
1269 | | -var expando = "jQuery" + now(), uuid = 0, windowData = {}; |
1270 | | - |
1271 | | -jQuery.extend({ |
1272 | | - cache: {}, |
1273 | | - |
1274 | | - data: function( elem, name, data ) { |
1275 | | - elem = elem == window ? |
1276 | | - windowData : |
1277 | | - elem; |
1278 | | - |
1279 | | - var id = elem[ expando ]; |
1280 | | - |
1281 | | - // Compute a unique ID for the element |
1282 | | - if ( !id ) |
1283 | | - id = elem[ expando ] = ++uuid; |
1284 | | - |
1285 | | - // Only generate the data cache if we're |
1286 | | - // trying to access or manipulate it |
1287 | | - if ( name && !jQuery.cache[ id ] ) |
1288 | | - jQuery.cache[ id ] = {}; |
1289 | | - |
1290 | | - // Prevent overriding the named cache with undefined values |
1291 | | - if ( data !== undefined ) |
1292 | | - jQuery.cache[ id ][ name ] = data; |
1293 | | - |
1294 | | - // Return the named cache data, or the ID for the element |
1295 | | - return name ? |
1296 | | - jQuery.cache[ id ][ name ] : |
1297 | | - id; |
1298 | | - }, |
1299 | | - |
1300 | | - removeData: function( elem, name ) { |
1301 | | - elem = elem == window ? |
1302 | | - windowData : |
1303 | | - elem; |
1304 | | - |
1305 | | - var id = elem[ expando ]; |
1306 | | - |
1307 | | - // If we want to remove a specific section of the element's data |
1308 | | - if ( name ) { |
1309 | | - if ( jQuery.cache[ id ] ) { |
1310 | | - // Remove the section of cache data |
1311 | | - delete jQuery.cache[ id ][ name ]; |
1312 | | - |
1313 | | - // If we've removed all the data, remove the element's cache |
1314 | | - name = ""; |
1315 | | - |
1316 | | - for ( name in jQuery.cache[ id ] ) |
1317 | | - break; |
1318 | | - |
1319 | | - if ( !name ) |
1320 | | - jQuery.removeData( elem ); |
1321 | | - } |
1322 | | - |
1323 | | - // Otherwise, we want to remove all of the element's data |
1324 | | - } else { |
1325 | | - // Clean up the element expando |
1326 | | - try { |
1327 | | - delete elem[ expando ]; |
1328 | | - } catch(e){ |
1329 | | - // IE has trouble directly removing the expando |
1330 | | - // but it's ok with using removeAttribute |
1331 | | - if ( elem.removeAttribute ) |
1332 | | - elem.removeAttribute( expando ); |
1333 | | - } |
1334 | | - |
1335 | | - // Completely remove the data cache |
1336 | | - delete jQuery.cache[ id ]; |
1337 | | - } |
1338 | | - }, |
1339 | | - queue: function( elem, type, data ) { |
1340 | | - if ( elem ){ |
1341 | | - |
1342 | | - type = (type || "fx") + "queue"; |
1343 | | - |
1344 | | - var q = jQuery.data( elem, type ); |
1345 | | - |
1346 | | - if ( !q || jQuery.isArray(data) ) |
1347 | | - q = jQuery.data( elem, type, jQuery.makeArray(data) ); |
1348 | | - else if( data ) |
1349 | | - q.push( data ); |
1350 | | - |
1351 | | - } |
1352 | | - return q; |
1353 | | - }, |
1354 | | - |
1355 | | - dequeue: function( elem, type ){ |
1356 | | - var queue = jQuery.queue( elem, type ), |
1357 | | - fn = queue.shift(); |
1358 | | - |
1359 | | - if( !type || type === "fx" ) |
1360 | | - fn = queue[0]; |
1361 | | - |
1362 | | - if( fn !== undefined ) |
1363 | | - fn.call(elem); |
1364 | | - } |
1365 | | -}); |
1366 | | - |
1367 | | -jQuery.fn.extend({ |
1368 | | - data: function( key, value ){ |
1369 | | - var parts = key.split("."); |
1370 | | - parts[1] = parts[1] ? "." + parts[1] : ""; |
1371 | | - |
1372 | | - if ( value === undefined ) { |
1373 | | - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); |
1374 | | - |
1375 | | - if ( data === undefined && this.length ) |
1376 | | - data = jQuery.data( this[0], key ); |
1377 | | - |
1378 | | - return data === undefined && parts[1] ? |
1379 | | - this.data( parts[0] ) : |
1380 | | - data; |
1381 | | - } else |
1382 | | - return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ |
1383 | | - jQuery.data( this, key, value ); |
1384 | | - }); |
1385 | | - }, |
1386 | | - |
1387 | | - removeData: function( key ){ |
1388 | | - return this.each(function(){ |
1389 | | - jQuery.removeData( this, key ); |
1390 | | - }); |
1391 | | - }, |
1392 | | - queue: function(type, data){ |
1393 | | - if ( typeof type !== "string" ) { |
1394 | | - data = type; |
1395 | | - type = "fx"; |
1396 | | - } |
1397 | | - |
1398 | | - if ( data === undefined ) |
1399 | | - return jQuery.queue( this[0], type ); |
1400 | | - |
1401 | | - return this.each(function(){ |
1402 | | - var queue = jQuery.queue( this, type, data ); |
1403 | | - |
1404 | | - if( type == "fx" && queue.length == 1 ) |
1405 | | - queue[0].call(this); |
1406 | | - }); |
1407 | | - }, |
1408 | | - dequeue: function(type){ |
1409 | | - return this.each(function(){ |
1410 | | - jQuery.dequeue( this, type ); |
1411 | | - }); |
1412 | | - } |
| 1261 | +var expando = "jQuery" + now(), uuid = 0, windowData = {}; |
| 1262 | + |
| 1263 | +jQuery.extend({ |
| 1264 | + cache: {}, |
| 1265 | + |
| 1266 | + data: function( elem, name, data ) { |
| 1267 | + elem = elem == window ? |
| 1268 | + windowData : |
| 1269 | + elem; |
| 1270 | + |
| 1271 | + var id = elem[ expando ]; |
| 1272 | + |
| 1273 | + // Compute a unique ID for the element |
| 1274 | + if ( !id ) |
| 1275 | + id = elem[ expando ] = ++uuid; |
| 1276 | + |
| 1277 | + // Only generate the data cache if we're |
| 1278 | + // trying to access or manipulate it |
| 1279 | + if ( name && !jQuery.cache[ id ] ) |
| 1280 | + jQuery.cache[ id ] = {}; |
| 1281 | + |
| 1282 | + // Prevent overriding the named cache with undefined values |
| 1283 | + if ( data !== undefined ) |
| 1284 | + jQuery.cache[ id ][ name ] = data; |
| 1285 | + |
| 1286 | + // Return the named cache data, or the ID for the element |
| 1287 | + return name ? |
| 1288 | + jQuery.cache[ id ][ name ] : |
| 1289 | + id; |
| 1290 | + }, |
| 1291 | + |
| 1292 | + removeData: function( elem, name ) { |
| 1293 | + elem = elem == window ? |
| 1294 | + windowData : |
| 1295 | + elem; |
| 1296 | + |
| 1297 | + var id = elem[ expando ]; |
| 1298 | + |
| 1299 | + // If we want to remove a specific section of the element's data |
| 1300 | + if ( name ) { |
| 1301 | + if ( jQuery.cache[ id ] ) { |
| 1302 | + // Remove the section of cache data |
| 1303 | + delete jQuery.cache[ id ][ name ]; |
| 1304 | + |
| 1305 | + // If we've removed all the data, remove the element's cache |
| 1306 | + name = ""; |
| 1307 | + |
| 1308 | + for ( name in jQuery.cache[ id ] ) |
| 1309 | + break; |
| 1310 | + |
| 1311 | + if ( !name ) |
| 1312 | + jQuery.removeData( elem ); |
| 1313 | + } |
| 1314 | + |
| 1315 | + // Otherwise, we want to remove all of the element's data |
| 1316 | + } else { |
| 1317 | + // Clean up the element expando |
| 1318 | + try { |
| 1319 | + delete elem[ expando ]; |
| 1320 | + } catch(e){ |
| 1321 | + // IE has trouble directly removing the expando |
| 1322 | + // but it's ok with using removeAttribute |
| 1323 | + if ( elem.removeAttribute ) |
| 1324 | + elem.removeAttribute( expando ); |
| 1325 | + } |
| 1326 | + |
| 1327 | + // Completely remove the data cache |
| 1328 | + delete jQuery.cache[ id ]; |
| 1329 | + } |
| 1330 | + }, |
| 1331 | + queue: function( elem, type, data ) { |
| 1332 | + if ( elem ){ |
| 1333 | + |
| 1334 | + type = (type || "fx") + "queue"; |
| 1335 | + |
| 1336 | + var q = jQuery.data( elem, type ); |
| 1337 | + |
| 1338 | + if ( !q || jQuery.isArray(data) ) |
| 1339 | + q = jQuery.data( elem, type, jQuery.makeArray(data) ); |
| 1340 | + else if( data ) |
| 1341 | + q.push( data ); |
| 1342 | + |
| 1343 | + } |
| 1344 | + return q; |
| 1345 | + }, |
| 1346 | + |
| 1347 | + dequeue: function( elem, type ){ |
| 1348 | + var queue = jQuery.queue( elem, type ), |
| 1349 | + fn = queue.shift(); |
| 1350 | + |
| 1351 | + if( !type || type === "fx" ) |
| 1352 | + fn = queue[0]; |
| 1353 | + |
| 1354 | + if( fn !== undefined ) |
| 1355 | + fn.call(elem); |
| 1356 | + } |
| 1357 | +}); |
| 1358 | + |
| 1359 | +jQuery.fn.extend({ |
| 1360 | + data: function( key, value ){ |
| 1361 | + var parts = key.split("."); |
| 1362 | + parts[1] = parts[1] ? "." + parts[1] : ""; |
| 1363 | + |
| 1364 | + if ( value === undefined ) { |
| 1365 | + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); |
| 1366 | + |
| 1367 | + if ( data === undefined && this.length ) |
| 1368 | + data = jQuery.data( this[0], key ); |
| 1369 | + |
| 1370 | + return data === undefined && parts[1] ? |
| 1371 | + this.data( parts[0] ) : |
| 1372 | + data; |
| 1373 | + } else |
| 1374 | + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ |
| 1375 | + jQuery.data( this, key, value ); |
| 1376 | + }); |
| 1377 | + }, |
| 1378 | + |
| 1379 | + removeData: function( key ){ |
| 1380 | + return this.each(function(){ |
| 1381 | + jQuery.removeData( this, key ); |
| 1382 | + }); |
| 1383 | + }, |
| 1384 | + queue: function(type, data){ |
| 1385 | + if ( typeof type !== "string" ) { |
| 1386 | + data = type; |
| 1387 | + type = "fx"; |
| 1388 | + } |
| 1389 | + |
| 1390 | + if ( data === undefined ) |
| 1391 | + return jQuery.queue( this[0], type ); |
| 1392 | + |
| 1393 | + return this.each(function(){ |
| 1394 | + var queue = jQuery.queue( this, type, data ); |
| 1395 | + |
| 1396 | + if( type == "fx" && queue.length == 1 ) |
| 1397 | + queue[0].call(this); |
| 1398 | + }); |
| 1399 | + }, |
| 1400 | + dequeue: function(type){ |
| 1401 | + return this.each(function(){ |
| 1402 | + jQuery.dequeue( this, type ); |
| 1403 | + }); |
| 1404 | + } |
1413 | 1405 | });/*! |
1414 | 1406 | * Sizzle CSS Selector Engine - v0.9.3 |
1415 | 1407 | * Copyright 2009, The Dojo Foundation |
@@ -3269,7 +3261,7 @@ jQuery.fn.extend({ |
3269 | 3261 | jQuery("<div/>") |
3270 | 3262 | // inject the contents of the document in, removing the scripts |
3271 | 3263 | // to avoid any 'Permission Denied' errors in IE |
3272 | | - .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, "")) |
| 3264 | + .append(res.responseText.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*< *\/ *script *>?/gi, "")) |
3273 | 3265 |
|
3274 | 3266 | // Locate the specified elements |
3275 | 3267 | .find(selector) : |
|
0 commit comments