@@ -10,44 +10,33 @@ <h4 class="nav__title">
1010 < li class ="filter-group ">
1111 < a href ="# " data-filter ="" class ="show-all is-checked "> Show All</ a >
1212 </ li >
13- < li class ="filter-group filter-categories excl " data-filter-group ="Reynolds ">
14- < a href ="# " data-filter ='' class ="is-checked "> Flow Type</ a >
15- < ul >
16- < li > < a href ="# " data-filter =".laminar "> Laminar</ a > </ li >
17- < li > < a href ="# " data-filter =".turbulent "> Turbulent</ a > </ li >
18- </ ul >
19- </ li >
20- < li class ="filter-group filter-categories excl " data-filter-group ="Combustion ">
21- < a href ="# " data-filter ='' class ="is-checked "> Combustion</ a >
22- < ul >
23- < li > < a href ="# " data-filter =".reacting "> Reacting</ a > </ li >
24- < li > < a href ="# " data-filter =".nonreacting "> Non-reacting</ a > </ li >
25- </ ul >
26- </ li >
27- < li class ="filter-group filter-categories excl " data-filter-group ="Dimensionality ">
28- < a href ="# " data-filter ='' class ="is-checked "> Dimensionality</ a >
29- < ul >
30- < li > < a href ="# " data-filter =".twoD "> 2D</ a > </ li >
31- < li > < a href ="# " data-filter =".threeD "> 3D</ a > </ li >
32- </ ul >
33- </ li >
34- < li class ="filter-group filter-categories excl " data-filter-group ="FlowType ">
35- < a href ="# " data-filter ='' class ="is-checked "> Flow Configuration</ a >
36- < ul >
37- < li > < a href ="# " data-filter =".hit "> HIT</ a > </ li >
38- < li > < a href ="# " data-filter =".pipe "> Pipe</ a > </ li >
39- < li > < a href ="# " data-filter =".channel "> Channel</ a > </ li >
40- < li > < a href ="# " data-filter =".jet "> Jet</ a > </ li >
41- < li > < a href ="# " data-filter =".environmental "> Environmental</ a > </ li >
42- </ ul >
43- </ li >
44- < li class ="filter-group filter-categories comb " data-filter-group ="ML ">
45- < a href ="# " data-filter =".benchmark "> Benchmark Datasets</ a >
46- </ li >
47- < li class ="filter-group filter-categories excl " data-filter-group ="DataType ">
48- < a href ="# " data-filter =".numerical "> Numerical Datasets</ a >
49- < a href ="# " data-filter =".experimental "> Experimental Datasets</ a >
50- </ li >
13+ {% for filter in site.data.filters %}
14+ {% assign exclusive = filter.exclusive | default: true %}
15+ {% assign comb = filter.comb | default: false %}
16+ < li class ="filter-group filter-categories
17+ {% if exclusive %}excl{% endif %}
18+ {% if comb %} comb{% endif %} "
19+ {% if filter.group ! = "" %} data-filter-group ="{{ filter.group }} "{% endif %} >
20+
21+ {% if filter.title != "" %}
22+ < a href ="# " data-filter ='' class ="is-checked "> {{ filter.title }}</ a >
23+
24+ {% if filter.items and filter.items.size > 0 %}
25+ < ul >
26+ {% for item in filter.items %}
27+ < li > < a href ="# " data-filter ="{{ item.filter }} "> {{ item.name }}</ a > </ li >
28+ {% endfor %}
29+ </ ul >
30+ {% endif %}
31+ {% else %}
32+ {% if filter.items and filter.items.size > 0 %}
33+ {% for item in filter.items %}
34+ < a href ="# " data-filter ="{{ item.filter }} "> {{ item.name }}</ a >
35+ {% endfor %}
36+ {% endif %}
37+ {% endif %}
38+ </ li >
39+ {% endfor %}
5140 </ ul >
5241 </ nav >
5342</ aside >
@@ -59,176 +48,5 @@ <h2>BLASTNet Datasets</h2>
5948
6049< script src ="https://cdn.jsdelivr.net/npm/isotope-layout@3/dist/isotope.pkgd.min.js "> </ script >
6150< script src ="https://cdn.jsdelivr.net/npm/imagesloaded@4/imagesloaded.pkgd.min.js "> </ script >
62-
63- < script >
64- var grid ;
65- document . addEventListener ( 'DOMContentLoaded' , function ( ) {
66- var container = document . querySelector ( '.entries-grid' ) ;
67- var filters = { } ;
68-
69- grid = new Isotope ( container , {
70- itemSelector : '.grid__item' ,
71- layoutMode : 'fitRows'
72- } ) ;
73-
74- window . addEventListener ( 'resize' , function ( ) {
75- grid . layout ( ) ;
76- } ) ;
77-
78- imagesLoaded ( container ) . on ( 'progress' , function ( ) {
79- grid . layout ( ) ;
80- } ) ;
81-
82- var activeClass = "is-checked" ,
83- comboClass = "comb" ,
84- exclClass = "excl" ,
85- resetClass = "show-all" ;
86-
87- var defaults = document . querySelectorAll ( "a." + activeClass + '[data-filter=""]' ) ;
88-
89- document . querySelectorAll ( ".filter-group a" ) . forEach ( function ( element ) {
90- element . addEventListener ( "click" , function ( e ) {
91- var thisElement = this ;
92- var comboFilter ,
93- filterAttr = "data-filter" ;
94- if ( resetClass && ! thisElement . classList . contains ( resetClass ) ) {
95- var filterValue = thisElement . getAttribute ( filterAttr ) ;
96- var optionSet = thisElement . closest ( ".filter-group" ) ;
97- var group = optionSet . getAttribute ( "data-filter-group" ) ;
98- var filterGroup = filters [ group ] ;
99- if ( ! filterGroup ) {
100- filterGroup = filters [ group ] = [ ] ;
101- }
102- var selectAll = optionSet . querySelectorAll ( "a[" + filterAttr + '=""]' ) ;
103- document . querySelectorAll ( "." + resetClass ) . forEach ( function ( element ) {
104- element . classList . remove ( activeClass ) ;
105- } ) ;
106- comboFiltering (
107- thisElement ,
108- filters ,
109- filterAttr ,
110- filterValue ,
111- optionSet ,
112- group ,
113- selectAll ,
114- activeClass ,
115- comboClass ,
116- exclClass
117- ) ;
118- comboFilter = getComboFilter ( filters ) ;
119- if ( ! comboFilter . length ) document . querySelector ( "a." + resetClass ) . classList . add ( activeClass ) ;
120- thisElement . classList . toggle ( activeClass ) ;
121- } else {
122- filters = { } ;
123- comboFilter = "" ;
124- document . querySelectorAll ( ".filter-group a" ) . forEach ( function ( element ) {
125- element . classList . remove ( activeClass ) ;
126- } ) ;
127- thisElement . classList . add ( activeClass ) ;
128- defaults . forEach ( function ( element ) {
129- element . classList . add ( activeClass ) ;
130- } ) ;
131- }
132- grid . arrange ( { filter : comboFilter } ) ;
133- e . preventDefault ( ) ;
134- } ) ;
135- } ) ;
136- grid . arrange ( ) ;
137- } ) ;
138-
139- function comboFiltering (
140- element ,
141- filters ,
142- filterAttr ,
143- filterValue ,
144- optionSet ,
145- group ,
146- selectAll ,
147- activeClass ,
148- comboClass ,
149- exclClass
150- ) {
151- if ( ! optionSet . classList . contains ( exclClass ) ) {
152- if ( ! element . classList . contains ( activeClass ) && filterValue . length ) {
153- filters [ group ] . push ( filterValue ) ;
154- selectAll . forEach ( function ( element ) {
155- element . classList . remove ( activeClass ) ;
156- } ) ;
157- } else if ( filterValue . length ) {
158- if ( optionSet . classList . contains ( comboClass ) ) {
159- filters [ group ] [ 0 ] = filters [ group ] [ 0 ] . replace ( filterValue , "" ) ;
160- if ( ! filters [ group ] [ 0 ] . length )
161- filters [ group ] . splice ( 0 , 1 ) ;
162- } else {
163- var curIndex = filters [ group ] . indexOf ( filterValue ) ;
164- if ( curIndex > - 1 ) filters [ group ] . splice ( curIndex , 1 ) ;
165- }
166- if ( ! optionSet . querySelectorAll ( "a." + activeClass + ":not([" + filterAttr + "=''])" ) . length )
167- selectAll . forEach ( function ( element ) {
168- element . classList . add ( activeClass ) ;
169- } ) ;
170- } else {
171- optionSet . querySelectorAll ( "a." + activeClass ) . forEach ( function ( element ) {
172- element . classList . remove ( activeClass ) ;
173- } ) ;
174- filters [ group ] = [ ] ;
175- }
176- if ( optionSet . classList . contains ( comboClass ) && filters [ group ] . length )
177- filters [ group ] = [ filters [ group ] . join ( "" ) ] ;
178- } else {
179- if ( ! element . classList . contains ( activeClass ) && filterValue . length ) {
180- optionSet . querySelectorAll ( "a." + activeClass ) . forEach ( function ( filterLink ) {
181- var removeFilter = filterLink . getAttribute ( filterAttr ) ;
182- var removeIndex = filters [ group ] . indexOf ( removeFilter ) ;
183- filters [ group ] . splice ( removeIndex , 1 ) ;
184- } ) ;
185- filters [ group ] . push ( filterValue ) ;
186- optionSet . querySelectorAll ( "a." + activeClass ) . forEach ( function ( element ) {
187- element . classList . remove ( activeClass ) ;
188- } ) ;
189- } else if ( filterValue . length ) {
190- var curIndex = filters [ group ] . indexOf ( filterValue ) ;
191- if ( curIndex > - 1 ) filters [ group ] . splice ( curIndex , 1 ) ;
192- //if (!optionSet.querySelectorAll("a." + activeClass + ":not(["+filterAttr+"=''])").length)
193- if ( ! filters [ group ] . length )
194- selectAll . forEach ( function ( element ) {
195- element . classList . add ( activeClass ) ;
196- } ) ;
197- } else {
198- optionSet . querySelectorAll ( "a." + activeClass ) . forEach ( function ( element ) {
199- element . classList . remove ( activeClass ) ;
200- } ) ;
201- filters [ group ] = [ ] ;
202- }
203- }
204- }
205-
206- function getComboFilter ( filters ) {
207- var i = 0 ;
208- var comboFilters = [ ] ;
209-
210- for ( var prop in filters ) {
211- var filterGroup = filters [ prop ] ;
212- if ( ! filterGroup . length ) {
213- continue ;
214- }
215- if ( i === 0 ) {
216- comboFilters = filterGroup . slice ( 0 ) ;
217- } else {
218- var filterSelectors = [ ] ;
219- var groupCombo = comboFilters . slice ( 0 ) ;
220- for ( var k = 0 , len3 = filterGroup . length ; k < len3 ; k ++ ) {
221- for ( var j = 0 , len2 = groupCombo . length ; j < len2 ; j ++ ) {
222- filterSelectors . push ( groupCombo [ j ] + filterGroup [ k ] ) ;
223- }
224- }
225- comboFilters = filterSelectors ;
226- }
227- i ++ ;
228- }
229-
230- var comboFilter = comboFilters . join ( ", " ) ;
231- return comboFilter ;
232- }
233- </ script >
51+ < script src ="/assets/js/dataset_filters.js "> </ script >
23452
0 commit comments