@@ -284,6 +284,17 @@ $.widget( "ui.accordion", {
284
284
return ;
285
285
}
286
286
287
+ // allow the activation to be canceled
288
+ var eventData = {
289
+ oldHeader : this . active ,
290
+ oldContent : this . active . next ( ) ,
291
+ newHeader : $ ( ) ,
292
+ newContent : $ ( )
293
+ } ;
294
+ if ( this . _trigger ( "beforeActivate" , null , eventData ) === false ) {
295
+ return ;
296
+ }
297
+
287
298
this . active
288
299
. removeClass ( "ui-state-active ui-corner-top" )
289
300
. addClass ( "ui-state-default ui-corner-all" )
@@ -294,24 +305,34 @@ $.widget( "ui.accordion", {
294
305
var toHide = this . active . next ( ) ,
295
306
data = {
296
307
options : this . options ,
297
- newHeader : $ ( [ ] ) ,
308
+ newHeader : $ ( ) ,
298
309
oldHeader : this . active ,
299
- newContent : $ ( [ ] ) ,
310
+ newContent : $ ( ) ,
300
311
oldContent : toHide
301
312
} ,
302
- toShow = ( this . active = $ ( [ ] ) ) ;
313
+ toShow = ( this . active = $ ( ) ) ;
303
314
this . _toggle ( toShow , toHide , data ) ;
304
315
} ,
305
316
306
317
// TODO: add tests/docs for negative values in 2.0 (#6854)
307
318
_findActive : function ( selector ) {
308
- return typeof selector === "number" ? this . headers . eq ( selector ) : $ ( [ ] ) ;
319
+ return typeof selector === "number" ? this . headers . eq ( selector ) : $ ( ) ;
309
320
} ,
310
321
311
322
_eventHandler : function ( event ) {
312
323
var options = this . options ,
324
+ active = this . active ,
313
325
clicked = $ ( event . currentTarget ) ,
314
- clickedIsActive = clicked [ 0 ] === this . active [ 0 ] ;
326
+ clickedIsActive = clicked [ 0 ] === active [ 0 ] ,
327
+ collapsing = clickedIsActive && options . collapsible ,
328
+ toShow = clicked . next ( ) ,
329
+ toHide = active . next ( ) ,
330
+ eventData = {
331
+ oldHeader : active ,
332
+ oldContent : toHide ,
333
+ newHeader : collapsing ? $ ( ) : clicked ,
334
+ newContent : collapsing ? $ ( ) : toShow
335
+ } ;
315
336
316
337
event . preventDefault ( ) ;
317
338
@@ -324,26 +345,26 @@ $.widget( "ui.accordion", {
324
345
return ;
325
346
}
326
347
327
- options . active = options . collapsible && clickedIsActive ?
328
- false :
329
- this . headers . index ( clicked ) ;
348
+ // allow the activation to be canceled
349
+ if ( this . _trigger ( "beforeActivate" , null , eventData ) === false ) {
350
+ return ;
351
+ }
352
+
353
+ options . active = collapsing ? false : this . headers . index ( clicked ) ;
330
354
331
355
// find elements to show and hide
332
- var active = this . active ,
333
- toShow = clicked . next ( ) ,
334
- toHide = this . active . next ( ) ,
335
- data = {
356
+ var data = {
336
357
options : options ,
337
- newHeader : clickedIsActive && options . collapsible ? $ ( [ ] ) : clicked ,
338
- oldHeader : this . active ,
339
- newContent : clickedIsActive && options . collapsible ? $ ( [ ] ) : toShow ,
358
+ newHeader : collapsing ? $ ( ) : clicked ,
359
+ oldHeader : active ,
360
+ newContent : collapsing ? $ ( ) : toShow ,
340
361
oldContent : toHide
341
362
} ,
342
- down = this . headers . index ( this . active [ 0 ] ) > this . headers . index ( clicked [ 0 ] ) ;
363
+ down = this . headers . index ( active [ 0 ] ) > this . headers . index ( clicked [ 0 ] ) ;
343
364
344
365
// when the call to ._toggle() comes after the class changes
345
366
// it causes a very odd bug in IE 8 (see #6720)
346
- this . active = clickedIsActive ? $ ( [ ] ) : clicked ;
367
+ this . active = clickedIsActive ? $ ( ) : clicked ;
347
368
this . _toggle ( toShow , toHide , data , clickedIsActive , down ) ;
348
369
349
370
// switch classes
@@ -381,8 +402,6 @@ $.widget( "ui.accordion", {
381
402
return self . _completed . apply ( self , arguments ) ;
382
403
} ;
383
404
384
- self . _trigger ( "beforeActivate" , null , self . data ) ;
385
-
386
405
// count elements to animate
387
406
self . running = toHide . size ( ) === 0 ? toShow . size ( ) : toHide . size ( ) ;
388
407
@@ -391,7 +410,7 @@ $.widget( "ui.accordion", {
391
410
392
411
if ( options . collapsible && clickedIsActive ) {
393
412
animOptions = {
394
- toShow : $ ( [ ] ) ,
413
+ toShow : $ ( ) ,
395
414
toHide : toHide ,
396
415
complete : complete ,
397
416
down : down ,
0 commit comments