From 22990b0aa434fc9b2cb53abcd8066d56f4c84588 Mon Sep 17 00:00:00 2001 From: Glenn Goossens <48956933+glgoose@users.noreply.github.com> Date: Mon, 12 Oct 2026 15:33:36 +0200 Subject: [PATCH] bipp-budgetverantwoordelijke: zet ook Aanvrager bij Aanvragen standaard op de ingelogde gebruiker Filters nu op vaste id (qBudgetOwner, qRequestor): op Aanvragen deelt Aanvrager een rij met Status aanvraag, dus de eerste select naast het label was de verkeerde. Versie 1.1.0. Co-Authored-By: Claude Sonnet 5.5 --- .../bipp-budgetverantwoordelijke/README.md | 8 +- .../bipp-budgetverantwoordelijke.user.js | 74 +++++++++++-------- 2 files changed, 46 insertions(+), 36 deletions(-) diff --git a/scripts/bipp-budgetverantwoordelijke/README.md b/scripts/bipp-budgetverantwoordelijke/README.md index 06598f5..63b503f 100644 --- a/scripts/bipp-budgetverantwoordelijke/README.md +++ b/scripts/bipp-budgetverantwoordelijke/README.md @@ -1,18 +1,18 @@ # bipp-budgetverantwoordelijke -Zet het filter *Budget verantwoordelijke* op de pagina *Aanvraag evalueren* van BIPP standaard op jezelf in plaats van *Alle*, en start de zoekopdracht. +Zet in BIPP het filter *Budget verantwoordelijke* op *Aanvraag evalueren* en het filter *Aanvrager* op *Aanvragen* standaard op jezelf in plaats van *Alle*, en start de zoekopdracht. [**Installeren**](https://raw.githubusercontent.com/glgoose/ua-userscripts/main/scripts/bipp-budgetverantwoordelijke/bipp-budgetverantwoordelijke.user.js) · gebeurt er niets, zie de [installatie-uitleg](../../README.md). ## Hoe het werkt -- Het script zoekt de dropdown via het label *Budget verantwoordelijke* in dezelfde rij. +- Het script zoekt de dropdown via vaste id's: `qBudgetOwner` (*Aanvraag evalueren*) en `qRequestor` (*Aanvragen*). Een label is daar geen betrouwbare ingang, want *Aanvrager* deelt een rij met *Status aanvraag*. - Je naam komt uit de kop (`Welkom Glenn Goossens - ...`). De lijst heeft de omgekeerde volgorde (`Goossens Glenn`), dus het script vergelijkt de woorden en niet de volgorde. - Na de keuze drukt het script na 1,5 seconde zelf op *Zoeken*, want de dropdown doet dat niet. -- Kies je zelf weer *Alle*, dan blijft dat staan. Een vlag in `sessionStorage` onthoudt dat het - script al gewerkt heeft en wordt gewist zodra je een BIPP-pagina zonder dit filter opent. +- Kies je zelf weer *Alle*, dan blijft dat staan. Per filter onthoudt een vlag in `sessionStorage` dat het + script al gewerkt heeft. Die vlag wordt gewist zodra je een BIPP-pagina zonder dat filter opent. ## Beperkingen diff --git a/scripts/bipp-budgetverantwoordelijke/bipp-budgetverantwoordelijke.user.js b/scripts/bipp-budgetverantwoordelijke/bipp-budgetverantwoordelijke.user.js index 64177cd..ddfba05 100644 --- a/scripts/bipp-budgetverantwoordelijke/bipp-budgetverantwoordelijke.user.js +++ b/scripts/bipp-budgetverantwoordelijke/bipp-budgetverantwoordelijke.user.js @@ -1,8 +1,8 @@ // ==UserScript== // @name BIPP: budgetverantwoordelijke standaard op de ingelogde gebruiker // @namespace https://github.com/glgoose/ua-userscripts -// @version 1.0.0 -// @description Zet "Budget verantwoordelijke" bij Aanvraag evalueren op jezelf in plaats van "Alle" en start de zoekopdracht. +// @version 1.1.0 +// @description Zet "Budget verantwoordelijke" bij Aanvraag evalueren en "Aanvrager" bij Aanvragen op jezelf in plaats van "Alle" en start de zoekopdracht. // @author glgoose // @license GPL-3.0-or-later // @homepageURL https://github.com/glgoose/ua-userscripts/tree/main/scripts/bipp-budgetverantwoordelijke @@ -16,8 +16,13 @@ (function () { 'use strict'; - var LABEL = 'budget verantwoordelijke'; - var FLAG_KEY = 'bippBudgetverantwoordelijkeToegepast'; + // Eén filter per scherm. De id's staan vast: op Aanvragen deelt "Aanvrager" een rij met "Status + // aanvraag", dus de eerste select naast een label is daar de verkeerde. + var FILTERS = [ + { id: 'qBudgetOwner', name: 'budget verantwoordelijke' }, // Aanvraag evalueren + { id: 'qRequestor', name: 'aanvrager' } // Aanvragen + ]; + var FLAG_PREFIX = 'bippFilterToegepast:'; var SEARCH_DELAY_MS = 1500; function norm(s) { return (s || '').replace(/\s+/g, ' ').trim().toLowerCase(); } @@ -27,18 +32,6 @@ return norm(s.replace(/[^A-Za-zÀ-ÿ\s-]/g, ' ')).split(' ').filter(Boolean).sort(); } - function findSelect() { - var cells = document.querySelectorAll('td, th, label, span, div'); - for (var i = 0; i < cells.length; i++) { - if (cells[i].children.length === 0 && norm(cells[i].textContent) === LABEL) { - var row = cells[i].closest('tr') || cells[i].parentNode; - var sel = row && row.querySelector('select'); - if (sel) return sel; - } - } - return null; - } - function findOption(select, name) { var me = words(name); var opts = Array.prototype.slice.call(select.options); @@ -53,28 +46,45 @@ })[0]; } - var select = findSelect(); - - // Een pagina zonder dit veld wist de vlag, zodat het volgende bezoek weer de standaard zet. - if (!select) { - try { sessionStorage.removeItem(FLAG_KEY); } catch (e) { /* geen opslag */ } - return; + function flagged(id) { + try { return !!sessionStorage.getItem(FLAG_PREFIX + id); } catch (e) { return false; } + } + function setFlag(id, on) { + try { + if (on) sessionStorage.setItem(FLAG_PREFIX + id, '1'); + else sessionStorage.removeItem(FLAG_PREFIX + id); + } catch (e) { /* geen opslag */ } } - // Na de zoekopdracht laadt dezelfde pagina opnieuw: een bewuste keuze van "Alle" blijft dan staan. - try { if (sessionStorage.getItem(FLAG_KEY)) return; } catch (e) { /* geen opslag */ } - - var current = select.options[select.selectedIndex]; - if (!current || norm(current.text) !== 'alle') return; + // Een pagina zonder dit veld wist de vlag, zodat het volgende bezoek weer de standaard zet. + var present = FILTERS.filter(function (f) { + var there = !!document.getElementById(f.id); + if (!there) setFlag(f.id, false); + return there; + }); + if (!present.length) return; var m = document.body.innerText.match(/Welkom\s+(.+?)\s+-\s/); if (!m) { console.warn('[bipp-budgetverantwoordelijke] geen "Welkom -" in de kop'); return; } - var option = findOption(select, m[1]); - if (!option) { console.warn('[bipp-budgetverantwoordelijke] geen optie voor', m[1]); return; } - try { sessionStorage.setItem(FLAG_KEY, '1'); } catch (e) { /* geen opslag */ } - select.value = option.value; - select.dispatchEvent(new Event('change', { bubbles: true })); + var changed = false; + present.forEach(function (f) { + // Na de zoekopdracht laadt dezelfde pagina opnieuw: een bewuste keuze van "Alle" blijft dan staan. + if (flagged(f.id)) return; + + var select = document.getElementById(f.id); + var current = select.options[select.selectedIndex]; + if (!current || norm(current.text) !== 'alle') return; + + var option = findOption(select, m[1]); + if (!option) { console.warn('[bipp-budgetverantwoordelijke] geen optie voor', m[1], 'bij', f.name); return; } + + setFlag(f.id, true); + select.value = option.value; + select.dispatchEvent(new Event('change', { bubbles: true })); + changed = true; + }); + if (!changed) return; // De dropdown heeft geen autopostback: druk zelf op Zoeken. setTimeout(function () {