From 2dc99bf86505ea02859357730f2ef71784847b4b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Go=C5=82e=CC=A8biowski-Owczarek?=
Date: Fri, 14 Mar 2025 11:50:27 +0100
Subject: [PATCH 1/2] Restore jQuery 1.2 compatibility, test all supported
jQuery minor lines
It was supported in 3.1.13, so we shouldn't drop it in a minor update; we'll
do that in 4.0.0.
---
.editorconfig | 3 +-
ChangeLog.md | 8 +++++
jquery.mousewheel.js | 15 ++++----
jquery.mousewheel.min.js | 2 +-
jtr-isolate.yml | 46 +++++++++++++++++++++++++
jtr.yml | 74 ++++++++++++++++++++++++++++++++++++++++
package-lock.json | 2 +-
package.json | 2 +-
test/index.html | 2 +-
test/unit.js | 9 +++--
10 files changed, 149 insertions(+), 14 deletions(-)
create mode 100644 jtr.yml
diff --git a/.editorconfig b/.editorconfig
index 0fe2cbbba..1114dd077 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -4,7 +4,8 @@
root = true
[*]
-indent_style = tab
+indent_style = space
+indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
diff --git a/ChangeLog.md b/ChangeLog.md
index 76752a1a0..6be2717d1 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,13 @@
# Mouse Wheel ChangeLog
+## 3.2.0
+
+* Use `.on()`/`.off()` for event binding where available
+* Don't clobber mouse offset properties if we don't adjust them (#165)
+* Remove moot `version` property from bower.json (#140)
+* Remove the executable bit from the library (#176)
+* Add jtr-based tests in GitHub Actions, migrate to ESLint flat config (#247)
+
## 3.1.13
* Update copyright notice and license to remove years
diff --git a/jquery.mousewheel.js b/jquery.mousewheel.js
index 1ee0e326a..c8edb3679 100644
--- a/jquery.mousewheel.js
+++ b/jquery.mousewheel.js
@@ -22,11 +22,12 @@
} )( function( $ ) {
"use strict";
- var toFix = [ "wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll" ],
+ var nullLowestDeltaTimeout, lowestDelta,
+ modernEvents = !!$.fn.on,
+ toFix = [ "wheel", "mousewheel", "DOMMouseScroll", "MozMousePixelScroll" ],
toBind = ( "onwheel" in window.document || window.document.documentMode >= 9 ) ?
[ "wheel" ] : [ "mousewheel", "DomMouseScroll", "MozMousePixelScroll" ],
- slice = Array.prototype.slice,
- nullLowestDeltaTimeout, lowestDelta;
+ slice = Array.prototype.slice;
if ( $.event.fixHooks ) {
for ( var i = toFix.length; i; ) {
@@ -87,11 +88,13 @@
$.fn.extend( {
mousewheel: function( fn ) {
- return fn ? this.on( "mousewheel", fn ) : this.trigger( "mousewheel" );
+ return fn ?
+ this[ modernEvents ? "on" : "bind" ]( "mousewheel", fn ) :
+ this.trigger( "mousewheel" );
},
unmousewheel: function( fn ) {
- return this.off( "mousewheel", fn );
+ return this[ modernEvents ? "off" : "unbind" ]( "mousewheel", fn );
}
} );
@@ -126,7 +129,7 @@
deltaY = 0;
}
- // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
+ // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatability
delta = deltaY === 0 ? deltaX : deltaY;
// New school wheel delta (wheel event)
diff --git a/jquery.mousewheel.min.js b/jquery.mousewheel.min.js
index c662bd46c..a27391f27 100644
--- a/jquery.mousewheel.min.js
+++ b/jquery.mousewheel.min.js
@@ -1,4 +1,4 @@
!/*!
* jQuery Mousewheel 3.1.13
* Copyright OpenJS Foundation and other contributors
- */function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){"use strict";var t,i,n=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],o="onwheel"in window.document||window.document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],l=Array.prototype.slice;if(e.event.fixHooks)for(var s=n.length;s;)e.event.fixHooks[n[--s]]=e.event.mouseHooks;var a=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var t=o.length;t;)this.addEventListener(o[--t],h,!1);else this.onmousewheel=h;e.data(this,"mousewheel-line-height",a.getLineHeight(this)),e.data(this,"mousewheel-page-height",a.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var t=o.length;t;)this.removeEventListener(o[--t],h,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var i=e(t),n=i["offsetParent"in e.fn?"offsetParent":"parent"]();return n.length||(n=e("body")),parseInt(n.css("fontSize"),10)||parseInt(i.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function h(n){var o=n||window.event,s=l.call(arguments,1),h=0,f=0,d=0,w=0;if((n=e.event.fix(o)).type="mousewheel","detail"in o&&(d=-1*o.detail),"wheelDelta"in o&&(d=o.wheelDelta),"wheelDeltaY"in o&&(d=o.wheelDeltaY),"wheelDeltaX"in o&&(f=-1*o.wheelDeltaX),"axis"in o&&o.axis===o.HORIZONTAL_AXIS&&(f=-1*d,d=0),h=0===d?f:d,"deltaY"in o&&(h=d=-1*o.deltaY),"deltaX"in o&&(f=o.deltaX,0===d&&(h=-1*f)),0!==d||0!==f){if(1===o.deltaMode){var c=e.data(this,"mousewheel-line-height");h*=c,d*=c,f*=c}else if(2===o.deltaMode){var m=e.data(this,"mousewheel-page-height");h*=m,d*=m,f*=m}if(w=Math.max(Math.abs(d),Math.abs(f)),(!i||w=1?"floor":"ceil"](h/i),f=Math[f>=1?"floor":"ceil"](f/i),d=Math[d>=1?"floor":"ceil"](d/i),a.settings.normalizeOffset&&this.getBoundingClientRect){var g=this.getBoundingClientRect();n.offsetX=n.clientX-g.left,n.offsetY=n.clientY-g.top}return n.deltaX=f,n.deltaY=d,n.deltaFactor=i,n.deltaMode=0,s.unshift(n,h,f,d),t&&window.clearTimeout(t),t=window.setTimeout(r,200),(e.event.dispatch||e.event.handle).apply(this,s)}}function r(){i=null}function u(e,t){return a.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}e.fn.extend({mousewheel:function(e){return e?this.on("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.off("mousewheel",e)}})});
\ No newline at end of file
+ */function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){"use strict";var t,n,i=!!e.fn.on,o=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],l="onwheel"in window.document||window.document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],s=Array.prototype.slice;if(e.event.fixHooks)for(var a=o.length;a;)e.event.fixHooks[o[--a]]=e.event.mouseHooks;var h=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var t=l.length;t;)this.addEventListener(l[--t],r,!1);else this.onmousewheel=r;e.data(this,"mousewheel-line-height",h.getLineHeight(this)),e.data(this,"mousewheel-page-height",h.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var t=l.length;t;)this.removeEventListener(l[--t],r,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var n=e(t),i=n["offsetParent"in e.fn?"offsetParent":"parent"]();return i.length||(i=e("body")),parseInt(i.css("fontSize"),10)||parseInt(n.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function r(i){var o=i||window.event,l=s.call(arguments,1),a=0,r=0,d=0,w=0;if((i=e.event.fix(o)).type="mousewheel","detail"in o&&(d=-1*o.detail),"wheelDelta"in o&&(d=o.wheelDelta),"wheelDeltaY"in o&&(d=o.wheelDeltaY),"wheelDeltaX"in o&&(r=-1*o.wheelDeltaX),"axis"in o&&o.axis===o.HORIZONTAL_AXIS&&(r=-1*d,d=0),a=0===d?r:d,"deltaY"in o&&(a=d=-1*o.deltaY),"deltaX"in o&&(r=o.deltaX,0===d&&(a=-1*r)),0!==d||0!==r){if(1===o.deltaMode){var c=e.data(this,"mousewheel-line-height");a*=c,d*=c,r*=c}else if(2===o.deltaMode){var m=e.data(this,"mousewheel-page-height");a*=m,d*=m,r*=m}if(w=Math.max(Math.abs(d),Math.abs(r)),(!n||w=1?"floor":"ceil"](a/n),r=Math[r>=1?"floor":"ceil"](r/n),d=Math[d>=1?"floor":"ceil"](d/n),h.settings.normalizeOffset&&this.getBoundingClientRect){var g=this.getBoundingClientRect();i.offsetX=i.clientX-g.left,i.offsetY=i.clientY-g.top}return i.deltaX=r,i.deltaY=d,i.deltaFactor=n,i.deltaMode=0,l.unshift(i,a,r,d),t&&window.clearTimeout(t),t=window.setTimeout(u,200),(e.event.dispatch||e.event.handle).apply(this,l)}}function u(){n=null}function f(e,t){return h.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}e.fn.extend({mousewheel:function(e){return e?this[i?"on":"bind"]("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this[i?"off":"unbind"]("mousewheel",e)}})});
\ No newline at end of file
diff --git a/jtr-isolate.yml b/jtr-isolate.yml
index 86de6b640..f6f8b3152 100644
--- a/jtr-isolate.yml
+++ b/jtr-isolate.yml
@@ -20,12 +20,58 @@ runs:
- 3.6.4.min
- 3.6.4.slim
- 3.6.4.slim.min
+ - 3.5.1
+ - 3.5.1.min
+ - 3.5.1.slim
+ - 3.5.1.slim.min
+ - 3.4.1
+ - 3.4.1.min
+ - 3.4.1.slim
+ - 3.4.1.slim.min
+ - 3.3.1
+ - 3.3.1.min
+ - 3.3.1.slim
+ - 3.3.1.slim.min
+ - 3.2.1
+ - 3.2.1.min
+ - 3.2.1.slim
+ - 3.2.1.slim.min
+ - 3.1.1
+ - 3.1.1.min
+ - 3.1.1.slim
+ - 3.1.1.slim.min
+ - 3.0.0
+ - 3.0.0.min
+ - 3.0.0.slim
+ - 3.0.0.slim.min
- 2.2.4
- 2.2.4.min
+ - 2.1.4
+ - 2.1.4.min
+ - 2.0.3
+ - 2.0.3.min
- 1.12.4
- 1.12.4.min
+ - 1.11.3
+ - 1.11.3.min
+ - 1.10.2
+ - 1.10.2.min
+ - 1.9.1
+ - 1.9.1.min
+ - 1.8.3
+ - 1.8.3.min
- 1.7.2
- 1.7.2.min
+ - 1.6.4
+ - 1.6.4.min
+ - 1.5.2
+ - 1.5.2.min
+ - 1.4.4
+ - 1.4.4.min
+ - 1.3.2
+ - 1.3.2.min
+ - 1.2.6
+ - 1.2.6.min
retries: 3
hard-retries: 1
diff --git a/jtr.yml b/jtr.yml
new file mode 100644
index 000000000..5e50c776e
--- /dev/null
+++ b/jtr.yml
@@ -0,0 +1,74 @@
+version: 1
+
+base-url: /test/
+
+runs:
+ jquery:
+ - git
+ - git.min
+ - git.slim
+ - git.slim.min
+ - 3.x-git
+ - 3.x-git.min
+ - 3.x-git.slim
+ - 3.x-git.slim.min
+ - 3.7.1
+ - 3.7.1.min
+ - 3.7.1.slim
+ - 3.7.1.slim.min
+ - 3.6.4
+ - 3.6.4.min
+ - 3.6.4.slim
+ - 3.6.4.slim.min
+ - 3.5.1
+ - 3.5.1.min
+ - 3.5.1.slim
+ - 3.5.1.slim.min
+ - 3.4.1
+ - 3.4.1.min
+ - 3.4.1.slim
+ - 3.4.1.slim.min
+ - 3.3.1
+ - 3.3.1.min
+ - 3.3.1.slim
+ - 3.3.1.slim.min
+ - 3.2.1
+ - 3.2.1.min
+ - 3.2.1.slim
+ - 3.2.1.slim.min
+ - 3.1.1
+ - 3.1.1.min
+ - 3.1.1.slim
+ - 3.1.1.slim.min
+ - 3.0.0
+ - 3.0.0.min
+ - 3.0.0.slim
+ - 3.0.0.slim.min
+ - 2.2.4
+ - 2.2.4.min
+ - 2.1.4
+ - 2.1.4.min
+ - 2.0.3
+ - 2.0.3.min
+ - 1.12.4
+ - 1.12.4.min
+ - 1.11.3
+ - 1.11.3.min
+ - 1.10.2
+ - 1.10.2.min
+ - 1.9.1
+ - 1.9.1.min
+ - 1.8.3
+ - 1.8.3.min
+ - 1.7.2
+ - 1.7.2.min
+ - 1.6.4
+ - 1.6.4.min
+ - 1.5.2
+ - 1.5.2.min
+ - 1.4.4
+ - 1.4.4.min
+ - 1.3.2
+ - 1.3.2.min
+ - 1.2.6
+ - 1.2.6.min
diff --git a/package-lock.json b/package-lock.json
index 3695130fc..201ee4dbe 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
"version": "3.1.13",
"license": "MIT",
"dependencies": {
- "jquery": ">=1.7.2"
+ "jquery": ">=1.2.6"
},
"devDependencies": {
"@swc/core": "^1.11.8",
diff --git a/package.json b/package.json
index 7c543e04e..7a4245df9 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
"test": "npm run build && npm run lint && npm run test:browser"
},
"dependencies": {
- "jquery": ">=1.7.2"
+ "jquery": ">=1.2.6"
},
"devDependencies": {
"@swc/core": "^1.11.8",
diff --git a/test/index.html b/test/index.html
index 1b24d558a..27d57bc2b 100644
--- a/test/index.html
+++ b/test/index.html
@@ -3,7 +3,7 @@
jQuery Mousewheel Unit Test
-
+
diff --git a/test/unit.js b/test/unit.js
index c9255a61e..29a2a1d6e 100644
--- a/test/unit.js
+++ b/test/unit.js
@@ -2,6 +2,9 @@
QUnit.module( "mousewheel" );
+var modernEvents = !!jQuery.fn.on,
+ on = modernEvents ? "on" : "bind";
+
function makeWheelEvent( deltaX, deltaY ) {
var event = window.document.createEvent( "Event" );
event.initEvent( "wheel", true, true );
@@ -16,7 +19,7 @@ QUnit.test( ".on() and .trigger()", function( assert ) {
var markup = jQuery( "wheelme
" ).appendTo( "body" );
- markup.on( "mousewheel", function( e ) {
+ markup[ on ]( "mousewheel", function( e ) {
assert.ok( true, "triggered a mousewheel event on " + e.target.innerText );
} );
markup.trigger( "mousewheel" );
@@ -46,7 +49,7 @@ QUnit.test( "natively triggered events", function( assert ) {
var markup = jQuery( "wheelme
" ).appendTo( "body" );
- markup.on( "mousewheel", function( e ) {
+ markup[ on ]( "mousewheel", function( e ) {
assert.ok( true, "triggered a mousewheel event on " + e.target.innerText );
assert.ok( "deltaX" in e, "got a deltaX in the event" );
assert.ok( !isNaN( parseFloat( e.deltaY ) ), "deltaY is a number: " + e.deltaY );
@@ -67,7 +70,7 @@ QUnit.test( "mouse event properties are passed through", function( assert ) {
var markup = jQuery( "wheelme
" ).appendTo( "body" );
- markup.on( "mousewheel", function( e ) {
+ markup[ on ]( "mousewheel", function( e ) {
var org = e.originalEvent;
assert.equal( org.clientX, 342, "original event has clientX: " + org.clientX );
assert.equal( org.clientY, 301, "original event has clientY: " + org.clientY );
From f9718a8ade6ae7dca5f15ff43bc860613da32e41 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Go=C5=82e=CC=A8biowski-Owczarek?=
Date: Fri, 14 Mar 2025 23:35:25 +0100
Subject: [PATCH 2/2] fixup! Restore jQuery 1.2 compatibility, test all
supported jQuery minor lines
---
.github/workflows/browserstack.yml | 2 +-
jquery.mousewheel.js | 12 ++---
jtr-isolate.yml | 77 ------------------------------
3 files changed, 6 insertions(+), 85 deletions(-)
delete mode 100644 jtr-isolate.yml
diff --git a/.github/workflows/browserstack.yml b/.github/workflows/browserstack.yml
index 8dbce4928..ad81b658a 100644
--- a/.github/workflows/browserstack.yml
+++ b/.github/workflows/browserstack.yml
@@ -61,6 +61,6 @@ jobs:
- name: Run tests
run: |
- npm run test:unit -- -v -c jtr-isolate.yml \
+ npm run test:unit -- -v --retries 3 --hard-retries 1 \
--browserstack "${{ matrix.BROWSER }}" \
--run-id ${{ github.run_id }}
diff --git a/jquery.mousewheel.js b/jquery.mousewheel.js
index c8edb3679..a1f5098de 100644
--- a/jquery.mousewheel.js
+++ b/jquery.mousewheel.js
@@ -212,25 +212,23 @@
// Add event and delta to the front of the arguments
args.unshift( event, delta, deltaX, deltaY );
- // Clearout lowestDelta after sometime to better
+ // Clear out lowestDelta after sometime to better
// handle multiple device types that give different
// a different lowestDelta
// Ex: trackpad = 3 and mouse wheel = 120
if ( nullLowestDeltaTimeout ) {
window.clearTimeout( nullLowestDeltaTimeout );
}
- nullLowestDeltaTimeout = window.setTimeout( nullLowestDelta, 200 );
+ nullLowestDeltaTimeout = window.setTimeout( function() {
+ lowestDelta = null;
+ }, 200 );
return ( $.event.dispatch || $.event.handle ).apply( this, args );
}
- function nullLowestDelta() {
- lowestDelta = null;
- }
-
function shouldAdjustOldDeltas( orgEvent, absDelta ) {
- // If this is an older event and the delta is divisable by 120,
+ // If this is an older event and the delta is divisible by 120,
// then we are assuming that the browser is treating this as an
// older mouse wheel event and that we should divide the deltas
// by 40 to try and get a more usable deltaFactor.
diff --git a/jtr-isolate.yml b/jtr-isolate.yml
deleted file mode 100644
index f6f8b3152..000000000
--- a/jtr-isolate.yml
+++ /dev/null
@@ -1,77 +0,0 @@
-version: 1
-
-base-url: /test/
-
-runs:
- jquery:
- - git
- - git.min
- - git.slim
- - git.slim.min
- - 3.x-git
- - 3.x-git.min
- - 3.x-git.slim
- - 3.x-git.slim.min
- - 3.7.1
- - 3.7.1.min
- - 3.7.1.slim
- - 3.7.1.slim.min
- - 3.6.4
- - 3.6.4.min
- - 3.6.4.slim
- - 3.6.4.slim.min
- - 3.5.1
- - 3.5.1.min
- - 3.5.1.slim
- - 3.5.1.slim.min
- - 3.4.1
- - 3.4.1.min
- - 3.4.1.slim
- - 3.4.1.slim.min
- - 3.3.1
- - 3.3.1.min
- - 3.3.1.slim
- - 3.3.1.slim.min
- - 3.2.1
- - 3.2.1.min
- - 3.2.1.slim
- - 3.2.1.slim.min
- - 3.1.1
- - 3.1.1.min
- - 3.1.1.slim
- - 3.1.1.slim.min
- - 3.0.0
- - 3.0.0.min
- - 3.0.0.slim
- - 3.0.0.slim.min
- - 2.2.4
- - 2.2.4.min
- - 2.1.4
- - 2.1.4.min
- - 2.0.3
- - 2.0.3.min
- - 1.12.4
- - 1.12.4.min
- - 1.11.3
- - 1.11.3.min
- - 1.10.2
- - 1.10.2.min
- - 1.9.1
- - 1.9.1.min
- - 1.8.3
- - 1.8.3.min
- - 1.7.2
- - 1.7.2.min
- - 1.6.4
- - 1.6.4.min
- - 1.5.2
- - 1.5.2.min
- - 1.4.4
- - 1.4.4.min
- - 1.3.2
- - 1.3.2.min
- - 1.2.6
- - 1.2.6.min
-
-retries: 3
-hard-retries: 1