diff --git a/.editorconfig b/.editorconfig index 0fe2cbbb..1114dd07 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/.github/workflows/browserstack.yml b/.github/workflows/browserstack.yml index 8dbce492..ad81b658 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/ChangeLog.md b/ChangeLog.md index 76752a1a..6be2717d 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 1ee0e326..a1f5098d 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) @@ -209,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/jquery.mousewheel.min.js b/jquery.mousewheel.min.js index c662bd46..a27391f2 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 deleted file mode 100644 index 86de6b64..00000000 --- a/jtr-isolate.yml +++ /dev/null @@ -1,31 +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 - - 2.2.4 - - 2.2.4.min - - 1.12.4 - - 1.12.4.min - - 1.7.2 - - 1.7.2.min - -retries: 3 -hard-retries: 1 diff --git a/jtr.yml b/jtr.yml new file mode 100644 index 00000000..5e50c776 --- /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 3695130f..201ee4db 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 7c543e04..7a4245df 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 1b24d558..27d57bc2 100644 --- a/test/index.html +++ b/test/index.html @@ -3,7 +3,7 @@ jQuery Mousewheel Unit Test - +