feat(web): хоткей Ctrl+F для полноэкранного режима приложения

Кнопке «На весь экран» в верхней панели добавлен хоткей Ctrl+F. Хоткей `f`
полноэкранного просмотра больше не срабатывает на Ctrl+F: модификаторы
проверяются явно, поэтому сочетание свободно для кнопки каркаса.
This commit is contained in:
iu
2026-10-20 22:12:24 +03:00
parent 0a9e5274cf
commit 961dff15da
3 changed files with 31 additions and 4 deletions
+16 -2
View File
@@ -176,6 +176,17 @@
} }
function onKeydown(ev: KeyboardEvent) { function onKeydown(ev: KeyboardEvent) {
// Ctrl+F — полноэкранный режим приложения (кнопка «На весь экран»).
if (
ev.ctrlKey &&
!ev.shiftKey &&
!ev.altKey &&
(ev.key === 'f' || ev.key === 'F' || ev.key === 'а' || ev.key === 'А')
) {
ev.preventDefault();
toggleFullscreen();
return;
}
if (ev.ctrlKey || ev.metaKey || ev.altKey || ev.repeat) return; if (ev.ctrlKey || ev.metaKey || ev.altKey || ev.repeat) return;
// `+`/`-` меняют размер миниатюр — как кнопки под регулятором. // `+`/`-` меняют размер миниатюр — как кнопки под регулятором.
@@ -275,8 +286,11 @@
<button <button
type="button" type="button"
class="text-text-muted hover:bg-bg-muted hover:text-text inline-flex items-center justify-center rounded-md p-1" class="text-text-muted hover:bg-bg-muted hover:text-text inline-flex items-center justify-center rounded-md p-1"
aria-label={isFullscreen ? 'Выйти из полноэкранного режима' : 'На весь экран'} aria-label={isFullscreen
title={isFullscreen ? 'Выйти из полноэкранного режима' : 'На весь экран'} ? 'Выйти из полноэкранного режима (Ctrl+F)'
: 'На весь экран (Ctrl+F)'}
title={isFullscreen ? 'Выйти из полноэкранного режима (Ctrl+F)' : 'На весь экран (Ctrl+F)'}
aria-keyshortcuts="Control+f"
aria-pressed={isFullscreen} aria-pressed={isFullscreen}
onclick={toggleFullscreen} onclick={toggleFullscreen}
> >
+7 -1
View File
@@ -362,7 +362,13 @@
else toggleActual(); else toggleActual();
return; return;
} }
if (ev.key === 'f' || ev.key === 'F' || ev.key === 'а' || ev.key === 'А') { // `f` — полноэкранный просмотр; `Ctrl+F` отдан кнопке «На весь экран» каркаса.
if (
!ev.ctrlKey &&
!ev.metaKey &&
!ev.altKey &&
(ev.key === 'f' || ev.key === 'F' || ev.key === 'а' || ev.key === 'А')
) {
ev.preventDefault(); ev.preventDefault();
toggleViewerFullscreen(); toggleViewerFullscreen();
return; return;
+8 -1
View File
@@ -479,12 +479,19 @@ Ctrl/Cmd-клик — добавить или убрать, Shift-клик —
Верхняя панель приложения и верхняя панель режима просмотра SHALL иметь минимальную высоту Верхняя панель приложения и верхняя панель режима просмотра SHALL иметь минимальную высоту
(узкие отступы, иконочные органы управления), сохраняя все действия доступными. Верхняя панель (узкие отступы, иконочные органы управления), сохраняя все действия доступными. Верхняя панель
режима просмотра SHALL быть прозрачным оверлеем и SHALL не занимать место в раскладке, режима просмотра SHALL быть прозрачным оверлеем и SHALL не занимать место в раскладке,
увеличивая область фото. увеличивая область фото. Кнопка «На весь экран» верхней панели приложения SHALL иметь хоткей
`Ctrl+F`; хоткей `f` полноэкранного просмотра SHALL срабатывать только без модификаторов, чтобы
`Ctrl+F` не перехватывался.
#### Scenario: Компактные верхние панели #### Scenario: Компактные верхние панели
- **WHEN** открыт список альбомов или режим просмотра фото - **WHEN** открыт список альбомов или режим просмотра фото
- **THEN** верхняя панель занимает минимум высоты, а её действия (навигация, полный экран, скачивание, удаление) доступны - **THEN** верхняя панель занимает минимум высоты, а её действия (навигация, полный экран, скачивание, удаление) доступны
#### Scenario: Полный экран по хоткею
- **WHEN** пользователь нажимает `Ctrl+F`
- **THEN** приложение переходит в полноэкранный режим или выходит из него, а в режиме просмотра
фото полноэкранным остаётся сам просмотр
#### Scenario: Прозрачная панель просмотра #### Scenario: Прозрачная панель просмотра
- **WHEN** открыт режим просмотра фото - **WHEN** открыт режим просмотра фото
- **THEN** верхняя панель нарисована поверх фото без фона и не уменьшает область изображения - **THEN** верхняя панель нарисована поверх фото без фона и не уменьшает область изображения