@@ -181,7 +181,17 @@ var // currently active contextMenu trigger
181
181
// default callback
182
182
callback : null ,
183
183
// list of contextMenu items
184
- items : { }
184
+ items : { } ,
185
+ domEventTypes : function ( ) {
186
+ var result = [ ] ;
187
+ var domObj = $ ( 'div' ) . get ( 0 ) ;
188
+ $ . each ( domObj , function ( key , val ) {
189
+ if ( key . slice ( 0 , 2 ) === 'on' ) {
190
+ result . push ( key . slice ( 2 ) ) ;
191
+ }
192
+ } ) ;
193
+ return result ;
194
+ }
185
195
} ,
186
196
// mouse position for hover activation
187
197
hoveract = {
@@ -1530,7 +1540,21 @@ function menuChildren(items, $children, counter) {
1530
1540
* <command>, <menuitem>, <hr>, <span>, <p> <input [text, radio, checkbox]>, <textarea>, <select> and of course <menu>.
1531
1541
* Everything else will be imported as an html node, which is not interfaced with contextMenu.
1532
1542
*/
1533
-
1543
+
1544
+
1545
+ var createTriggerEvent = function ( eventname ) {
1546
+ return function ( ) {
1547
+ $node . trigger ( eventname ) ;
1548
+ } ;
1549
+ } ;
1550
+ var get_events = function ( ) {
1551
+ var events = { } ,
1552
+ to_handle = $ . contextMenu . defaults . domEventTypes ;
1553
+ $ . each ( to_handle , function ( ) {
1554
+ events [ this ] = createTriggerEvent ( this ) ;
1555
+ } ) ;
1556
+ return events ;
1557
+ } ;
1534
1558
// http://www.whatwg.org/specs/web-apps/current-work/multipage/commands.html#concept-command
1535
1559
switch ( nodeName ) {
1536
1560
// http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#the-menu-element
@@ -1546,7 +1570,7 @@ function menuChildren(items, $children, counter) {
1546
1570
item = {
1547
1571
name : $node . text ( ) ,
1548
1572
disabled : ! ! $node . attr ( 'disabled' ) ,
1549
- callback : ( function ( ) { return function ( ) { $node . click ( ) ; } ; } ) ( )
1573
+ callback : createTriggerEvent ( ' click' )
1550
1574
} ;
1551
1575
break ;
1552
1576
@@ -1562,7 +1586,7 @@ function menuChildren(items, $children, counter) {
1562
1586
name : $node . attr ( 'label' ) ,
1563
1587
disabled : ! ! $node . attr ( 'disabled' ) ,
1564
1588
icon : $node . attr ( 'icon' ) ,
1565
- callback : ( function ( ) { return function ( ) { $node . click ( ) ; } ; } ) ( )
1589
+ callback : createTriggerEvent ( ' click' )
1566
1590
} ;
1567
1591
break ;
1568
1592
@@ -1571,7 +1595,8 @@ function menuChildren(items, $children, counter) {
1571
1595
type : 'checkbox' ,
1572
1596
disabled : ! ! $node . attr ( 'disabled' ) ,
1573
1597
name : $node . attr ( 'label' ) ,
1574
- selected : ! ! $node . attr ( 'checked' )
1598
+ selected : ! ! $node . attr ( 'checked' ) ,
1599
+ events : get_events ( )
1575
1600
} ;
1576
1601
break ;
1577
1602
case 'radio' :
@@ -1581,7 +1606,8 @@ function menuChildren(items, $children, counter) {
1581
1606
name : $node . attr ( 'label' ) ,
1582
1607
radio : $node . attr ( 'radiogroup' ) ,
1583
1608
value : $node . attr ( 'id' ) ,
1584
- selected : ! ! $node . attr ( 'checked' )
1609
+ selected : ! ! $node . attr ( 'checked' ) ,
1610
+ events : get_events ( )
1585
1611
} ;
1586
1612
break ;
1587
1613
@@ -1601,7 +1627,8 @@ function menuChildren(items, $children, counter) {
1601
1627
type : 'text' ,
1602
1628
name : label || inputLabel ( node ) ,
1603
1629
disabled : ! ! $node . attr ( 'disabled' ) ,
1604
- value : $node . val ( )
1630
+ value : $node . val ( ) ,
1631
+ events : get_events ( )
1605
1632
} ;
1606
1633
break ;
1607
1634
@@ -1610,7 +1637,8 @@ function menuChildren(items, $children, counter) {
1610
1637
type : 'checkbox' ,
1611
1638
name : label || inputLabel ( node ) ,
1612
1639
disabled : ! ! $node . attr ( 'disabled' ) ,
1613
- selected : ! ! $node . attr ( 'checked' )
1640
+ selected : ! ! $node . attr ( 'checked' ) ,
1641
+ events : get_events ( )
1614
1642
} ;
1615
1643
break ;
1616
1644
@@ -1621,7 +1649,8 @@ function menuChildren(items, $children, counter) {
1621
1649
disabled : ! ! $node . attr ( 'disabled' ) ,
1622
1650
radio : ! ! $node . attr ( 'name' ) ,
1623
1651
value : $node . val ( ) ,
1624
- selected : ! ! $node . attr ( 'checked' )
1652
+ selected : ! ! $node . attr ( 'checked' ) ,
1653
+ events : get_events ( )
1625
1654
} ;
1626
1655
break ;
1627
1656
@@ -1637,7 +1666,8 @@ function menuChildren(items, $children, counter) {
1637
1666
name : label || inputLabel ( node ) ,
1638
1667
disabled : ! ! $node . attr ( 'disabled' ) ,
1639
1668
selected : $node . val ( ) ,
1640
- options : { }
1669
+ options : { } ,
1670
+ events : get_events ( )
1641
1671
} ;
1642
1672
$node . children ( ) . each ( function ( ) {
1643
1673
item . options [ this . value ] = $ ( this ) . text ( ) ;
@@ -1649,7 +1679,8 @@ function menuChildren(items, $children, counter) {
1649
1679
type : 'textarea' ,
1650
1680
name : label || inputLabel ( node ) ,
1651
1681
disabled : ! ! $node . attr ( 'disabled' ) ,
1652
- value : $node . val ( )
1682
+ value : $node . val ( ) ,
1683
+ events : get_events ( )
1653
1684
} ;
1654
1685
break ;
1655
1686
0 commit comments