First shot at filtering tags negatively

Needs some work, but proof of concept
This commit is contained in:
BlipRanger
2023-06-18 20:16:41 -04:00
committed by GitHub
parent 21bb5d7808
commit 052089b3c0

View File

@@ -246,27 +246,38 @@ function appendTagToList(listElement, tag, { removable, selectable, action }) {
} }
function onTagFilterClick(listElement) { function onTagFilterClick(listElement) {
const wasSelected = $(this).hasClass('selected'); if ($(this).hasClass('selected')) {
$(CHARACTER_SELECTOR).removeClass('hiddenByTag'); $(this).removeClass('selected');
$(this).addClass('excluded');
$(this).toggleClass('selected', !wasSelected); }
else if ($(this).hasClass('excluded')) {
$(this).removeClass('excluded');
}
else {
$(this).addClass('selected');
}
const tagIds = [...($(listElement).find(".tag.selected:not(.actionable)").map((_, el) => $(el).attr("id")))]; const tagIds = [...($(listElement).find(".tag.selected:not(.actionable)").map((_, el) => $(el).attr("id")))];
$(CHARACTER_SELECTOR).each((_, element) => applyFilterToElement(tagIds, element)); const excludedTagIds = [...($(listElement).find(".tag.excluded:not(.actionable)").map((_, el) => $(el).attr("id")))];
$(CHARACTER_SELECTOR).each((_, element) => applyFilterToElement(tagIds, excludedTagIds, element));
updateVisibleDivs('#rm_print_characters_block', true); updateVisibleDivs('#rm_print_characters_block', true);
} }
function applyFilterToElement(tagIds, element) { function applyFilterToElement(tagIds, excludedTagIds, element) {
if (tagIds.length === 0) {
$(element).removeClass('hiddenByTag');
return;
}
const tagFlags = tagIds.map(tagId => isElementTagged(element, tagId)); const tagFlags = tagIds.map(tagId => isElementTagged(element, tagId));
const trueFlags = tagFlags.filter(x => x); const trueFlags = tagFlags.filter(x => x);
const isTagged = TAG_LOGIC_AND ? tagFlags.length === trueFlags.length : trueFlags.length > 0; const isTagged = TAG_LOGIC_AND ? tagFlags.length === trueFlags.length : trueFlags.length > 0;
$(element).toggleClass('hiddenByTag', !isTagged); const excludedTagFlags = excludedTagIds.map(tagId => isElementTagged(element, tagId));
const isExcluded = excludedTagFlags.includes(true);
if (isExcluded) {
$(element).addClass('hiddenByTag');
} else if (tagIds.length > 0 && !isTagged) {
$(element).addClass('hiddenByTag');
} else {
$(element).removeClass('hiddenByTag');
}
} }
function isElementTagged(element, tagId) { function isElementTagged(element, tagId) {