jquery-rails 1.0.12 → 1.0.13

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of jquery-rails might be problematic. Click here for more details.

@@ -1,6 +1,11 @@
1
+ ## 1.0.13 (11 August 2011)
2
+
3
+ - Updated to latest jquery-ujs with `novalidate` support
4
+ - No more support for jquery older than v1.6
5
+
1
6
  ## 1.0.12 (23 June 2011)
2
7
 
3
- - Updated to latest jqueyr-ujs with 'blank form action' and
8
+ - Updated to latest jquery-ujs with 'blank form action' and
4
9
  data-remote support for select elements
5
10
 
6
11
  ## 1.0.11 (15 June 2011)
@@ -1,8 +1,8 @@
1
1
  module Jquery
2
2
  module Rails
3
- VERSION = "1.0.12"
4
- JQUERY_VERSION = "1.6.1"
5
- JQUERY_UI_VERSION = "1.8.12"
6
- JQUERY_UJS_VERSION = "0e742688c633bda274f8a09bf3248ffe33ecaf92"
3
+ VERSION = "1.0.13"
4
+ JQUERY_VERSION = "1.6.2"
5
+ JQUERY_UI_VERSION = "1.8.14"
6
+ JQUERY_UJS_VERSION = "cd619df9f0daad3303aacd4f992fff19158b1e5d"
7
7
  end
8
8
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * jQuery UI 1.8.12
2
+ * jQuery UI 1.8.14
3
3
  *
4
4
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
5
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -18,7 +18,7 @@ if ( $.ui.version ) {
18
18
  }
19
19
 
20
20
  $.extend( $.ui, {
21
- version: "1.8.12",
21
+ version: "1.8.14",
22
22
 
23
23
  keyCode: {
24
24
  ALT: 18,
@@ -174,6 +174,27 @@ $.each( [ "Width", "Height" ], function( i, name ) {
174
174
  });
175
175
 
176
176
  // selectors
177
+ function focusable( element, isTabIndexNotNaN ) {
178
+ var nodeName = element.nodeName.toLowerCase();
179
+ if ( "area" === nodeName ) {
180
+ var map = element.parentNode,
181
+ mapName = map.name,
182
+ img;
183
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
184
+ return false;
185
+ }
186
+ img = $( "img[usemap=#" + mapName + "]" )[0];
187
+ return !!img && visible( img );
188
+ }
189
+ return ( /input|select|textarea|button|object/.test( nodeName )
190
+ ? !element.disabled
191
+ : "a" == nodeName
192
+ ? element.href || isTabIndexNotNaN
193
+ : isTabIndexNotNaN)
194
+ // the element and all of its ancestors must be visible
195
+ && visible( element );
196
+ }
197
+
177
198
  function visible( element ) {
178
199
  return !$( element ).parents().andSelf().filter(function() {
179
200
  return $.curCSS( this, "visibility" ) === "hidden" ||
@@ -187,30 +208,13 @@ $.extend( $.expr[ ":" ], {
187
208
  },
188
209
 
189
210
  focusable: function( element ) {
190
- var nodeName = element.nodeName.toLowerCase(),
191
- tabIndex = $.attr( element, "tabindex" );
192
- if ( "area" === nodeName ) {
193
- var map = element.parentNode,
194
- mapName = map.name,
195
- img;
196
- if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
197
- return false;
198
- }
199
- img = $( "img[usemap=#" + mapName + "]" )[0];
200
- return !!img && visible( img );
201
- }
202
- return ( /input|select|textarea|button|object/.test( nodeName )
203
- ? !element.disabled
204
- : "a" == nodeName
205
- ? element.href || !isNaN( tabIndex )
206
- : !isNaN( tabIndex ))
207
- // the element and all of its ancestors must be visible
208
- && visible( element );
211
+ return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
209
212
  },
210
213
 
211
214
  tabbable: function( element ) {
212
- var tabIndex = $.attr( element, "tabindex" );
213
- return ( isNaN( tabIndex ) || tabIndex >= 0 ) && $( element ).is( ":focusable" );
215
+ var tabIndex = $.attr( element, "tabindex" ),
216
+ isTabIndexNaN = isNaN( tabIndex );
217
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
214
218
  }
215
219
  });
216
220
 
@@ -307,7 +311,7 @@ $.extend( $.ui, {
307
311
 
308
312
  })( jQuery );
309
313
  /*!
310
- * jQuery UI Widget 1.8.12
314
+ * jQuery UI Widget 1.8.14
311
315
  *
312
316
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
313
317
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -569,7 +573,7 @@ $.Widget.prototype = {
569
573
 
570
574
  })( jQuery );
571
575
  /*!
572
- * jQuery UI Mouse 1.8.12
576
+ * jQuery UI Mouse 1.8.14
573
577
  *
574
578
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
575
579
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -582,6 +586,11 @@ $.Widget.prototype = {
582
586
  */
583
587
  (function( $, undefined ) {
584
588
 
589
+ var mouseHandled = false;
590
+ $(document).mousedown(function(e) {
591
+ mouseHandled = false;
592
+ });
593
+
585
594
  $.widget("ui.mouse", {
586
595
  options: {
587
596
  cancel: ':input,option',
@@ -614,9 +623,7 @@ $.widget("ui.mouse", {
614
623
 
615
624
  _mouseDown: function(event) {
616
625
  // don't let more than one widget handle mouseStart
617
- // TODO: figure out why we have to use originalEvent
618
- event.originalEvent = event.originalEvent || {};
619
- if (event.originalEvent.mouseHandled) { return; }
626
+ if(mouseHandled) {return};
620
627
 
621
628
  // we may have missed mouseup (out of window)
622
629
  (this._mouseStarted && this._mouseUp(event));
@@ -625,7 +632,7 @@ $.widget("ui.mouse", {
625
632
 
626
633
  var self = this,
627
634
  btnIsLeft = (event.which == 1),
628
- elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
635
+ elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).closest(this.options.cancel).length : false);
629
636
  if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
630
637
  return true;
631
638
  }
@@ -662,7 +669,8 @@ $.widget("ui.mouse", {
662
669
  .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
663
670
 
664
671
  event.preventDefault();
665
- event.originalEvent.mouseHandled = true;
672
+
673
+ mouseHandled = true;
666
674
  return true;
667
675
  },
668
676
 
@@ -725,7 +733,7 @@ $.widget("ui.mouse", {
725
733
 
726
734
  })(jQuery);
727
735
  /*
728
- * jQuery UI Draggable 1.8.12
736
+ * jQuery UI Draggable 1.8.14
729
737
  *
730
738
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
731
739
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -805,6 +813,16 @@ $.widget("ui.draggable", $.ui.mouse, {
805
813
  this.handle = this._getHandle(event);
806
814
  if (!this.handle)
807
815
  return false;
816
+
817
+ $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
818
+ $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
819
+ .css({
820
+ width: this.offsetWidth+"px", height: this.offsetHeight+"px",
821
+ position: "absolute", opacity: "0.001", zIndex: 1000
822
+ })
823
+ .css($(this).offset())
824
+ .appendTo("body");
825
+ });
808
826
 
809
827
  return true;
810
828
 
@@ -879,6 +897,10 @@ $.widget("ui.draggable", $.ui.mouse, {
879
897
 
880
898
  this.helper.addClass("ui-draggable-dragging");
881
899
  this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
900
+
901
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
902
+ if ( $.ui.ddmanager ) $.ui.ddmanager.dragStart(this, event);
903
+
882
904
  return true;
883
905
  },
884
906
 
@@ -938,6 +960,19 @@ $.widget("ui.draggable", $.ui.mouse, {
938
960
  return false;
939
961
  },
940
962
 
963
+ _mouseUp: function(event) {
964
+ if (this.options.iframeFix === true) {
965
+ $("div.ui-draggable-iframeFix").each(function() {
966
+ this.parentNode.removeChild(this);
967
+ }); //Remove frame helpers
968
+ }
969
+
970
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
971
+ if( $.ui.ddmanager ) $.ui.ddmanager.dragStop(this, event);
972
+
973
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
974
+ },
975
+
941
976
  cancel: function() {
942
977
 
943
978
  if(this.helper.is(".ui-draggable-dragging")) {
@@ -967,7 +1002,7 @@ $.widget("ui.draggable", $.ui.mouse, {
967
1002
  _createHelper: function(event) {
968
1003
 
969
1004
  var o = this.options;
970
- var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element);
1005
+ var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
971
1006
 
972
1007
  if(!helper.parents('body').length)
973
1008
  helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
@@ -1061,23 +1096,26 @@ $.widget("ui.draggable", $.ui.mouse, {
1061
1096
  var o = this.options;
1062
1097
  if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
1063
1098
  if(o.containment == 'document' || o.containment == 'window') this.containment = [
1064
- (o.containment == 'document' ? 0 : $(window).scrollLeft()) - this.offset.relative.left - this.offset.parent.left,
1065
- (o.containment == 'document' ? 0 : $(window).scrollTop()) - this.offset.relative.top - this.offset.parent.top,
1099
+ o.containment == 'document' ? 0 : $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
1100
+ o.containment == 'document' ? 0 : $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
1066
1101
  (o.containment == 'document' ? 0 : $(window).scrollLeft()) + $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
1067
1102
  (o.containment == 'document' ? 0 : $(window).scrollTop()) + ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
1068
1103
  ];
1069
1104
 
1070
1105
  if(!(/^(document|window|parent)$/).test(o.containment) && o.containment.constructor != Array) {
1071
- var ce = $(o.containment)[0]; if(!ce) return;
1072
- var co = $(o.containment).offset();
1106
+ var c = $(o.containment);
1107
+ var ce = c[0]; if(!ce) return;
1108
+ var co = c.offset();
1073
1109
  var over = ($(ce).css("overflow") != 'hidden');
1074
1110
 
1075
1111
  this.containment = [
1076
- co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
1077
- co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
1078
- co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
1079
- co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom
1112
+ (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0),
1113
+ (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0),
1114
+ (over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right,
1115
+ (over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom
1080
1116
  ];
1117
+ this.relative_container = c;
1118
+
1081
1119
  } else if(o.containment.constructor == Array) {
1082
1120
  this.containment = o.containment;
1083
1121
  }
@@ -1119,20 +1157,32 @@ $.widget("ui.draggable", $.ui.mouse, {
1119
1157
  */
1120
1158
 
1121
1159
  if(this.originalPosition) { //If we are not dragging yet, we won't check for options
1122
-
1123
- if(this.containment) {
1124
- if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
1125
- if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
1126
- if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
1127
- if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
1160
+ var containment;
1161
+ if(this.containment) {
1162
+ if (this.relative_container){
1163
+ var co = this.relative_container.offset();
1164
+ containment = [ this.containment[0] + co.left,
1165
+ this.containment[1] + co.top,
1166
+ this.containment[2] + co.left,
1167
+ this.containment[3] + co.top ];
1168
+ }
1169
+ else {
1170
+ containment = this.containment;
1171
+ }
1172
+
1173
+ if(event.pageX - this.offset.click.left < containment[0]) pageX = containment[0] + this.offset.click.left;
1174
+ if(event.pageY - this.offset.click.top < containment[1]) pageY = containment[1] + this.offset.click.top;
1175
+ if(event.pageX - this.offset.click.left > containment[2]) pageX = containment[2] + this.offset.click.left;
1176
+ if(event.pageY - this.offset.click.top > containment[3]) pageY = containment[3] + this.offset.click.top;
1128
1177
  }
1129
1178
 
1130
1179
  if(o.grid) {
1131
- var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
1132
- pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
1180
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
1181
+ var top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
1182
+ pageY = containment ? (!(top - this.offset.click.top < containment[1] || top - this.offset.click.top > containment[3]) ? top : (!(top - this.offset.click.top < containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
1133
1183
 
1134
- var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
1135
- pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
1184
+ var left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
1185
+ pageX = containment ? (!(left - this.offset.click.left < containment[0] || left - this.offset.click.left > containment[2]) ? left : (!(left - this.offset.click.left < containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
1136
1186
  }
1137
1187
 
1138
1188
  }
@@ -1187,7 +1237,7 @@ $.widget("ui.draggable", $.ui.mouse, {
1187
1237
  });
1188
1238
 
1189
1239
  $.extend($.ui.draggable, {
1190
- version: "1.8.12"
1240
+ version: "1.8.14"
1191
1241
  });
1192
1242
 
1193
1243
  $.ui.plugin.add("draggable", "connectToSortable", {
@@ -1272,7 +1322,7 @@ $.ui.plugin.add("draggable", "connectToSortable", {
1272
1322
  //Now we fake the start of dragging for the sortable instance,
1273
1323
  //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
1274
1324
  //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
1275
- this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
1325
+ this.instance.currentItem = $(self).clone().removeAttr('id').appendTo(this.instance.element).data("sortable-item", true);
1276
1326
  this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
1277
1327
  this.instance.options.helper = function() { return ui.helper[0]; };
1278
1328
 
@@ -1342,24 +1392,6 @@ $.ui.plugin.add("draggable", "cursor", {
1342
1392
  }
1343
1393
  });
1344
1394
 
1345
- $.ui.plugin.add("draggable", "iframeFix", {
1346
- start: function(event, ui) {
1347
- var o = $(this).data('draggable').options;
1348
- $(o.iframeFix === true ? "iframe" : o.iframeFix).each(function() {
1349
- $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
1350
- .css({
1351
- width: this.offsetWidth+"px", height: this.offsetHeight+"px",
1352
- position: "absolute", opacity: "0.001", zIndex: 1000
1353
- })
1354
- .css($(this).offset())
1355
- .appendTo("body");
1356
- });
1357
- },
1358
- stop: function(event, ui) {
1359
- $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers
1360
- }
1361
- });
1362
-
1363
1395
  $.ui.plugin.add("draggable", "opacity", {
1364
1396
  start: function(event, ui) {
1365
1397
  var t = $(ui.helper), o = $(this).data('draggable').options;
@@ -1524,7 +1556,7 @@ $.ui.plugin.add("draggable", "zIndex", {
1524
1556
 
1525
1557
  })(jQuery);
1526
1558
  /*
1527
- * jQuery UI Droppable 1.8.12
1559
+ * jQuery UI Droppable 1.8.14
1528
1560
  *
1529
1561
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
1530
1562
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -1672,7 +1704,7 @@ $.widget("ui.droppable", {
1672
1704
  });
1673
1705
 
1674
1706
  $.extend($.ui.droppable, {
1675
- version: "1.8.12"
1707
+ version: "1.8.14"
1676
1708
  });
1677
1709
 
1678
1710
  $.ui.intersect = function(draggable, droppable, toleranceMode) {
@@ -1763,6 +1795,12 @@ $.ui.ddmanager = {
1763
1795
  return dropped;
1764
1796
 
1765
1797
  },
1798
+ dragStart: function( draggable, event ) {
1799
+ //Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
1800
+ draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
1801
+ if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
1802
+ });
1803
+ },
1766
1804
  drag: function(draggable, event) {
1767
1805
 
1768
1806
  //If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
@@ -1804,12 +1842,17 @@ $.ui.ddmanager = {
1804
1842
  }
1805
1843
  });
1806
1844
 
1845
+ },
1846
+ dragStop: function( draggable, event ) {
1847
+ draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
1848
+ //Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
1849
+ if( !draggable.options.refreshPositions ) $.ui.ddmanager.prepareOffsets( draggable, event );
1807
1850
  }
1808
1851
  };
1809
1852
 
1810
1853
  })(jQuery);
1811
1854
  /*
1812
- * jQuery UI Resizable 1.8.12
1855
+ * jQuery UI Resizable 1.8.14
1813
1856
  *
1814
1857
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
1815
1858
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -1986,10 +2029,12 @@ $.widget("ui.resizable", $.ui.mouse, {
1986
2029
  $(this.element)
1987
2030
  .addClass("ui-resizable-autohide")
1988
2031
  .hover(function() {
2032
+ if (o.disabled) return;
1989
2033
  $(this).removeClass("ui-resizable-autohide");
1990
2034
  self._handles.show();
1991
2035
  },
1992
2036
  function(){
2037
+ if (o.disabled) return;
1993
2038
  if (!self.resizing) {
1994
2039
  $(this).addClass("ui-resizable-autohide");
1995
2040
  self._handles.hide();
@@ -2101,6 +2146,8 @@ $.widget("ui.resizable", $.ui.mouse, {
2101
2146
  // Calculate the attrs that will be change
2102
2147
  var data = trigger.apply(this, [event, dx, dy]), ie6 = $.browser.msie && $.browser.version < 7, csdif = this.sizeDiff;
2103
2148
 
2149
+ // Put this in the mouseDrag handler since the user can start pressing shift while resizing
2150
+ this._updateVirtualBoundaries(event.shiftKey);
2104
2151
  if (this._aspectRatio || event.shiftKey)
2105
2152
  data = this._updateRatio(data, event);
2106
2153
 
@@ -2159,6 +2206,32 @@ $.widget("ui.resizable", $.ui.mouse, {
2159
2206
 
2160
2207
  },
2161
2208
 
2209
+ _updateVirtualBoundaries: function(forceAspectRatio) {
2210
+ var o = this.options, pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b;
2211
+
2212
+ b = {
2213
+ minWidth: isNumber(o.minWidth) ? o.minWidth : 0,
2214
+ maxWidth: isNumber(o.maxWidth) ? o.maxWidth : Infinity,
2215
+ minHeight: isNumber(o.minHeight) ? o.minHeight : 0,
2216
+ maxHeight: isNumber(o.maxHeight) ? o.maxHeight : Infinity
2217
+ };
2218
+
2219
+ if(this._aspectRatio || forceAspectRatio) {
2220
+ // We want to create an enclosing box whose aspect ration is the requested one
2221
+ // First, compute the "projected" size for each dimension based on the aspect ratio and other dimension
2222
+ pMinWidth = b.minHeight * this.aspectRatio;
2223
+ pMinHeight = b.minWidth / this.aspectRatio;
2224
+ pMaxWidth = b.maxHeight * this.aspectRatio;
2225
+ pMaxHeight = b.maxWidth / this.aspectRatio;
2226
+
2227
+ if(pMinWidth > b.minWidth) b.minWidth = pMinWidth;
2228
+ if(pMinHeight > b.minHeight) b.minHeight = pMinHeight;
2229
+ if(pMaxWidth < b.maxWidth) b.maxWidth = pMaxWidth;
2230
+ if(pMaxHeight < b.maxHeight) b.maxHeight = pMaxHeight;
2231
+ }
2232
+ this._vBoundaries = b;
2233
+ },
2234
+
2162
2235
  _updateCache: function(data) {
2163
2236
  var o = this.options;
2164
2237
  this.offset = this.helper.offset();
@@ -2172,8 +2245,8 @@ $.widget("ui.resizable", $.ui.mouse, {
2172
2245
 
2173
2246
  var o = this.options, cpos = this.position, csize = this.size, a = this.axis;
2174
2247
 
2175
- if (data.height) data.width = (csize.height * this.aspectRatio);
2176
- else if (data.width) data.height = (csize.width / this.aspectRatio);
2248
+ if (isNumber(data.height)) data.width = (data.height * this.aspectRatio);
2249
+ else if (isNumber(data.width)) data.height = (data.width / this.aspectRatio);
2177
2250
 
2178
2251
  if (a == 'sw') {
2179
2252
  data.left = cpos.left + (csize.width - data.width);
@@ -2189,7 +2262,7 @@ $.widget("ui.resizable", $.ui.mouse, {
2189
2262
 
2190
2263
  _respectSize: function(data, event) {
2191
2264
 
2192
- var el = this.helper, o = this.options, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
2265
+ var el = this.helper, o = this._vBoundaries, pRatio = this._aspectRatio || event.shiftKey, a = this.axis,
2193
2266
  ismaxw = isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width), ismaxh = isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
2194
2267
  isminw = isNumber(data.width) && o.minWidth && (o.minWidth > data.width), isminh = isNumber(data.height) && o.minHeight && (o.minHeight > data.height);
2195
2268
 
@@ -2329,7 +2402,7 @@ $.widget("ui.resizable", $.ui.mouse, {
2329
2402
  });
2330
2403
 
2331
2404
  $.extend($.ui.resizable, {
2332
- version: "1.8.12"
2405
+ version: "1.8.14"
2333
2406
  });
2334
2407
 
2335
2408
  /*
@@ -2621,7 +2694,7 @@ var isNumber = function(value) {
2621
2694
 
2622
2695
  })(jQuery);
2623
2696
  /*
2624
- * jQuery UI Selectable 1.8.12
2697
+ * jQuery UI Selectable 1.8.14
2625
2698
  *
2626
2699
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
2627
2700
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -2882,12 +2955,12 @@ $.widget("ui.selectable", $.ui.mouse, {
2882
2955
  });
2883
2956
 
2884
2957
  $.extend($.ui.selectable, {
2885
- version: "1.8.12"
2958
+ version: "1.8.14"
2886
2959
  });
2887
2960
 
2888
2961
  })(jQuery);
2889
2962
  /*
2890
- * jQuery UI Sortable 1.8.12
2963
+ * jQuery UI Sortable 1.8.14
2891
2964
  *
2892
2965
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
2893
2966
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -2938,7 +3011,7 @@ $.widget("ui.sortable", $.ui.mouse, {
2938
3011
  this.refresh();
2939
3012
 
2940
3013
  //Let's determine if the items are being displayed horizontally
2941
- this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
3014
+ this.floating = this.items.length ? o.axis === 'x' || (/left|right/).test(this.items[0].item.css('float')) || (/inline|table-cell/).test(this.items[0].item.css('display')) : false;
2942
3015
 
2943
3016
  //Let's determine the parent's offset
2944
3017
  this.offset = this.element.offset();
@@ -3872,7 +3945,7 @@ $.widget("ui.sortable", $.ui.mouse, {
3872
3945
 
3873
3946
  // We first have to update the dom position of the actual currentItem
3874
3947
  // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
3875
- if(!this._noFinalSort && this.currentItem[0].parentNode) this.placeholder.before(this.currentItem);
3948
+ if(!this._noFinalSort && this.currentItem.parent().length) this.placeholder.before(this.currentItem);
3876
3949
  this._noFinalSort = null;
3877
3950
 
3878
3951
  if(this.helper[0] == this.currentItem[0]) {
@@ -3959,12 +4032,12 @@ $.widget("ui.sortable", $.ui.mouse, {
3959
4032
  });
3960
4033
 
3961
4034
  $.extend($.ui.sortable, {
3962
- version: "1.8.12"
4035
+ version: "1.8.14"
3963
4036
  });
3964
4037
 
3965
4038
  })(jQuery);
3966
4039
  /*
3967
- * jQuery UI Effects 1.8.12
4040
+ * jQuery UI Effects 1.8.14
3968
4041
  *
3969
4042
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
3970
4043
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -4196,12 +4269,12 @@ $.effects.animateClass = function(value, duration, easing, callback) {
4196
4269
  easing = null;
4197
4270
  }
4198
4271
 
4199
- return this.queue('fx', function() {
4272
+ return this.queue(function() {
4200
4273
  var that = $(this),
4201
4274
  originalStyleAttr = that.attr('style') || ' ',
4202
4275
  originalStyle = filterStyles(getElementStyles.call(this)),
4203
4276
  newStyle,
4204
- className = that.attr('className');
4277
+ className = that.attr('class');
4205
4278
 
4206
4279
  $.each(classAnimationActions, function(i, action) {
4207
4280
  if (value[action]) {
@@ -4209,28 +4282,27 @@ $.effects.animateClass = function(value, duration, easing, callback) {
4209
4282
  }
4210
4283
  });
4211
4284
  newStyle = filterStyles(getElementStyles.call(this));
4212
- that.attr('className', className);
4285
+ that.attr('class', className);
4213
4286
 
4214
- that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() {
4215
- $.each(classAnimationActions, function(i, action) {
4216
- if (value[action]) { that[action + 'Class'](value[action]); }
4217
- });
4218
- // work around bug in IE by clearing the cssText before setting it
4219
- if (typeof that.attr('style') == 'object') {
4220
- that.attr('style').cssText = '';
4221
- that.attr('style').cssText = originalStyleAttr;
4222
- } else {
4223
- that.attr('style', originalStyleAttr);
4287
+ that.animate(styleDifference(originalStyle, newStyle), {
4288
+ queue: false,
4289
+ duration: duration,
4290
+ easing: easing,
4291
+ complete: function() {
4292
+ $.each(classAnimationActions, function(i, action) {
4293
+ if (value[action]) { that[action + 'Class'](value[action]); }
4294
+ });
4295
+ // work around bug in IE by clearing the cssText before setting it
4296
+ if (typeof that.attr('style') == 'object') {
4297
+ that.attr('style').cssText = '';
4298
+ that.attr('style').cssText = originalStyleAttr;
4299
+ } else {
4300
+ that.attr('style', originalStyleAttr);
4301
+ }
4302
+ if (callback) { callback.apply(this, arguments); }
4303
+ $.dequeue( this );
4224
4304
  }
4225
- if (callback) { callback.apply(this, arguments); }
4226
4305
  });
4227
-
4228
- // $.animate adds a function to the end of the queue
4229
- // but we want it at the front
4230
- var queue = $.queue(this),
4231
- anim = queue.splice(queue.length - 1, 1)[0];
4232
- queue.splice(1, 0, anim);
4233
- $.dequeue(this);
4234
4306
  });
4235
4307
  };
4236
4308
 
@@ -4272,7 +4344,7 @@ $.fn.extend({
4272
4344
  /******************************************************************************/
4273
4345
 
4274
4346
  $.extend($.effects, {
4275
- version: "1.8.12",
4347
+ version: "1.8.14",
4276
4348
 
4277
4349
  // Saves a set of properties in a data storage
4278
4350
  save: function(element, set) {
@@ -4711,7 +4783,7 @@ $.extend($.easing,
4711
4783
 
4712
4784
  })(jQuery);
4713
4785
  /*
4714
- * jQuery UI Effects Blind 1.8.12
4786
+ * jQuery UI Effects Blind 1.8.14
4715
4787
  *
4716
4788
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
4717
4789
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -4760,7 +4832,7 @@ $.effects.blind = function(o) {
4760
4832
 
4761
4833
  })(jQuery);
4762
4834
  /*
4763
- * jQuery UI Effects Bounce 1.8.12
4835
+ * jQuery UI Effects Bounce 1.8.14
4764
4836
  *
4765
4837
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
4766
4838
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -4838,7 +4910,7 @@ $.effects.bounce = function(o) {
4838
4910
 
4839
4911
  })(jQuery);
4840
4912
  /*
4841
- * jQuery UI Effects Clip 1.8.12
4913
+ * jQuery UI Effects Clip 1.8.14
4842
4914
  *
4843
4915
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
4844
4916
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -4892,7 +4964,7 @@ $.effects.clip = function(o) {
4892
4964
 
4893
4965
  })(jQuery);
4894
4966
  /*
4895
- * jQuery UI Effects Drop 1.8.12
4967
+ * jQuery UI Effects Drop 1.8.14
4896
4968
  *
4897
4969
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
4898
4970
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -4942,7 +5014,7 @@ $.effects.drop = function(o) {
4942
5014
 
4943
5015
  })(jQuery);
4944
5016
  /*
4945
- * jQuery UI Effects Explode 1.8.12
5017
+ * jQuery UI Effects Explode 1.8.14
4946
5018
  *
4947
5019
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
4948
5020
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5021,7 +5093,7 @@ $.effects.explode = function(o) {
5021
5093
 
5022
5094
  })(jQuery);
5023
5095
  /*
5024
- * jQuery UI Effects Fade 1.8.12
5096
+ * jQuery UI Effects Fade 1.8.14
5025
5097
  *
5026
5098
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5027
5099
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5053,7 +5125,7 @@ $.effects.fade = function(o) {
5053
5125
 
5054
5126
  })(jQuery);
5055
5127
  /*
5056
- * jQuery UI Effects Fold 1.8.12
5128
+ * jQuery UI Effects Fold 1.8.14
5057
5129
  *
5058
5130
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5059
5131
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5109,7 +5181,7 @@ $.effects.fold = function(o) {
5109
5181
 
5110
5182
  })(jQuery);
5111
5183
  /*
5112
- * jQuery UI Effects Highlight 1.8.12
5184
+ * jQuery UI Effects Highlight 1.8.14
5113
5185
  *
5114
5186
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5115
5187
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5159,7 +5231,7 @@ $.effects.highlight = function(o) {
5159
5231
 
5160
5232
  })(jQuery);
5161
5233
  /*
5162
- * jQuery UI Effects Pulsate 1.8.12
5234
+ * jQuery UI Effects Pulsate 1.8.14
5163
5235
  *
5164
5236
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5165
5237
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5210,7 +5282,7 @@ $.effects.pulsate = function(o) {
5210
5282
 
5211
5283
  })(jQuery);
5212
5284
  /*
5213
- * jQuery UI Effects Scale 1.8.12
5285
+ * jQuery UI Effects Scale 1.8.14
5214
5286
  *
5215
5287
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5216
5288
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5388,7 +5460,7 @@ $.effects.size = function(o) {
5388
5460
 
5389
5461
  })(jQuery);
5390
5462
  /*
5391
- * jQuery UI Effects Shake 1.8.12
5463
+ * jQuery UI Effects Shake 1.8.14
5392
5464
  *
5393
5465
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5394
5466
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5445,7 +5517,7 @@ $.effects.shake = function(o) {
5445
5517
 
5446
5518
  })(jQuery);
5447
5519
  /*
5448
- * jQuery UI Effects Slide 1.8.12
5520
+ * jQuery UI Effects Slide 1.8.14
5449
5521
  *
5450
5522
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5451
5523
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5495,7 +5567,7 @@ $.effects.slide = function(o) {
5495
5567
 
5496
5568
  })(jQuery);
5497
5569
  /*
5498
- * jQuery UI Effects Transfer 1.8.12
5570
+ * jQuery UI Effects Transfer 1.8.14
5499
5571
  *
5500
5572
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5501
5573
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -5540,7 +5612,7 @@ $.effects.transfer = function(o) {
5540
5612
 
5541
5613
  })(jQuery);
5542
5614
  /*
5543
- * jQuery UI Accordion 1.8.12
5615
+ * jQuery UI Accordion 1.8.14
5544
5616
  *
5545
5617
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5546
5618
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -6059,7 +6131,7 @@ $.widget( "ui.accordion", {
6059
6131
  });
6060
6132
 
6061
6133
  $.extend( $.ui.accordion, {
6062
- version: "1.8.12",
6134
+ version: "1.8.14",
6063
6135
  animations: {
6064
6136
  slide: function( options, additions ) {
6065
6137
  options = $.extend({
@@ -6151,7 +6223,7 @@ $.extend( $.ui.accordion, {
6151
6223
 
6152
6224
  })( jQuery );
6153
6225
  /*
6154
- * jQuery UI Autocomplete 1.8.12
6226
+ * jQuery UI Autocomplete 1.8.14
6155
6227
  *
6156
6228
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
6157
6229
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -6642,12 +6714,12 @@ $.widget("ui.menu", {
6642
6714
  this.deactivate();
6643
6715
  if (this.hasScroll()) {
6644
6716
  var offset = item.offset().top - this.element.offset().top,
6645
- scroll = this.element.attr("scrollTop"),
6717
+ scroll = this.element.scrollTop(),
6646
6718
  elementHeight = this.element.height();
6647
6719
  if (offset < 0) {
6648
- this.element.attr("scrollTop", scroll + offset);
6720
+ this.element.scrollTop( scroll + offset);
6649
6721
  } else if (offset >= elementHeight) {
6650
- this.element.attr("scrollTop", scroll + offset - elementHeight + item.height());
6722
+ this.element.scrollTop( scroll + offset - elementHeight + item.height());
6651
6723
  }
6652
6724
  }
6653
6725
  this.active = item.eq(0)
@@ -6753,7 +6825,7 @@ $.widget("ui.menu", {
6753
6825
  },
6754
6826
 
6755
6827
  hasScroll: function() {
6756
- return this.element.height() < this.element.attr("scrollHeight");
6828
+ return this.element.height() < this.element[ $.fn.prop ? "prop" : "attr" ]("scrollHeight");
6757
6829
  },
6758
6830
 
6759
6831
  select: function( event ) {
@@ -6763,7 +6835,7 @@ $.widget("ui.menu", {
6763
6835
 
6764
6836
  }(jQuery));
6765
6837
  /*
6766
- * jQuery UI Button 1.8.12
6838
+ * jQuery UI Button 1.8.14
6767
6839
  *
6768
6840
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
6769
6841
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -6777,17 +6849,15 @@ $.widget("ui.menu", {
6777
6849
  */
6778
6850
  (function( $, undefined ) {
6779
6851
 
6780
- var lastActive,
6852
+ var lastActive, startXPos, startYPos, clickDragged,
6781
6853
  baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
6782
6854
  stateClasses = "ui-state-hover ui-state-active ",
6783
6855
  typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
6784
- formResetHandler = function( event ) {
6785
- $( ":ui-button", event.target.form ).each(function() {
6786
- var inst = $( this ).data( "button" );
6787
- setTimeout(function() {
6788
- inst.refresh();
6789
- }, 1 );
6790
- });
6856
+ formResetHandler = function() {
6857
+ var buttons = $( this ).find( ":ui-button" );
6858
+ setTimeout(function() {
6859
+ buttons.button( "refresh" );
6860
+ }, 1 );
6791
6861
  },
6792
6862
  radioGroup = function( radio ) {
6793
6863
  var name = radio.name,
@@ -6860,23 +6930,54 @@ $.widget( "ui.button", {
6860
6930
  }
6861
6931
  $( this ).removeClass( hoverClass );
6862
6932
  })
6933
+ .bind( "click.button", function( event ) {
6934
+ if ( options.disabled ) {
6935
+ event.preventDefault();
6936
+ event.stopImmediatePropagation();
6937
+ }
6938
+ });
6939
+
6940
+ this.element
6863
6941
  .bind( "focus.button", function() {
6864
6942
  // no need to check disabled, focus won't be triggered anyway
6865
- $( this ).addClass( focusClass );
6943
+ self.buttonElement.addClass( focusClass );
6866
6944
  })
6867
6945
  .bind( "blur.button", function() {
6868
- $( this ).removeClass( focusClass );
6946
+ self.buttonElement.removeClass( focusClass );
6869
6947
  });
6870
6948
 
6871
6949
  if ( toggleButton ) {
6872
6950
  this.element.bind( "change.button", function() {
6951
+ if ( clickDragged ) {
6952
+ return;
6953
+ }
6873
6954
  self.refresh();
6874
6955
  });
6956
+ // if mouse moves between mousedown and mouseup (drag) set clickDragged flag
6957
+ // prevents issue where button state changes but checkbox/radio checked state
6958
+ // does not in Firefox (see ticket #6970)
6959
+ this.buttonElement
6960
+ .bind( "mousedown.button", function( event ) {
6961
+ if ( options.disabled ) {
6962
+ return;
6963
+ }
6964
+ clickDragged = false;
6965
+ startXPos = event.pageX;
6966
+ startYPos = event.pageY;
6967
+ })
6968
+ .bind( "mouseup.button", function( event ) {
6969
+ if ( options.disabled ) {
6970
+ return;
6971
+ }
6972
+ if ( startXPos !== event.pageX || startYPos !== event.pageY ) {
6973
+ clickDragged = true;
6974
+ }
6975
+ });
6875
6976
  }
6876
6977
 
6877
6978
  if ( this.type === "checkbox" ) {
6878
6979
  this.buttonElement.bind( "click.button", function() {
6879
- if ( options.disabled ) {
6980
+ if ( options.disabled || clickDragged ) {
6880
6981
  return false;
6881
6982
  }
6882
6983
  $( this ).toggleClass( "ui-state-active" );
@@ -6884,7 +6985,7 @@ $.widget( "ui.button", {
6884
6985
  });
6885
6986
  } else if ( this.type === "radio" ) {
6886
6987
  this.buttonElement.bind( "click.button", function() {
6887
- if ( options.disabled ) {
6988
+ if ( options.disabled || clickDragged ) {
6888
6989
  return false;
6889
6990
  }
6890
6991
  $( this ).addClass( "ui-state-active" );
@@ -6943,6 +7044,7 @@ $.widget( "ui.button", {
6943
7044
  // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can
6944
7045
  // be overridden by individual plugins
6945
7046
  this._setOption( "disabled", options.disabled );
7047
+ this._resetButton();
6946
7048
  },
6947
7049
 
6948
7050
  _determineButtonType: function() {
@@ -7010,6 +7112,7 @@ $.widget( "ui.button", {
7010
7112
  } else {
7011
7113
  this.element.removeAttr( "disabled" );
7012
7114
  }
7115
+ return;
7013
7116
  }
7014
7117
  this._resetButton();
7015
7118
  },
@@ -7110,6 +7213,8 @@ $.widget( "ui.buttonset", {
7110
7213
  },
7111
7214
 
7112
7215
  refresh: function() {
7216
+ var ltr = this.element.css( "direction" ) === "ltr";
7217
+
7113
7218
  this.buttons = this.element.find( this.options.items )
7114
7219
  .filter( ":ui-button" )
7115
7220
  .button( "refresh" )
@@ -7122,10 +7227,10 @@ $.widget( "ui.buttonset", {
7122
7227
  })
7123
7228
  .removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
7124
7229
  .filter( ":first" )
7125
- .addClass( "ui-corner-left" )
7230
+ .addClass( ltr ? "ui-corner-left" : "ui-corner-right" )
7126
7231
  .end()
7127
7232
  .filter( ":last" )
7128
- .addClass( "ui-corner-right" )
7233
+ .addClass( ltr ? "ui-corner-right" : "ui-corner-left" )
7129
7234
  .end()
7130
7235
  .end();
7131
7236
  },
@@ -7146,7 +7251,7 @@ $.widget( "ui.buttonset", {
7146
7251
 
7147
7252
  }( jQuery ) );
7148
7253
  /*
7149
- * jQuery UI Datepicker 1.8.12
7254
+ * jQuery UI Datepicker 1.8.14
7150
7255
  *
7151
7256
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
7152
7257
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -7159,10 +7264,11 @@ $.widget( "ui.buttonset", {
7159
7264
  */
7160
7265
  (function( $, undefined ) {
7161
7266
 
7162
- $.extend($.ui, { datepicker: { version: "1.8.12" } });
7267
+ $.extend($.ui, { datepicker: { version: "1.8.14" } });
7163
7268
 
7164
7269
  var PROP_NAME = 'datepicker';
7165
7270
  var dpuuid = new Date().getTime();
7271
+ var instActive;
7166
7272
 
7167
7273
  /* Date picker manager.
7168
7274
  Use the singleton instance of this class, $.datepicker, to interact with the date picker.
@@ -7254,12 +7360,15 @@ function Datepicker() {
7254
7360
  autoSize: false // True to size the input for the date format, false to leave as is
7255
7361
  };
7256
7362
  $.extend(this._defaults, this.regional['']);
7257
- this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>');
7363
+ this.dpDiv = bindHover($('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'));
7258
7364
  }
7259
7365
 
7260
7366
  $.extend(Datepicker.prototype, {
7261
7367
  /* Class name added to elements to indicate already configured with a date picker. */
7262
7368
  markerClassName: 'hasDatepicker',
7369
+
7370
+ //Keep track of the maximum number of rows displayed (see #7043)
7371
+ maxRows: 4,
7263
7372
 
7264
7373
  /* Debug logging (if enabled). */
7265
7374
  log: function () {
@@ -7320,7 +7429,7 @@ $.extend(Datepicker.prototype, {
7320
7429
  drawMonth: 0, drawYear: 0, // month being drawn
7321
7430
  inline: inline, // is datepicker inline or not
7322
7431
  dpDiv: (!inline ? this.dpDiv : // presentation div
7323
- $('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};
7432
+ bindHover($('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')))};
7324
7433
  },
7325
7434
 
7326
7435
  /* Attach the date picker to an input field. */
@@ -7510,6 +7619,8 @@ $.extend(Datepicker.prototype, {
7510
7619
  else if (nodeName == 'div' || nodeName == 'span') {
7511
7620
  var inline = $target.children('.' + this._inlineClass);
7512
7621
  inline.children().removeClass('ui-state-disabled');
7622
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
7623
+ removeAttr("disabled");
7513
7624
  }
7514
7625
  this._disabledInputs = $.map(this._disabledInputs,
7515
7626
  function(value) { return (value == target ? null : value); }); // delete entry
@@ -7533,6 +7644,8 @@ $.extend(Datepicker.prototype, {
7533
7644
  else if (nodeName == 'div' || nodeName == 'span') {
7534
7645
  var inline = $target.children('.' + this._inlineClass);
7535
7646
  inline.children().addClass('ui-state-disabled');
7647
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
7648
+ attr("disabled", "disabled");
7536
7649
  }
7537
7650
  this._disabledInputs = $.map(this._disabledInputs,
7538
7651
  function(value) { return (value == target ? null : value); }); // delete entry
@@ -7601,7 +7714,8 @@ $.extend(Datepicker.prototype, {
7601
7714
  inst.settings.maxDate = this._formatDate(inst, maxDate);
7602
7715
  this._attachments($(target), inst);
7603
7716
  this._autoSize(inst);
7604
- this._setDateDatepicker(target, date);
7717
+ this._setDate(inst, date);
7718
+ this._updateAlternate(inst);
7605
7719
  this._updateDatepicker(inst);
7606
7720
  }
7607
7721
  },
@@ -7755,6 +7869,9 @@ $.extend(Datepicker.prototype, {
7755
7869
  return;
7756
7870
  var inst = $.datepicker._getInst(input);
7757
7871
  if ($.datepicker._curInst && $.datepicker._curInst != inst) {
7872
+ if ( $.datepicker._datepickerShowing ) {
7873
+ $.datepicker._triggerOnClose($.datepicker._curInst);
7874
+ }
7758
7875
  $.datepicker._curInst.dpDiv.stop(true, true);
7759
7876
  }
7760
7877
  var beforeShow = $.datepicker._get(inst, 'beforeShow');
@@ -7794,7 +7911,6 @@ $.extend(Datepicker.prototype, {
7794
7911
  var showAnim = $.datepicker._get(inst, 'showAnim');
7795
7912
  var duration = $.datepicker._get(inst, 'duration');
7796
7913
  var postProcess = function() {
7797
- $.datepicker._datepickerShowing = true;
7798
7914
  var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
7799
7915
  if( !! cover.length ){
7800
7916
  var borders = $.datepicker._getBorders(inst.dpDiv);
@@ -7803,6 +7919,7 @@ $.extend(Datepicker.prototype, {
7803
7919
  }
7804
7920
  };
7805
7921
  inst.dpDiv.zIndex($(input).zIndex()+1);
7922
+ $.datepicker._datepickerShowing = true;
7806
7923
  if ($.effects && $.effects[showAnim])
7807
7924
  inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
7808
7925
  else
@@ -7818,37 +7935,21 @@ $.extend(Datepicker.prototype, {
7818
7935
  /* Generate the date picker content. */
7819
7936
  _updateDatepicker: function(inst) {
7820
7937
  var self = this;
7938
+ self.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
7821
7939
  var borders = $.datepicker._getBorders(inst.dpDiv);
7940
+ instActive = inst; // for delegate hover events
7822
7941
  inst.dpDiv.empty().append(this._generateHTML(inst));
7823
7942
  var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); // IE6- only
7824
7943
  if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
7825
7944
  cover.css({left: -borders[0], top: -borders[1], width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
7826
7945
  }
7827
- inst.dpDiv.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
7828
- .bind('mouseout', function(){
7829
- $(this).removeClass('ui-state-hover');
7830
- if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
7831
- if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover');
7832
- })
7833
- .bind('mouseover', function(){
7834
- if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) {
7835
- $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
7836
- $(this).addClass('ui-state-hover');
7837
- if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover');
7838
- if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover');
7839
- }
7840
- })
7841
- .end()
7842
- .find('.' + this._dayOverClass + ' a')
7843
- .trigger('mouseover')
7844
- .end();
7946
+ inst.dpDiv.find('.' + this._dayOverClass + ' a').mouseover();
7845
7947
  var numMonths = this._getNumberOfMonths(inst);
7846
7948
  var cols = numMonths[1];
7847
7949
  var width = 17;
7950
+ inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
7848
7951
  if (cols > 1)
7849
7952
  inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
7850
- else
7851
- inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
7852
7953
  inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
7853
7954
  'Class']('ui-datepicker-multi');
7854
7955
  inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
@@ -7863,7 +7964,7 @@ $.extend(Datepicker.prototype, {
7863
7964
  var origyearshtml = inst.yearshtml;
7864
7965
  setTimeout(function(){
7865
7966
  //assure that inst.yearshtml didn't change.
7866
- if( origyearshtml === inst.yearshtml ){
7967
+ if( origyearshtml === inst.yearshtml && inst.yearshtml ){
7867
7968
  inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
7868
7969
  }
7869
7970
  origyearshtml = inst.yearshtml = null;
@@ -7915,6 +8016,14 @@ $.extend(Datepicker.prototype, {
7915
8016
  return [position.left, position.top];
7916
8017
  },
7917
8018
 
8019
+ /* Trigger custom callback of onClose. */
8020
+ _triggerOnClose: function(inst) {
8021
+ var onClose = this._get(inst, 'onClose');
8022
+ if (onClose)
8023
+ onClose.apply((inst.input ? inst.input[0] : null),
8024
+ [(inst.input ? inst.input.val() : ''), inst]);
8025
+ },
8026
+
7918
8027
  /* Hide the date picker from view.
7919
8028
  @param input element - the input field attached to the date picker */
7920
8029
  _hideDatepicker: function(input) {
@@ -7935,10 +8044,7 @@ $.extend(Datepicker.prototype, {
7935
8044
  (showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
7936
8045
  if (!showAnim)
7937
8046
  postProcess();
7938
- var onClose = this._get(inst, 'onClose');
7939
- if (onClose)
7940
- onClose.apply((inst.input ? inst.input[0] : null),
7941
- [(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback
8047
+ $.datepicker._triggerOnClose(inst);
7942
8048
  this._datepickerShowing = false;
7943
8049
  this._lastInput = null;
7944
8050
  if (this._inDialog) {
@@ -8154,14 +8260,24 @@ $.extend(Datepicker.prototype, {
8154
8260
  };
8155
8261
  // Extract a name from the string value and convert to an index
8156
8262
  var getName = function(match, shortNames, longNames) {
8157
- var names = (lookAhead(match) ? longNames : shortNames);
8158
- for (var i = 0; i < names.length; i++) {
8159
- if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) {
8160
- iValue += names[i].length;
8161
- return i + 1;
8263
+ var names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
8264
+ return [ [k, v] ];
8265
+ }).sort(function (a, b) {
8266
+ return -(a[1].length - b[1].length);
8267
+ });
8268
+ var index = -1;
8269
+ $.each(names, function (i, pair) {
8270
+ var name = pair[1];
8271
+ if (value.substr(iValue, name.length).toLowerCase() == name.toLowerCase()) {
8272
+ index = pair[0];
8273
+ iValue += name.length;
8274
+ return false;
8162
8275
  }
8163
- }
8164
- throw 'Unknown name at position ' + iValue;
8276
+ });
8277
+ if (index != -1)
8278
+ return index + 1;
8279
+ else
8280
+ throw 'Unknown name at position ' + iValue;
8165
8281
  };
8166
8282
  // Confirm that a literal character matches the string value
8167
8283
  var checkLiteral = function() {
@@ -8218,6 +8334,9 @@ $.extend(Datepicker.prototype, {
8218
8334
  checkLiteral();
8219
8335
  }
8220
8336
  }
8337
+ if (iValue < value.length){
8338
+ throw "Extra/unparsed characters found in date: " + value.substring(iValue);
8339
+ }
8221
8340
  if (year == -1)
8222
8341
  year = new Date().getFullYear();
8223
8342
  else if (year < 100)
@@ -8329,7 +8448,7 @@ $.extend(Datepicker.prototype, {
8329
8448
  break;
8330
8449
  case 'o':
8331
8450
  output += formatNumber('o',
8332
- (date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3);
8451
+ Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
8333
8452
  break;
8334
8453
  case 'm':
8335
8454
  output += formatNumber('m', date.getMonth() + 1, 2);
@@ -8604,6 +8723,7 @@ $.extend(Datepicker.prototype, {
8604
8723
  var html = '';
8605
8724
  for (var row = 0; row < numMonths[0]; row++) {
8606
8725
  var group = '';
8726
+ this.maxRows = 4;
8607
8727
  for (var col = 0; col < numMonths[1]; col++) {
8608
8728
  var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
8609
8729
  var cornerClass = ' ui-corner-all';
@@ -8638,7 +8758,9 @@ $.extend(Datepicker.prototype, {
8638
8758
  if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
8639
8759
  inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
8640
8760
  var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
8641
- var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate
8761
+ var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
8762
+ var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
8763
+ this.maxRows = numRows;
8642
8764
  var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
8643
8765
  for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
8644
8766
  calender += '<tr>';
@@ -8750,14 +8872,9 @@ $.extend(Datepicker.prototype, {
8750
8872
  '>' + year + '</option>';
8751
8873
  }
8752
8874
  inst.yearshtml += '</select>';
8753
- //when showing there is no need for later update
8754
- if( ! $.browser.mozilla ){
8755
- html += inst.yearshtml;
8756
- inst.yearshtml = null;
8757
- } else {
8758
- // will be replaced later with inst.yearshtml
8759
- html += '<select class="ui-datepicker-year"><option value="' + drawYear + '" selected="selected">' + drawYear + '</option></select>';
8760
- }
8875
+
8876
+ html += inst.yearshtml;
8877
+ inst.yearshtml = null;
8761
8878
  }
8762
8879
  }
8763
8880
  html += this._get(inst, 'yearSuffix');
@@ -8862,6 +8979,33 @@ $.extend(Datepicker.prototype, {
8862
8979
  }
8863
8980
  });
8864
8981
 
8982
+ /*
8983
+ * Bind hover events for datepicker elements.
8984
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
8985
+ * Global instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
8986
+ */
8987
+ function bindHover(dpDiv) {
8988
+ var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a';
8989
+ return dpDiv.bind('mouseout', function(event) {
8990
+ var elem = $( event.target ).closest( selector );
8991
+ if ( !elem.length ) {
8992
+ return;
8993
+ }
8994
+ elem.removeClass( "ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover" );
8995
+ })
8996
+ .bind('mouseover', function(event) {
8997
+ var elem = $( event.target ).closest( selector );
8998
+ if ($.datepicker._isDisabledDatepicker( instActive.inline ? dpDiv.parent()[0] : instActive.input[0]) ||
8999
+ !elem.length ) {
9000
+ return;
9001
+ }
9002
+ elem.parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
9003
+ elem.addClass('ui-state-hover');
9004
+ if (elem.hasClass('ui-datepicker-prev')) elem.addClass('ui-datepicker-prev-hover');
9005
+ if (elem.hasClass('ui-datepicker-next')) elem.addClass('ui-datepicker-next-hover');
9006
+ });
9007
+ }
9008
+
8865
9009
  /* jQuery extend now ignores nulls! */
8866
9010
  function extendRemove(target, props) {
8867
9011
  $.extend(target, props);
@@ -8913,7 +9057,7 @@ $.fn.datepicker = function(options){
8913
9057
  $.datepicker = new Datepicker(); // singleton instance
8914
9058
  $.datepicker.initialized = false;
8915
9059
  $.datepicker.uuid = new Date().getTime();
8916
- $.datepicker.version = "1.8.12";
9060
+ $.datepicker.version = "1.8.14";
8917
9061
 
8918
9062
  // Workaround for #4055
8919
9063
  // Add another global to avoid noConflict issues with inline event handlers
@@ -8921,7 +9065,7 @@ window['DP_jQuery_' + dpuuid] = $;
8921
9065
 
8922
9066
  })(jQuery);
8923
9067
  /*
8924
- * jQuery UI Dialog 1.8.12
9068
+ * jQuery UI Dialog 1.8.14
8925
9069
  *
8926
9070
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
8927
9071
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -9624,7 +9768,7 @@ $.widget("ui.dialog", {
9624
9768
  });
9625
9769
 
9626
9770
  $.extend($.ui.dialog, {
9627
- version: "1.8.12",
9771
+ version: "1.8.14",
9628
9772
 
9629
9773
  uuid: 0,
9630
9774
  maxZ: 0,
@@ -9745,8 +9889,8 @@ $.extend($.ui.dialog.overlay, {
9745
9889
  width: function() {
9746
9890
  var scrollWidth,
9747
9891
  offsetWidth;
9748
- // handle IE 6
9749
- if ($.browser.msie && $.browser.version < 7) {
9892
+ // handle IE
9893
+ if ( $.browser.msie ) {
9750
9894
  scrollWidth = Math.max(
9751
9895
  document.documentElement.scrollWidth,
9752
9896
  document.body.scrollWidth
@@ -9799,7 +9943,7 @@ $.extend($.ui.dialog.overlay.prototype, {
9799
9943
 
9800
9944
  }(jQuery));
9801
9945
  /*
9802
- * jQuery UI Position 1.8.12
9946
+ * jQuery UI Position 1.8.14
9803
9947
  *
9804
9948
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
9805
9949
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -10051,7 +10195,7 @@ if ( !$.offset.setOffset ) {
10051
10195
 
10052
10196
  }( jQuery ));
10053
10197
  /*
10054
- * jQuery UI Progressbar 1.8.12
10198
+ * jQuery UI Progressbar 1.8.14
10055
10199
  *
10056
10200
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
10057
10201
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -10155,12 +10299,12 @@ $.widget( "ui.progressbar", {
10155
10299
  });
10156
10300
 
10157
10301
  $.extend( $.ui.progressbar, {
10158
- version: "1.8.12"
10302
+ version: "1.8.14"
10159
10303
  });
10160
10304
 
10161
10305
  })( jQuery );
10162
10306
  /*
10163
- * jQuery UI Slider 1.8.12
10307
+ * jQuery UI Slider 1.8.14
10164
10308
  *
10165
10309
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
10166
10310
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -10197,7 +10341,11 @@ $.widget( "ui.slider", $.ui.mouse, {
10197
10341
 
10198
10342
  _create: function() {
10199
10343
  var self = this,
10200
- o = this.options;
10344
+ o = this.options,
10345
+ existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
10346
+ handle = "<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",
10347
+ handleCount = ( o.values && o.values.length ) || 1,
10348
+ handles = [];
10201
10349
 
10202
10350
  this._keySliding = false;
10203
10351
  this._mouseSliding = false;
@@ -10211,57 +10359,35 @@ $.widget( "ui.slider", $.ui.mouse, {
10211
10359
  " ui-slider-" + this.orientation +
10212
10360
  " ui-widget" +
10213
10361
  " ui-widget-content" +
10214
- " ui-corner-all" );
10215
-
10216
- if ( o.disabled ) {
10217
- this.element.addClass( "ui-slider-disabled ui-disabled" );
10218
- }
10362
+ " ui-corner-all" +
10363
+ ( o.disabled ? " ui-slider-disabled ui-disabled" : "" ) );
10219
10364
 
10220
10365
  this.range = $([]);
10221
10366
 
10222
10367
  if ( o.range ) {
10223
10368
  if ( o.range === true ) {
10224
- this.range = $( "<div></div>" );
10225
10369
  if ( !o.values ) {
10226
10370
  o.values = [ this._valueMin(), this._valueMin() ];
10227
10371
  }
10228
10372
  if ( o.values.length && o.values.length !== 2 ) {
10229
10373
  o.values = [ o.values[0], o.values[0] ];
10230
10374
  }
10231
- } else {
10232
- this.range = $( "<div></div>" );
10233
10375
  }
10234
10376
 
10235
- this.range
10377
+ this.range = $( "<div></div>" )
10236
10378
  .appendTo( this.element )
10237
- .addClass( "ui-slider-range" );
10238
-
10239
- if ( o.range === "min" || o.range === "max" ) {
10240
- this.range.addClass( "ui-slider-range-" + o.range );
10241
- }
10242
-
10243
- // note: this isn't the most fittingly semantic framework class for this element,
10244
- // but worked best visually with a variety of themes
10245
- this.range.addClass( "ui-widget-header" );
10379
+ .addClass( "ui-slider-range" +
10380
+ // note: this isn't the most fittingly semantic framework class for this element,
10381
+ // but worked best visually with a variety of themes
10382
+ " ui-widget-header" +
10383
+ ( ( o.range === "min" || o.range === "max" ) ? " ui-slider-range-" + o.range : "" ) );
10246
10384
  }
10247
10385
 
10248
- if ( $( ".ui-slider-handle", this.element ).length === 0 ) {
10249
- $( "<a href='#'></a>" )
10250
- .appendTo( this.element )
10251
- .addClass( "ui-slider-handle" );
10252
- }
10253
-
10254
- if ( o.values && o.values.length ) {
10255
- while ( $(".ui-slider-handle", this.element).length < o.values.length ) {
10256
- $( "<a href='#'></a>" )
10257
- .appendTo( this.element )
10258
- .addClass( "ui-slider-handle" );
10259
- }
10386
+ for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
10387
+ handles.push( handle );
10260
10388
  }
10261
10389
 
10262
- this.handles = $( ".ui-slider-handle", this.element )
10263
- .addClass( "ui-state-default" +
10264
- " ui-corner-all" );
10390
+ this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( self.element ) );
10265
10391
 
10266
10392
  this.handle = this.handles.eq( 0 );
10267
10393
 
@@ -10839,12 +10965,12 @@ $.widget( "ui.slider", $.ui.mouse, {
10839
10965
  });
10840
10966
 
10841
10967
  $.extend( $.ui.slider, {
10842
- version: "1.8.12"
10968
+ version: "1.8.14"
10843
10969
  });
10844
10970
 
10845
10971
  }(jQuery));
10846
10972
  /*
10847
- * jQuery UI Tabs 1.8.12
10973
+ * jQuery UI Tabs 1.8.14
10848
10974
  *
10849
10975
  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
10850
10976
  * Dual licensed under the MIT or GPL Version 2 licenses.
@@ -11543,7 +11669,7 @@ $.widget( "ui.tabs", {
11543
11669
  });
11544
11670
 
11545
11671
  $.extend( $.ui.tabs, {
11546
- version: "1.8.12"
11672
+ version: "1.8.14"
11547
11673
  });
11548
11674
 
11549
11675
  /*