Fixed tag issue on legal-snippets

This commit is contained in:
Nathan Schneider
2025-09-19 12:44:30 -06:00
parent 0bc9d26ad0
commit 0312ed7932
2 changed files with 30 additions and 16 deletions

View File

@@ -512,7 +512,7 @@ document.addEventListener('DOMContentLoaded', function() {
selectedTags.add(preSelectedTag);
}
// Collect all unique tags
// Collect all unique tags (normalize case for consistency)
const allTags = new Set();
cards.forEach(card => {
const tags = card.dataset.tags;
@@ -527,8 +527,9 @@ document.addEventListener('DOMContentLoaded', function() {
Array.from(allTags).sort().forEach(tag => {
const option = document.createElement('div');
option.className = 'tag-option';
const isSelected = Array.from(selectedTags).some(selected => selected.toLowerCase() === tag.toLowerCase());
option.innerHTML = `
<input type="checkbox" ${selectedTags.has(tag) ? 'checked' : ''}>
<input type="checkbox" ${isSelected ? 'checked' : ''}>
<span>${tag}</span>
`;
@@ -537,7 +538,9 @@ document.addEventListener('DOMContentLoaded', function() {
if (checkbox.checked) {
selectedTags.add(tag);
} else {
selectedTags.delete(tag);
// Remove tag case-insensitively
const tagToRemove = Array.from(selectedTags).find(selected => selected.toLowerCase() === tag.toLowerCase());
if (tagToRemove) selectedTags.delete(tagToRemove);
}
updateSelectedTagsDisplay();
filterAndSort();
@@ -584,8 +587,10 @@ document.addEventListener('DOMContentLoaded', function() {
const checkboxes = tagOptions.querySelectorAll('input[type="checkbox"]');
checkboxes.forEach((checkbox, index) => {
const tag = Array.from(allTags).sort()[index];
checkbox.checked = selectedTags.has(tag);
checkbox.parentElement.classList.toggle('selected', selectedTags.has(tag));
// Case-insensitive check for selected tags
const isSelected = Array.from(selectedTags).some(selected => selected.toLowerCase() === tag.toLowerCase());
checkbox.checked = isSelected;
checkbox.parentElement.classList.toggle('selected', isSelected);
});
}
@@ -662,10 +667,10 @@ document.addEventListener('DOMContentLoaded', function() {
description.includes(searchTerm) ||
content.includes(searchTerm);
// Tag filter - must match ALL selected tags
const matchesTags = selectedTags.size === 0 ||
(tags && Array.from(selectedTags).every(selectedTag =>
tags.split(',').map(t => t.trim()).includes(selectedTag)
// Tag filter - must match ALL selected tags (case-insensitive)
const matchesTags = selectedTags.size === 0 ||
(tags && Array.from(selectedTags).every(selectedTag =>
tags.split(',').map(t => t.trim().toLowerCase()).includes(selectedTag.toLowerCase())
));
return matchesSearch && matchesTags;