From 0c860b0d92f9959f6747f8c02e9671eb2fc561aa Mon Sep 17 00:00:00 2001 From: Michał Gołębiowski-Owczarek Date: Wed, 22 Jan 2020 16:44:34 +0100 Subject: All: Remove usage of jQuery positional selectors jQuery positional selectors () have been deprecated in [jQuery 3.4.0](https://blog.jquery.com/2019/04/10/jquery-3-4-0-released/) and they'll be removed in jQuery 4.0.0. This PR removes their usage. Most of the changes were possible without changing public API. However, dropping `:even` usage required a change to the [`header` option](https://api.jqueryui.com/accordion/#option-header) of the accordion widget. I made it an optional function; this will need to be documented. The polyfill for `.even()` & `.odd()` is added for jQuery <3.5.0. There was no usage of the :odd selector in the code but the `.odd()` method is also polyfilled for completeness. Closes gh-1904 --- ui/jquery-1-7.js | 17 +++++++++++++++++ ui/widgets/accordion.js | 10 ++++++++-- ui/widgets/datepicker.js | 2 +- ui/widgets/dialog.js | 4 ++-- 4 files changed, 28 insertions(+), 5 deletions(-) (limited to 'ui') diff --git a/ui/jquery-1-7.js b/ui/jquery-1-7.js index 5e7907a15..3d0870f7c 100644 --- a/ui/jquery-1-7.js +++ b/ui/jquery-1-7.js @@ -98,4 +98,21 @@ if ( !$.uniqueSort ) { $.uniqueSort = $.unique; } +// Support: jQuery 3.4.x or older +// These methods have been defined in jQuery 3.5.0. +if ( !$.fn.even || !$.fn.odd ) { + $.fn.extend( { + even: function() { + return this.filter( function( i ) { + return i % 2 === 0; + } ); + }, + odd: function() { + return this.filter( function( i ) { + return i % 2 === 1; + } ); + } + } ); +} + } ) ); diff --git a/ui/widgets/accordion.js b/ui/widgets/accordion.js index 530d73543..59a6a7315 100644 --- a/ui/widgets/accordion.js +++ b/ui/widgets/accordion.js @@ -48,7 +48,9 @@ return $.widget( "ui.accordion", { }, collapsible: false, event: "click", - header: "> li > :first-child, > :not(li):even", + header: function( elem ) { + return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() ); + }, heightStyle: "auto", icons: { activeHeader: "ui-icon-triangle-1-s", @@ -279,7 +281,11 @@ return $.widget( "ui.accordion", { var prevHeaders = this.headers, prevPanels = this.panels; - this.headers = this.element.find( this.options.header ); + if ( typeof this.options.header === "function" ) { + this.headers = this.options.header( this.element ); + } else { + this.headers = this.element.find( this.options.header ); + } this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed", "ui-state-default" ); diff --git a/ui/widgets/datepicker.js b/ui/widgets/datepicker.js index c777a4b0e..5e6321e1d 100644 --- a/ui/widgets/datepicker.js +++ b/ui/widgets/datepicker.js @@ -858,7 +858,7 @@ $.extend( Datepicker.prototype, { //assure that inst.yearshtml didn't change. if ( origyearshtml === inst.yearshtml && inst.yearshtml ) { - inst.dpDiv.find( "select.ui-datepicker-year:first" ).replaceWith( inst.yearshtml ); + inst.dpDiv.find( "select.ui-datepicker-year" ).first().replaceWith( inst.yearshtml ); } origyearshtml = inst.yearshtml = null; }, 0 ); diff --git a/ui/widgets/dialog.js b/ui/widgets/dialog.js index e4798e0d7..c9feee48a 100644 --- a/ui/widgets/dialog.js +++ b/ui/widgets/dialog.js @@ -369,8 +369,8 @@ $.widget( "ui.dialog", { return; } var tabbables = this.uiDialog.find( ":tabbable" ), - first = tabbables.filter( ":first" ), - last = tabbables.filter( ":last" ); + first = tabbables.first(), + last = tabbables.last(); if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) && !event.shiftKey ) { -- cgit v1.2.3