appetizer-ui 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.test_files = `git ls-files -- test/*`.split("\n")
11
11
  gem.name = "appetizer-ui"
12
12
  gem.require_paths = ["lib"]
13
- gem.version = "0.6.0"
13
+ gem.version = "0.7.0"
14
14
 
15
15
  gem.required_ruby_version = ">= 1.9.2"
16
16
 
@@ -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 );