improve search
This commit is contained in:
parent
e94c3a0f47
commit
88938d522d
@ -261,7 +261,7 @@ const sortedTags = Object.entries(tagFrequency)
|
||||
}
|
||||
|
||||
function filterTools() {
|
||||
const searchTerm = elements.searchInput.value.toLowerCase();
|
||||
const searchTerm = elements.searchInput.value.trim();
|
||||
const selectedDomain = elements.domainSelect.value;
|
||||
const includeProprietary = elements.proprietaryCheckbox.checked;
|
||||
|
||||
@ -270,26 +270,31 @@ const sortedTags = Object.entries(tagFrequency)
|
||||
const phases = tool.phases || [];
|
||||
const tags = tool.tags || [];
|
||||
|
||||
// Search filter (keep existing logic)
|
||||
if (searchTerm && !(
|
||||
tool.name.toLowerCase().includes(searchTerm) ||
|
||||
tool.description.toLowerCase().includes(searchTerm) ||
|
||||
tags.some(tag => tag.toLowerCase().includes(searchTerm))
|
||||
tool.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||
tool.description.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||
tags.some(tag => tag.toLowerCase().includes(searchTerm.toLowerCase()))
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Domain filter
|
||||
if (selectedDomain && !domains.includes(selectedDomain)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Phase filter
|
||||
if (selectedPhase && !phases.includes(selectedPhase)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Proprietary filter
|
||||
if (!includeProprietary && !isMethod(tool) && tool.type !== 'concept' && tool.license === 'Proprietary') {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Tag filter
|
||||
if (selectedTags.size > 0 && !Array.from(selectedTags).every(tag => tags.includes(tag))) {
|
||||
return false;
|
||||
}
|
||||
@ -297,9 +302,14 @@ const sortedTags = Object.entries(tagFrequency)
|
||||
return true;
|
||||
});
|
||||
|
||||
// Apply search prioritization if there's a search term
|
||||
const finalResults = searchTerm && window.prioritizeSearchResults
|
||||
? window.prioritizeSearchResults(filtered, searchTerm)
|
||||
: filtered;
|
||||
|
||||
updateMatrixHighlighting();
|
||||
|
||||
window.dispatchEvent(new CustomEvent('toolsFiltered', { detail: filtered }));
|
||||
window.dispatchEvent(new CustomEvent('toolsFiltered', { detail: finalResults }));
|
||||
}
|
||||
|
||||
function handleTagClick(tagItem) {
|
||||
|
@ -80,6 +80,30 @@ const { title, description = 'ForensicPathways - A comprehensive directory of di
|
||||
scrollToElement(element, options);
|
||||
}
|
||||
|
||||
// Simple search prioritization - exact tag matches first
|
||||
function prioritizeSearchResults(tools, searchTerm) {
|
||||
if (!searchTerm || !searchTerm.trim()) {
|
||||
return tools;
|
||||
}
|
||||
|
||||
const lowerSearchTerm = searchTerm.toLowerCase().trim();
|
||||
|
||||
return tools.sort((a, b) => {
|
||||
const aTagsLower = (a.tags || []).map(tag => tag.toLowerCase());
|
||||
const bTagsLower = (b.tags || []).map(tag => tag.toLowerCase());
|
||||
|
||||
const aExactTag = aTagsLower.includes(lowerSearchTerm);
|
||||
const bExactTag = bTagsLower.includes(lowerSearchTerm);
|
||||
|
||||
// If one has exact tag match and other doesn't, prioritize the exact match
|
||||
if (aExactTag && !bExactTag) return -1;
|
||||
if (!aExactTag && bExactTag) return 1;
|
||||
|
||||
// Otherwise maintain original order (or sort by name as secondary)
|
||||
return a.name.localeCompare(b.name);
|
||||
});
|
||||
}
|
||||
|
||||
// Attach to window immediately - BEFORE DOMContentLoaded
|
||||
(window as any).createToolSlug = createToolSlug;
|
||||
(window as any).findToolByIdentifier = findToolByIdentifier;
|
||||
@ -87,6 +111,7 @@ const { title, description = 'ForensicPathways - A comprehensive directory of di
|
||||
(window as any).scrollToElement = scrollToElement;
|
||||
(window as any).scrollToElementById = scrollToElementById;
|
||||
(window as any).scrollToElementBySelector = scrollToElementBySelector;
|
||||
(window as any).prioritizeSearchResults = prioritizeSearchResults;
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const THEME_KEY = 'dfir-theme';
|
||||
|
Loading…
x
Reference in New Issue
Block a user