@@ -74,11 +74,32 @@ function renderFilterItem(type, name, linkTitle) {
7474 return filterItem ;
7575}
7676
77+ function renderFilterButtons ( filterButtonTypes , name ) {
78+ if ( filterButtonTypes . length > 1 ) {
79+ var filterButtons = '<div class="pf-c-toggle-group pf-m-compact">' ;
80+ var firstSelected = "" ;
81+ for ( item = 0 ; item < filterButtonTypes . length ; item ++ ) {
82+ firstSelected = "" ;
83+ console . log ( item )
84+ if ( item == 0 ) { firstSelected = " pf-m-selected" ; }
85+ filterButtons += '<div class="pf-c-toggle-group__item">' +
86+ '<button class="pf-c-toggle-group__button' + firstSelected + '" type="button" id="' + name + "_button:" + filterButtonTypes [ item ] . toLowerCase ( ) + '" onclick="changeFilterType(this.id)">' +
87+ '<span class="pf-c-toggle-group__text">' + filterButtonTypes [ item ] + '</span>' +
88+ '</button>' +
89+ '</div>'
90+ }
91+ filterButtons += '</div>'
92+ return filterButtons ;
93+ }
94+ return "" ;
95+ }
96+
7797function renderFilter ( elementId , filterType , filterData ) {
78- for ( item = 0 ; item < filterData . length ; item ++ ) {
79- const element = document . getElementById ( elementId ) ;
80- element . innerHTML += renderFilterItem ( filterType , filterData [ item ] . Name , filterData [ item ] . LinkTitle ) ;
98+ const element = document . getElementById ( elementId ) ;
99+ for ( item = 0 ; item < filterData . filter_list . length ; item ++ ) {
100+ element . innerHTML += renderFilterItem ( filterType , filterData . filter_list [ item ] . Name , filterData . filter_list [ item ] . LinkTitle ) ;
81101 } ;
102+ element . innerHTML += renderFilterButtons ( filterData . filter_types , filterType ) ;
82103}
83104
84105function renderLabel ( tier ) {
@@ -124,14 +145,23 @@ function renderFilteredCards(patterns, filter_categories) {
124145 patternLoaderSpinner . innerHTML = renderSpinner ( ) ;
125146 var filter = new Object ( ) ;
126147 var filteredPatterns = [ ] ;
148+ var filterType = new Object ( ) ;
127149 var sortValue = document . getElementById ( "select-pattern-sort" ) ;
128150 for ( const [ category , terms ] of Object . entries ( filter_categories ) ) {
129- for ( item = 0 ; item < terms . length ; item ++ ) {
130- var checkboxId = category + ":" + cleanString ( terms [ item ] . Name ) ;
151+ for ( item = 0 ; item < terms . filter_list . length ; item ++ ) {
152+ var checkboxId = category + ":" + cleanString ( terms . filter_list [ item ] . Name ) ;
131153 var checkbox = document . getElementById ( checkboxId ) ;
132154 if ( checkbox . checked ) {
133155 if ( filter [ category ] == undefined ) { filter [ category ] = [ ] } ;
134- filter [ category ] . push ( terms [ item ] . LinkTitle ) ;
156+ filter [ category ] . push ( terms . filter_list [ item ] . LinkTitle ) ;
157+ } ;
158+ } ;
159+ for ( item = 0 ; item < terms . filter_types . length ; item ++ ) {
160+ var filterTypeID = category + "_button:" + terms . filter_types [ item ] . toLowerCase ( ) ;
161+ var filterTypeItem = document . getElementById ( filterTypeID ) ;
162+ console . log ( filterTypeItem )
163+ if ( filterTypeItem != null && filterTypeItem . classList . contains ( "pf-m-selected" ) ) {
164+ filterType [ category ] = terms . filter_types [ item ] . toLowerCase ( ) ;
135165 } ;
136166 } ;
137167 } ;
@@ -147,7 +177,9 @@ function renderFilteredCards(patterns, filter_categories) {
147177 } else if ( typeof ( patterns [ item ] . Params [ category ] ) == "object" && patterns [ item ] . Params [ category ] != null ) {
148178 var patternTerms = patterns [ item ] . Params [ category ] . map ( v => v . toLowerCase ( ) ) ;
149179 var filterTerms = terms . map ( v => v . toLowerCase ( ) ) ;
150- if ( filterTerms . every ( r => patternTerms . includes ( r ) ) ) {
180+ if ( filterType [ category ] == "and" && filterTerms . every ( r => patternTerms . includes ( r ) ) ) {
181+ checksPassed [ category ] = true ;
182+ } else if ( filterType [ category ] == "or" && filterTerms . some ( r => patternTerms . includes ( r ) ) ) {
151183 checksPassed [ category ] = true ;
152184 } ;
153185 } ;
@@ -190,6 +222,22 @@ function filterSelection(filter) {
190222 } ) ;
191223}
192224
225+ function changeFilterType ( id ) {
226+ var filterType = id . split ( ":" ) ;
227+ var filter_category = filterType [ 0 ] . replace ( '_button' , '' ) ;
228+ const patternsData = getData ( ) ;
229+ patternsData . then ( output => {
230+ for ( item = 0 ; item < output . filter_categories [ filter_category ] . filter_types . length ; item ++ ) {
231+ var unselectId = filter_category + "_button:" + output . filter_categories [ filter_category ] . filter_types [ item ] . toLowerCase ( )
232+ const unselectButton = document . getElementById ( unselectId ) ;
233+ unselectButton . classList . remove ( "pf-m-selected" ) ;
234+ }
235+ const selectButton = document . getElementById ( id ) ;
236+ selectButton . classList . add ( "pf-m-selected" ) ;
237+ renderFilteredCards ( output . patterns , output . filter_categories )
238+ } ) ;
239+ }
240+
193241const patternsData = getData ( )
194242patternsData . then ( output => {
195243 renderFilter ( "TiersItems" , "tier" , output . filter_categories . tier ) ;
0 commit comments