Skip to content

Commit 777b068

Browse files
committed
Accordion: Rewrite all :even usage to .even()
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.
1 parent 52aff3c commit 777b068

File tree

5 files changed

+51
-7
lines changed

5 files changed

+51
-7
lines changed

tests/lib/bootstrap.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,11 @@ function migrateUrl() {
172172
}
173173
}
174174

175+
var jQueryVersion = parseUrl().jquery;
176+
175177
// Load the jQuery fixes, if necessary
176-
if ( parseFloat( parseUrl().jquery ) < 3 ) {
178+
if ( !jQueryVersion ||
179+
( jQueryVersion.indexOf( "git" ) === -1 && parseFloat( jQueryVersion ) < 4 ) ) {
177180
modules.unshift( "ui/jquery-1-7" );
178181
}
179182

tests/unit/accordion/common.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ common.testWidget( "accordion", {
1515
collapsible: false,
1616
disabled: false,
1717
event: "click",
18-
header: "> li > :first-child, > :not(li):even",
18+
header: function( elem ) {
19+
return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() );
20+
},
1921
heightStyle: "auto",
2022
icons: {
2123
"activeHeader": "ui-icon-triangle-1-s",

tests/unit/accordion/options.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,15 +376,15 @@ QUnit.test( "{ event: custom }", function( assert ) {
376376
QUnit.test( "{ header: default }", function( assert ) {
377377
assert.expect( 2 );
378378

379-
// Default: > li > :first-child,> :not(li):even
380-
// > :not(li):even
379+
// Default: elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() )
380+
// elem.find( "> :not(li)" ).even()
381381
state( assert, $( "#list1" ).accordion(), 1, 0, 0 );
382382

383383
// > li > :first-child
384384
state( assert, $( "#navigation" ).accordion(), 1, 0, 0 );
385385
} );
386386

387-
QUnit.test( "{ header: custom }", function( assert ) {
387+
QUnit.test( "{ header: customString }", function( assert ) {
388388
assert.expect( 6 );
389389
var element = $( "#navigationWrapper" ).accordion( {
390390
header: "h2"
@@ -398,6 +398,22 @@ QUnit.test( "{ header: custom }", function( assert ) {
398398
state( assert, element, 0, 0, 1 );
399399
} );
400400

401+
QUnit.test( "{ header: customFunction }", function( assert ) {
402+
assert.expect( 6 );
403+
var element = $( "#navigationWrapper" ).accordion( {
404+
header: function( elem ) {
405+
return elem.find( "h2" );
406+
}
407+
} );
408+
element.find( "h2" ).each( function() {
409+
assert.hasClasses( this, "ui-accordion-header" );
410+
} );
411+
assert.equal( element.find( ".ui-accordion-header" ).length, 3 );
412+
state( assert, element, 1, 0, 0 );
413+
element.accordion( "option", "active", 2 );
414+
state( assert, element, 0, 0, 1 );
415+
} );
416+
401417
QUnit.test( "{ heightStyle: 'auto' }", function( assert ) {
402418
assert.expect( 3 );
403419
var element = $( "#navigation" ).accordion( { heightStyle: "auto" } );

ui/jquery-1-7.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,21 @@ if ( !$.uniqueSort ) {
9898
$.uniqueSort = $.unique;
9999
}
100100

101+
// Support: jQuery 3.4.x or older
102+
// These methods have been defined in jQuery 3.5.0.
103+
if ( !$.fn.even || !$.fn.odd ) {
104+
$.fn.extend( {
105+
even: function() {
106+
return this.filter( function( i ) {
107+
return i % 2 === 0;
108+
} );
109+
},
110+
odd: function() {
111+
return this.filter( function( i ) {
112+
return i % 2 === 1;
113+
} );
114+
}
115+
} );
116+
}
117+
101118
} ) );

ui/widgets/accordion.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ return $.widget( "ui.accordion", {
4848
},
4949
collapsible: false,
5050
event: "click",
51-
header: "> li > :first-child, > :not(li):even",
51+
header: function( elem ) {
52+
return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() );
53+
},
5254
heightStyle: "auto",
5355
icons: {
5456
activeHeader: "ui-icon-triangle-1-s",
@@ -279,7 +281,11 @@ return $.widget( "ui.accordion", {
279281
var prevHeaders = this.headers,
280282
prevPanels = this.panels;
281283

282-
this.headers = this.element.find( this.options.header );
284+
if ( typeof this.options.header === "function" ) {
285+
this.headers = this.options.header( this.element );
286+
} else {
287+
this.headers = this.element.find( this.options.header );
288+
}
283289
this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed",
284290
"ui-state-default" );
285291

0 commit comments

Comments
 (0)