Files
fnx_web/svelte/src/filesystem/Breadcrumbs.svelte
Wim Brand 4c57a363b2 Fix:
* Breadcrumbs too wide in deeply nested directories
* Sharedialog copies link and calls navigator.share at the same time
* Link copy feedback is not clear
* Show embed code when public read
* Hide hidden files from audio playlist
2026-08-05 21:54:49 +02:00

75 lines
1.6 KiB
Svelte

<script lang="ts">
import { fs_encode_path } from "lib/FilesystemAPI.svelte";
import { path_link, type FSNavigator } from "./FSNavigator";
import FileMenu from "./filemanager/FileMenu.svelte";
import EditWindow from "./edit_window/EditWindow.svelte";
import { onMount } from "svelte";
import { breadcrumbs_store } from "wrap/BreadcrumbStore";
let {
nav,
edit_window = null
}: {
nav: FSNavigator;
edit_window?: EditWindow;
} = $props();
let file_menu: FileMenu = $state()
onMount(() => {
return nav.subscribe(nav => {
breadcrumbs_store.set(breadcrumbs)
})
})
</script>
{#snippet breadcrumbs()}
{#each $nav.path as node, i (node.path)}
<a
href={"/d"+fs_encode_path(node.path)}
class="breadcrumb button flat"
use:path_link={{nav: nav, node: node}}
oncontextmenu={e => file_menu.open(node, e.target, e)}
>
{#if node.abuse_type !== undefined}
<i class="icon small">block</i>
{:else if node.is_shared()}
<i class="icon small">share</i>
{/if}
<div class="node_name" class:base={$nav.base_index === i} class:small={$nav.path.length > 10}>
{node.name}
</div>
</a>
{#if $nav.base_index !== i}
<i class="icon">chevron_right</i>
{/if}
{/each}
<FileMenu bind:this={file_menu} nav={nav} edit_window={edit_window} />
{/snippet}
<style>
.breadcrumb {
min-width: 1em;
text-align: center;
word-break: break-all;
display: inline-flex;
flex-direction: row;
background-color: unset;
box-shadow: none;
}
.node_name {
max-width: 20vw;
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.small {
max-width: 10vw;
}
.base {
/* The base name uses all available space */
max-width: unset;
}
</style>