feat: facette Extensions dans les facettes de recherche #157
CI / lint (push) Successful in 2m41s
CI / security (push) Successful in 2m0s
CI / test (push) Successful in 4m45s
CI / build (push) Successful in 3m4s
CI / e2e (push) Successful in 15m36s

This commit is contained in:
2026-10-01 20:35:21 -04:00
parent 19e94dfa51
commit 2813d546a7
19 changed files with 243 additions and 15 deletions
+27 -1
View File
@@ -1034,7 +1034,7 @@ export function renderAdvancedSearchResults(data, query, tagFilter) {
}
// Facets panel
if (data.facets && (Object.keys(data.facets.tags || {}).length > 0 || Object.keys(data.facets.vaults || {}).length > 0)) {
if (data.facets && (Object.keys(data.facets.tags || {}).length > 0 || Object.keys(data.facets.vaults || {}).length > 0 || Object.keys(data.facets.extensions || {}).length > 0)) {
const facetsDiv = el("div", { class: "search-facets" });
// Vault facets
@@ -1078,6 +1078,32 @@ export function renderAdvancedSearchResults(data, query, tagFilter) {
facetsDiv.appendChild(group);
}
// Extension facets
const extFacets = data.facets.extensions || {};
if (Object.keys(extFacets).length > 0) {
const group = el("div", { class: "search-facets__group", "data-facet": "extensions" });
const label = el("span", { class: "search-facets__label" });
label.textContent = "Extensions";
group.appendChild(label);
for (const [extName, count] of Object.entries(extFacets)) {
const item = el("span", { class: "search-facets__item" });
// textContent: extension suffixes come from filenames (untrusted), never innerHTML
item.appendChild(document.createTextNode(`.${extName} `));
const facetCount = el("span", { class: "facet-count" });
facetCount.textContent = String(count);
item.appendChild(facetCount);
item.addEventListener("click", () => {
const input = document.getElementById("search-input");
// Replace any existing ext: operator, then trigger a new search
const current = input.value.replace(/ext:\S+\s*/gi, "").trim();
input.value = current + " ext:" + extName;
_triggerAdvancedSearch(input.value);
});
group.appendChild(item);
}
facetsDiv.appendChild(group);
}
area.appendChild(facetsDiv);
}