@@ -135,14 +135,23 @@ <h1>Study <span class="ac">Hub</span></h1>
135135 var empty = document . getElementById ( 'empty' ) ;
136136 var label = document . getElementById ( 'count-label' ) ;
137137
138+ function metaHtml ( c ) {
139+ if ( c . children ) { var k = c . children . length ; return '<span>' + k + ' area' + ( k === 1 ?'' :'s' ) + '</span>' ; }
140+ var r = ( c . resources || [ ] ) ; var ext = r . filter ( function ( x ) { return x . type === 'external' ; } ) . length ;
141+ return '<span>' + r . length + ' link' + ( r . length === 1 ?'' :'s' ) + '</span><span>' + ext + ' ext</span>' ;
142+ }
143+ function subtreeText ( c ) {
144+ var s = ( c . title || '' ) + ' ' + ( c . blurb || '' ) + ' ' + ( c . tag || '' ) ;
145+ ( c . resources || [ ] ) . forEach ( function ( r ) { s += ' ' + r . label ; } ) ;
146+ ( c . children || [ ] ) . forEach ( function ( ch ) { s += ' ' + subtreeText ( ch ) ; } ) ;
147+ return s . toLowerCase ( ) ;
148+ }
138149 function render ( list ) {
139150 grid . innerHTML = '' ;
140151 label . textContent = list . length + ( list . length === 1 ?' area' :' areas' ) ;
141152 if ( ! list . length ) { empty . style . display = 'block' ; return ; }
142153 empty . style . display = 'none' ;
143154 list . forEach ( function ( c ) {
144- var n = ( c . resources || [ ] ) . length ;
145- var ext = ( c . resources || [ ] ) . filter ( function ( r ) { return r . type === 'external' ; } ) . length ;
146155 var a = document . createElement ( 'a' ) ;
147156 a . className = 'card' ;
148157 a . href = 'category.html?id=' + encodeURIComponent ( c . id ) ;
@@ -152,7 +161,7 @@ <h1>Study <span class="ac">Hub</span></h1>
152161 '<div class="ctitle">' + esc ( c . title ) + ( c . tag ?'<span class="tag">' + esc ( c . tag ) + '</span>' :'' ) + '</div>' +
153162 ( c . blurb ?'<div class="cblurb">' + esc ( c . blurb ) + '</div>' :'' ) +
154163 '</div>' +
155- '<div class="cmeta"><span>' + n + ' link' + ( n === 1 ? '' : 's' ) + '</span><span>' + ext + ' ext</span> </div>'+
164+ '<div class="cmeta">' + metaHtml ( c ) + '</div>' +
156165 '<span class="arrow">›</span>' ;
157166 grid . appendChild ( a ) ;
158167 } ) ;
@@ -165,10 +174,7 @@ <h1>Study <span class="ac">Hub</span></h1>
165174 q . addEventListener ( 'input' , function ( ) {
166175 var t = q . value . trim ( ) . toLowerCase ( ) ;
167176 if ( ! t ) { render ( cats ) ; return ; }
168- render ( cats . filter ( function ( c ) {
169- return ( c . title + ' ' + ( c . blurb || '' ) + ' ' + ( c . tag || '' ) + ' ' +
170- ( c . resources || [ ] ) . map ( function ( r ) { return r . label ; } ) . join ( ' ' ) ) . toLowerCase ( ) . indexOf ( t ) > - 1 ;
171- } ) ) ;
177+ render ( cats . filter ( function ( c ) { return subtreeText ( c ) . indexOf ( t ) > - 1 ; } ) ) ;
172178 } ) ;
173179} ) ( ) ;
174180</ script >
0 commit comments