@@ -46,6 +46,17 @@ function toggleChildrenSelected (e) {
4646 updateSelection ( ) ;
4747}
4848
49+ function getFolded ( initialNode ) {
50+ let node = initialNode ;
51+ do {
52+ if ( ! node . parent )
53+ return initialNode ;
54+ if ( node . parent . children . indexOf ( node ) === - 1 )
55+ return node . parent ;
56+ } while ( node = node . parent ) ;
57+ return initialNode ;
58+ }
59+
4960function insertRows ( data , table , selected ) {
5061 let columns = getOption ( "tabularColumns" ) ;
5162 for ( let i = 0 ; i < data . length ; i ++ ) {
@@ -61,24 +72,32 @@ function insertRows (data, table, selected) {
6172 if ( columns [ col ] . class )
6273 cell . className = val ;
6374 }
75+ let cell = row . insertCell ( columns . length ) ;
6476 let ee = document . createElement ( "i" ) ,
6577 ei = document . createElement ( "i" ) ,
66- sel = false ,
67- cell = row . insertCell ( columns . length ) ;
68- for ( let o of node . children ) { if ( o . selected ) { sel = true ; break ; } }
69- ei . className = `icon-${ sel ? "filled" : "outline" } ` ;
70- ei . setAttribute ( "title" , `${ sel ? "Deselect" : "Select" } children` ) ;
71- ei . addEventListener ( "click" , toggleChildrenSelected . bind ( node ) ) ;
72- ee . className = `icon-${ selected ? "close" : "add" } ` ;
73- ee . setAttribute ( "title" , `${ selected ? "Remove from" : "Add to" } selection` ) ;
74- ee . addEventListener ( "click" , switchSelected . bind ( node ) ) ;
75- cell . appendChild ( ee ) ;
76- if ( node . children . length ) cell . appendChild ( ei ) ;
77- row . addEventListener ( "mouseover" , ( ) =>
78- node . element && node . element . classList . add ( "highlighted" ) ) ;
79- row . addEventListener ( "mouseout" , ( ) =>
80- node . element && node . element . classList . remove ( "highlighted" ) ) ;
81- row . addEventListener ( "click" , ( ) => node . element && focusOn ( node . x , node . y ) ) ;
78+ sel = false ;
79+ if ( selected !== null ) {
80+ for ( let o of node . children ) {
81+ if ( o . selected ) {
82+ sel = true ;
83+ break ;
84+ }
85+ }
86+ ei . className = `icon-${ sel ? "filled" : "outline" } ` ;
87+ ei . setAttribute ( "title" , `${ sel ? "Deselect" : "Select" } children` ) ;
88+ ei . addEventListener ( "click" , toggleChildrenSelected . bind ( node ) ) ;
89+ ee . className = `icon-${ selected ? "close" : "add" } ` ;
90+ ee . setAttribute ( "title" , `${ selected ? "Remove from" : "Add to" } selection` ) ;
91+ ee . addEventListener ( "click" , switchSelected . bind ( node ) ) ;
92+ cell . appendChild ( ee ) ;
93+ if ( node . children . length ) cell . appendChild ( ei ) ;
94+ row . addEventListener ( "mouseover" , ( ) => node . element . classList . add ( "highlighted" ) ) ;
95+ row . addEventListener ( "mouseout" , ( ) => node . element . classList . remove ( "highlighted" ) ) ;
96+ }
97+ row . addEventListener ( "click" , ( ) => {
98+ let n = getFolded ( node ) ;
99+ focusOn ( n . x , n . y ) ;
100+ } ) ;
82101 }
83102}
84103
@@ -101,7 +120,7 @@ function updateHidden () {
101120 table = document . querySelector ( "#tabular-hidden" ) ;
102121 table . textContent = "" ;
103122 if ( getOption ( "tabularShowHiddenNodes" ) )
104- insertRows ( data , table , false ) ;
123+ insertRows ( data , table , null ) ;
105124}
106125
107126function updateAll ( ) {
0 commit comments