* Implement advanced search
Up to 5 individual tokens (separated by spaces) can be given as search string.
Each token is individually searched for in all selected fields.
Examples (assuming the relevant fields are selected for search):
- a part named `foo` with a tag `bar` will be found with the search string "foo bar".
- a part named `bar baz` will be found with the search string "baz bar".
- a part with the ID 123 and in storage location `a_qux_b` will be found with the search string "qux 123".
* Add tests
These were created with the help of GPT-5.2.
Disclaimer: I don't have the experience to judge the quality or validity of the results.
* Restructure query buildup
* Update tests
* Move options from Settings to localStorage
* Consider mutual exclusivity of search options
If regex search is enabled, the other two options are disabled (only visually). This should give the user a fair idea of what's happening while keeping things as simple as possible.
* Added translations for the checkboxes
* Fix stimulus controller to allow handling multiple instances of the dropdown menu
* Added tooltips for the different search mode options
---------
Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
* Initial plan
* Make form column layout configurable with global Twig variables
Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>
* Rename form column Twig globals to shorter names: label_col, input_col, offset_col
Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>
* Fixed remaining places where offsets where used
* Fixed margin of delete button on admin forms
* Rename Twig globals: col_label, col_input, offset_label
Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>
* Added documentation to our twig class variables
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>
Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
The "trans with" command is not automatically escaping the string, so this is a XSS (Cross-Site Scripting) vulnerability.
Tested string: https://URL-TO-PART-DB-SERVER/de/parts/search?keyword=%22'%3E%3Cqss%20a%3D X147208852Y1_1Z%3E
QUALYS Enterprise WAS Scan Report classifies this as level 5 security risk