Menu: Account for scrollbars in jQuery 3.2

jQuery >=3.2 doesn't include scrollbars in `.height()`, this commit switches
it to `.innerHeight()` which does so in jQuery >=3.3. In  jQuery 3.2 it doesn't
either so include scrollbars in innerHeight, add it back.

Using `.innerHeight()` instead of `.height()` should be fine as menu doesn't
define padding styles.

Closes gh-1929
This commit is contained in:
Michał Gołębiowski-Owczarek 2020-07-23 15:55:18 +02:00 committed by GitHub
parent 5e2fc44c0c
commit 1712b9bbb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -626,7 +626,13 @@ return $.widget( "ui.menu", {
} }
if ( this._hasScroll() ) { if ( this._hasScroll() ) {
base = this.active.offset().top; base = this.active.offset().top;
height = this.element.height(); height = this.element.innerHeight();
// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.
if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) {
height += this.element[ 0 ].offsetHeight - this.element.outerHeight();
}
this.active.nextAll( ".ui-menu-item" ).each( function() { this.active.nextAll( ".ui-menu-item" ).each( function() {
item = $( this ); item = $( this );
return item.offset().top - base - height < 0; return item.offset().top - base - height < 0;
@ -650,7 +656,13 @@ return $.widget( "ui.menu", {
} }
if ( this._hasScroll() ) { if ( this._hasScroll() ) {
base = this.active.offset().top; base = this.active.offset().top;
height = this.element.height(); height = this.element.innerHeight();
// jQuery 3.2 doesn't include scrollbars in innerHeight, add it back.
if ( $.fn.jquery.indexOf( "3.2." ) === 0 ) {
height += this.element[ 0 ].offsetHeight - this.element.outerHeight();
}
this.active.prevAll( ".ui-menu-item" ).each( function() { this.active.prevAll( ".ui-menu-item" ).each( function() {
item = $( this ); item = $( this );
return item.offset().top - base + height > 0; return item.offset().top - base + height > 0;