In the GUI search details editing dropdown, there's a Labels field, but you can't type into it. It is only used to display labels that are already in your search via the Filters menu or clicking a link.
Label searches can't be negated with a - prefix like all other searches
It has worked this way since #3323 (and #3460 even partially explained why), but no one seemed to care.
Recently we finally got a report from Discord user Epsilon:
Cause
ModSearch stores strings for tags but ModuleLabels for labels. This was done because it's trivial to check whether a tag name matches a module by looking for it in the CkanModule.Tags property, but the label object stores which mods it contains rather than the other way around. To check label membership, you need the ModuleLabel object, so ModSearch stored them, which meant that when we translate it back into a search string, partially typed label searches could not be represented since there was no such label in the list of labels.
Changes
Now ModSearch.Labels is replaced with a string list ModSearch.LabelNames which can contain partial names while the user is typing
Now ModSearch.MatchesLabels is rewritten to handle looking up the labels from ModuleLabelList.ModuleLabels and scan them for matching names
Now the Labels field in the search dropdown is editable normally.
label:Favorites matches all mods in the Favories label if it exists.
-label:Favorites excludes all mods in the Favories label if it exists.
label: by itself matches all mods with no labels.
-label: by itself excludes all mods with no labels.
label:partial matches nothing if there is no "partial" label.
-label:partial matches all mods if there is no "partial" label.
Problems
-
prefix like all other searchesIt has worked this way since #3323 (and #3460 even partially explained why), but no one seemed to care. Recently we finally got a report from Discord user Epsilon:
Cause
ModSearch
storesstring
s for tags butModuleLabel
s for labels. This was done because it's trivial to check whether a tag name matches a module by looking for it in theCkanModule.Tags
property, but the label object stores which mods it contains rather than the other way around. To check label membership, you need theModuleLabel
object, soModSearch
stored them, which meant that when we translate it back into a search string, partially typed label searches could not be represented since there was no such label in the list of labels.Changes
ModSearch.Labels
is replaced with a string listModSearch.LabelNames
which can contain partial names while the user is typingModSearch.MatchesLabels
is rewritten to handle looking up the labels fromModuleLabelList.ModuleLabels
and scan them for matching nameslabel:Favorites
matches all mods in the Favories label if it exists.-label:Favorites
excludes all mods in the Favories label if it exists.label:
by itself matches all mods with no labels.-label:
by itself excludes all mods with no labels.label:partial
matches nothing if there is no "partial" label.-label:partial
matches all mods if there is no "partial" label.