@@ -670,7 +670,50 @@ define(function (require, exports, module) {
670670 // install scroller shadows
671671 ViewUtils . addScrollerShadow ( _projectTree . get ( 0 ) ) ;
672672
673+ var findEventHandler = function ( type , namespace , selector ) {
674+ var events = $ . _data ( _projectTree [ 0 ] , "events" ) ,
675+ eventsForType = events ? events [ type ] : null ,
676+ event = eventsForType ? _ . find ( eventsForType , function ( e ) {
677+ return e . namespace === namespace && e . selector === selector ;
678+ } ) : null ,
679+ eventHandler = event ? event . handler : null ;
680+ if ( ! eventHandler ) {
681+ console . error ( type + "." + namespace + " " + selector + " handler not found!" ) ;
682+ }
683+ return eventHandler ;
684+ } ;
685+ var createCustomHandler = function ( originalHandler ) {
686+ return function ( event ) {
687+ var $node = $ ( event . target ) . parent ( "li" ) ,
688+ methodName ;
689+ if ( event . ctrlKey || event . metaKey ) {
690+ if ( event . altKey ) {
691+ // collapse subtree
692+ // note: expanding using open_all is a bad idea due to poor performance
693+ methodName = $node . is ( ".jstree-open" ) ? "close_all" : "open_node" ;
694+ _projectTree . jstree ( methodName , $node ) ;
695+ return ;
696+ } else {
697+ // toggle siblings
698+ methodName = $node . is ( ".jstree-open" ) ? "close_node" : "open_node" ;
699+ $node . parent ( ) . children ( "li" ) . each ( function ( ) {
700+ _projectTree . jstree ( methodName , $ ( this ) ) ;
701+ } ) ;
702+ return ;
703+ }
704+ }
705+ // original behaviour
706+ originalHandler . apply ( this , arguments ) ;
707+ } ;
708+ } ;
709+ var originalHrefHandler = findEventHandler ( "click" , "jstree" , "a" ) ;
710+ var originalInsHandler = findEventHandler ( "click" , "jstree" , "li > ins" ) ;
711+
673712 _projectTree
713+ . off ( "click.jstree" , "a" )
714+ . on ( "click.jstree" , "a" , createCustomHandler ( originalHrefHandler ) )
715+ . off ( "click.jstree" , "li > ins" )
716+ . on ( "click.jstree" , "li > ins" , createCustomHandler ( originalInsHandler ) )
674717 . unbind ( "dblclick.jstree" )
675718 . bind ( "dblclick.jstree" , function ( event ) {
676719 var entry = $ ( event . target ) . closest ( "li" ) . data ( "entry" ) ;
0 commit comments