jquery-ui-rails 3.0.1 → 4.0.0

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

Potentially problematic release.


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

Files changed (61) hide show
  1. data/History.md +10 -0
  2. data/README.md +1 -1
  3. data/Rakefile +4 -5
  4. data/lib/jquery/ui/rails/version.rb +1 -1
  5. data/vendor/assets/javascripts/jquery.ui.accordion.js +130 -290
  6. data/vendor/assets/javascripts/jquery.ui.autocomplete.js +30 -18
  7. data/vendor/assets/javascripts/jquery.ui.button.js +9 -8
  8. data/vendor/assets/javascripts/jquery.ui.core.js +19 -53
  9. data/vendor/assets/javascripts/jquery.ui.datepicker-be.js +23 -0
  10. data/vendor/assets/javascripts/jquery.ui.datepicker-fr-CA.js +23 -0
  11. data/vendor/assets/javascripts/jquery.ui.datepicker-ky.js +24 -0
  12. data/vendor/assets/javascripts/jquery.ui.datepicker-nb.js +22 -0
  13. data/vendor/assets/javascripts/jquery.ui.datepicker-nn.js +22 -0
  14. data/vendor/assets/javascripts/jquery.ui.datepicker.js +1076 -878
  15. data/vendor/assets/javascripts/jquery.ui.dialog.js +456 -547
  16. data/vendor/assets/javascripts/jquery.ui.draggable.js +317 -207
  17. data/vendor/assets/javascripts/jquery.ui.droppable.js +177 -100
  18. data/vendor/assets/javascripts/jquery.ui.effect-blind.js +2 -2
  19. data/vendor/assets/javascripts/jquery.ui.effect-bounce.js +2 -2
  20. data/vendor/assets/javascripts/jquery.ui.effect-clip.js +2 -2
  21. data/vendor/assets/javascripts/jquery.ui.effect-drop.js +2 -2
  22. data/vendor/assets/javascripts/jquery.ui.effect-explode.js +2 -2
  23. data/vendor/assets/javascripts/jquery.ui.effect-fade.js +2 -2
  24. data/vendor/assets/javascripts/jquery.ui.effect-fold.js +2 -2
  25. data/vendor/assets/javascripts/jquery.ui.effect-highlight.js +2 -2
  26. data/vendor/assets/javascripts/jquery.ui.effect-pulsate.js +2 -2
  27. data/vendor/assets/javascripts/jquery.ui.effect-scale.js +2 -2
  28. data/vendor/assets/javascripts/jquery.ui.effect-shake.js +2 -2
  29. data/vendor/assets/javascripts/jquery.ui.effect-slide.js +2 -2
  30. data/vendor/assets/javascripts/jquery.ui.effect-transfer.js +3 -3
  31. data/vendor/assets/javascripts/jquery.ui.effect.js +91 -99
  32. data/vendor/assets/javascripts/jquery.ui.menu.js +20 -9
  33. data/vendor/assets/javascripts/jquery.ui.mouse.js +25 -25
  34. data/vendor/assets/javascripts/jquery.ui.position.js +39 -59
  35. data/vendor/assets/javascripts/jquery.ui.progressbar.js +73 -33
  36. data/vendor/assets/javascripts/jquery.ui.resizable.js +461 -294
  37. data/vendor/assets/javascripts/jquery.ui.selectable.js +67 -51
  38. data/vendor/assets/javascripts/jquery.ui.slider.js +100 -95
  39. data/vendor/assets/javascripts/jquery.ui.sortable.js +411 -257
  40. data/vendor/assets/javascripts/jquery.ui.spinner.js +19 -5
  41. data/vendor/assets/javascripts/jquery.ui.tabs.js +47 -567
  42. data/vendor/assets/javascripts/jquery.ui.tooltip.js +14 -10
  43. data/vendor/assets/javascripts/jquery.ui.widget.js +33 -40
  44. data/vendor/assets/stylesheets/jquery.ui.accordion.css.erb +30 -8
  45. data/vendor/assets/stylesheets/jquery.ui.all.css.erb +2 -2
  46. data/vendor/assets/stylesheets/jquery.ui.autocomplete.css.erb +2 -5
  47. data/vendor/assets/stylesheets/jquery.ui.base.css.erb +2 -2
  48. data/vendor/assets/stylesheets/jquery.ui.button.css.erb +100 -26
  49. data/vendor/assets/stylesheets/jquery.ui.core.css.erb +65 -12
  50. data/vendor/assets/stylesheets/jquery.ui.datepicker.css.erb +166 -55
  51. data/vendor/assets/stylesheets/jquery.ui.dialog.css.erb +61 -14
  52. data/vendor/assets/stylesheets/jquery.ui.menu.css.erb +61 -14
  53. data/vendor/assets/stylesheets/jquery.ui.progressbar.css.erb +20 -4
  54. data/vendor/assets/stylesheets/jquery.ui.resizable.css.erb +70 -13
  55. data/vendor/assets/stylesheets/jquery.ui.selectable.css.erb +7 -3
  56. data/vendor/assets/stylesheets/jquery.ui.slider.css.erb +63 -15
  57. data/vendor/assets/stylesheets/jquery.ui.spinner.css.erb +52 -10
  58. data/vendor/assets/stylesheets/jquery.ui.tabs.css.erb +44 -10
  59. data/vendor/assets/stylesheets/jquery.ui.theme.css.erb +196 -38
  60. data/vendor/assets/stylesheets/jquery.ui.tooltip.css.erb +4 -6
  61. metadata +8 -3
@@ -3,10 +3,10 @@
3
3
  //= require jquery.ui.position
4
4
 
5
5
  /*!
6
- * jQuery UI Menu 1.9.2
6
+ * jQuery UI Menu 1.10.0
7
7
  * http://jqueryui.com
8
8
  *
9
- * Copyright 2012 jQuery Foundation and other contributors
9
+ * Copyright 2013 jQuery Foundation and other contributors
10
10
  * Released under the MIT license.
11
11
  * http://jquery.org/license
12
12
  *
@@ -19,10 +19,8 @@
19
19
  */
20
20
  (function( $, undefined ) {
21
21
 
22
- var mouseHandled = false;
23
-
24
22
  $.widget( "ui.menu", {
25
- version: "1.9.2",
23
+ version: "1.10.0",
26
24
  defaultElement: "<ul>",
27
25
  delay: 300,
28
26
  options: {
@@ -44,6 +42,9 @@ $.widget( "ui.menu", {
44
42
 
45
43
  _create: function() {
46
44
  this.activeMenu = this.element;
45
+ // flag used to prevent firing of the click handler
46
+ // as the event bubbles up through nested menus
47
+ this.mouseHandled = false;
47
48
  this.element
48
49
  .uniqueId()
49
50
  .addClass( "ui-menu ui-widget ui-widget-content ui-corner-all" )
@@ -77,8 +78,8 @@ $.widget( "ui.menu", {
77
78
  },
78
79
  "click .ui-menu-item:has(a)": function( event ) {
79
80
  var target = $( event.target ).closest( ".ui-menu-item" );
80
- if ( !mouseHandled && target.not( ".ui-state-disabled" ).length ) {
81
- mouseHandled = true;
81
+ if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
82
+ this.mouseHandled = true;
82
83
 
83
84
  this.select( event );
84
85
  // Open submenu on click
@@ -134,7 +135,7 @@ $.widget( "ui.menu", {
134
135
  }
135
136
 
136
137
  // Reset the mouseHandled flag
137
- mouseHandled = false;
138
+ this.mouseHandled = false;
138
139
  }
139
140
  });
140
141
  },
@@ -143,7 +144,7 @@ $.widget( "ui.menu", {
143
144
  // Destroy (sub)menus
144
145
  this.element
145
146
  .removeAttr( "aria-activedescendant" )
146
- .find( ".ui-menu" ).andSelf()
147
+ .find( ".ui-menu" ).addBack()
147
148
  .removeClass( "ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons" )
148
149
  .removeAttr( "role" )
149
150
  .removeAttr( "tabIndex" )
@@ -177,6 +178,7 @@ $.widget( "ui.menu", {
177
178
  },
178
179
 
179
180
  _keydown: function( event ) {
181
+ /*jshint maxcomplexity:20*/
180
182
  var match, prev, character, skip, regex,
181
183
  preventDefault = true;
182
184
 
@@ -346,6 +348,15 @@ $.widget( "ui.menu", {
346
348
  }[ this.options.role ];
347
349
  },
348
350
 
351
+ _setOption: function( key, value ) {
352
+ if ( key === "icons" ) {
353
+ this.element.find( ".ui-menu-icon" )
354
+ .removeClass( this.options.icons.submenu )
355
+ .addClass( value.submenu );
356
+ }
357
+ this._super( key, value );
358
+ },
359
+
349
360
  focus: function( event, item ) {
350
361
  var nested, focused;
351
362
  this.blur( event, event && event.type === "focus" );
@@ -2,10 +2,10 @@
2
2
  //= require jquery.ui.widget
3
3
 
4
4
  /*!
5
- * jQuery UI Mouse 1.9.2
5
+ * jQuery UI Mouse 1.10.0
6
6
  * http://jqueryui.com
7
7
  *
8
- * Copyright 2012 jQuery Foundation and other contributors
8
+ * Copyright 2013 jQuery Foundation and other contributors
9
9
  * Released under the MIT license.
10
10
  * http://jquery.org/license
11
11
  *
@@ -17,14 +17,14 @@
17
17
  (function( $, undefined ) {
18
18
 
19
19
  var mouseHandled = false;
20
- $( document ).mouseup( function( e ) {
20
+ $( document ).mouseup( function() {
21
21
  mouseHandled = false;
22
22
  });
23
23
 
24
24
  $.widget("ui.mouse", {
25
- version: "1.9.2",
25
+ version: "1.10.0",
26
26
  options: {
27
- cancel: 'input,textarea,button,select,option',
27
+ cancel: "input,textarea,button,select,option",
28
28
  distance: 1,
29
29
  delay: 0
30
30
  },
@@ -32,12 +32,12 @@ $.widget("ui.mouse", {
32
32
  var that = this;
33
33
 
34
34
  this.element
35
- .bind('mousedown.'+this.widgetName, function(event) {
35
+ .bind("mousedown."+this.widgetName, function(event) {
36
36
  return that._mouseDown(event);
37
37
  })
38
- .bind('click.'+this.widgetName, function(event) {
39
- if (true === $.data(event.target, that.widgetName + '.preventClickEvent')) {
40
- $.removeData(event.target, that.widgetName + '.preventClickEvent');
38
+ .bind("click."+this.widgetName, function(event) {
39
+ if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
40
+ $.removeData(event.target, that.widgetName + ".preventClickEvent");
41
41
  event.stopImmediatePropagation();
42
42
  return false;
43
43
  }
@@ -49,11 +49,11 @@ $.widget("ui.mouse", {
49
49
  // TODO: make sure destroying one instance of mouse doesn't mess with
50
50
  // other instances of mouse
51
51
  _mouseDestroy: function() {
52
- this.element.unbind('.'+this.widgetName);
52
+ this.element.unbind("."+this.widgetName);
53
53
  if ( this._mouseMoveDelegate ) {
54
54
  $(document)
55
- .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
56
- .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
55
+ .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
56
+ .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
57
57
  }
58
58
  },
59
59
 
@@ -91,8 +91,8 @@ $.widget("ui.mouse", {
91
91
  }
92
92
 
93
93
  // Click event may never have fired (Gecko & Opera)
94
- if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
95
- $.removeData(event.target, this.widgetName + '.preventClickEvent');
94
+ if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
95
+ $.removeData(event.target, this.widgetName + ".preventClickEvent");
96
96
  }
97
97
 
98
98
  // these delegates are required to keep context
@@ -103,8 +103,8 @@ $.widget("ui.mouse", {
103
103
  return that._mouseUp(event);
104
104
  };
105
105
  $(document)
106
- .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
107
- .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
106
+ .bind("mousemove."+this.widgetName, this._mouseMoveDelegate)
107
+ .bind("mouseup."+this.widgetName, this._mouseUpDelegate);
108
108
 
109
109
  event.preventDefault();
110
110
 
@@ -114,7 +114,7 @@ $.widget("ui.mouse", {
114
114
 
115
115
  _mouseMove: function(event) {
116
116
  // IE mouseup check - mouseup happened when mouse was out of window
117
- if ($.ui.ie && !(document.documentMode >= 9) && !event.button) {
117
+ if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
118
118
  return this._mouseUp(event);
119
119
  }
120
120
 
@@ -134,14 +134,14 @@ $.widget("ui.mouse", {
134
134
 
135
135
  _mouseUp: function(event) {
136
136
  $(document)
137
- .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
138
- .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
137
+ .unbind("mousemove."+this.widgetName, this._mouseMoveDelegate)
138
+ .unbind("mouseup."+this.widgetName, this._mouseUpDelegate);
139
139
 
140
140
  if (this._mouseStarted) {
141
141
  this._mouseStarted = false;
142
142
 
143
143
  if (event.target === this._mouseDownEvent.target) {
144
- $.data(event.target, this.widgetName + '.preventClickEvent', true);
144
+ $.data(event.target, this.widgetName + ".preventClickEvent", true);
145
145
  }
146
146
 
147
147
  this._mouseStop(event);
@@ -158,15 +158,15 @@ $.widget("ui.mouse", {
158
158
  );
159
159
  },
160
160
 
161
- _mouseDelayMet: function(event) {
161
+ _mouseDelayMet: function(/* event */) {
162
162
  return this.mouseDelayMet;
163
163
  },
164
164
 
165
165
  // These are placeholder methods, to be overriden by extending plugin
166
- _mouseStart: function(event) {},
167
- _mouseDrag: function(event) {},
168
- _mouseStop: function(event) {},
169
- _mouseCapture: function(event) { return true; }
166
+ _mouseStart: function(/* event */) {},
167
+ _mouseDrag: function(/* event */) {},
168
+ _mouseStop: function(/* event */) {},
169
+ _mouseCapture: function(/* event */) { return true; }
170
170
  });
171
171
 
172
172
  })(jQuery);
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * jQuery UI Position 1.9.2
2
+ * jQuery UI Position 1.10.0
3
3
  * http://jqueryui.com
4
4
  *
5
- * Copyright 2012 jQuery Foundation and other contributors
5
+ * Copyright 2013 jQuery Foundation and other contributors
6
6
  * Released under the MIT license.
7
7
  * http://jquery.org/license
8
8
  *
@@ -29,10 +29,41 @@ function getOffsets( offsets, width, height ) {
29
29
  parseInt( offsets[ 1 ], 10 ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
30
30
  ];
31
31
  }
32
+
32
33
  function parseCss( element, property ) {
33
34
  return parseInt( $.css( element, property ), 10 ) || 0;
34
35
  }
35
36
 
37
+ function getDimensions( elem ) {
38
+ var raw = elem[0];
39
+ if ( raw.nodeType === 9 ) {
40
+ return {
41
+ width: elem.width(),
42
+ height: elem.height(),
43
+ offset: { top: 0, left: 0 }
44
+ };
45
+ }
46
+ if ( $.isWindow( raw ) ) {
47
+ return {
48
+ width: elem.width(),
49
+ height: elem.height(),
50
+ offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
51
+ };
52
+ }
53
+ if ( raw.preventDefault ) {
54
+ return {
55
+ width: 0,
56
+ height: 0,
57
+ offset: { top: raw.pageY, left: raw.pageX }
58
+ };
59
+ }
60
+ return {
61
+ width: elem.outerWidth(),
62
+ height: elem.outerHeight(),
63
+ offset: elem.offset()
64
+ };
65
+ }
66
+
36
67
  $.position = {
37
68
  scrollbarWidth: function() {
38
69
  if ( cachedScrollbarWidth !== undefined ) {
@@ -91,32 +122,21 @@ $.fn.position = function( options ) {
91
122
  // make a copy, we don't want to modify arguments
92
123
  options = $.extend( {}, options );
93
124
 
94
- var atOffset, targetWidth, targetHeight, targetOffset, basePosition,
125
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
95
126
  target = $( options.of ),
96
127
  within = $.position.getWithinInfo( options.within ),
97
128
  scrollInfo = $.position.getScrollInfo( within ),
98
- targetElem = target[0],
99
129
  collision = ( options.collision || "flip" ).split( " " ),
100
130
  offsets = {};
101
131
 
102
- if ( targetElem.nodeType === 9 ) {
103
- targetWidth = target.width();
104
- targetHeight = target.height();
105
- targetOffset = { top: 0, left: 0 };
106
- } else if ( $.isWindow( targetElem ) ) {
107
- targetWidth = target.width();
108
- targetHeight = target.height();
109
- targetOffset = { top: target.scrollTop(), left: target.scrollLeft() };
110
- } else if ( targetElem.preventDefault ) {
132
+ dimensions = getDimensions( target );
133
+ if ( target[0].preventDefault ) {
111
134
  // force left top to allow flipping
112
135
  options.at = "left top";
113
- targetWidth = targetHeight = 0;
114
- targetOffset = { top: targetElem.pageY, left: targetElem.pageX };
115
- } else {
116
- targetWidth = target.outerWidth();
117
- targetHeight = target.outerHeight();
118
- targetOffset = target.offset();
119
136
  }
137
+ targetWidth = dimensions.width;
138
+ targetHeight = dimensions.height;
139
+ targetOffset = dimensions.offset;
120
140
  // clone to reuse original targetOffset later
121
141
  basePosition = $.extend( {}, targetOffset );
122
142
 
@@ -230,10 +250,6 @@ $.fn.position = function( options ) {
230
250
  }
231
251
  });
232
252
 
233
- if ( $.fn.bgiframe ) {
234
- elem.bgiframe();
235
- }
236
-
237
253
  if ( options.using ) {
238
254
  // adds feedback as second argument to using callback, if present
239
255
  using = function( props ) {
@@ -478,40 +494,4 @@ $.ui.position = {
478
494
  testElementParent.removeChild( testElement );
479
495
  })();
480
496
 
481
- // DEPRECATED
482
- if ( $.uiBackCompat !== false ) {
483
- // offset option
484
- (function( $ ) {
485
- var _position = $.fn.position;
486
- $.fn.position = function( options ) {
487
- if ( !options || !options.offset ) {
488
- return _position.call( this, options );
489
- }
490
- var offset = options.offset.split( " " ),
491
- at = options.at.split( " " );
492
- if ( offset.length === 1 ) {
493
- offset[ 1 ] = offset[ 0 ];
494
- }
495
- if ( /^\d/.test( offset[ 0 ] ) ) {
496
- offset[ 0 ] = "+" + offset[ 0 ];
497
- }
498
- if ( /^\d/.test( offset[ 1 ] ) ) {
499
- offset[ 1 ] = "+" + offset[ 1 ];
500
- }
501
- if ( at.length === 1 ) {
502
- if ( /left|center|right/.test( at[ 0 ] ) ) {
503
- at[ 1 ] = "center";
504
- } else {
505
- at[ 1 ] = at[ 0 ];
506
- at[ 0 ] = "center";
507
- }
508
- }
509
- return _position.call( this, $.extend( options, {
510
- at: at[ 0 ] + offset[ 0 ] + " " + at[ 1 ] + offset[ 1 ],
511
- offset: undefined
512
- } ) );
513
- };
514
- }( jQuery ) );
515
- }
516
-
517
497
  }( jQuery ) );
@@ -2,10 +2,10 @@
2
2
  //= require jquery.ui.widget
3
3
 
4
4
  /*!
5
- * jQuery UI Progressbar 1.9.2
5
+ * jQuery UI Progressbar 1.10.0
6
6
  * http://jqueryui.com
7
7
  *
8
- * Copyright 2012 jQuery Foundation and other contributors
8
+ * Copyright 2013 jQuery Foundation and other contributors
9
9
  * Released under the MIT license.
10
10
  * http://jquery.org/license
11
11
  *
@@ -18,28 +18,33 @@
18
18
  (function( $, undefined ) {
19
19
 
20
20
  $.widget( "ui.progressbar", {
21
- version: "1.9.2",
21
+ version: "1.10.0",
22
22
  options: {
23
+ max: 100,
23
24
  value: 0,
24
- max: 100
25
+
26
+ change: null,
27
+ complete: null
25
28
  },
26
29
 
27
30
  min: 0,
28
31
 
29
32
  _create: function() {
33
+ // Constrain initial value
34
+ this.oldValue = this.options.value = this._constrainedValue();
35
+
30
36
  this.element
31
37
  .addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
32
38
  .attr({
39
+ // Only set static values, aria-valuenow and aria-valuemax are
40
+ // set inside _refreshValue()
33
41
  role: "progressbar",
34
- "aria-valuemin": this.min,
35
- "aria-valuemax": this.options.max,
36
- "aria-valuenow": this._value()
42
+ "aria-valuemin": this.min
37
43
  });
38
44
 
39
45
  this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
40
46
  .appendTo( this.element );
41
47
 
42
- this.oldValue = this._value();
43
48
  this._refreshValue();
44
49
  },
45
50
 
@@ -56,52 +61,87 @@ $.widget( "ui.progressbar", {
56
61
 
57
62
  value: function( newValue ) {
58
63
  if ( newValue === undefined ) {
59
- return this._value();
64
+ return this.options.value;
60
65
  }
61
66
 
62
- this._setOption( "value", newValue );
63
- return this;
67
+ this.options.value = this._constrainedValue( newValue );
68
+ this._refreshValue();
64
69
  },
65
70
 
66
- _setOption: function( key, value ) {
67
- if ( key === "value" ) {
68
- this.options.value = value;
69
- this._refreshValue();
70
- if ( this._value() === this.options.max ) {
71
- this._trigger( "complete" );
72
- }
71
+ _constrainedValue: function( newValue ) {
72
+ if ( newValue === undefined ) {
73
+ newValue = this.options.value;
73
74
  }
74
75
 
75
- this._super( key, value );
76
+ this.indeterminate = newValue === false;
77
+
78
+ // sanitize value
79
+ if ( typeof newValue !== "number" ) {
80
+ newValue = 0;
81
+ }
82
+
83
+ return this.indeterminate ? false :
84
+ Math.min( this.options.max, Math.max( this.min, newValue ) );
76
85
  },
77
86
 
78
- _value: function() {
79
- var val = this.options.value;
80
- // normalize invalid value
81
- if ( typeof val !== "number" ) {
82
- val = 0;
87
+ _setOptions: function( options ) {
88
+ // Ensure "value" option is set after other values (like max)
89
+ var value = options.value;
90
+ delete options.value;
91
+
92
+ this._super( options );
93
+
94
+ this.options.value = this._constrainedValue( value );
95
+ this._refreshValue();
96
+ },
97
+
98
+ _setOption: function( key, value ) {
99
+ if ( key === "max" ) {
100
+ // Don't allow a max less than min
101
+ value = Math.max( this.min, value );
83
102
  }
84
- return Math.min( this.options.max, Math.max( this.min, val ) );
103
+
104
+ this._super( key, value );
85
105
  },
86
106
 
87
107
  _percentage: function() {
88
- return 100 * this._value() / this.options.max;
108
+ return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
89
109
  },
90
110
 
91
111
  _refreshValue: function() {
92
- var value = this.value(),
112
+ var value = this.options.value,
93
113
  percentage = this._percentage();
94
114
 
115
+ this.valueDiv
116
+ .toggle( this.indeterminate || value > this.min )
117
+ .toggleClass( "ui-corner-right", value === this.options.max )
118
+ .width( percentage.toFixed(0) + "%" );
119
+
120
+ this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
121
+
122
+ if ( this.indeterminate ) {
123
+ this.element.removeAttr( "aria-valuenow" );
124
+ if ( !this.overlayDiv ) {
125
+ this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
126
+ }
127
+ } else {
128
+ this.element.attr({
129
+ "aria-valuemax": this.options.max,
130
+ "aria-valuenow": value
131
+ });
132
+ if ( this.overlayDiv ) {
133
+ this.overlayDiv.remove();
134
+ this.overlayDiv = null;
135
+ }
136
+ }
137
+
95
138
  if ( this.oldValue !== value ) {
96
139
  this.oldValue = value;
97
140
  this._trigger( "change" );
98
141
  }
99
-
100
- this.valueDiv
101
- .toggle( value > this.min )
102
- .toggleClass( "ui-corner-right", value === this.options.max )
103
- .width( percentage.toFixed(0) + "%" );
104
- this.element.attr( "aria-valuenow", value );
142
+ if ( value === this.options.max ) {
143
+ this._trigger( "complete" );
144
+ }
105
145
  }
106
146
  });
107
147