# select-search Geeft elke `` blijft de bron van waarheid en wordt enkel verborgen. Het formulier verstuurt dus exact hetzelfde als voorheen. [**Installeren**](https://gitea.flw.uantwerpen.be/glenn/ua-userscripts/raw/branch/main/scripts/select-search/select-search.user.js) · gebeurt er niets, zie de [installatie-uitleg](../../README.md). ## Gebruik Klik een dropdown aan en typ. - Zoekt op **substring**, negeert accenten: `genee` vindt `Genée`. - Meerdere woorden in willekeurige volgorde: `poule rest` vindt `Restaurant Poule & Poulette B.V.` - Pijltjes navigeren, Enter kiest, Escape sluit, Tab kiest en gaat verder. Ga je met de muis over de lijst, dan verzet die dezelfde selectie als de pijltjes, zodat Enter altijd de regel neemt die oplicht. - Dropdowns met minder dan 10 opties blijven onaangeroerd. - Zit de dropdown in groepen (``), dan komt elke groepsnaam als grijze kopregel boven zijn blok te staan. Die regel is geen resultaat: pijltjes slaan hem over en Enter kiest hem nooit. Opties zonder groep blijven los bovenaan. - Bovenaan staat onder *recent* wat je in dat veld het laatst gekozen hebt, tot vijf waarden. Ze staan niet nog eens in hun eigen groep. Zie [Recent](#recent). - Ook bij zoeken blijven de groepen aaneengesloten en in de volgorde van de dropdown zelf, zodat *recent* bovenaan blijft en geen enkele kopregel zich herhaalt. Binnen een groep komt wat met de zoekterm begint eerst. - Er wordt enkel op het label gezocht, niet op de groepsnaam. - Een optie met een lege waarde geldt als "niets gekozen". Ze staat niet in de lijst, maar haar label wordt de grijze placeholder van het veld. Met `data-placeholder` op de ``, met `detail` `{value, label, index}`. Wie de opties leverde beslist wat verwijderen betekent en past de `` geen `name` en geen `id`, dan krijgt hij geen recent-blok en blijft hij verder gewoon doorzoekbaar. Alles staat samen onder één localStorage-sleutel, `selectSearchRecent`: ```json { "v": 1, "fields": { "": { "ts": 0, "items": [["waarde", "label"]] } } } ``` `ts` dient enkel om boven de 40 velden het oudste veld te laten vallen. Lezen en schrijven falen stil: is de opslag vol of geblokkeerd, dan verdwijnt het recent-blok en werkt de rest gewoon door. ### Voor wie de opties levert | | | |---|---| | `data-ss-recent-key="..."` | Eigen veldsleutel, in plaats van die uit `name` of `id`. Nodig bij een `` | | Niets gebeurt op de pagina | Check in het Tampermonkey-dashboard of de URL onder `@match` valt | | Formulier zit in een iframe van een ander domein | Niet op te lossen, browserbeperking | ## Ontwikkelen `select-search.user.js` bevat de volledige logica, zonder dependencies. Test met de fixture: ```sh python3 -m http.server 8731 # open http://localhost:8731/test/fixture.html ``` Tijdens het ontwikkelen laad je het script via een dev-stub in plaats van een geplakte kopie, zie [Ontwikkelen](../../AGENTS.md#dev-stub-vs-gebruik). Hoog bij elke wijziging `@version` op. ## Licentie [GPL-3.0-or-later](../../LICENSE).