diff --git a/static/scripts/grid/filter.js b/static/scripts/grid/filter.js index f5b075f..2825c53 100644 --- a/static/scripts/grid/filter.js +++ b/static/scripts/grid/filter.js @@ -75,11 +75,13 @@ class BrickGridFilter { if (select.value.startsWith("-")) { options.filters.push({ attribute: select.value.substring(1), + bool: true, value: "0" }) } else { options.filters.push({ attribute: select.value, + bool: true, value: "1" }) } @@ -93,7 +95,20 @@ class BrickGridFilter { cards.forEach(current => { // Process all filters for (const filter of options.filters) { - if (current.getAttribute(`data-${filter.attribute}`) != filter.value) { + const attribute = current.getAttribute(`data-${filter.attribute}`); + + // Bool check + // Attribute not equal value, or undefined and value is truthy + if (filter.bool) { + if ((attribute != null && attribute != filter.value) || (attribute == null && filter.value == "1")) { + current.parentElement.classList.add("d-none"); + return; + } + } + + // Value check + // Attribute not equal value, or attribute undefined + else if ((attribute != null && attribute != filter.value) || attribute == null) { current.parentElement.classList.add("d-none"); return; } diff --git a/templates/set/card.html b/templates/set/card.html index bc302e3..eb48c18 100644 --- a/templates/set/card.html +++ b/templates/set/card.html @@ -8,17 +8,25 @@ data-index="{{ index }}" data-number="{{ item.fields.set }}" data-name="{{ item.fields.name | lower }}" data-parts="{{ item.fields.number_of_parts }}" data-year="{{ item.fields.year }}" data-theme="{{ item.theme.name | lower }}" data-minifigures="{{ item.fields.total_minifigures }}" data-has-minifigures="{{ (item.fields.total_minifigures > 0) | int }}" data-has-missing="{{ (item.fields.total_missing > 0) | int }}" data-has-missing-instructions="{{ (not (item.instructions | length)) | int }}" data-missing="{{ item.fields.total_missing }}" - {% for status in brickset_statuses %}data-{{ status.as_dataset() }}="{{ item.fields[status.as_column()] }}" {% endfor %} + {% for status in brickset_statuses %} + {% with checked=item.fields[status.as_column()] %} + {% if checked %} + data-{{ status.as_dataset() }}="{{ checked }}" + {% endif %} + {% endwith %} + {% endfor %} {% for owner in brickset_owners %} {% with checked=item.fields[owner.as_column()] %} - data-{{ owner.as_dataset() }}="{{ checked }}" - {% if checked %} data-search-owner-{{ loop.index }}="{{ owner.fields.name | lower }}"{% endif %} + {% if checked %} + data-{{ owner.as_dataset() }}="{{ checked }}" data-search-owner-{{ loop.index }}="{{ owner.fields.name | lower }}" + {% endif %} {% endwith %} {% endfor %} {% for tag in brickset_tags %} {% with checked=item.fields[tag.as_column()] %} - data-{{ tag.as_dataset() }}="{{ checked }}" - {% if checked %} data-search-tag-{{ loop.index }}="{{ tag.fields.name | lower }}"{% endif %} + {% if checked %} + data-{{ tag.as_dataset() }}="{{ checked }}" data-search-tag-{{ loop.index }}="{{ tag.fields.name | lower }}" + {% endif %} {% endwith %} {% endfor %} {% endif %}