@@ -8,10 +8,6 @@ $(function() {
88 const allFrameworks = document . querySelectorAll ( '.framework' ) ;
99 const allTfms = document . querySelectorAll ( '.tfm' ) ;
1010
11- // Hide the default search bar in the page header
12- const defaultSearchBarHeader = document . getElementById ( "search-bar-header" ) ;
13- defaultSearchBarHeader . parentNode . removeChild ( defaultSearchBarHeader ) ;
14-
1511 // Checkbox logic for Framework and Tfm filters
1612 for ( const framework of allFrameworks ) {
1713 framework . addEventListener ( 'click' , clickFrameworkCheckbox ) ;
@@ -23,12 +19,10 @@ $(function() {
2319
2420 function clickFrameworkCheckbox ( ) {
2521 this . indeterminate = false ;
26- updateFrameworkFilters ( searchForm . frameworks , this . id , this . checked ) ;
2722
2823 const tfms = document . querySelectorAll ( '[parent=' + this . id + ']' ) ;
2924 tfms . forEach ( ( tfm ) => {
3025 tfm . checked = false ;
31- updateFrameworkFilters ( searchForm . tfms , tfm . id , false ) ;
3226 } ) ;
3327 }
3428
@@ -40,25 +34,12 @@ $(function() {
4034
4135 framework . checked = false ;
4236 framework . indeterminate = checkedCount !== 0 ;
43- updateFrameworkFilters ( searchForm . frameworks , framework . id , false ) ;
44-
45- updateFrameworkFilters ( searchForm . tfms , this . id , this . checked ) ;
46- }
47-
48- // Update the query string with the selected Frameworks and Tfms
49- function updateFrameworkFilters ( searchField , frameworkName , add ) {
50- if ( add ) {
51- searchField . value += frameworkName + "," ;
52- }
53- else {
54- searchField . value = searchField . value . replace ( frameworkName + "," , "" )
55- }
5637 }
5738
5839 // Submit the form when a user changes the selected 'sortBy' option
5940 searchForm . sortby . addEventListener ( 'change' , ( e ) => {
6041 searchForm . sortby . value = e . target . value ;
61- searchForm . submit ( ) ;
42+ submitSearchForm ( ) ;
6243 } ) ;
6344
6445 // Accordion/collapsible logic
@@ -95,6 +76,28 @@ $(function() {
9576 }
9677 }
9778
79+ searchForm . addEventListener ( 'submit' , submitSearchForm ) ;
80+
81+ function submitSearchForm ( ) {
82+ constructFilterParameter ( searchForm . frameworks , allFrameworks ) ;
83+ constructFilterParameter ( searchForm . tfms , allTfms ) ;
84+ searchForm . submit ( ) ;
85+ }
86+
87+ // Update the query string with the selected frameworks and tfms
88+ function constructFilterParameter ( searchField , checkboxList ) {
89+ searchField . value = "" ;
90+
91+ checkboxList . forEach ( ( framework ) => {
92+ if ( framework . checked ) {
93+ searchField . value += framework . id + "," ;
94+ }
95+ } ) ;
96+
97+ // trim trailing commas
98+ searchField . value = searchField . value . replace ( / , + $ / , '' ) ;
99+ }
100+
98101 // Initialize state for Framework and Tfm checkboxes
99102 // NOTE: We first click on all selected Framework checkboxes and then on the selected Tfm checkboxes, which
100103 // allows us to correctly handle cases where a Framework AND one of its child Tfms is present in the query
@@ -107,5 +110,12 @@ $(function() {
107110
108111 inputFrameworkFilters . map ( id => document . getElementById ( id ) ) . forEach ( checkbox => checkbox . click ( ) ) ;
109112 inputTfmFilters . map ( id => document . getElementById ( id ) ) . forEach ( checkbox => checkbox . click ( ) ) ;
113+
114+ // expand TFM section if a TFM from that generation has been selected
115+ allFrameworks . forEach ( ( checkbox ) => {
116+ if ( checkbox . indeterminate ) {
117+ document . querySelector ( '[tab=' + checkbox . id + ']' ) . click ( ) ;
118+ }
119+ } ) ;
110120 }
111121} ) ;
0 commit comments