@@ -16,6 +16,13 @@ function TestHelpers() {
16
16
uiVersion = {
17
17
major : parseInt ( match [ 1 ] , 10 ) ,
18
18
minor : parseInt ( match [ 2 ] , 10 )
19
+ } ,
20
+ uiVersionBefore11 = ( uiVersion . major < 2 && uiVersion . minor < 11 ) ,
21
+ findEntry = function ( menu , indexOrCommand ) {
22
+ if ( typeof indexOrCommand === "number" ) {
23
+ return menu . children ( ":eq(" + indexOrCommand + ")" ) ;
24
+ }
25
+ return menu . find ( "li[data-command=" + indexOrCommand + "]" ) ;
19
26
} ;
20
27
21
28
return {
@@ -37,22 +44,32 @@ function TestHelpers() {
37
44
} ,
38
45
entryEvent : function ( menu , item , type ) {
39
46
lastItem = item ;
40
- if ( uiVersion . major < 2 && uiVersion . minor < 11 ) {
41
- menu . children ( ":eq(" + item + ")" ) . find ( "a:first" ) . trigger ( type ) ;
47
+ if ( uiVersionBefore11 ) {
48
+ findEntry ( menu , item ) . find ( "a:first" ) . trigger ( type ) ;
42
49
} else {
43
- menu . children ( ":eq(" + item + ")" ) . trigger ( type ) ;
50
+ findEntry ( menu , item ) . trigger ( type ) ;
44
51
}
45
52
} ,
46
53
click : function ( menu , item ) {
47
54
lastItem = item ;
48
- if ( uiVersion . major < 2 && uiVersion . minor < 11 ) {
49
- menu . children ( ":eq(" + item + ")" ) . find ( "a:first" ) . trigger ( "click" ) ;
55
+ if ( uiVersionBefore11 ) {
56
+ findEntry ( menu , item ) . find ( "a:first" ) . trigger ( "click" ) ;
50
57
} else {
51
- menu . children ( ":eq(" + item + ")" ) . trigger ( "click" ) ;
58
+ findEntry ( menu , item ) . trigger ( "click" ) ;
52
59
}
53
60
} ,
54
- entry : function ( menu , item ) {
55
- return menu . children ( ":eq(" + item + ")" ) ;
61
+ entry : findEntry ,
62
+ entryTitle : function ( menu , item ) {
63
+ // return the plain text (without sub-elements)
64
+ if ( uiVersionBefore11 ) {
65
+ return findEntry ( menu , item ) . find ( "a:first" ) . contents ( ) . filter ( function ( ) {
66
+ return this . nodeType === 3 ;
67
+ } ) [ 0 ] . nodeValue ;
68
+ } else {
69
+ return findEntry ( menu , item ) . contents ( ) . filter ( function ( ) {
70
+ return this . nodeType === 3 ;
71
+ } ) [ 0 ] . nodeValue ;
72
+ }
56
73
}
57
74
} ;
58
75
}
@@ -72,6 +89,7 @@ var th = new TestHelpers(),
72
89
logOutput = th . logOutput ,
73
90
click = th . click ,
74
91
entryEvent = th . entryEvent ,
92
+ entryTitle = th . entryTitle ,
75
93
entry = th . entry ,
76
94
lifecycle = {
77
95
setup : function ( ) {
@@ -394,6 +412,96 @@ asyncTest("Array menu", function() {
394
412
"Event sequence OK." ) ;
395
413
start ( ) ;
396
414
} , 500 ) ;
415
+ } ) ;
416
+
417
+ // ****************************************************************************
418
+
419
+ module ( "'beforeOpen' event" , lifecycle ) ;
420
+
421
+ asyncTest ( "modify on open" , function ( ) {
422
+ var $ctx , $popup ,
423
+ menu = [
424
+ { title : "Cut" , cmd : "cut" , uiIcon : "ui-icon-scissors" } ,
425
+ { title : "Copy" , cmd : "copy" , uiIcon : "ui-icon-copy" } ,
426
+ { title : "Paste" , cmd : "paste" , uiIcon : "ui-icon-clipboard" , disabled : true }
427
+ ] ;
428
+
429
+ expect ( 9 ) ;
430
+
431
+ $ ( "#container" ) . contextmenu ( {
432
+ delegate : ".hasmenu" ,
433
+ menu : menu ,
434
+ beforeOpen : function ( event , ui ) {
435
+ log ( "beforeOpen" ) ;
436
+ $ctx
437
+ . contextmenu ( "setEntry" , "cut" , "Cut - changed" )
438
+ . contextmenu ( "setEntry" , "copy" , { title : "Copy - changed" , cmd : "copy2" } )
439
+ . contextmenu ( "setEntry" , "paste" , {
440
+ title : "Paste - changed" , cmd : "paste" ,
441
+ children : [
442
+ { title : "Sub 1" , cmd : "sub_1" } ,
443
+ { title : "Sub 2" , cmd : "sub_2" , disabled : true }
444
+ ]
445
+ } ) ;
446
+ } ,
447
+ open : function ( event ) {
448
+ log ( "open" ) ;
449
+ equal ( entryTitle ( $popup , "cut" ) , "Cut - changed" ,
450
+ "setEntry(string)" ) ;
451
+ equal ( entry ( $popup , "copy" ) . length , 0 ,
452
+ "setEntry(object) change command id" ) ;
453
+ equal ( entryTitle ( $popup , "copy2" ) , "Copy - changed" ,
454
+ "setEntry(object) set title" ) ;
455
+ equal ( entryTitle ( $popup , "paste" ) , "Paste - changed" ,
456
+ "setEntry(object) set nested title" ) ;
457
+ equal ( entryTitle ( $popup , "sub_1" ) , "Sub 1" ,
458
+ "setEntry(object) created nested entry" ) ;
459
+ ok ( entry ( $popup , "sub_2" ) . hasClass ( "ui-state-disabled" ) ,
460
+ "setEntry(object) created nested disabled entry" ) ;
461
+ // ok( entry($popup, 2).hasClass("ui-state-disabled"),
462
+ // "open: Entry is disabled" );
463
+
464
+ // ok( $ctx.contextmenu("isOpen"),
465
+ // "isOpen() true in open event");
466
+
467
+ // ok( entry($popup, 0).is(":visible"),
468
+ // "beforeOpen: Entry 0 is visible" );
469
+ // ok( entry($popup, 0).hasClass("ui-state-disabled"),
470
+ // "beforeOpen: Entry 0 is disabled: enableEntry(false) worked" );
471
+
472
+ // ok( entry($popup, 1).is(":hidden"),
473
+ // "beforeOpen: Entry 1 is hidden: showEntry(false) worked" );
474
+ // ok( !entry($popup, 1).hasClass("ui-state-disabled"),
475
+ // "beforeOpen: Entry 1 is enabled" );
476
+
477
+ setTimeout ( function ( ) {
478
+ click ( $popup , "cut" ) ;
479
+ } , 10 ) ;
480
+ } ,
481
+ select : function ( event , ui ) {
482
+ var t = ui . item ? $ ( ui . item ) . attr ( "data-command" ) : ui . item ;
483
+ log ( "select(" + t + ")" ) ;
484
+ equal ( ui . cmd , "cut" , "select: ui.cmd is set" ) ;
485
+ equal ( ui . target . text ( ) , "AAA" , "select: ui.target is set" ) ;
486
+ } ,
487
+ close : function ( event ) {
488
+ log ( "close" ) ;
489
+ }
397
490
} ) ;
398
491
492
+ $ctx = $ ( ":moogle-contextmenu" ) ;
493
+ $popup = $ctx . contextmenu ( "getMenu" ) ;
494
+
495
+ log ( "open()" ) ;
496
+ $ctx . contextmenu ( "open" , $ ( "span.hasmenu:first" ) ) ;
497
+ log ( "after open()" ) ;
498
+
499
+ setTimeout ( function ( ) {
500
+ equal ( logOutput ( ) , "open(),beforeOpen,after open(),open,select(cut),close" ,
501
+ "Event sequence OK." ) ;
502
+ start ( ) ;
503
+ } , 500 ) ;
504
+
505
+ } ) ;
506
+
399
507
} ) ;
0 commit comments