@@ -6,6 +6,8 @@ $(document).ready(function () {
66 $ ( "#browseWorkspace" ) . click ( onBrowseWorkspaceHandler ) ;
77 $ ( "#loadModulesBtn" ) . click ( onLoadModulesHandler ) ;
88 $ ( "#importProjectBtn" ) . click ( onImportProjectHandler ) ;
9+ $ ( "input#filterModules" ) . on ( "input" , onFilterChange ) ;
10+ $ ( "#resetFilter" ) . click ( onResetFilter ) ;
911} ) ;
1012
1113function onWindowMessageHandler ( event ) {
@@ -60,8 +62,30 @@ function onImportProjectHandler () {
6062 modules : modules
6163 } ) ;
6264}
65+
66+ function onFilterChange ( ) {
67+ const topLevel = $ ( "div#moduleList > ul" ) ;
68+ let filter = $ ( "input#filterModules" ) . val ( ) . toLowerCase ( ) . trim ( ) ;
69+ if ( filter && filter . length > 0 ) {
70+ filterModules ( topLevel , filter ) ;
71+ } else {
72+ resetFilteredModules ( ) ;
73+ }
74+ }
75+
76+ function onResetFilter ( ) {
77+ clearFilter ( ) ;
78+ resetFilteredModules ( ) ;
79+ }
6380//-----------------------------------------
6481
82+ function resetFilteredModules ( ) {
83+ const topLevel = $ ( "div#moduleList > ul" ) ;
84+ topLevel . find ( "li" ) . each ( function ( ) {
85+ $ ( this ) . removeClass ( "filtered-out" ) ;
86+ } ) ;
87+ }
88+
6589function onSetWorkspaceHandler ( message ) {
6690 console . log ( 'on set workspace' ) ;
6791 clearModules ( ) ;
@@ -72,9 +96,20 @@ function disableImportBtn (enabled) {
7296 $ ( "#importProjectBtn" ) . attr ( "disabled" , enabled ) ;
7397}
7498
99+ function disableFilterTxt ( enabled ) {
100+ $ ( "input#filterModules" ) . attr ( "disabled" , enabled ) ;
101+ $ ( "#resetFilter" ) . attr ( "disabled" , enabled ) ;
102+ }
103+
104+ function clearFilter ( ) {
105+ $ ( "input#filterModules" ) . val ( "" ) ;
106+ }
107+
75108function clearModules ( ) {
76109 $ ( "#moduleList" ) . empty ( ) ;
77110 disableImportBtn ( true ) ;
111+ disableFilterTxt ( true ) ;
112+ clearFilter ( ) ;
78113}
79114
80115function setLocation ( elementId , message ) {
@@ -98,10 +133,11 @@ function listModules (message) {
98133 if ( modules !== null ) {
99134 if ( modules . length > 0 ) {
100135 disableImportBtn ( false ) ;
101- }
102- const topList = $ ( "<ul></ul>" ) . appendTo ( "div#moduleList" ) ;
103- for ( i = 0 ; i < modules . length ; i ++ ) {
104- addNode ( modules [ i ] , topList ) ;
136+ disableFilterTxt ( false ) ;
137+ const topList = $ ( "<ul></ul>" ) . appendTo ( "div#moduleList" ) ;
138+ for ( i = 0 ; i < modules . length ; i ++ ) {
139+ addNode ( modules [ i ] , topList ) ;
140+ }
105141 }
106142 }
107143}
@@ -143,6 +179,27 @@ function addNode (module, parentNode) {
143179 }
144180}
145181
182+ function filterModules ( parentNode , filter ) {
183+ let filtered = false ;
184+ parentNode . children ( "li" ) . each ( function ( ) {
185+ const cbNode = $ ( this ) . children ( "input" ) . first ( ) ;
186+ let filteredModule = cbNode . attr ( "name" ) . toLowerCase ( ) . includes ( filter ) ;
187+ const nested = $ ( this ) . children ( "ul" ) . first ( ) ;
188+ if ( nested && nested . length ) {
189+ const nestedFiltered = filterModules ( nested , filter ) ;
190+ filteredModule = ( filteredModule || nestedFiltered ) ;
191+ }
192+ filtered = ( filtered || filteredModule ) ;
193+ if ( true === filteredModule ) {
194+ $ ( this ) . removeClass ( "filtered-out" ) ;
195+ } else {
196+ $ ( this ) . addClass ( "filtered-out" ) ;
197+ }
198+
199+ } ) ;
200+ return filtered ;
201+ }
202+
146203function collectModules ( parentNode , modules ) {
147204 parentNode . children ( "li" ) . each ( function ( ) {
148205 const cbNode = $ ( this ) . children ( "input" ) . first ( ) ;
0 commit comments