activeadmin 3.2.1 → 3.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/lib/active_admin/version.rb +1 -1
  4. data/lib/active_admin/views/components/active_admin_form.rb +1 -1
  5. data/vendor/assets/javascripts/jquery-ui/data.js +12 -8
  6. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +10 -7
  7. data/vendor/assets/javascripts/jquery-ui/focusable.js +12 -9
  8. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +60 -57
  9. data/vendor/assets/javascripts/jquery-ui/form.js +15 -12
  10. data/vendor/assets/javascripts/jquery-ui/ie.js +5 -2
  11. data/vendor/assets/javascripts/jquery-ui/keycode.js +11 -7
  12. data/vendor/assets/javascripts/jquery-ui/labels.js +46 -40
  13. data/vendor/assets/javascripts/jquery-ui/plugin.js +5 -2
  14. data/vendor/assets/javascripts/jquery-ui/position.js +30 -17
  15. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +6 -2
  16. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +6 -2
  17. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +10 -7
  18. data/vendor/assets/javascripts/jquery-ui/tabbable.js +11 -8
  19. data/vendor/assets/javascripts/jquery-ui/unique-id.js +10 -7
  20. data/vendor/assets/javascripts/jquery-ui/version.js +6 -3
  21. data/vendor/assets/javascripts/jquery-ui/widget.js +53 -30
  22. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +87 -24
  23. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +276 -273
  24. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +15 -11
  25. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +182 -62
  26. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +53 -36
  27. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +28 -19
  28. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +22 -11
  29. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +47 -26
  30. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +186 -125
  31. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +20 -20
  32. metadata +3 -4
  33. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +0 -23
@@ -6,22 +6,24 @@
6
6
  //= require jquery-ui/widget
7
7
 
8
8
  /*!
9
- * jQuery UI Sortable 1.12.1
10
- * http://jqueryui.com
9
+ * jQuery UI Sortable 1.13.3
10
+ * https://jqueryui.com
11
11
  *
12
- * Copyright jQuery Foundation and other contributors
12
+ * Copyright OpenJS Foundation and other contributors
13
13
  * Released under the MIT license.
14
- * http://jquery.org/license
14
+ * https://jquery.org/license
15
15
  */
16
16
 
17
17
  //>>label: Sortable
18
18
  //>>group: Interactions
19
19
  //>>description: Enables items in a list to be sorted using the mouse.
20
- //>>docs: http://api.jqueryui.com/sortable/
21
- //>>demos: http://jqueryui.com/sortable/
20
+ //>>docs: https://api.jqueryui.com/sortable/
21
+ //>>demos: https://jqueryui.com/sortable/
22
22
  //>>css.structure: ../../themes/base/sortable.css
23
23
 
24
24
  ( function( factory ) {
25
+ "use strict";
26
+
25
27
  if ( typeof define === "function" && define.amd ) {
26
28
 
27
29
  // AMD. Register as an anonymous module.
@@ -39,10 +41,11 @@
39
41
  // Browser globals
40
42
  factory( jQuery );
41
43
  }
42
- }( function( $ ) {
44
+ } )( function( $ ) {
45
+ "use strict";
43
46
 
44
47
  return $.widget( "ui.sortable", $.ui.mouse, {
45
- version: "1.12.1",
48
+ version: "1.13.3",
46
49
  widgetEventPrefix: "sort",
47
50
  ready: false,
48
51
  options: {
@@ -202,6 +205,11 @@ return $.widget( "ui.sortable", $.ui.mouse, {
202
205
  // mouseCapture
203
206
  this.refreshPositions();
204
207
 
208
+ //Prepare the dragged items parent
209
+ this.appendTo = $( o.appendTo !== "parent" ?
210
+ o.appendTo :
211
+ this.currentItem.parent() );
212
+
205
213
  //Create and append the visible helper
206
214
  this.helper = this._createHelper( event );
207
215
 
@@ -216,9 +224,6 @@ return $.widget( "ui.sortable", $.ui.mouse, {
216
224
  //Cache the margins of the original element
217
225
  this._cacheMargins();
218
226
 
219
- //Get the next scrolling parent
220
- this.scrollParent = this.helper.scrollParent();
221
-
222
227
  //The element's absolute position on the page minus margins
223
228
  this.offset = this.currentItem.offset();
224
229
  this.offset = {
@@ -231,25 +236,22 @@ return $.widget( "ui.sortable", $.ui.mouse, {
231
236
  left: event.pageX - this.offset.left,
232
237
  top: event.pageY - this.offset.top
233
238
  },
234
- parent: this._getParentOffset(),
235
239
 
236
240
  // This is a relative to absolute position minus the actual position calculation -
237
241
  // only used for relative positioned helper
238
242
  relative: this._getRelativeOffset()
239
243
  } );
240
244
 
241
- // Only after we got the offset, we can change the helper's position to absolute
245
+ // After we get the helper offset, but before we get the parent offset we can
246
+ // change the helper's position to absolute
242
247
  // TODO: Still need to figure out a way to make relative sorting possible
243
248
  this.helper.css( "position", "absolute" );
244
249
  this.cssPosition = this.helper.css( "position" );
245
250
 
246
- //Generate the original position
247
- this.originalPosition = this._generatePosition( event );
248
- this.originalPageX = event.pageX;
249
- this.originalPageY = event.pageY;
250
-
251
251
  //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
252
- ( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
252
+ if ( o.cursorAt ) {
253
+ this._adjustOffsetFromHelper( o.cursorAt );
254
+ }
253
255
 
254
256
  //Cache the former DOM position
255
257
  this.domPosition = {
@@ -266,6 +268,13 @@ return $.widget( "ui.sortable", $.ui.mouse, {
266
268
  //Create the placeholder
267
269
  this._createPlaceholder();
268
270
 
271
+ //Get the next scrolling parent
272
+ this.scrollParent = this.placeholder.scrollParent();
273
+
274
+ $.extend( this.offset, {
275
+ parent: this._getParentOffset()
276
+ } );
277
+
269
278
  //Set a containment if given in the options
270
279
  if ( o.containment ) {
271
280
  this._setContainment();
@@ -282,13 +291,9 @@ return $.widget( "ui.sortable", $.ui.mouse, {
282
291
  $( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body );
283
292
  }
284
293
 
285
- if ( o.opacity ) { // opacity option
286
- if ( this.helper.css( "opacity" ) ) {
287
- this._storedOpacity = this.helper.css( "opacity" );
288
- }
289
- this.helper.css( "opacity", o.opacity );
290
- }
291
-
294
+ // We need to make sure to grab the zIndex before setting the
295
+ // opacity, because setting the opacity to anything lower than 1
296
+ // causes the zIndex to change from "auto" to 0.
292
297
  if ( o.zIndex ) { // zIndex option
293
298
  if ( this.helper.css( "zIndex" ) ) {
294
299
  this._storedZIndex = this.helper.css( "zIndex" );
@@ -296,6 +301,13 @@ return $.widget( "ui.sortable", $.ui.mouse, {
296
301
  this.helper.css( "zIndex", o.zIndex );
297
302
  }
298
303
 
304
+ if ( o.opacity ) { // opacity option
305
+ if ( this.helper.css( "opacity" ) ) {
306
+ this._storedOpacity = this.helper.css( "opacity" );
307
+ }
308
+ this.helper.css( "opacity", o.opacity );
309
+ }
310
+
299
311
  //Prepare scrolling
300
312
  if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
301
313
  this.scrollParent[ 0 ].tagName !== "HTML" ) {
@@ -330,77 +342,82 @@ return $.widget( "ui.sortable", $.ui.mouse, {
330
342
 
331
343
  this._addClass( this.helper, "ui-sortable-helper" );
332
344
 
333
- // Execute the drag once - this causes the helper not to be visiblebefore getting its
334
- // correct position
335
- this._mouseDrag( event );
336
- return true;
345
+ //Move the helper, if needed
346
+ if ( !this.helper.parent().is( this.appendTo ) ) {
347
+ this.helper.detach().appendTo( this.appendTo );
337
348
 
338
- },
349
+ //Update position
350
+ this.offset.parent = this._getParentOffset();
351
+ }
339
352
 
340
- _mouseDrag: function( event ) {
341
- var i, item, itemElement, intersection,
342
- o = this.options,
343
- scrolled = false;
353
+ //Generate the original position
354
+ this.position = this.originalPosition = this._generatePosition( event );
355
+ this.originalPageX = event.pageX;
356
+ this.originalPageY = event.pageY;
357
+ this.lastPositionAbs = this.positionAbs = this._convertPositionTo( "absolute" );
344
358
 
345
- //Compute the helpers position
346
- this.position = this._generatePosition( event );
347
- this.positionAbs = this._convertPositionTo( "absolute" );
359
+ this._mouseDrag( event );
348
360
 
349
- if ( !this.lastPositionAbs ) {
350
- this.lastPositionAbs = this.positionAbs;
351
- }
361
+ return true;
352
362
 
353
- //Do scrolling
354
- if ( this.options.scroll ) {
355
- if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
356
- this.scrollParent[ 0 ].tagName !== "HTML" ) {
363
+ },
357
364
 
358
- if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -
359
- event.pageY < o.scrollSensitivity ) {
360
- this.scrollParent[ 0 ].scrollTop =
361
- scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;
362
- } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {
363
- this.scrollParent[ 0 ].scrollTop =
364
- scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;
365
- }
365
+ _scroll: function( event ) {
366
+ var o = this.options,
367
+ scrolled = false;
366
368
 
367
- if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -
368
- event.pageX < o.scrollSensitivity ) {
369
- this.scrollParent[ 0 ].scrollLeft = scrolled =
370
- this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;
371
- } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {
372
- this.scrollParent[ 0 ].scrollLeft = scrolled =
373
- this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;
374
- }
369
+ if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
370
+ this.scrollParent[ 0 ].tagName !== "HTML" ) {
375
371
 
376
- } else {
372
+ if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -
373
+ event.pageY < o.scrollSensitivity ) {
374
+ this.scrollParent[ 0 ].scrollTop =
375
+ scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;
376
+ } else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {
377
+ this.scrollParent[ 0 ].scrollTop =
378
+ scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;
379
+ }
377
380
 
378
- if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {
379
- scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );
380
- } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <
381
- o.scrollSensitivity ) {
382
- scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );
383
- }
381
+ if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -
382
+ event.pageX < o.scrollSensitivity ) {
383
+ this.scrollParent[ 0 ].scrollLeft = scrolled =
384
+ this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;
385
+ } else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {
386
+ this.scrollParent[ 0 ].scrollLeft = scrolled =
387
+ this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;
388
+ }
384
389
 
385
- if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {
386
- scrolled = this.document.scrollLeft(
387
- this.document.scrollLeft() - o.scrollSpeed
388
- );
389
- } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <
390
- o.scrollSensitivity ) {
391
- scrolled = this.document.scrollLeft(
392
- this.document.scrollLeft() + o.scrollSpeed
393
- );
394
- }
390
+ } else {
395
391
 
392
+ if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {
393
+ scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );
394
+ } else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <
395
+ o.scrollSensitivity ) {
396
+ scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );
396
397
  }
397
398
 
398
- if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
399
- $.ui.ddmanager.prepareOffsets( this, event );
399
+ if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {
400
+ scrolled = this.document.scrollLeft(
401
+ this.document.scrollLeft() - o.scrollSpeed
402
+ );
403
+ } else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <
404
+ o.scrollSensitivity ) {
405
+ scrolled = this.document.scrollLeft(
406
+ this.document.scrollLeft() + o.scrollSpeed
407
+ );
400
408
  }
409
+
401
410
  }
402
411
 
403
- //Regenerate the absolute position used for position checks
412
+ return scrolled;
413
+ },
414
+
415
+ _mouseDrag: function( event ) {
416
+ var i, item, itemElement, intersection,
417
+ o = this.options;
418
+
419
+ //Compute the helpers position
420
+ this.position = this._generatePosition( event );
404
421
  this.positionAbs = this._convertPositionTo( "absolute" );
405
422
 
406
423
  //Set the helper position
@@ -411,6 +428,24 @@ return $.widget( "ui.sortable", $.ui.mouse, {
411
428
  this.helper[ 0 ].style.top = this.position.top + "px";
412
429
  }
413
430
 
431
+ //Do scrolling
432
+ if ( o.scroll ) {
433
+ if ( this._scroll( event ) !== false ) {
434
+
435
+ //Update item positions used in position checks
436
+ this._refreshItemPositions( true );
437
+
438
+ if ( $.ui.ddmanager && !o.dropBehaviour ) {
439
+ $.ui.ddmanager.prepareOffsets( this, event );
440
+ }
441
+ }
442
+ }
443
+
444
+ this.dragDirection = {
445
+ vertical: this._getDragVerticalDirection(),
446
+ horizontal: this._getDragHorizontalDirection()
447
+ };
448
+
414
449
  //Rearrange
415
450
  for ( i = this.items.length - 1; i >= 0; i-- ) {
416
451
 
@@ -437,7 +472,8 @@ return $.widget( "ui.sortable", $.ui.mouse, {
437
472
  // no useless actions that have been done before
438
473
  // no action if the item moved is the parent of the item checked
439
474
  if ( itemElement !== this.currentItem[ 0 ] &&
440
- this.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement &&
475
+ this.placeholder[ intersection === 1 ?
476
+ "next" : "prev" ]()[ 0 ] !== itemElement &&
441
477
  !$.contains( this.placeholder[ 0 ], itemElement ) &&
442
478
  ( this.options.type === "semi-dynamic" ?
443
479
  !$.contains( this.element[ 0 ], itemElement ) :
@@ -447,7 +483,8 @@ return $.widget( "ui.sortable", $.ui.mouse, {
447
483
 
448
484
  this.direction = intersection === 1 ? "down" : "up";
449
485
 
450
- if ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) {
486
+ if ( this.options.tolerance === "pointer" ||
487
+ this._intersectsWithSides( item ) ) {
451
488
  this._rearrange( event, item );
452
489
  } else {
453
490
  break;
@@ -663,12 +700,12 @@ return $.widget( "ui.sortable", $.ui.mouse, {
663
700
  return false;
664
701
  }
665
702
 
666
- verticalDirection = this._getDragVerticalDirection();
667
- horizontalDirection = this._getDragHorizontalDirection();
703
+ verticalDirection = this.dragDirection.vertical;
704
+ horizontalDirection = this.dragDirection.horizontal;
668
705
 
669
706
  return this.floating ?
670
- ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 )
671
- : ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );
707
+ ( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 ) :
708
+ ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );
672
709
 
673
710
  },
674
711
 
@@ -678,8 +715,8 @@ return $.widget( "ui.sortable", $.ui.mouse, {
678
715
  this.offset.click.top, item.top + ( item.height / 2 ), item.height ),
679
716
  isOverRightHalf = this._isOverAxis( this.positionAbs.left +
680
717
  this.offset.click.left, item.left + ( item.width / 2 ), item.width ),
681
- verticalDirection = this._getDragVerticalDirection(),
682
- horizontalDirection = this._getDragHorizontalDirection();
718
+ verticalDirection = this.dragDirection.vertical,
719
+ horizontalDirection = this.dragDirection.horizontal;
683
720
 
684
721
  if ( this.floating && horizontalDirection ) {
685
722
  return ( ( horizontalDirection === "right" && isOverRightHalf ) ||
@@ -728,7 +765,7 @@ return $.widget( "ui.sortable", $.ui.mouse, {
728
765
  for ( j = cur.length - 1; j >= 0; j-- ) {
729
766
  inst = $.data( cur[ j ], this.widgetFullName );
730
767
  if ( inst && inst !== this && !inst.options.disabled ) {
731
- queries.push( [ $.isFunction( inst.options.items ) ?
768
+ queries.push( [ typeof inst.options.items === "function" ?
732
769
  inst.options.items.call( inst.element ) :
733
770
  $( inst.options.items, inst.element )
734
771
  .not( ".ui-sortable-helper" )
@@ -738,7 +775,7 @@ return $.widget( "ui.sortable", $.ui.mouse, {
738
775
  }
739
776
  }
740
777
 
741
- queries.push( [ $.isFunction( this.options.items ) ?
778
+ queries.push( [ typeof this.options.items === "function" ?
742
779
  this.options.items
743
780
  .call( this.element, null, { options: this.options, item: this.currentItem } ) :
744
781
  $( this.options.items, this.element )
@@ -778,7 +815,7 @@ return $.widget( "ui.sortable", $.ui.mouse, {
778
815
 
779
816
  var i, j, cur, inst, targetData, _queries, item, queriesLength,
780
817
  items = this.items,
781
- queries = [ [ $.isFunction( this.options.items ) ?
818
+ queries = [ [ typeof this.options.items === "function" ?
782
819
  this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :
783
820
  $( this.options.items, this.element ), this ] ],
784
821
  connectWith = this._connectWith();
@@ -790,7 +827,7 @@ return $.widget( "ui.sortable", $.ui.mouse, {
790
827
  for ( j = cur.length - 1; j >= 0; j-- ) {
791
828
  inst = $.data( cur[ j ], this.widgetFullName );
792
829
  if ( inst && inst !== this && !inst.options.disabled ) {
793
- queries.push( [ $.isFunction( inst.options.items ) ?
830
+ queries.push( [ typeof inst.options.items === "function" ?
794
831
  inst.options.items
795
832
  .call( inst.element[ 0 ], event, { item: this.currentItem } ) :
796
833
  $( inst.options.items, inst.element ), inst ] );
@@ -821,26 +858,14 @@ return $.widget( "ui.sortable", $.ui.mouse, {
821
858
 
822
859
  },
823
860
 
824
- refreshPositions: function( fast ) {
825
-
826
- // Determine whether items are being displayed horizontally
827
- this.floating = this.items.length ?
828
- this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
829
- false;
830
-
831
- //This has to be redone because due to the item being moved out/into the offsetParent,
832
- // the offsetParent's position will change
833
- if ( this.offsetParent && this.helper ) {
834
- this.offset.parent = this._getParentOffset();
835
- }
836
-
861
+ _refreshItemPositions: function( fast ) {
837
862
  var i, item, t, p;
838
863
 
839
864
  for ( i = this.items.length - 1; i >= 0; i-- ) {
840
865
  item = this.items[ i ];
841
866
 
842
867
  //We ignore calculating positions of all connected containers when we're not over them
843
- if ( item.instance !== this.currentContainer && this.currentContainer &&
868
+ if ( this.currentContainer && item.instance !== this.currentContainer &&
844
869
  item.item[ 0 ] !== this.currentItem[ 0 ] ) {
845
870
  continue;
846
871
  }
@@ -858,6 +883,24 @@ return $.widget( "ui.sortable", $.ui.mouse, {
858
883
  item.left = p.left;
859
884
  item.top = p.top;
860
885
  }
886
+ },
887
+
888
+ refreshPositions: function( fast ) {
889
+
890
+ // Determine whether items are being displayed horizontally
891
+ this.floating = this.items.length ?
892
+ this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
893
+ false;
894
+
895
+ // This has to be redone because due to the item being moved out/into the offsetParent,
896
+ // the offsetParent's position will change
897
+ if ( this.offsetParent && this.helper ) {
898
+ this.offset.parent = this._getParentOffset();
899
+ }
900
+
901
+ this._refreshItemPositions( fast );
902
+
903
+ var i, p;
861
904
 
862
905
  if ( this.options.custom && this.options.custom.refreshContainers ) {
863
906
  this.options.custom.refreshContainers.call( this );
@@ -878,20 +921,20 @@ return $.widget( "ui.sortable", $.ui.mouse, {
878
921
 
879
922
  _createPlaceholder: function( that ) {
880
923
  that = that || this;
881
- var className,
924
+ var className, nodeName,
882
925
  o = that.options;
883
926
 
884
927
  if ( !o.placeholder || o.placeholder.constructor === String ) {
885
928
  className = o.placeholder;
929
+ nodeName = that.currentItem[ 0 ].nodeName.toLowerCase();
886
930
  o.placeholder = {
887
931
  element: function() {
888
932
 
889
- var nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),
890
- element = $( "<" + nodeName + ">", that.document[ 0 ] );
933
+ var element = $( "<" + nodeName + ">", that.document[ 0 ] );
891
934
 
892
- that._addClass( element, "ui-sortable-placeholder",
893
- className || that.currentItem[ 0 ].className )
894
- ._removeClass( element, "ui-sortable-helper" );
935
+ that._addClass( element, "ui-sortable-placeholder",
936
+ className || that.currentItem[ 0 ].className )
937
+ ._removeClass( element, "ui-sortable-helper" );
895
938
 
896
939
  if ( nodeName === "tbody" ) {
897
940
  that._createTrPlaceholder(
@@ -920,9 +963,15 @@ return $.widget( "ui.sortable", $.ui.mouse, {
920
963
  return;
921
964
  }
922
965
 
923
- //If the element doesn't have a actual height by itself (without styles coming
924
- // from a stylesheet), it receives the inline height from the dragged item
925
- if ( !p.height() ) {
966
+ // If the element doesn't have a actual height or width by itself (without
967
+ // styles coming from a stylesheet), it receives the inline height and width
968
+ // from the dragged item. Or, if it's a tbody or tr, it's going to have a height
969
+ // anyway since we're populating them with <td>s above, but they're unlikely to
970
+ // be the correct height on their own if the row heights are dynamic, so we'll
971
+ // always assign the height of the dragged item given forcePlaceholderSize
972
+ // is true.
973
+ if ( !p.height() || ( o.forcePlaceholderSize &&
974
+ ( nodeName === "tbody" || nodeName === "tr" ) ) ) {
926
975
  p.height(
927
976
  that.currentItem.innerHeight() -
928
977
  parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) -
@@ -1055,9 +1104,11 @@ return $.widget( "ui.sortable", $.ui.mouse, {
1055
1104
  return;
1056
1105
  }
1057
1106
 
1058
- itemWithLeastDistance ?
1059
- this._rearrange( event, itemWithLeastDistance, null, true ) :
1107
+ if ( itemWithLeastDistance ) {
1108
+ this._rearrange( event, itemWithLeastDistance, null, true );
1109
+ } else {
1060
1110
  this._rearrange( event, null, this.containers[ innermostIndex ].element, true );
1111
+ }
1061
1112
  this._trigger( "change", event, this._uiHash() );
1062
1113
  this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) );
1063
1114
  this.currentContainer = this.containers[ innermostIndex ];
@@ -1065,6 +1116,15 @@ return $.widget( "ui.sortable", $.ui.mouse, {
1065
1116
  //Update the placeholder
1066
1117
  this.options.placeholder.update( this.currentContainer, this.placeholder );
1067
1118
 
1119
+ //Update scrollParent
1120
+ this.scrollParent = this.placeholder.scrollParent();
1121
+
1122
+ //Update overflowOffset
1123
+ if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
1124
+ this.scrollParent[ 0 ].tagName !== "HTML" ) {
1125
+ this.overflowOffset = this.scrollParent.offset();
1126
+ }
1127
+
1068
1128
  this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
1069
1129
  this.containers[ innermostIndex ].containerCache.over = 1;
1070
1130
  }
@@ -1074,15 +1134,13 @@ return $.widget( "ui.sortable", $.ui.mouse, {
1074
1134
  _createHelper: function( event ) {
1075
1135
 
1076
1136
  var o = this.options,
1077
- helper = $.isFunction( o.helper ) ?
1137
+ helper = typeof o.helper === "function" ?
1078
1138
  $( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :
1079
1139
  ( o.helper === "clone" ? this.currentItem.clone() : this.currentItem );
1080
1140
 
1081
1141
  //Add the helper to the DOM if that didn't happen already
1082
1142
  if ( !helper.parents( "body" ).length ) {
1083
- $( o.appendTo !== "parent" ?
1084
- o.appendTo :
1085
- this.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );
1143
+ this.appendTo[ 0 ].appendChild( helper[ 0 ] );
1086
1144
  }
1087
1145
 
1088
1146
  if ( helper[ 0 ] === this.currentItem[ 0 ] ) {
@@ -1110,7 +1168,7 @@ return $.widget( "ui.sortable", $.ui.mouse, {
1110
1168
  if ( typeof obj === "string" ) {
1111
1169
  obj = obj.split( " " );
1112
1170
  }
1113
- if ( $.isArray( obj ) ) {
1171
+ if ( Array.isArray( obj ) ) {
1114
1172
  obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
1115
1173
  }
1116
1174
  if ( "left" in obj ) {
@@ -1390,9 +1448,12 @@ return $.widget( "ui.sortable", $.ui.mouse, {
1390
1448
 
1391
1449
  _rearrange: function( event, i, a, hardRefresh ) {
1392
1450
 
1393
- a ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :
1451
+ if ( a ) {
1452
+ a[ 0 ].appendChild( this.placeholder[ 0 ] );
1453
+ } else {
1394
1454
  i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],
1395
1455
  ( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );
1456
+ }
1396
1457
 
1397
1458
  //Various things done here to improve the performance:
1398
1459
  // 1. we create a setTimeout, that calls refreshPositions
@@ -1558,4 +1619,4 @@ return $.widget( "ui.sortable", $.ui.mouse, {
1558
1619
 
1559
1620
  } );
1560
1621
 
1561
- } ) );
1622
+ } );