Skip to content

Commit 43fa411

Browse files
authored
add a "flag" filter to registry (#5328)
1 parent eb958bd commit 43fa411

File tree

4 files changed

+115
-171
lines changed

4 files changed

+115
-171
lines changed

assets/js/registrySearch.js

Lines changed: 54 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ let pathName = window.location.pathname;
3838
let searchQuery = '';
3939
let selectedLanguage = 'all';
4040
let selectedComponent = 'all';
41+
let selectedFlag = 'all'; // Added selectedFlag
4142

4243
parseUrlParams();
4344

@@ -49,7 +50,12 @@ if (pathName.includes('registry')) {
4950
showBody();
5051
}
5152

52-
if (selectedLanguage !== 'all' || selectedComponent !== 'all') {
53+
// Set the dropdown values from query params
54+
if (
55+
selectedLanguage !== 'all' ||
56+
selectedComponent !== 'all' ||
57+
selectedFlag !== 'all'
58+
) {
5359
if (selectedLanguage !== 'all') {
5460
document.getElementById('languageDropdown').textContent =
5561
document.getElementById(
@@ -62,6 +68,10 @@ if (pathName.includes('registry')) {
6268
`component-item-${selectedComponent}`,
6369
).textContent;
6470
}
71+
if (selectedFlag !== 'all') {
72+
document.getElementById('flagsDropdown').textContent =
73+
document.getElementById(`flag-item-${selectedFlag}`).textContent;
74+
}
6575
updateFilters();
6676
}
6777

@@ -106,6 +116,22 @@ if (pathName.includes('registry')) {
106116
updateFilters();
107117
}),
108118
);
119+
// Flags dropdown event listener
120+
121+
let flagList = document
122+
.getElementById('flagsFilter')
123+
.querySelectorAll('.dropdown-item');
124+
125+
flagList.forEach((element) =>
126+
element.addEventListener('click', function (evt) {
127+
let val = evt.target.getAttribute('value');
128+
selectedFlag = val;
129+
document.getElementById('flagsDropdown').textContent =
130+
evt.target.textContent;
131+
setInput('flag', val);
132+
updateFilters();
133+
}),
134+
);
109135
});
110136
}
111137

@@ -208,34 +234,51 @@ function setInput(key, value) {
208234
history.replaceState(null, null, '?' + queryParams.toString());
209235
}
210236

211-
// Filters items based on language and component filters
237+
// Filters items based on language, component and flags
212238
function updateFilters() {
213239
let allItems = [...document.getElementsByClassName('registry-entry')];
214-
if (selectedComponent === 'all' && selectedLanguage === 'all') {
240+
if (
241+
selectedComponent === 'all' &&
242+
selectedLanguage === 'all' &&
243+
selectedFlag === 'all'
244+
) {
245+
// Show all items if all filters are set to 'all'
215246
allItems.forEach((element) => element.classList.remove('d-none'));
216247
} else {
248+
// Apply the filters
217249
allItems.forEach((element) => {
218250
const dc = element.dataset.registrytype;
219251
const dl = element.dataset.registrylanguage;
220-
if (
221-
(dc === selectedComponent || selectedComponent === 'all') &&
222-
(dl === selectedLanguage || selectedLanguage === 'all')
223-
) {
252+
const df = element.dataset.registryflags
253+
? element.dataset.registryflags.split(' ').map((f) => f.toLowerCase())
254+
: [];
255+
256+
const componentMatches =
257+
dc === selectedComponent || selectedComponent === 'all';
258+
const languageMatches =
259+
dl === selectedLanguage || selectedLanguage === 'all';
260+
const flagMatches =
261+
selectedFlag === 'all' || df.includes(selectedFlag.toLowerCase());
262+
263+
if (flagMatches) {
264+
console.log('Flag matches:', df);
265+
}
266+
267+
if (componentMatches && languageMatches && flagMatches) {
268+
// Changed
224269
element.classList.remove('d-none');
225-
} else if (dc === selectedComponent && dl !== selectedLanguage) {
226-
element.classList.add('d-none');
227-
} else if (dl === selectedLanguage && dc !== selectedComponent) {
228-
element.classList.add('d-none');
229270
} else {
230271
element.classList.add('d-none');
231272
}
232273
});
233274
}
234275
}
235276

277+
// Parse URL parameters and update variables
236278
function parseUrlParams() {
237279
let urlParams = new URLSearchParams(window.location.search);
238280
searchQuery = urlParams.get('s');
239281
selectedLanguage = urlParams.get('language') || 'all';
240282
selectedComponent = urlParams.get('component') || 'all';
283+
selectedFlag = urlParams.get('flag') || 'all'; // Added
241284
}

content/es/docs/concepts/observability-primer.md

Lines changed: 0 additions & 159 deletions
This file was deleted.

layouts/partials/ecosystem/registry/entry.html

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,23 @@
8585
{{ errorf "The %q registry entry requires a repo or website URL." .title }}
8686
{{ end -}}
8787
{{ $primaryHref := printf "href=%q" $primaryUrl | safeHTMLAttr -}}
88-
<li class="card my-3 registry-entry {{ $highlightStyle }}" data-registry-id="{{ ._key }}" data-registrytype="{{ .registryType }}" data-registrylanguage="{{ .language }}">
88+
{{ $flags := slice -}} <!-- Initialize flags slice -->
89+
{{ if $isNew -}} <!-- Check if the entry is new -->
90+
{{ $flags = $flags | append "new" -}}
91+
{{ end -}}
92+
{{ if $isNative -}}
93+
{{ $flags = $flags | append "native" -}}
94+
{{ end -}}
95+
{{ if $isFirstParty -}}
96+
{{ $flags = $flags | append "first_party" -}}
97+
{{ end -}}
98+
{{ if $usedInDemo -}} <!-- Check if the entry was used in a demo -->
99+
{{ $flags = $flags | append "used_in_demo" -}}
100+
{{ end -}}
101+
{{ if $deprecated -}}
102+
{{ $flags = $flags | append "deprecated" -}}
103+
{{ end -}}
104+
<li class="card my-3 registry-entry {{ $highlightStyle }}" data-registry-id="{{ ._key }}" data-registrytype="{{ .registryType }}" data-registrylanguage="{{ .language }}" data-registryflags="{{- range $index, $flag := $flags -}}{{ if $index }} {{ end }}{{ $flag }}{{- end }}">
89105
<div class="card-body container">
90106
<h4 class="card-title mb-0 d-flex flex-row">
91107
<a {{ $primaryHref }} target="_blank" rel="noopener" class="me-auto">

layouts/shortcodes/ecosystem/registry/search-form.html

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,38 @@
3434
{{ end -}}
3535
{{ $types = $types | uniq | sort -}}
3636

37+
{{ $counter := 0 -}}
38+
{{ $entries := slice -}}
39+
{{ range $key, $entry := .Site.Data.registry -}}
40+
{{ $flags := slice -}}
41+
{{ if .isNative -}}
42+
{{ $flags = $flags | append "native" -}}
43+
{{ end -}}
44+
{{ if .isFirstParty -}}
45+
{{ $flags = $flags | append "first_party" -}}
46+
{{ end -}}
47+
{{ if .isNew -}}
48+
{{ $flags = $flags | append "new" -}}
49+
{{ end -}}
50+
{{ if .usedInDemo -}}
51+
{{ $flags = $flags | append "used_in_demo" -}}
52+
{{ end -}}
53+
{{ if .deprecated -}}
54+
{{ $flags = $flags | append "deprecated" -}}
55+
{{ end -}}
56+
{{ $entry = merge $entry (dict "_key" $key "id" $counter "flags" $flags) -}}
57+
{{ $entries = $entries | append $entry -}}
58+
{{ $counter = add $counter 1 }}
59+
{{ end -}}
60+
61+
{{ $allFlags := slice -}}
62+
{{ range $entry := $entries -}}
63+
{{ range $flag := $entry.flags -}}
64+
{{ $allFlags = $allFlags | append $flag }}
65+
{{ end -}}
66+
{{ end -}}
67+
{{ $uniqueFlags := $allFlags | uniq | sort }}
68+
3769
<div class="alert alert-info">
3870
The OpenTelemetry Registry allows you to search for instrumentation libraries,
3971
collector components, utilities, and other useful projects in the OpenTelemetry
@@ -51,6 +83,8 @@
5183

5284
<input type="hidden" name="component" id="input-component" value="" />
5385
<input type="hidden" name="language" id="input-language" value="" />
86+
<input type="hidden" name="flag" id="input-flag" value="all" />
87+
5488

5589
<button type="button" class="btn btn-outline-success"
5690
onclick="document.getElementById('searchForm').submit();">Submit</button>
@@ -88,6 +122,16 @@
88122
{{ end -}}
89123
</div>
90124

125+
<!-- Flags Filter Dropdown -->
126+
<button class="btn btn-outline-secondary dropdown-toggle" id="flagsDropdown" type="button"
127+
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Flags</button>
128+
<div class="dropdown-menu" id="flagsFilter">
129+
<a value="all" class="dropdown-item">Any Flag</a>
130+
{{ range $flag := $uniqueFlags -}}
131+
<a value="{{ $flag }}" id="flag-item-{{ $flag }}" class="dropdown-item">{{ humanize $flag }}</a>
132+
{{ end -}}
133+
</div>
134+
91135
</div>
92136
</form>
93137
</div>

0 commit comments

Comments
 (0)