jquery-source 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  module Jquery
2
2
  module Source
3
- VERSION = "1.7.0"
3
+ VERSION = "1.7.1"
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * jQuery JavaScript Library v1.7
2
+ * jQuery JavaScript Library v1.7.1
3
3
  * http://jquery.com/
4
4
  *
5
5
  * Copyright 2011, John Resig
@@ -11,7 +11,7 @@
11
11
  * Copyright 2011, The Dojo Foundation
12
12
  * Released under the MIT, BSD, and GPL Licenses.
13
13
  *
14
- * Date: Thu Nov 3 16:18:21 2011 -0400
14
+ * Date: Mon Nov 21 21:11:03 2011 -0500
15
15
  */
16
16
  (function( window, undefined ) {
17
17
 
@@ -47,9 +47,6 @@ var jQuery = function( selector, context ) {
47
47
  trimLeft = /^\s+/,
48
48
  trimRight = /\s+$/,
49
49
 
50
- // Check for digits
51
- rdigit = /\d/,
52
-
53
50
  // Match a standalone tag
54
51
  rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
55
52
 
@@ -213,7 +210,7 @@ jQuery.fn = jQuery.prototype = {
213
210
  selector: "",
214
211
 
215
212
  // The current version of jQuery being used
216
- jquery: "1.7",
213
+ jquery: "1.7.1",
217
214
 
218
215
  // The default length of a jQuery object is 0
219
216
  length: 0,
@@ -285,9 +282,10 @@ jQuery.fn = jQuery.prototype = {
285
282
  },
286
283
 
287
284
  eq: function( i ) {
285
+ i = +i;
288
286
  return i === -1 ?
289
287
  this.slice( i ) :
290
- this.slice( i, +i + 1 );
288
+ this.slice( i, i + 1 );
291
289
  },
292
290
 
293
291
  first: function() {
@@ -438,7 +436,7 @@ jQuery.extend({
438
436
 
439
437
  // Trigger any bound ready events
440
438
  if ( jQuery.fn.trigger ) {
441
- jQuery( document ).trigger( "ready" ).unbind( "ready" );
439
+ jQuery( document ).trigger( "ready" ).off( "ready" );
442
440
  }
443
441
  }
444
442
  },
@@ -505,7 +503,7 @@ jQuery.extend({
505
503
  },
506
504
 
507
505
  isNumeric: function( obj ) {
508
- return obj != null && rdigit.test( obj ) && !isNaN( obj );
506
+ return !isNaN( parseFloat(obj) ) && isFinite( obj );
509
507
  },
510
508
 
511
509
  type: function( obj ) {
@@ -551,7 +549,7 @@ jQuery.extend({
551
549
  },
552
550
 
553
551
  error: function( msg ) {
554
- throw msg;
552
+ throw new Error( msg );
555
553
  },
556
554
 
557
555
  parseJSON: function( data ) {
@@ -688,8 +686,6 @@ jQuery.extend({
688
686
 
689
687
  if ( array != null ) {
690
688
  // The window, strings (and functions) also have 'length'
691
- // The extra typeof function check is to prevent crashes
692
- // in Safari 2 (See: #3039)
693
689
  // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
694
690
  var type = jQuery.type( array );
695
691
 
@@ -956,20 +952,6 @@ function doScrollCheck() {
956
952
  jQuery.ready();
957
953
  }
958
954
 
959
- // Expose jQuery as an AMD module, but only for AMD loaders that
960
- // understand the issues with loading multiple versions of jQuery
961
- // in a page that all might call define(). The loader will indicate
962
- // they have special allowances for multiple jQuery versions by
963
- // specifying define.amd.jQuery = true. Register as a named module,
964
- // since jQuery can be concatenated with other files that may use define,
965
- // but not use a proper concatenation script that understands anonymous
966
- // AMD modules. A named AMD is safest and most robust way to register.
967
- // Lowercase jquery is used because AMD module names are derived from
968
- // file names, and jQuery is normally delivered in a lowercase file name.
969
- if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
970
- define( "jquery", [], function () { return jQuery; } );
971
- }
972
-
973
955
  return jQuery;
974
956
 
975
957
  })();
@@ -1234,7 +1216,8 @@ jQuery.extend({
1234
1216
  return this;
1235
1217
  },
1236
1218
  always: function() {
1237
- return deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
1219
+ deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
1220
+ return this;
1238
1221
  },
1239
1222
  pipe: function( fnDone, fnFail, fnProgress ) {
1240
1223
  return jQuery.Deferred(function( newDefer ) {
@@ -1347,30 +1330,25 @@ jQuery.extend({
1347
1330
 
1348
1331
  jQuery.support = (function() {
1349
1332
 
1350
- var div = document.createElement( "div" ),
1351
- documentElement = document.documentElement,
1333
+ var support,
1352
1334
  all,
1353
1335
  a,
1354
1336
  select,
1355
1337
  opt,
1356
1338
  input,
1357
1339
  marginDiv,
1358
- support,
1359
1340
  fragment,
1360
- body,
1361
- testElementParent,
1362
- testElement,
1363
- testElementStyle,
1364
1341
  tds,
1365
1342
  events,
1366
1343
  eventName,
1367
1344
  i,
1368
- isSupported;
1345
+ isSupported,
1346
+ div = document.createElement( "div" ),
1347
+ documentElement = document.documentElement;
1369
1348
 
1370
1349
  // Preliminary tests
1371
1350
  div.setAttribute("className", "t");
1372
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>";
1373
-
1351
+ div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
1374
1352
 
1375
1353
  all = div.getElementsByTagName( "*" );
1376
1354
  a = div.getElementsByTagName( "a" )[ 0 ];
@@ -1391,11 +1369,11 @@ jQuery.support = (function() {
1391
1369
 
1392
1370
  // Make sure that tbody elements aren't automatically inserted
1393
1371
  // IE will insert them into empty tables
1394
- tbody: !div.getElementsByTagName( "tbody" ).length,
1372
+ tbody: !div.getElementsByTagName("tbody").length,
1395
1373
 
1396
1374
  // Make sure that link elements get serialized correctly by innerHTML
1397
1375
  // This requires a wrapper element in IE
1398
- htmlSerialize: !!div.getElementsByTagName( "link" ).length,
1376
+ htmlSerialize: !!div.getElementsByTagName("link").length,
1399
1377
 
1400
1378
  // Get the style information from getAttribute
1401
1379
  // (IE uses .cssText instead)
@@ -1403,7 +1381,7 @@ jQuery.support = (function() {
1403
1381
 
1404
1382
  // Make sure that URLs aren't manipulated
1405
1383
  // (IE normalizes it by default)
1406
- hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
1384
+ hrefNormalized: ( a.getAttribute("href") === "/a" ),
1407
1385
 
1408
1386
  // Make sure that element opacity exists
1409
1387
  // (IE uses filter instead)
@@ -1414,9 +1392,6 @@ jQuery.support = (function() {
1414
1392
  // (IE uses styleFloat instead of cssFloat)
1415
1393
  cssFloat: !!a.style.cssFloat,
1416
1394
 
1417
- // Make sure unknown elements (like HTML5 elems) are handled appropriately
1418
- unknownElems: !!div.getElementsByTagName( "nav" ).length,
1419
-
1420
1395
  // Make sure that if no value is specified for a checkbox
1421
1396
  // that it defaults to "on".
1422
1397
  // (WebKit defaults to "" instead)
@@ -1432,6 +1407,10 @@ jQuery.support = (function() {
1432
1407
  // Tests for enctype support on a form(#6743)
1433
1408
  enctype: !!document.createElement("form").enctype,
1434
1409
 
1410
+ // Makes sure cloning an html5 element does not cause problems
1411
+ // Where outerHTML is undefined, this still works
1412
+ html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
1413
+
1435
1414
  // Will be defined later
1436
1415
  submitBubbles: true,
1437
1416
  changeBubbles: true,
@@ -1484,81 +1463,13 @@ jQuery.support = (function() {
1484
1463
  // WebKit doesn't clone checked state correctly in fragments
1485
1464
  support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
1486
1465
 
1487
- div.innerHTML = "";
1488
-
1489
- // Figure out if the W3C box model works as expected
1490
- div.style.width = div.style.paddingLeft = "1px";
1491
-
1492
- // We don't want to do body-related feature tests on frameset
1493
- // documents, which lack a body. So we use
1494
- // document.getElementsByTagName("body")[0], which is undefined in
1495
- // frameset documents, while document.body isn’t. (7398)
1496
- body = document.getElementsByTagName("body")[ 0 ];
1497
- // We use our own, invisible, body unless the body is already present
1498
- // in which case we use a div (#9239)
1499
- testElement = document.createElement( body ? "div" : "body" );
1500
- testElementStyle = {
1501
- visibility: "hidden",
1502
- width: 0,
1503
- height: 0,
1504
- border: 0,
1505
- margin: 0,
1506
- background: "none"
1507
- };
1508
- if ( body ) {
1509
- jQuery.extend( testElementStyle, {
1510
- position: "absolute",
1511
- left: "-999px",
1512
- top: "-999px"
1513
- });
1514
- }
1515
- for ( i in testElementStyle ) {
1516
- testElement.style[ i ] = testElementStyle[ i ];
1517
- }
1518
- testElement.appendChild( div );
1519
- testElementParent = body || documentElement;
1520
- testElementParent.insertBefore( testElement, testElementParent.firstChild );
1521
-
1522
1466
  // Check if a disconnected checkbox will retain its checked
1523
1467
  // value of true after appended to the DOM (IE6/7)
1524
1468
  support.appendChecked = input.checked;
1525
1469
 
1526
- support.boxModel = div.offsetWidth === 2;
1527
-
1528
- if ( "zoom" in div.style ) {
1529
- // Check if natively block-level elements act like inline-block
1530
- // elements when setting their display to 'inline' and giving
1531
- // them layout
1532
- // (IE < 8 does this)
1533
- div.style.display = "inline";
1534
- div.style.zoom = 1;
1535
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
1536
-
1537
- // Check if elements with layout shrink-wrap their children
1538
- // (IE 6 does this)
1539
- div.style.display = "";
1540
- div.innerHTML = "<div style='width:4px;'></div>";
1541
- support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
1542
- }
1543
-
1544
- div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
1545
- tds = div.getElementsByTagName( "td" );
1546
-
1547
- // Check if table cells still have offsetWidth/Height when they are set
1548
- // to display:none and there are still other visible table cells in a
1549
- // table row; if so, offsetWidth/Height are not reliable for use when
1550
- // determining if an element has been hidden directly using
1551
- // display:none (it is still safe to use offsets if a parent element is
1552
- // hidden; don safety goggles and see bug #4512 for more information).
1553
- // (only IE 8 fails this test)
1554
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
1555
-
1556
- tds[ 0 ].style.display = "";
1557
- tds[ 1 ].style.display = "none";
1470
+ fragment.removeChild( input );
1471
+ fragment.appendChild( div );
1558
1472
 
1559
- // Check if empty table cells still have offsetWidth/Height
1560
- // (IE < 8 fail this test)
1561
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
1562
1473
  div.innerHTML = "";
1563
1474
 
1564
1475
  // Check if div with explicit width and no margin-right incorrectly
@@ -1566,13 +1477,14 @@ jQuery.support = (function() {
1566
1477
  // info see bug #3333
1567
1478
  // Fails in WebKit before Feb 2011 nightlies
1568
1479
  // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
1569
- if ( document.defaultView && document.defaultView.getComputedStyle ) {
1480
+ if ( window.getComputedStyle ) {
1570
1481
  marginDiv = document.createElement( "div" );
1571
1482
  marginDiv.style.width = "0";
1572
1483
  marginDiv.style.marginRight = "0";
1484
+ div.style.width = "2px";
1573
1485
  div.appendChild( marginDiv );
1574
1486
  support.reliableMarginRight =
1575
- ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
1487
+ ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
1576
1488
  }
1577
1489
 
1578
1490
  // Technique from Juriy Zaytsev
@@ -1586,7 +1498,7 @@ jQuery.support = (function() {
1586
1498
  submit: 1,
1587
1499
  change: 1,
1588
1500
  focusin: 1
1589
- } ) {
1501
+ }) {
1590
1502
  eventName = "on" + i;
1591
1503
  isSupported = ( eventName in div );
1592
1504
  if ( !isSupported ) {
@@ -1597,37 +1509,81 @@ jQuery.support = (function() {
1597
1509
  }
1598
1510
  }
1599
1511
 
1600
- // Run fixed position tests at doc ready to avoid a crash
1601
- // related to the invisible body in IE8
1512
+ fragment.removeChild( div );
1513
+
1514
+ // Null elements to avoid leaks in IE
1515
+ fragment = select = opt = marginDiv = div = input = null;
1516
+
1517
+ // Run tests that need a body at doc ready
1602
1518
  jQuery(function() {
1603
1519
  var container, outer, inner, table, td, offsetSupport,
1604
- conMarginTop = 1,
1605
- ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",
1606
- vb = "visibility:hidden;border:0;",
1607
- style = "style='" + ptlm + "border:5px solid #000;padding:0;'",
1608
- html = "<div " + style + "><div></div></div>" +
1609
- "<table " + style + " cellpadding='0' cellspacing='0'>" +
1610
- "<tr><td></td></tr></table>";
1611
-
1612
- // Reconstruct a container
1613
- body = document.getElementsByTagName("body")[0];
1520
+ conMarginTop, ptlm, vb, style, html,
1521
+ body = document.getElementsByTagName("body")[0];
1522
+
1614
1523
  if ( !body ) {
1615
1524
  // Return for frameset docs that don't have a body
1616
- // These tests cannot be done
1617
1525
  return;
1618
1526
  }
1619
1527
 
1528
+ conMarginTop = 1;
1529
+ ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";
1530
+ vb = "visibility:hidden;border:0;";
1531
+ style = "style='" + ptlm + "border:5px solid #000;padding:0;'";
1532
+ html = "<div " + style + "><div></div></div>" +
1533
+ "<table " + style + " cellpadding='0' cellspacing='0'>" +
1534
+ "<tr><td></td></tr></table>";
1535
+
1620
1536
  container = document.createElement("div");
1621
1537
  container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
1622
1538
  body.insertBefore( container, body.firstChild );
1623
1539
 
1624
- // Construct a test element
1625
- testElement = document.createElement("div");
1626
- testElement.style.cssText = ptlm + vb;
1627
-
1628
- testElement.innerHTML = html;
1629
- container.appendChild( testElement );
1630
- outer = testElement.firstChild;
1540
+ // Construct the test element
1541
+ div = document.createElement("div");
1542
+ container.appendChild( div );
1543
+
1544
+ // Check if table cells still have offsetWidth/Height when they are set
1545
+ // to display:none and there are still other visible table cells in a
1546
+ // table row; if so, offsetWidth/Height are not reliable for use when
1547
+ // determining if an element has been hidden directly using
1548
+ // display:none (it is still safe to use offsets if a parent element is
1549
+ // hidden; don safety goggles and see bug #4512 for more information).
1550
+ // (only IE 8 fails this test)
1551
+ div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
1552
+ tds = div.getElementsByTagName( "td" );
1553
+ isSupported = ( tds[ 0 ].offsetHeight === 0 );
1554
+
1555
+ tds[ 0 ].style.display = "";
1556
+ tds[ 1 ].style.display = "none";
1557
+
1558
+ // Check if empty table cells still have offsetWidth/Height
1559
+ // (IE <= 8 fail this test)
1560
+ support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
1561
+
1562
+ // Figure out if the W3C box model works as expected
1563
+ div.innerHTML = "";
1564
+ div.style.width = div.style.paddingLeft = "1px";
1565
+ jQuery.boxModel = support.boxModel = div.offsetWidth === 2;
1566
+
1567
+ if ( typeof div.style.zoom !== "undefined" ) {
1568
+ // Check if natively block-level elements act like inline-block
1569
+ // elements when setting their display to 'inline' and giving
1570
+ // them layout
1571
+ // (IE < 8 does this)
1572
+ div.style.display = "inline";
1573
+ div.style.zoom = 1;
1574
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
1575
+
1576
+ // Check if elements with layout shrink-wrap their children
1577
+ // (IE 6 does this)
1578
+ div.style.display = "";
1579
+ div.innerHTML = "<div style='width:4px;'></div>";
1580
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
1581
+ }
1582
+
1583
+ div.style.cssText = ptlm + vb;
1584
+ div.innerHTML = html;
1585
+
1586
+ outer = div.firstChild;
1631
1587
  inner = outer.firstChild;
1632
1588
  td = outer.nextSibling.firstChild.firstChild;
1633
1589
 
@@ -1650,23 +1606,14 @@ jQuery.support = (function() {
1650
1606
  offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
1651
1607
 
1652
1608
  body.removeChild( container );
1653
- testElement = container = null;
1609
+ div = container = null;
1654
1610
 
1655
1611
  jQuery.extend( support, offsetSupport );
1656
1612
  });
1657
1613
 
1658
- testElement.innerHTML = "";
1659
- testElementParent.removeChild( testElement );
1660
-
1661
- // Null connected elements to avoid leaks in IE
1662
- testElement = fragment = select = opt = body = marginDiv = div = input = null;
1663
-
1664
1614
  return support;
1665
1615
  })();
1666
1616
 
1667
- // Keep track of boxModel
1668
- jQuery.boxModel = jQuery.support.boxModel;
1669
-
1670
1617
 
1671
1618
 
1672
1619
 
@@ -1716,7 +1663,7 @@ jQuery.extend({
1716
1663
 
1717
1664
  // Only defining an ID for JS objects if its cache already exists allows
1718
1665
  // the code to shortcut on the same path as a DOM node with no cache
1719
- id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando,
1666
+ id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
1720
1667
  isEvents = name === "events";
1721
1668
 
1722
1669
  // Avoid doing any more work than we need to when trying to get data on an
@@ -1729,9 +1676,9 @@ jQuery.extend({
1729
1676
  // Only DOM nodes need a new unique ID for each element since their data
1730
1677
  // ends up in the global cache
1731
1678
  if ( isNode ) {
1732
- elem[ jQuery.expando ] = id = ++jQuery.uuid;
1679
+ elem[ internalKey ] = id = ++jQuery.uuid;
1733
1680
  } else {
1734
- id = jQuery.expando;
1681
+ id = internalKey;
1735
1682
  }
1736
1683
  }
1737
1684
 
@@ -1814,7 +1761,7 @@ jQuery.extend({
1814
1761
  cache = isNode ? jQuery.cache : elem,
1815
1762
 
1816
1763
  // See jQuery.data for more information
1817
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
1764
+ id = isNode ? elem[ internalKey ] : internalKey;
1818
1765
 
1819
1766
  // If there is already no cache entry for this object, there is no
1820
1767
  // purpose in continuing
@@ -1828,19 +1775,21 @@ jQuery.extend({
1828
1775
 
1829
1776
  if ( thisCache ) {
1830
1777
 
1831
- // Support space separated names
1832
- if ( jQuery.isArray( name ) ) {
1833
- name = name;
1834
- } else if ( name in thisCache ) {
1835
- name = [ name ];
1836
- } else {
1778
+ // Support array or space separated string names for data keys
1779
+ if ( !jQuery.isArray( name ) ) {
1837
1780
 
1838
- // split the camel cased version by spaces
1839
- name = jQuery.camelCase( name );
1781
+ // try the string as a key before any manipulation
1840
1782
  if ( name in thisCache ) {
1841
1783
  name = [ name ];
1842
1784
  } else {
1843
- name = name.split( " " );
1785
+
1786
+ // split the camel cased version by spaces unless a key with the spaces exists
1787
+ name = jQuery.camelCase( name );
1788
+ if ( name in thisCache ) {
1789
+ name = [ name ];
1790
+ } else {
1791
+ name = name.split( " " );
1792
+ }
1844
1793
  }
1845
1794
  }
1846
1795
 
@@ -1884,11 +1833,11 @@ jQuery.extend({
1884
1833
  // nor does it have a removeAttribute function on Document nodes;
1885
1834
  // we must handle all of these cases
1886
1835
  if ( jQuery.support.deleteExpando ) {
1887
- delete elem[ jQuery.expando ];
1836
+ delete elem[ internalKey ];
1888
1837
  } else if ( elem.removeAttribute ) {
1889
- elem.removeAttribute( jQuery.expando );
1838
+ elem.removeAttribute( internalKey );
1890
1839
  } else {
1891
- elem[ jQuery.expando ] = null;
1840
+ elem[ internalKey ] = null;
1892
1841
  }
1893
1842
  }
1894
1843
  },
@@ -1962,12 +1911,12 @@ jQuery.fn.extend({
1962
1911
 
1963
1912
  } else {
1964
1913
  return this.each(function() {
1965
- var $this = jQuery( this ),
1914
+ var self = jQuery( this ),
1966
1915
  args = [ parts[0], value ];
1967
1916
 
1968
- $this.triggerHandler( "setData" + parts[1] + "!", args );
1917
+ self.triggerHandler( "setData" + parts[1] + "!", args );
1969
1918
  jQuery.data( this, key, value );
1970
- $this.triggerHandler( "changeData" + parts[1] + "!", args );
1919
+ self.triggerHandler( "changeData" + parts[1] + "!", args );
1971
1920
  });
1972
1921
  }
1973
1922
  },
@@ -2380,7 +2329,7 @@ jQuery.fn.extend({
2380
2329
  ret == null ? "" : ret;
2381
2330
  }
2382
2331
 
2383
- return undefined;
2332
+ return;
2384
2333
  }
2385
2334
 
2386
2335
  isFunction = jQuery.isFunction( value );
@@ -2505,7 +2454,7 @@ jQuery.extend({
2505
2454
 
2506
2455
  // don't get/set attributes on text, comment and attribute nodes
2507
2456
  if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
2508
- return undefined;
2457
+ return;
2509
2458
  }
2510
2459
 
2511
2460
  if ( pass && name in jQuery.attrFn ) {
@@ -2513,7 +2462,7 @@ jQuery.extend({
2513
2462
  }
2514
2463
 
2515
2464
  // Fallback to prop when attributes are not supported
2516
- if ( !("getAttribute" in elem) ) {
2465
+ if ( typeof elem.getAttribute === "undefined" ) {
2517
2466
  return jQuery.prop( elem, name, value );
2518
2467
  }
2519
2468
 
@@ -2530,7 +2479,7 @@ jQuery.extend({
2530
2479
 
2531
2480
  if ( value === null ) {
2532
2481
  jQuery.removeAttr( elem, name );
2533
- return undefined;
2482
+ return;
2534
2483
 
2535
2484
  } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
2536
2485
  return ret;
@@ -2558,21 +2507,24 @@ jQuery.extend({
2558
2507
  var propName, attrNames, name, l,
2559
2508
  i = 0;
2560
2509
 
2561
- if ( elem.nodeType === 1 ) {
2562
- attrNames = ( value || "" ).split( rspace );
2510
+ if ( value && elem.nodeType === 1 ) {
2511
+ attrNames = value.toLowerCase().split( rspace );
2563
2512
  l = attrNames.length;
2564
2513
 
2565
2514
  for ( ; i < l; i++ ) {
2566
- name = attrNames[ i ].toLowerCase();
2567
- propName = jQuery.propFix[ name ] || name;
2515
+ name = attrNames[ i ];
2568
2516
 
2569
- // See #9699 for explanation of this approach (setting first, then removal)
2570
- jQuery.attr( elem, name, "" );
2571
- elem.removeAttribute( getSetAttribute ? name : propName );
2517
+ if ( name ) {
2518
+ propName = jQuery.propFix[ name ] || name;
2572
2519
 
2573
- // Set corresponding property to false for boolean attributes
2574
- if ( rboolean.test( name ) && propName in elem ) {
2575
- elem[ propName ] = false;
2520
+ // See #9699 for explanation of this approach (setting first, then removal)
2521
+ jQuery.attr( elem, name, "" );
2522
+ elem.removeAttribute( getSetAttribute ? name : propName );
2523
+
2524
+ // Set corresponding property to false for boolean attributes
2525
+ if ( rboolean.test( name ) && propName in elem ) {
2526
+ elem[ propName ] = false;
2527
+ }
2576
2528
  }
2577
2529
  }
2578
2530
  }
@@ -2639,7 +2591,7 @@ jQuery.extend({
2639
2591
 
2640
2592
  // don't get/set properties on text, comment and attribute nodes
2641
2593
  if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
2642
- return undefined;
2594
+ return;
2643
2595
  }
2644
2596
 
2645
2597
  notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
@@ -2852,15 +2804,12 @@ jQuery.each([ "radio", "checkbox" ], function() {
2852
2804
 
2853
2805
 
2854
2806
 
2855
- var rnamespaces = /\.(.*)$/,
2856
- rformElems = /^(?:textarea|input|select)$/i,
2857
- rperiod = /\./g,
2858
- rspaces = / /g,
2859
- rescape = /[^\w\s.|`]/g,
2807
+ var rformElems = /^(?:textarea|input|select)$/i,
2860
2808
  rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
2861
- rhoverHack = /\bhover(\.\S+)?/,
2809
+ rhoverHack = /\bhover(\.\S+)?\b/,
2862
2810
  rkeyEvent = /^key/,
2863
2811
  rmouseEvent = /^(?:mouse|contextmenu)|click/,
2812
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
2864
2813
  rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
2865
2814
  quickParse = function( selector ) {
2866
2815
  var quick = rquickIs.exec( selector );
@@ -2873,10 +2822,11 @@ var rnamespaces = /\.(.*)$/,
2873
2822
  return quick;
2874
2823
  },
2875
2824
  quickIs = function( elem, m ) {
2825
+ var attrs = elem.attributes || {};
2876
2826
  return (
2877
2827
  (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
2878
- (!m[2] || elem.id === m[2]) &&
2879
- (!m[3] || m[3].test( elem.className ))
2828
+ (!m[2] || (attrs.id || {}).value === m[2]) &&
2829
+ (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
2880
2830
  );
2881
2831
  },
2882
2832
  hoverHack = function( events ) {
@@ -2931,7 +2881,7 @@ jQuery.event = {
2931
2881
 
2932
2882
  // Handle multiple events separated by a space
2933
2883
  // jQuery(...).bind("mouseover mouseout", fn);
2934
- types = hoverHack(types).split( " " );
2884
+ types = jQuery.trim( hoverHack(types) ).split( " " );
2935
2885
  for ( t = 0; t < types.length; t++ ) {
2936
2886
 
2937
2887
  tns = rtypenamespace.exec( types[t] ) || [];
@@ -2955,17 +2905,10 @@ jQuery.event = {
2955
2905
  handler: handler,
2956
2906
  guid: handler.guid,
2957
2907
  selector: selector,
2908
+ quick: quickParse( selector ),
2958
2909
  namespace: namespaces.join(".")
2959
2910
  }, handleObjIn );
2960
2911
 
2961
- // Delegated event; pre-analyze selector so it's processed quickly on event dispatch
2962
- if ( selector ) {
2963
- handleObj.quick = quickParse( selector );
2964
- if ( !handleObj.quick && jQuery.expr.match.POS.test( selector ) ) {
2965
- handleObj.isPositional = true;
2966
- }
2967
- }
2968
-
2969
2912
  // Init the event handler queue if we're the first
2970
2913
  handlers = events[ type ];
2971
2914
  if ( !handlers ) {
@@ -3010,10 +2953,10 @@ jQuery.event = {
3010
2953
  global: {},
3011
2954
 
3012
2955
  // Detach an event or set of events from an element
3013
- remove: function( elem, types, handler, selector ) {
2956
+ remove: function( elem, types, handler, selector, mappedTypes ) {
3014
2957
 
3015
2958
  var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
3016
- t, tns, type, namespaces, origCount,
2959
+ t, tns, type, origType, namespaces, origCount,
3017
2960
  j, events, special, handle, eventType, handleObj;
3018
2961
 
3019
2962
  if ( !elemData || !(events = elemData.events) ) {
@@ -3021,19 +2964,18 @@ jQuery.event = {
3021
2964
  }
3022
2965
 
3023
2966
  // Once for each type.namespace in types; type may be omitted
3024
- types = hoverHack( types || "" ).split(" ");
2967
+ types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
3025
2968
  for ( t = 0; t < types.length; t++ ) {
3026
2969
  tns = rtypenamespace.exec( types[t] ) || [];
3027
- type = tns[1];
2970
+ type = origType = tns[1];
3028
2971
  namespaces = tns[2];
3029
2972
 
3030
2973
  // Unbind all events (on this namespace, if provided) for the element
3031
2974
  if ( !type ) {
3032
- namespaces = namespaces? "." + namespaces : "";
3033
- for ( j in events ) {
3034
- jQuery.event.remove( elem, j + namespaces, handler, selector );
2975
+ for ( type in events ) {
2976
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
3035
2977
  }
3036
- return;
2978
+ continue;
3037
2979
  }
3038
2980
 
3039
2981
  special = jQuery.event.special[ type ] || {};
@@ -3042,29 +2984,23 @@ jQuery.event = {
3042
2984
  origCount = eventType.length;
3043
2985
  namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
3044
2986
 
3045
- // Only need to loop for special events or selective removal
3046
- if ( handler || namespaces || selector || special.remove ) {
3047
- for ( j = 0; j < eventType.length; j++ ) {
3048
- handleObj = eventType[ j ];
2987
+ // Remove matching events
2988
+ for ( j = 0; j < eventType.length; j++ ) {
2989
+ handleObj = eventType[ j ];
3049
2990
 
3050
- if ( !handler || handler.guid === handleObj.guid ) {
3051
- if ( !namespaces || namespaces.test( handleObj.namespace ) ) {
3052
- if ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) {
3053
- eventType.splice( j--, 1 );
2991
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
2992
+ ( !handler || handler.guid === handleObj.guid ) &&
2993
+ ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
2994
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
2995
+ eventType.splice( j--, 1 );
3054
2996
 
3055
- if ( handleObj.selector ) {
3056
- eventType.delegateCount--;
3057
- }
3058
- if ( special.remove ) {
3059
- special.remove.call( elem, handleObj );
3060
- }
3061
- }
3062
- }
2997
+ if ( handleObj.selector ) {
2998
+ eventType.delegateCount--;
2999
+ }
3000
+ if ( special.remove ) {
3001
+ special.remove.call( elem, handleObj );
3063
3002
  }
3064
3003
  }
3065
- } else {
3066
- // Removing all events
3067
- eventType.length = 0;
3068
3004
  }
3069
3005
 
3070
3006
  // Remove generic event handler if we removed something and no more handlers exist
@@ -3110,6 +3046,11 @@ jQuery.event = {
3110
3046
  namespaces = [],
3111
3047
  cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
3112
3048
 
3049
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
3050
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
3051
+ return;
3052
+ }
3053
+
3113
3054
  if ( type.indexOf( "!" ) >= 0 ) {
3114
3055
  // Exclusive events trigger only for the exact event (no namespaces)
3115
3056
  type = type.slice(0, -1);
@@ -3144,11 +3085,6 @@ jQuery.event = {
3144
3085
  event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
3145
3086
  ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
3146
3087
 
3147
- // triggerHandler() and global events don't bubble or run the default action
3148
- if ( onlyHandlers || !elem ) {
3149
- event.preventDefault();
3150
- }
3151
-
3152
3088
  // Handle a global trigger
3153
3089
  if ( !elem ) {
3154
3090
 
@@ -3184,8 +3120,9 @@ jQuery.event = {
3184
3120
  if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
3185
3121
 
3186
3122
  bubbleType = special.delegateType || type;
3123
+ cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
3187
3124
  old = null;
3188
- for ( cur = elem.parentNode; cur; cur = cur.parentNode ) {
3125
+ for ( ; cur; cur = cur.parentNode ) {
3189
3126
  eventPath.push([ cur, bubbleType ]);
3190
3127
  old = cur;
3191
3128
  }
@@ -3197,7 +3134,7 @@ jQuery.event = {
3197
3134
  }
3198
3135
 
3199
3136
  // Fire handlers on the event path
3200
- for ( i = 0; i < eventPath.length; i++ ) {
3137
+ for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
3201
3138
 
3202
3139
  cur = eventPath[i][0];
3203
3140
  event.type = eventPath[i][1];
@@ -3206,19 +3143,16 @@ jQuery.event = {
3206
3143
  if ( handle ) {
3207
3144
  handle.apply( cur, data );
3208
3145
  }
3146
+ // Note that this is a bare JS function and not a jQuery handler
3209
3147
  handle = ontype && cur[ ontype ];
3210
- if ( handle && jQuery.acceptData( cur ) ) {
3211
- handle.apply( cur, data );
3212
- }
3213
-
3214
- if ( event.isPropagationStopped() ) {
3215
- break;
3148
+ if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
3149
+ event.preventDefault();
3216
3150
  }
3217
3151
  }
3218
3152
  event.type = type;
3219
3153
 
3220
3154
  // If nobody prevented the default action, do it now
3221
- if ( !event.isDefaultPrevented() ) {
3155
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
3222
3156
 
3223
3157
  if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
3224
3158
  !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
@@ -3260,9 +3194,8 @@ jQuery.event = {
3260
3194
  delegateCount = handlers.delegateCount,
3261
3195
  args = [].slice.call( arguments, 0 ),
3262
3196
  run_all = !event.exclusive && !event.namespace,
3263
- specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle,
3264
3197
  handlerQueue = [],
3265
- i, j, cur, ret, selMatch, matched, matches, handleObj, sel, hit, related;
3198
+ i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
3266
3199
 
3267
3200
  // Use the fix-ed jQuery.Event rather than the (read-only) native event
3268
3201
  args[0] = event;
@@ -3272,21 +3205,24 @@ jQuery.event = {
3272
3205
  // Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
3273
3206
  if ( delegateCount && !event.target.disabled && !(event.button && event.type === "click") ) {
3274
3207
 
3208
+ // Pregenerate a single jQuery object for reuse with .is()
3209
+ jqcur = jQuery(this);
3210
+ jqcur.context = this.ownerDocument || this;
3211
+
3275
3212
  for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
3276
3213
  selMatch = {};
3277
3214
  matches = [];
3215
+ jqcur[0] = cur;
3278
3216
  for ( i = 0; i < delegateCount; i++ ) {
3279
3217
  handleObj = handlers[ i ];
3280
3218
  sel = handleObj.selector;
3281
- hit = selMatch[ sel ];
3282
3219
 
3283
- if ( handleObj.isPositional ) {
3284
- // Since .is() does not work for positionals; see http://jsfiddle.net/eJ4yd/3/
3285
- hit = ( hit || (selMatch[ sel ] = jQuery( sel )) ).index( cur ) >= 0;
3286
- } else if ( hit === undefined ) {
3287
- hit = selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jQuery( cur ).is( sel ) );
3220
+ if ( selMatch[ sel ] === undefined ) {
3221
+ selMatch[ sel ] = (
3222
+ handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
3223
+ );
3288
3224
  }
3289
- if ( hit ) {
3225
+ if ( selMatch[ sel ] ) {
3290
3226
  matches.push( handleObj );
3291
3227
  }
3292
3228
  }
@@ -3316,7 +3252,8 @@ jQuery.event = {
3316
3252
  event.data = handleObj.data;
3317
3253
  event.handleObj = handleObj;
3318
3254
 
3319
- ret = ( specialHandle || handleObj.handler ).apply( matched.elem, args );
3255
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
3256
+ .apply( matched.elem, args );
3320
3257
 
3321
3258
  if ( ret !== undefined ) {
3322
3259
  event.result = ret;
@@ -3352,7 +3289,7 @@ jQuery.event = {
3352
3289
  },
3353
3290
 
3354
3291
  mouseHooks: {
3355
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),
3292
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
3356
3293
  filter: function( event, original ) {
3357
3294
  var eventDoc, doc, body,
3358
3295
  button = original.button,
@@ -3425,13 +3362,16 @@ jQuery.event = {
3425
3362
  setup: jQuery.bindReady
3426
3363
  },
3427
3364
 
3428
- focus: {
3429
- delegateType: "focusin",
3365
+ load: {
3366
+ // Prevent triggered image.load events from bubbling to window.load
3430
3367
  noBubble: true
3431
3368
  },
3369
+
3370
+ focus: {
3371
+ delegateType: "focusin"
3372
+ },
3432
3373
  blur: {
3433
- delegateType: "focusout",
3434
- noBubble: true
3374
+ delegateType: "focusout"
3435
3375
  },
3436
3376
 
3437
3377
  beforeunload: {
@@ -3577,7 +3517,7 @@ jQuery.each({
3577
3517
  mouseenter: "mouseover",
3578
3518
  mouseleave: "mouseout"
3579
3519
  }, function( orig, fix ) {
3580
- jQuery.event.special[ orig ] = jQuery.event.special[ fix ] = {
3520
+ jQuery.event.special[ orig ] = {
3581
3521
  delegateType: fix,
3582
3522
  bindType: fix,
3583
3523
 
@@ -3586,16 +3526,14 @@ jQuery.each({
3586
3526
  related = event.relatedTarget,
3587
3527
  handleObj = event.handleObj,
3588
3528
  selector = handleObj.selector,
3589
- oldType, ret;
3529
+ ret;
3590
3530
 
3591
- // For a real mouseover/out, always call the handler; for
3592
- // mousenter/leave call the handler if related is outside the target.
3531
+ // For mousenter/leave call the handler if related is outside the target.
3593
3532
  // NB: No relatedTarget if the mouse left/entered the browser window
3594
- if ( !related || handleObj.origType === event.type || (related !== target && !jQuery.contains( target, related )) ) {
3595
- oldType = event.type;
3533
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
3596
3534
  event.type = handleObj.origType;
3597
3535
  ret = handleObj.handler.apply( this, arguments );
3598
- event.type = oldType;
3536
+ event.type = fix;
3599
3537
  }
3600
3538
  return ret;
3601
3539
  }
@@ -3619,8 +3557,8 @@ if ( !jQuery.support.submitBubbles ) {
3619
3557
  form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
3620
3558
  if ( form && !form._submit_attached ) {
3621
3559
  jQuery.event.add( form, "submit._submit", function( event ) {
3622
- // Form was submitted, bubble the event up the tree
3623
- if ( this.parentNode ) {
3560
+ // If form was submitted by the user, bubble the event up the tree
3561
+ if ( this.parentNode && !event.isTrigger ) {
3624
3562
  jQuery.event.simulate( "submit", this.parentNode, event, true );
3625
3563
  }
3626
3564
  });
@@ -3660,7 +3598,7 @@ if ( !jQuery.support.changeBubbles ) {
3660
3598
  }
3661
3599
  });
3662
3600
  jQuery.event.add( this, "click._change", function( event ) {
3663
- if ( this._just_changed ) {
3601
+ if ( this._just_changed && !event.isTrigger ) {
3664
3602
  this._just_changed = false;
3665
3603
  jQuery.event.simulate( "change", this, event, true );
3666
3604
  }
@@ -3674,7 +3612,7 @@ if ( !jQuery.support.changeBubbles ) {
3674
3612
 
3675
3613
  if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
3676
3614
  jQuery.event.add( elem, "change._change", function( event ) {
3677
- if ( this.parentNode && !event.isSimulated ) {
3615
+ if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
3678
3616
  jQuery.event.simulate( "change", this.parentNode, event, true );
3679
3617
  }
3680
3618
  });
@@ -3892,7 +3830,7 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl
3892
3830
  }
3893
3831
 
3894
3832
  return arguments.length > 0 ?
3895
- this.bind( name, data, fn ) :
3833
+ this.on( name, null, data, fn ) :
3896
3834
  this.trigger( name );
3897
3835
  };
3898
3836
 
@@ -4238,7 +4176,7 @@ Sizzle.filter = function( expr, set, inplace, not ) {
4238
4176
  };
4239
4177
 
4240
4178
  Sizzle.error = function( msg ) {
4241
- throw "Syntax error, unrecognized expression: " + msg;
4179
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
4242
4180
  };
4243
4181
 
4244
4182
  /**
@@ -4251,7 +4189,7 @@ var getText = Sizzle.getText = function( elem ) {
4251
4189
  ret = "";
4252
4190
 
4253
4191
  if ( nodeType ) {
4254
- if ( nodeType === 1 ) {
4192
+ if ( nodeType === 1 || nodeType === 9 ) {
4255
4193
  // Use textContent || innerText for elements
4256
4194
  if ( typeof elem.textContent === 'string' ) {
4257
4195
  return elem.textContent;
@@ -5579,12 +5517,7 @@ jQuery.each({
5579
5517
  }
5580
5518
  }, function( name, fn ) {
5581
5519
  jQuery.fn[ name ] = function( until, selector ) {
5582
- var ret = jQuery.map( this, fn, until ),
5583
- // The variable 'args' was introduced in
5584
- // https://github.com/jquery/jquery/commit/52a0238
5585
- // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
5586
- // http://code.google.com/p/v8/issues/detail?id=1050
5587
- args = slice.call(arguments);
5520
+ var ret = jQuery.map( this, fn, until );
5588
5521
 
5589
5522
  if ( !runtil.test( name ) ) {
5590
5523
  selector = until;
@@ -5600,7 +5533,7 @@ jQuery.each({
5600
5533
  ret = ret.reverse();
5601
5534
  }
5602
5535
 
5603
- return this.pushStack( ret, name, args.join(",") );
5536
+ return this.pushStack( ret, name, slice.call( arguments ).join(",") );
5604
5537
  };
5605
5538
  });
5606
5539
 
@@ -5693,7 +5626,7 @@ function winnow( elements, qualifier, keep ) {
5693
5626
 
5694
5627
 
5695
5628
  function createSafeFragment( document ) {
5696
- var list = nodeNames.split( " " ),
5629
+ var list = nodeNames.split( "|" ),
5697
5630
  safeFrag = document.createDocumentFragment();
5698
5631
 
5699
5632
  if ( safeFrag.createElement ) {
@@ -5706,8 +5639,8 @@ function createSafeFragment( document ) {
5706
5639
  return safeFrag;
5707
5640
  }
5708
5641
 
5709
- var nodeNames = "abbr article aside audio canvas datalist details figcaption figure footer " +
5710
- "header hgroup mark meter nav output progress section summary time video",
5642
+ var nodeNames = "abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|" +
5643
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
5711
5644
  rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
5712
5645
  rleadingWhitespace = /^\s+/,
5713
5646
  rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
@@ -5716,7 +5649,7 @@ var nodeNames = "abbr article aside audio canvas datalist details figcaption fig
5716
5649
  rhtml = /<|&#?\w+;/,
5717
5650
  rnoInnerhtml = /<(?:script|style)/i,
5718
5651
  rnocache = /<(?:script|object|embed|option|style)/i,
5719
- rnoshimcache = new RegExp("<(?:" + nodeNames.replace(" ", "|") + ")", "i"),
5652
+ rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
5720
5653
  // checked="checked" or checked
5721
5654
  rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5722
5655
  rscriptType = /\/(java|ecma)script/i,
@@ -5809,8 +5742,10 @@ jQuery.fn.extend({
5809
5742
  },
5810
5743
 
5811
5744
  wrap: function( html ) {
5812
- return this.each(function() {
5813
- jQuery( this ).wrapAll( html );
5745
+ var isFunction = jQuery.isFunction( html );
5746
+
5747
+ return this.each(function(i) {
5748
+ jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
5814
5749
  });
5815
5750
  },
5816
5751
 
@@ -5844,7 +5779,7 @@ jQuery.fn.extend({
5844
5779
  this.parentNode.insertBefore( elem, this );
5845
5780
  });
5846
5781
  } else if ( arguments.length ) {
5847
- var set = jQuery(arguments[0]);
5782
+ var set = jQuery.clean( arguments );
5848
5783
  set.push.apply( set, this.toArray() );
5849
5784
  return this.pushStack( set, "before", arguments );
5850
5785
  }
@@ -5857,7 +5792,7 @@ jQuery.fn.extend({
5857
5792
  });
5858
5793
  } else if ( arguments.length ) {
5859
5794
  var set = this.pushStack( this, "after", arguments );
5860
- set.push.apply( set, jQuery(arguments[0]).toArray() );
5795
+ set.push.apply( set, jQuery.clean(arguments) );
5861
5796
  return set;
5862
5797
  }
5863
5798
  },
@@ -6158,7 +6093,7 @@ jQuery.buildFragment = function( args, nodes, scripts ) {
6158
6093
  doc = nodes[0].ownerDocument || nodes[0];
6159
6094
  }
6160
6095
 
6161
- // Ensure that an attr object doesn't incorrectly stand in as a document object
6096
+ // Ensure that an attr object doesn't incorrectly stand in as a document object
6162
6097
  // Chrome and Firefox seem to allow this to occur and will throw exception
6163
6098
  // Fixes #8950
6164
6099
  if ( !doc.createDocumentFragment ) {
@@ -6173,7 +6108,7 @@ jQuery.buildFragment = function( args, nodes, scripts ) {
6173
6108
  if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
6174
6109
  first.charAt(0) === "<" && !rnocache.test( first ) &&
6175
6110
  (jQuery.support.checkClone || !rchecked.test( first )) &&
6176
- (!jQuery.support.unknownElems && rnoshimcache.test( first )) ) {
6111
+ (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
6177
6112
 
6178
6113
  cacheable = true;
6179
6114
 
@@ -6254,12 +6189,24 @@ function findInputs( elem ) {
6254
6189
  }
6255
6190
  }
6256
6191
 
6192
+ // Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
6193
+ function shimCloneNode( elem ) {
6194
+ var div = document.createElement( "div" );
6195
+ safeFragment.appendChild( div );
6196
+
6197
+ div.innerHTML = elem.outerHTML;
6198
+ return div.firstChild;
6199
+ }
6200
+
6257
6201
  jQuery.extend({
6258
6202
  clone: function( elem, dataAndEvents, deepDataAndEvents ) {
6259
- var clone = elem.cloneNode(true),
6260
- srcElements,
6261
- destElements,
6262
- i;
6203
+ var srcElements,
6204
+ destElements,
6205
+ i,
6206
+ // IE<=8 does not properly clone detached, unknown element nodes
6207
+ clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
6208
+ elem.cloneNode( true ) :
6209
+ shimCloneNode( elem );
6263
6210
 
6264
6211
  if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
6265
6212
  (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
@@ -6271,8 +6218,7 @@ jQuery.extend({
6271
6218
 
6272
6219
  cloneFixAttributes( elem, clone );
6273
6220
 
6274
- // Using Sizzle here is crazy slow, so we use getElementsByTagName
6275
- // instead
6221
+ // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
6276
6222
  srcElements = getAll( elem );
6277
6223
  destElements = getAll( clone );
6278
6224
 
@@ -6763,11 +6709,8 @@ if ( document.defaultView && document.defaultView.getComputedStyle ) {
6763
6709
 
6764
6710
  name = name.replace( rupper, "-$1" ).toLowerCase();
6765
6711
 
6766
- if ( !(defaultView = elem.ownerDocument.defaultView) ) {
6767
- return undefined;
6768
- }
6769
-
6770
- if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
6712
+ if ( (defaultView = elem.ownerDocument.defaultView) &&
6713
+ (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
6771
6714
  ret = computedStyle.getPropertyValue( name );
6772
6715
  if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
6773
6716
  ret = jQuery.style( elem, name );
@@ -6825,20 +6768,22 @@ function getWH( elem, name, extra ) {
6825
6768
 
6826
6769
  // Start with offset property
6827
6770
  var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
6828
- which = name === "width" ? cssWidth : cssHeight;
6771
+ which = name === "width" ? cssWidth : cssHeight,
6772
+ i = 0,
6773
+ len = which.length;
6829
6774
 
6830
6775
  if ( val > 0 ) {
6831
6776
  if ( extra !== "border" ) {
6832
- jQuery.each( which, function() {
6777
+ for ( ; i < len; i++ ) {
6833
6778
  if ( !extra ) {
6834
- val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
6779
+ val -= parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
6835
6780
  }
6836
6781
  if ( extra === "margin" ) {
6837
- val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
6782
+ val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
6838
6783
  } else {
6839
- val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
6784
+ val -= parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
6840
6785
  }
6841
- });
6786
+ }
6842
6787
  }
6843
6788
 
6844
6789
  return val + "px";
@@ -6854,15 +6799,15 @@ function getWH( elem, name, extra ) {
6854
6799
 
6855
6800
  // Add padding, border, margin
6856
6801
  if ( extra ) {
6857
- jQuery.each( which, function() {
6858
- val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
6802
+ for ( ; i < len; i++ ) {
6803
+ val += parseFloat( jQuery.css( elem, "padding" + which[ i ] ) ) || 0;
6859
6804
  if ( extra !== "padding" ) {
6860
- val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
6805
+ val += parseFloat( jQuery.css( elem, "border" + which[ i ] + "Width" ) ) || 0;
6861
6806
  }
6862
6807
  if ( extra === "margin" ) {
6863
- val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
6808
+ val += parseFloat( jQuery.css( elem, extra + which[ i ] ) ) || 0;
6864
6809
  }
6865
- });
6810
+ }
6866
6811
  }
6867
6812
 
6868
6813
  return val + "px";
@@ -7145,7 +7090,7 @@ jQuery.fn.extend({
7145
7090
  // Attach a bunch of functions for handling common AJAX events
7146
7091
  jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
7147
7092
  jQuery.fn[ o ] = function( f ){
7148
- return this.bind( o, f );
7093
+ return this.on( o, f );
7149
7094
  };
7150
7095
  });
7151
7096
 
@@ -7639,7 +7584,7 @@ jQuery.extend({
7639
7584
  done( -1, e );
7640
7585
  // Simply rethrow otherwise
7641
7586
  } else {
7642
- jQuery.error( e );
7587
+ throw e;
7643
7588
  }
7644
7589
  }
7645
7590
  }
@@ -8534,7 +8479,7 @@ jQuery.fn.extend({
8534
8479
  }
8535
8480
 
8536
8481
  return this.each(function() {
8537
- var i,
8482
+ var index,
8538
8483
  hadTimers = false,
8539
8484
  timers = jQuery.timers,
8540
8485
  data = jQuery._data( this );
@@ -8544,33 +8489,33 @@ jQuery.fn.extend({
8544
8489
  jQuery._unmark( true, this );
8545
8490
  }
8546
8491
 
8547
- function stopQueue( elem, data, i ) {
8548
- var hooks = data[ i ];
8549
- jQuery.removeData( elem, i, true );
8492
+ function stopQueue( elem, data, index ) {
8493
+ var hooks = data[ index ];
8494
+ jQuery.removeData( elem, index, true );
8550
8495
  hooks.stop( gotoEnd );
8551
8496
  }
8552
8497
 
8553
8498
  if ( type == null ) {
8554
- for ( i in data ) {
8555
- if ( data[ i ].stop && i.indexOf(".run") === i.length - 4 ) {
8556
- stopQueue( this, data, i );
8499
+ for ( index in data ) {
8500
+ if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
8501
+ stopQueue( this, data, index );
8557
8502
  }
8558
8503
  }
8559
- } else if ( data[ i = type + ".run" ] && data[ i ].stop ){
8560
- stopQueue( this, data, i );
8504
+ } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
8505
+ stopQueue( this, data, index );
8561
8506
  }
8562
8507
 
8563
- for ( i = timers.length; i--; ) {
8564
- if ( timers[ i ].elem === this && (type == null || timers[ i ].queue === type) ) {
8508
+ for ( index = timers.length; index--; ) {
8509
+ if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
8565
8510
  if ( gotoEnd ) {
8566
8511
 
8567
8512
  // force the next step to be the last
8568
- timers[ i ]( true );
8513
+ timers[ index ]( true );
8569
8514
  } else {
8570
- timers[ i ].saveState();
8515
+ timers[ index ].saveState();
8571
8516
  }
8572
8517
  hadTimers = true;
8573
- timers.splice( i, 1 );
8518
+ timers.splice( index, 1 );
8574
8519
  }
8575
8520
  }
8576
8521
 
@@ -8890,7 +8835,7 @@ jQuery.extend( jQuery.fx, {
8890
8835
  // Do not set anything below 0
8891
8836
  jQuery.each([ "width", "height" ], function( i, prop ) {
8892
8837
  jQuery.fx.step[ prop ] = function( fx ) {
8893
- jQuery.style( fx.elem, prop, Math.max(0, fx.now) );
8838
+ jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
8894
8839
  };
8895
8840
  });
8896
8841
 
@@ -9295,6 +9240,27 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
9295
9240
  });
9296
9241
 
9297
9242
 
9243
+
9244
+
9298
9245
  // Expose jQuery to the global object
9299
9246
  window.jQuery = window.$ = jQuery;
9247
+
9248
+ // Expose jQuery as an AMD module, but only for AMD loaders that
9249
+ // understand the issues with loading multiple versions of jQuery
9250
+ // in a page that all might call define(). The loader will indicate
9251
+ // they have special allowances for multiple jQuery versions by
9252
+ // specifying define.amd.jQuery = true. Register as a named module,
9253
+ // since jQuery can be concatenated with other files that may use define,
9254
+ // but not use a proper concatenation script that understands anonymous
9255
+ // AMD modules. A named AMD is safest and most robust way to register.
9256
+ // Lowercase jquery is used because AMD module names are derived from
9257
+ // file names, and jQuery is normally delivered in a lowercase file name.
9258
+ // Do this after creating the global so that if an AMD module wants to call
9259
+ // noConflict to hide this version of jQuery, it will work.
9260
+ if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
9261
+ define( "jquery", [], function () { return jQuery; } );
9262
+ }
9263
+
9264
+
9265
+
9300
9266
  })( window );
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: jquery-source
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.7.0
5
+ version: 1.7.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Daniel X. Moore