From 61da55e530d31176f717b44716c37be13a077216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 30 Jun 2016 11:06:37 -0400 Subject: [PATCH 1/3] Draggable: Remove handle class when disabled to allow scrolling Fixes #14779 --- ui/widgets/draggable.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ui/widgets/draggable.js b/ui/widgets/draggable.js index 9e46c81bb00..8597f143b93 100644 --- a/ui/widgets/draggable.js +++ b/ui/widgets/draggable.js @@ -78,7 +78,11 @@ $.widget( "ui.draggable", $.ui.mouse, { if ( this.options.addClasses ) { this._addClass( "ui-draggable" ); } - this._setHandleClassName(); + + this.handleElement = $(); + if ( !this.options.disabled ) { + this._setHandleClassName(); + } this._mouseInit(); }, @@ -91,6 +95,15 @@ $.widget( "ui.draggable", $.ui.mouse, { } }, + _setOptionDisabled: function( value ) { + // Remove the handle class when disabled since that controls touch-action + if ( value ) { + this._removeHandleClassName(); + } else { + this._setHandleClassName(); + } + }, + _destroy: function() { if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { this.destroyOnClear = true; From cd6320eb946947fa81dcd17b05edbc7f78b009b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Tue, 4 Oct 2016 16:48:56 -0400 Subject: [PATCH 2/3] fixup: New implementation --- tests/unit/draggable/draggable.html | 2 +- tests/unit/draggable/options.js | 5 ++++- themes/base/draggable.css | 2 +- ui/widgets/draggable.js | 11 +++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/unit/draggable/draggable.html b/tests/unit/draggable/draggable.html index 53468a3a998..2e741310727 100644 --- a/tests/unit/draggable/draggable.html +++ b/tests/unit/draggable/draggable.html @@ -5,7 +5,7 @@ jQuery UI Draggable Test Suite - + #main { diff --git a/tests/unit/draggable/options.js b/tests/unit/draggable/options.js index 656df621f0f..34d38979487 100644 --- a/tests/unit/draggable/options.js +++ b/tests/unit/draggable/options.js @@ -802,17 +802,20 @@ QUnit.test( "cursorAt, switching after initialization", function( assert ) { } ); QUnit.test( "disabled", function( assert ) { - assert.expect( 6 ); + assert.expect( 9 ); var element = $( "#draggable1" ).draggable(); testHelper.shouldMove( assert, element, "disabled: default" ); + assert.equal( element.css( "touch-action" ), "none", "touch-action: default" ); element.draggable( "option", "disabled", true ); testHelper.shouldNotDrag( assert, element, "option: disabled true" ); + assert.equal( element.css( "touch-action" ), "auto", "touch-action: disabled true" ); element.draggable( "option", "disabled", false ); testHelper.shouldMove( assert, element, "option: disabled false" ); + assert.equal( element.css( "touch-action" ), "none", "touch-action: disabled false" ); } ); QUnit.test( "{ grid: [50, 50] }, relative", function( assert ) { diff --git a/themes/base/draggable.css b/themes/base/draggable.css index f2000c45656..88f09ec52fc 100644 --- a/themes/base/draggable.css +++ b/themes/base/draggable.css @@ -6,7 +6,7 @@ * Released under the MIT license. * http://jquery.org/license */ -.ui-draggable-handle { +.ui-draggable-handle-enabled { -ms-touch-action: none; touch-action: none; } diff --git a/ui/widgets/draggable.js b/ui/widgets/draggable.js index 8597f143b93..cefca0e9a81 100644 --- a/ui/widgets/draggable.js +++ b/ui/widgets/draggable.js @@ -78,10 +78,9 @@ $.widget( "ui.draggable", $.ui.mouse, { if ( this.options.addClasses ) { this._addClass( "ui-draggable" ); } - - this.handleElement = $(); + this._setHandleClassName(); if ( !this.options.disabled ) { - this._setHandleClassName(); + this._addClass( this.handleElement, "ui-draggable-handle-enabled" ); } this._mouseInit(); @@ -96,11 +95,11 @@ $.widget( "ui.draggable", $.ui.mouse, { }, _setOptionDisabled: function( value ) { - // Remove the handle class when disabled since that controls touch-action + // Remove touch-action for disabled draggables if ( value ) { - this._removeHandleClassName(); + this._removeClass( this.handleElement, "ui-draggable-handle-enabled" ); } else { - this._setHandleClassName(); + this._addClass( this.handleElement, "ui-draggable-handle-enabled" ); } }, From 9bfdca277c0f5ba2c4fc8f1109e31fd27696b3b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Wed, 5 Oct 2016 13:13:27 -0400 Subject: [PATCH 3/3] fixup! fixup: New implementation --- ui/widgets/draggable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/widgets/draggable.js b/ui/widgets/draggable.js index cefca0e9a81..88d62745172 100644 --- a/ui/widgets/draggable.js +++ b/ui/widgets/draggable.js @@ -95,6 +95,7 @@ $.widget( "ui.draggable", $.ui.mouse, { }, _setOptionDisabled: function( value ) { + // Remove touch-action for disabled draggables if ( value ) { this._removeClass( this.handleElement, "ui-draggable-handle-enabled" );