9.2 KiB
UI_ACTION_SHORTCUTS_V1_DESIGN.md
1. Doel en scope
Action shortcuts v1 maken de bestaande functiebalk sneller bruikbaar zonder de UI-semantiek te veranderen. Het doel is niet om nieuwe acties te ontwerpen, maar om de bestaande acties via toetsen te starten op exact dezelfde manier als via de functiebalk.
Doel:
- de huidige functiebalkacties sneller bereikbaar maken
- de dual-pane workflow dichter bij een Midnight Commander-achtige bediening brengen
- een bruikbare eerste set bieden die ook op Mac praktisch inzetbaar blijft
In scope:
- keyboard-start van bestaande functiebalkacties
- centrale shortcut-dispatch op basis van
activePaneen huidige selectie - veilige focusguards zodat invoervelden en modals niet worden verstoord
- voorbereiding op latere visuele hints in de functiebalk
Out of scope:
- geen backendwijzigingen
- geen nieuwe acties buiten de bestaande functiebalk
- geen globale override van agressieve browser- of OS-shortcuts
- geen nieuwe dependencies
- geen extra keyboardnavigatie buiten action-triggering
2. Acties in scope
Deze ontwerpstap werkt uit voor:
ViewEditCopyMoveRenameMKdirDelete
Semantisch uitgangspunt:
- elke shortcut triggert exact dezelfde action-handler als de corresponderende knop in de functiebalk
- enabled/disabled logica blijft centraal en wordt niet dubbel geïmplementeerd in aparte keyboardlogica
- als een knop in de huidige context disabled zou zijn, doet de shortcut geen destructieve fallback en start geen alternatieve flow
3. Toetsmapping
Primaire mapping: F3 t/m F8
Voorgestelde primaire mapping:
F3=ViewF4=EditF5=CopyF6=MoveF7=MKdirF8=Delete
Aanvullend:
Renamekrijgt in v1 geen vaste F-toets, omdat de klassieke mapping al dicht bezet is enRenamefunctioneel dichter bij contextactie dan bij de vaste MC-kern ligtRenamekrijgt daarom een aparte, browser-veilige alternatieve shortcut
Mac-vriendelijke alternatieven
F-toetsen zijn op Mac-toetsenborden vaak verborgen achter systeemfuncties of alleen bruikbaar met extra modifiers. Daarom krijgt v1 ook expliciete alternatieven.
Voorstel:
Alt+3=ViewAlt+4=EditAlt+5=CopyAlt+6=MoveAlt+7=MKdirAlt+8=DeleteAlt+R=Rename
Motivatie:
- numerieke mapping blijft mentaal gekoppeld aan
F3-F8 Alt+Ris kort, semantisch duidelijk en minder conflictgevoelig dan veel andere browsercombinaties- deze combinaties zijn compacter en realistischer op Mac dan het afdwingen van functietoetsgebruik
Veiligheid in browsercontext
V1 kiest bewust geen mappings die sterk botsen met standaard browsergedrag, zoals:
Cmd+LCmd+RCmd+WCmd+FCmd+SCmd+PCmd+Backspace
Ook geen pure lettershortcuts zonder modifier, omdat die te snel botsen met focus, tekstinvoer en toekomstige editorinteractie.
Belangrijk:
F3-F8worden alleen gebruikt als extra shortcutlaag waar de browser/het OS dit toelaat- de
Alt+...varianten vormen de praktische browservriendelijke fallback
4. Focusregels
Shortcuts zijn alleen actief als de UI in browse-/paneelmodus zit en focus niet in een interactieve control staat.
Shortcuts actief wanneer
- focus op
body, paneelcontainer of bestandslijst staat - geen modal met eigen invoer open is
- geen wildcard-popup open is
- geen editor-textarea focus heeft
- geen inputcontrol focus heeft
Shortcuts niet actief wanneer focus in
inputtextareaselectbutton- checkbox
- elk element met
contenteditable
Extra modalregels
- als
Viewmodal open is: geen action shortcuts voor onderliggende paneelacties - als
Editmodal open is: geen action shortcuts voor onderliggende paneelacties - als wildcard popup open is: action shortcuts uitgeschakeld behalve popup-eigen
Enter/Escape
Browser/OS-collision mitigatie
- alleen exact ondersteunde combinaties afvangen
- geen brede
preventDefault()voor andere toetsen - bij twijfel niet afvangen; browser/OS behoudt dan prioriteit
5. Relatie met functiebalk en selectie
Kernregel:
- keyboard shortcuts gebruiken exact dezelfde centrale action-functies als de functiebalkknoppen
Dat betekent:
Viewshortcut roept dezelfde open-viewer flow aan als deViewknopEditshortcut roept dezelfde open-editor flow aan als deEditknopCopy/Moveshortcut gebruiken dezelfde batch-startlogica als de bestaande knoppenRename,MKdir,Deleteshortcut gebruiken dezelfde validatie- en UI-flow als de bestaande knoppen
Geen selectie
View: geen actieEdit: geen actieCopy: geen actieMove: geen actieRename: geen actieMKdir: wel toegestaan, op actief paneelDelete: geen actie
Exact 1 selectie
View: alleen voor ondersteunde fileEdit: alleen voor ondersteunde tekstfileCopy: alleen als selectie backend-geldig isMove: alleen als selectie backend-geldig isRename: toegestaanMKdir: toegestaanDelete: toegestaan
Meerdere selecties
View: niet toegestaanEdit: niet toegestaanCopy: toegestaan als alle geselecteerde items voldoen aan huidige backend-scopeMove: toegestaan als alle geselecteerde items voldoen aan huidige backend-scopeRename: niet toegestaanMKdir: toegestaanDelete: toegestaan
Directory/file-selectie
- zolang backend
copy/movefile-only is:- selectie die directories bevat blokkeert
Copy - selectie die directories bevat blokkeert
Move
- selectie die directories bevat blokkeert
ViewenEditblokkeren directoriesDeletevolgt bestaande backendregelsRenamevolgt bestaande single-selection regel
Disabled gedrag bij toetsgebruik
- geen verborgen fallback
- geen half-uitgevoerde actie
- optioneel compacte feedback via bestaande statusregel, maar v1 mag ook stil no-op blijven als dit consistenter is met huidige knopdisabled-semantiek
Voorkeur v1:
- als actie disabled is, shortcut doet niets en toont hooguit compacte statusfeedback als dat al in bestaande UI-patterns past
6. UX-regels
Visuele hints in de functiebalk
Voorstel v1:
- subtiele shortcut-hints per knop toelaten, maar klein houden
- voorbeeld later mogelijk:
F3 ViewF4 EditF5 Copy
- Mac-alternatieven hoeven niet permanent zichtbaar in de hoofdbalk om ruis te vermijden
Voor deze ontwerpstap geldt:
- de functiebalk moet voorbereid zijn op zulke hints
- de daadwerkelijke implementatie kan starten zonder direct alle hints zichtbaar te maken
Niet-beschikbare acties
- als actie disabled is in de huidige context, mag de shortcut die actie niet forceren
- gedrag moet gelijk zijn aan klikken op een disabled knop: er gebeurt functioneel niets
Unsupported acties
ViewofEditop niet-ondersteunde filetypes:- shortcut opent geen alternatieve flow
- zelfde fout- of disabled-behandeling als via knop
Copy/Moveop directoryselectie terwijl backend dit niet ondersteunt:- zelfde blokkade als via knop
Consistentie-eis
- shortcuts zijn geen tweede API-laag
- de functiebalk blijft leidend; keyboard is alleen een alternatieve triggerroute
7. Impactanalyse
Waarschijnlijk te wijzigen frontendbestanden:
webui/html/app.jswebui/html/index.htmlwebui/html/style.csswebui/backend/tests/golden/test_ui_smoke_golden.py
Verwachte code-impact
app.js:
- uitbreiding van centrale keyboard dispatcher
- mappingtabel voor action shortcuts
- centrale guards voor modal/input/focusstatus
- hergebruik van bestaande action handlers, niet dupliceren
index.html:
- mogelijk kleine markup-aanpassingen om shortcutlabels in functiebalk te kunnen tonen
- geen structurele layoutwijziging nodig
style.css:
- eventueel compacte styling voor functietoetsbadges of hints
- geen redesign nodig
Regressierisico
Belangrijkste risico's:
- conflicten met bestaande keyboard navigation (
Tab,Arrow,Space,Escape) - shortcuts vuren terwijl input of modal focus heeft
- dubbele actie-aanroep als keyboard en knoplogica niet centraal gedeeld worden
- browser/OS-shortcuts per platform gedragen zich anders
Mitigatie:
- centrale
shouldHandleActionShortcut(event)guard - bestaande knophandlers of action-functions als single source of truth
- alleen exacte combinaties afvangen
- platform-onafhankelijke fallbacklogica beperkt en expliciet houden
8. Teststrategie
Smoke/regressietests
Geautomatiseerd uit te breiden waar passend:
- UI smoke test blijft controleren dat functiebalk aanwezig is
- optioneel extra check dat knoplabels of data-attributes voor actions stabiel aanwezig zijn
- geen zware browser-E2E vereist voor deze stap
Handmatige validatie
Essentieel bij implementatie:
F3-F8triggeren de juiste acties waar ondersteundAlt+3-Alt+8werken als Mac-vriendelijke fallbackAlt+RtriggertRename- shortcuts werken alleen op actief paneel
- shortcuts respecteren disabled toestand bij:
- geen selectie
- meerdere selecties
- directoryselectie
- unsupported filetypes
- editor modal, viewer modal en wildcard popup blokkeren onderliggende action shortcuts correct
- bestaande keyboard navigation blijft intact
Regressiechecks
- klikgedrag in de bestandslijst blijft intact
- current-row navigatie blijft intact
- wildcard popup shortcuts blijven werken
- functiebalkknoppen en keyboardtrigger geven identiek resultaat