fix(preview): Blaettern bleibt bei einer Art Datei
Die Pfeile (und die Pfeiltasten) in der Vorschau liefen bisher ueber alles Anzeigbare. Wer Bilder durchsah, landete mitten in der Reihe auf einem PDF -- das ganz anders bedient wird: Seiten statt Dateien, eigene Zoomleiste, auf schmalen Fenstern gar keine Pfeile. Jetzt blaettert die Vorschau nur noch durch Dateien derselben Art wie die gerade offene. Bewusst nicht nur fuer Bilder gesondert geloest, obwohl es dort auffiel: Dieselbe Ueberraschung gaebe es beim Sprung von einem PDF in ein Video oder in eine Textdatei. Solange nichts offen ist, zaehlt weiterhin alles Anzeigbare -- sonst waere die Liste leer, bevor sie ueberhaupt gebraucht wird. Nebenwirkung mit Absicht: Gibt es nur ein Bild im Ordner, verschwinden die Pfeile ganz, statt im Kreis durch fremde Dateitypen zu fuehren. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ac61df9796
commit
1e1f35955d
2 files changed
+10
-5
No files matched your search
@@ -53,7 +53,7 @@ type Kind = 'image' | 'pdf' | 'text' | 'video' | 'audio' | 'none'
|
||||
* 23.08.2026 die Endungen .mp3 und .mp4 nicht kannte. Ohne den Namen ließe
|
||||
* sich eine vorhandene MP3 also nie abspielen.
|
||||
*/
|
||||
function kindOf(mime: string, name = ''): Kind {
|
||||
export function kindOf(mime: string, name = ''): Kind {
|
||||
const m = (mime || '').toLowerCase()
|
||||
// SVG bleibt draußen: Der Server liefert sie nie inline aus, weil eine
|
||||
// SVG-Datei Skripte enthalten darf.
|
||||
|
||||
@@ -8,7 +8,7 @@ import Breadcrumb from '../components/Breadcrumb'
|
||||
import SearchBox from '../components/SearchBox'
|
||||
import PageHeader from '../components/PageHeader'
|
||||
import GridView, { ListView, useCoarsePointer } from '../components/FileViews'
|
||||
import FilePreview, { canPreview } from '../components/FilePreview'
|
||||
import FilePreview, { canPreview, kindOf } from '../components/FilePreview'
|
||||
import ContextMenu, { type MenuItem } from '../components/ContextMenu'
|
||||
import UploadQueue, { type UploadItem } from '../components/UploadQueue'
|
||||
import InputDialog from '../components/Dialog'
|
||||
@@ -339,9 +339,14 @@ export default function FileBrowser({
|
||||
const sortedFolders = sortFolders(folders, sort)
|
||||
const sortedFiles = sortFiles(files, sort)
|
||||
|
||||
// Blättern in der Vorschau geht nur über das, was sich auch anzeigen lässt –
|
||||
// sonst landet man mit dem Pfeil auf einer ZIP-Datei und sieht nichts.
|
||||
const previewable = sortedFiles.filter(canPreview)
|
||||
// Blättern in der Vorschau bleibt bei **einer** Art Datei: Wer Bilder
|
||||
// durchsieht, will Bilder sehen und nicht mitten in der Reihe auf einem PDF
|
||||
// landen, das ganz anders bedient wird (Seiten statt Dateien, eigene
|
||||
// Zoomleiste). Solange nichts offen ist, zählt weiterhin alles Anzeigbare –
|
||||
// sonst wäre die Liste leer, bevor sie gebraucht wird.
|
||||
const previewKind = preview ? kindOf(preview.mime_type, preview.name) : null
|
||||
const previewable = sortedFiles.filter(f =>
|
||||
canPreview(f) && (previewKind === null || kindOf(f.mime_type, f.name) === previewKind))
|
||||
function stepPreview(delta: number) {
|
||||
if (!preview) return
|
||||
const i = previewable.findIndex(f => f.id === preview.id)
|
||||
|
||||
Reference in new issue
Block a user