@@ -9,48 +9,54 @@ let fuseOptions = {
9
9
maxPatternLength : 32 ,
10
10
minMatchCharLength : 1 ,
11
11
keys : [
12
- { name : " title" , weight : 0.8 } ,
13
- { name : " description" , weight : 0.5 } ,
14
- { name : " tags" , weight : 0.3 } ,
15
- { name : " categories" , weight : 0.3 } ,
12
+ { name : ' title' , weight : 0.8 } ,
13
+ { name : ' description' , weight : 0.5 } ,
14
+ { name : ' tags' , weight : 0.3 } ,
15
+ { name : ' categories' , weight : 0.3 } ,
16
16
] ,
17
17
} ;
18
18
19
19
// Get searchQuery for queryParams
20
20
let pathName = window . location . pathname ;
21
- let searchQuery = "" ;
22
- let selectedLanguage = " all" ;
23
- let selectedComponent = " all" ;
21
+ let searchQuery = '' ;
22
+ let selectedLanguage = ' all' ;
23
+ let selectedComponent = ' all' ;
24
24
25
25
parseUrlParams ( ) ;
26
26
27
- if ( pathName . includes ( " registry" ) ) {
27
+ if ( pathName . includes ( ' registry' ) ) {
28
28
// Run search or display default body
29
29
if ( searchQuery ) {
30
- document . querySelector ( " #search-query" ) . value = searchQuery ;
31
- document . querySelector ( " #default-body" ) . style . display = " none" ;
30
+ document . querySelector ( ' #search-query' ) . value = searchQuery ;
31
+ document . querySelector ( ' #default-body' ) . style . display = ' none' ;
32
32
executeSearch ( searchQuery ) ;
33
33
} else {
34
- let defaultBody = document . querySelector ( " #default-body" ) ;
35
- if ( defaultBody . style . display === " none" ) {
36
- defaultBody . style . display = " block" ;
34
+ let defaultBody = document . querySelector ( ' #default-body' ) ;
35
+ if ( defaultBody . style . display === ' none' ) {
36
+ defaultBody . style . display = ' block' ;
37
37
}
38
38
}
39
39
40
- if ( selectedLanguage !== "all" || selectedComponent !== "all" ) {
41
- if ( selectedLanguage !== "all" ) {
42
- document . getElementById ( 'languageDropdown' ) . textContent = document . getElementById ( `language-item-${ selectedLanguage } ` ) . textContent ;
40
+ if ( selectedLanguage !== 'all' || selectedComponent !== 'all' ) {
41
+ if ( selectedLanguage !== 'all' ) {
42
+ document . getElementById ( 'languageDropdown' ) . textContent =
43
+ document . getElementById (
44
+ `language-item-${ selectedLanguage } `
45
+ ) . textContent ;
43
46
}
44
- if ( selectedComponent !== "all" ) {
45
- document . getElementById ( 'componentDropdown' ) . textContent = document . getElementById ( `component-item-${ selectedComponent } ` ) . textContent ;
47
+ if ( selectedComponent !== 'all' ) {
48
+ document . getElementById ( 'componentDropdown' ) . textContent =
49
+ document . getElementById (
50
+ `component-item-${ selectedComponent } `
51
+ ) . textContent ;
46
52
}
47
53
updateFilters ( ) ;
48
54
}
49
55
}
50
56
51
57
// Runs search through Fuse for fuzzy search
52
58
function executeSearch ( searchQuery ) {
53
- fetch ( " /ecosystem/registry/index.json" )
59
+ fetch ( ' /ecosystem/registry/index.json' )
54
60
. then ( ( res ) => res . json ( ) )
55
61
. then ( ( json ) => {
56
62
let fuse = new Fuse ( json , fuseOptions ) ;
@@ -59,8 +65,8 @@ function executeSearch(searchQuery) {
59
65
if ( results . length > 0 ) {
60
66
populateResults ( results ) ;
61
67
} else {
62
- document . querySelector ( " #search-results" ) . innerHTML +=
63
- " <p>No matches found</p>" ;
68
+ document . querySelector ( ' #search-results' ) . innerHTML +=
69
+ ' <p>No matches found</p>' ;
64
70
}
65
71
} ) ;
66
72
}
@@ -69,16 +75,16 @@ function executeSearch(searchQuery) {
69
75
function populateResults ( results ) {
70
76
results . forEach ( ( result , key ) => {
71
77
let contents = result . item . description ;
72
- let snippet = "" ;
78
+ let snippet = '' ;
73
79
let snippetHighlights = [ ] ;
74
80
75
81
if ( fuseOptions . tokenize ) {
76
82
snippetHighlights . push ( searchQuery ) ;
77
83
} else {
78
84
result . matches . forEach ( ( match ) => {
79
- if ( match . key === " tags" || match . key === " categories" ) {
85
+ if ( match . key === ' tags' || match . key === ' categories' ) {
80
86
snippetHighlights . push ( match . value ) ;
81
- } else if ( match . key === " description" ) {
87
+ } else if ( match . key === ' description' ) {
82
88
start =
83
89
match . indices [ 0 ] [ 0 ] - summaryInclude > 0
84
90
? match . indices [ 0 ] [ 0 ] - summaryInclude
@@ -103,8 +109,9 @@ function populateResults(results) {
103
109
}
104
110
105
111
// Pull template from hugo template definition
106
- let templateDefinition = document . querySelector ( "#search-result-template" )
107
- . innerHTML ;
112
+ let templateDefinition = document . querySelector (
113
+ '#search-result-template'
114
+ ) . innerHTML ;
108
115
109
116
// Replace values from template with search results
110
117
let output = render ( templateDefinition , {
@@ -120,7 +127,7 @@ function populateResults(results) {
120
127
snippet : snippet ,
121
128
otVersion : result . item . otVersion ,
122
129
} ) ;
123
- document . querySelector ( " #search-results" ) . innerHTML += output ;
130
+ document . querySelector ( ' #search-results' ) . innerHTML += output ;
124
131
} ) ;
125
132
}
126
133
@@ -138,78 +145,87 @@ function render(templateString, data) {
138
145
copy = copy . replace ( conditionalMatches [ 0 ] , conditionalMatches [ 2 ] ) ;
139
146
} else {
140
147
//not valid, remove entire section
141
- copy = copy . replace ( conditionalMatches [ 0 ] , "" ) ;
148
+ copy = copy . replace ( conditionalMatches [ 0 ] , '' ) ;
142
149
}
143
150
}
144
151
templateString = copy ;
145
152
146
153
//now any conditionals removed we can do simple substitution
147
154
let key , find , re ;
148
155
for ( key in data ) {
149
- find = " \\$\\{\\s*" + key + " \\s*\\}" ;
150
- re = new RegExp ( find , "g" ) ;
156
+ find = ' \\$\\{\\s*' + key + ' \\s*\\}' ;
157
+ re = new RegExp ( find , 'g' ) ;
151
158
templateString = templateString . replace ( re , data [ key ] ) ;
152
159
}
153
160
return templateString ;
154
161
}
155
162
156
- if ( pathName . includes ( " registry" ) ) {
163
+ if ( pathName . includes ( ' registry' ) ) {
157
164
document . addEventListener ( 'DOMContentLoaded' , ( event ) => {
158
- let languageList = document . getElementById ( 'languageFilter' ) . querySelectorAll ( '.dropdown-item' )
159
- let typeList = document . getElementById ( 'componentFilter' ) . querySelectorAll ( '.dropdown-item' )
160
- languageList . forEach ( ( element ) => element . addEventListener ( 'click' , function ( evt ) {
161
- let val = evt . target . getAttribute ( 'value' )
162
- selectedLanguage = val ;
163
- document . getElementById ( 'languageDropdown' ) . textContent = evt . target . textContent ;
164
- setInput ( "language" , val ) ;
165
- updateFilters ( ) ;
166
- } ) )
167
- typeList . forEach ( ( element ) => element . addEventListener ( 'click' , function ( evt ) {
168
- let val = evt . target . getAttribute ( 'value' )
169
- selectedComponent = val ;
170
- document . getElementById ( 'componentDropdown' ) . textContent = evt . target . textContent ;
171
- setInput ( "component" , val ) ;
172
- updateFilters ( ) ;
173
- } ) )
174
- } )
165
+ let languageList = document
166
+ . getElementById ( 'languageFilter' )
167
+ . querySelectorAll ( '.dropdown-item' ) ;
168
+ let typeList = document
169
+ . getElementById ( 'componentFilter' )
170
+ . querySelectorAll ( '.dropdown-item' ) ;
171
+ languageList . forEach ( ( element ) =>
172
+ element . addEventListener ( 'click' , function ( evt ) {
173
+ let val = evt . target . getAttribute ( 'value' ) ;
174
+ selectedLanguage = val ;
175
+ document . getElementById ( 'languageDropdown' ) . textContent =
176
+ evt . target . textContent ;
177
+ setInput ( 'language' , val ) ;
178
+ updateFilters ( ) ;
179
+ } )
180
+ ) ;
181
+ typeList . forEach ( ( element ) =>
182
+ element . addEventListener ( 'click' , function ( evt ) {
183
+ let val = evt . target . getAttribute ( 'value' ) ;
184
+ selectedComponent = val ;
185
+ document . getElementById ( 'componentDropdown' ) . textContent =
186
+ evt . target . textContent ;
187
+ setInput ( 'component' , val ) ;
188
+ updateFilters ( ) ;
189
+ } )
190
+ ) ;
191
+ } ) ;
175
192
}
176
193
177
-
178
- function setInput ( key , value ) {
194
+ function setInput ( key , value ) {
179
195
document . getElementById ( `input-${ key } ` ) . value = value ;
180
196
var queryParams = new URLSearchParams ( window . location . search ) ;
181
197
queryParams . set ( key , value ) ;
182
- history . replaceState ( null , null , "?" + queryParams . toString ( ) ) ;
198
+ history . replaceState ( null , null , '?' + queryParams . toString ( ) ) ;
183
199
}
184
200
185
201
// Filters items based on language and component filters
186
202
function updateFilters ( ) {
187
- let allItems = [ ...document . getElementsByClassName ( " media" ) ] ;
188
- if ( selectedComponent === " all" && selectedLanguage === " all" ) {
189
- allItems . forEach ( ( element ) => element . classList . remove ( " d-none" ) ) ;
203
+ let allItems = [ ...document . getElementsByClassName ( ' media' ) ] ;
204
+ if ( selectedComponent === ' all' && selectedLanguage === ' all' ) {
205
+ allItems . forEach ( ( element ) => element . classList . remove ( ' d-none' ) ) ;
190
206
} else {
191
207
allItems . forEach ( ( element ) => {
192
208
const dc = element . dataset . registrytype ;
193
209
const dl = element . dataset . registrylanguage ;
194
210
if (
195
- ( dc === selectedComponent || selectedComponent === " all" ) &&
196
- ( dl === selectedLanguage || selectedLanguage === " all" )
211
+ ( dc === selectedComponent || selectedComponent === ' all' ) &&
212
+ ( dl === selectedLanguage || selectedLanguage === ' all' )
197
213
) {
198
- element . classList . remove ( " d-none" ) ;
214
+ element . classList . remove ( ' d-none' ) ;
199
215
} else if ( dc === selectedComponent && dl !== selectedLanguage ) {
200
- element . classList . add ( " d-none" ) ;
216
+ element . classList . add ( ' d-none' ) ;
201
217
} else if ( dl === selectedLanguage && dc !== selectedComponent ) {
202
- element . classList . add ( " d-none" ) ;
218
+ element . classList . add ( ' d-none' ) ;
203
219
} else {
204
- element . classList . add ( " d-none" ) ;
220
+ element . classList . add ( ' d-none' ) ;
205
221
}
206
222
} ) ;
207
223
}
208
224
}
209
225
210
- function parseUrlParams ( ) {
226
+ function parseUrlParams ( ) {
211
227
let urlParams = new URLSearchParams ( window . location . search ) ;
212
- searchQuery = urlParams . get ( "s" ) ;
213
- selectedLanguage = urlParams . get ( " language" ) || " all" ;
214
- selectedComponent = urlParams . get ( " component" ) || " all" ;
228
+ searchQuery = urlParams . get ( 's' ) ;
229
+ selectedLanguage = urlParams . get ( ' language' ) || ' all' ;
230
+ selectedComponent = urlParams . get ( ' component' ) || ' all' ;
215
231
}
0 commit comments