Add colorless filters, and make set listings filterable
Colorless There was no way to ask for colorless cards — the colour toggles are a 5-bit WUBRG mask where 0 already means "don't filter by colour", leaving nothing to express "no colours at all". That's exactly what you need to find a colorless commander's card pool. Adds a "C" pip to both colour rows, matching how ColorPips already renders colorless cards, backed by two explicit booleans rather than a sixth bit — a filter mask and a card's real colour mask staying the same shape is worth keeping. The two rows mean different things and both are useful: on the commander row C filters colour *identity*, which is the Commander rule; on the includes row it filters the card's own colours. A card printed colorless can still carry a coloured identity through mana symbols in its text, and it's the identity that bars it from a colorless commander's deck. Set listings News > Releases had its own card path and so couldn't be filtered. A new set_code filter (matched against printings.set_code, already ingested) lets the set browser run through search_reference instead, so every criterion works there identically rather than being reimplemented over a live Scryfall response. That alone would have cost the ability to browse an upcoming set, since search_reference only knows downloaded card data — and upcoming sets are half the point of the tab. So the browser picks a source per set: downloaded data where it exists, with the full filter panel; otherwise Scryfall directly, with the panel hidden and a line explaining why. A panel that silently does nothing would be worse than no panel. The source is decided by an *unfiltered* probe. Keying off whether the current criteria match anything would flip a properly indexed set to "live" the moment a filter excluded everything, dropping the panel exactly when it was in use.
This commit is contained in:
@@ -314,6 +314,20 @@ pub struct LibraryFilter {
|
||||
/// Only cards that can head a Commander deck.
|
||||
#[serde(default)]
|
||||
pub can_be_commander: bool,
|
||||
/// Only cards with an empty colour identity — what a colourless commander
|
||||
/// can actually play. The colour bitmasks can't express this: 0 there means
|
||||
/// "no filter", not "no colours".
|
||||
#[serde(default)]
|
||||
pub colorless_identity: bool,
|
||||
/// Only cards printed in this set (matched against `printings.set_code`).
|
||||
/// Lets the release browser reuse the whole criteria pipeline instead of
|
||||
/// reimplementing it over a live Scryfall response.
|
||||
pub set_code: Option<String>,
|
||||
/// Only cards that are themselves colourless (`colors` empty). Distinct
|
||||
/// from `colorless_identity`: a card can be colourless yet carry a coloured
|
||||
/// identity through mana symbols in its rules text.
|
||||
#[serde(default)]
|
||||
pub colorless_colors: bool,
|
||||
/// Printed power/toughness range. Cards whose printed value isn't a plain
|
||||
/// number ("*", "1+*") are excluded from these, since they can't be
|
||||
/// compared — see `oracle_cards.power`.
|
||||
|
||||
Reference in New Issue
Block a user