Skip to content

Commit 6843ced

Browse files
authoredMar 18, 2025··
Spinner: Drop dependency on jQuery Mousewheel
1. Listen to the native `wheel` event without depending on any wrapper plugins. 2. Keep listening to the `mousewheel` event for compatibility with projects using the jQuery Mousewheel plugin but route it to the `wheel` handler. Closes gh-2338
1 parent ef28a5f commit 6843ced

File tree

12 files changed

+64
-254
lines changed

12 files changed

+64
-254
lines changed
 

‎Gruntfile.js

-3
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,6 @@ grunt.initConfig( {
247247

248248
"requirejs/require.js": "requirejs/require.js",
249249

250-
"jquery-mousewheel/jquery.mousewheel.js": "jquery-mousewheel/jquery.mousewheel.js",
251-
"jquery-mousewheel/LICENSE.txt": "jquery-mousewheel/LICENSE.txt",
252-
253250
"jquery-simulate/jquery.simulate.js": "jquery-simulate/jquery.simulate.js",
254251
"jquery-simulate/LICENSE.txt": "jquery-simulate/LICENSE.txt",
255252

‎bower.json

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
},
1414
"devDependencies": {
1515
"jquery-color": "3.0.0",
16-
"jquery-mousewheel": "3.1.12",
1716
"jquery-simulate": "1.1.1",
1817
"qunit": "2.19.4",
1918
"requirejs": "2.1.14",

‎demos/spinner/currency.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link rel="stylesheet" href="../../themes/base/all.css">
88
<link rel="stylesheet" href="../demos.css">
99
<script src="../../external/requirejs/require.js"></script>
10-
<script src="../bootstrap.js" data-modules="external/globalize/globalize external/globalize/globalize.culture.de-DE external/globalize/globalize.culture.ja-JP external/jquery-mousewheel/jquery.mousewheel">
10+
<script src="../bootstrap.js" data-modules="external/globalize/globalize external/globalize/globalize.culture.de-DE external/globalize/globalize.culture.ja-JP">
1111
$( "#currency" ).on( "change", function() {
1212
$( "#spinner" ).spinner( "option", "culture", $( this ).val() );
1313
});

‎demos/spinner/decimal.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link rel="stylesheet" href="../../themes/base/all.css">
88
<link rel="stylesheet" href="../demos.css">
99
<script src="../../external/requirejs/require.js"></script>
10-
<script src="../bootstrap.js" data-modules="external/globalize/globalize external/globalize/globalize.culture.de-DE external/globalize/globalize.culture.ja-JP external/jquery-mousewheel/jquery.mousewheel">
10+
<script src="../bootstrap.js" data-modules="external/globalize/globalize external/globalize/globalize.culture.de-DE external/globalize/globalize.culture.ja-JP">
1111
$( "#spinner" ).spinner({
1212
step: 0.01,
1313
numberFormat: "n"

‎demos/spinner/default.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link rel="stylesheet" href="../../themes/base/all.css">
88
<link rel="stylesheet" href="../demos.css">
99
<script src="../../external/requirejs/require.js"></script>
10-
<script src="../bootstrap.js" data-modules="external/jquery-mousewheel/jquery.mousewheel">
10+
<script src="../bootstrap.js">
1111
var spinner = $( "#spinner" ).spinner();
1212

1313
$( "#disable" ).on( "click", function() {

‎demos/spinner/latlong.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<link rel="stylesheet" href="../demos.css">
99
<script src="https://maps.google.com/maps/api/js?sensor=false"></script>
1010
<script src="../../external/requirejs/require.js"></script>
11-
<script src="../bootstrap.js" data-modules="external/jquery-mousewheel/jquery.mousewheel">
11+
<script src="../bootstrap.js">
1212
function latlong() {
1313
return new google.maps.LatLng( $("#lat").val(), $("#lng").val() );
1414
}

‎demos/spinner/overflow.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link rel="stylesheet" href="../../themes/base/all.css">
88
<link rel="stylesheet" href="../demos.css">
99
<script src="../../external/requirejs/require.js"></script>
10-
<script src="../bootstrap.js" data-modules="external/jquery-mousewheel/jquery.mousewheel">
10+
<script src="../bootstrap.js">
1111
$( "#spinner" ).spinner({
1212
spin: function( event, ui ) {
1313
if ( ui.value > 10 ) {

‎demos/spinner/time.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link rel="stylesheet" href="../../themes/base/all.css">
88
<link rel="stylesheet" href="../demos.css">
99
<script src="../../external/requirejs/require.js"></script>
10-
<script src="../bootstrap.js" data-modules="external/globalize/globalize external/globalize/globalize.culture.de-DE external/jquery-mousewheel/jquery.mousewheel">
10+
<script src="../bootstrap.js" data-modules="external/globalize/globalize external/globalize/globalize.culture.de-DE">
1111
$.widget( "ui.timespinner", $.ui.spinner, {
1212
options: {
1313
// seconds

‎external/jquery-mousewheel/LICENSE.txt

-20
This file was deleted.

‎external/jquery-mousewheel/jquery.mousewheel.js

-221
This file was deleted.

‎tests/unit/spinner/core.js

+41-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,47 @@ QUnit.test( "mouse click on up button, increases value not greater than max", fu
163163
assert.equal( element.val(), 0 );
164164
} );
165165

166-
QUnit.test( "mousewheel on input", function( assert ) {
166+
QUnit.test( "wheel on input", function( assert ) {
167+
var ready = assert.async();
168+
assert.expect( 5 );
169+
170+
var element = $( "#spin" ).val( 0 ).spinner( {
171+
step: 2
172+
} );
173+
174+
element.simulate( "focus" );
175+
setTimeout( step1 );
176+
177+
function getWheelEvent( deltaY ) {
178+
return jQuery.Event( new WheelEvent( "wheel", { deltaY: deltaY } ) );
179+
}
180+
181+
function step1() {
182+
element.trigger( getWheelEvent() );
183+
assert.equal( element.val(), 0, "wheel event without delta does not change value" );
184+
185+
element.trigger( getWheelEvent( -1 ) );
186+
assert.equal( element.val(), 2, "delta -1" );
187+
188+
element.trigger( getWheelEvent( 0.2 ) );
189+
assert.equal( element.val(), 0, "delta 0.2" );
190+
191+
element.trigger( getWheelEvent( 15 ) );
192+
assert.equal( element.val(), -2, "delta 15" );
193+
194+
element.simulate( "blur" );
195+
setTimeout( step2 );
196+
}
197+
198+
function step2() {
199+
element.trigger( "wheel", -1 );
200+
assert.equal( element.val(), -2, "wheel when not focused" );
201+
202+
ready();
203+
}
204+
} );
205+
206+
QUnit.test( "mousewheel on input (DEPRECATED)", function( assert ) {
167207
var ready = assert.async();
168208
assert.expect( 5 );
169209

‎ui/widgets/spinner.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,10 @@ $.widget( "ui.spinner", {
136136
this._trigger( "change", event );
137137
}
138138
},
139-
mousewheel: function( event, delta ) {
139+
wheel: function( event ) {
140140
var activeElement = this.document[ 0 ].activeElement;
141141
var isActive = this.element[ 0 ] === activeElement;
142+
var delta = event.deltaY || event.originalEvent && event.originalEvent.deltaY;
142143

143144
if ( !isActive || !delta ) {
144145
return;
@@ -148,7 +149,7 @@ $.widget( "ui.spinner", {
148149
return false;
149150
}
150151

151-
this._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );
152+
this._spin( ( delta > 0 ? -1 : 1 ) * this.options.step, event );
152153
clearTimeout( this.mousewheelTimer );
153154
this.mousewheelTimer = this._delay( function() {
154155
if ( this.spinning ) {
@@ -157,6 +158,20 @@ $.widget( "ui.spinner", {
157158
}, 100 );
158159
event.preventDefault();
159160
},
161+
162+
// DEPRECATED
163+
// Kept for backwards compatibility. Please use the modern `wheel`
164+
// event. The `delta` parameter is provided by the jQuery Mousewheel
165+
// plugin if one is loaded.
166+
mousewheel: function( event, delta ) {
167+
var wheelEvent = $.Event( event );
168+
wheelEvent.type = "wheel";
169+
if ( delta ) {
170+
wheelEvent.deltaY = -delta;
171+
}
172+
return this._events.wheel.call( this, wheelEvent );
173+
},
174+
160175
"mousedown .ui-spinner-button": function( event ) {
161176
var previous;
162177

0 commit comments

Comments
 (0)
Please sign in to comment.