2025-03-28 14:16:20 +01:00
|
|
|
<script lang="ts">
|
2025-10-13 23:20:42 +02:00
|
|
|
import { fs_encode_path } from "lib/FilesystemAPI.svelte";
|
2026-02-19 18:15:06 +01:00
|
|
|
import { path_link, type FSNavigator } from "./FSNavigator";
|
|
|
|
|
import { menu_is_open } from "wrap/MainMenu.svelte";
|
2026-02-26 14:47:01 +01:00
|
|
|
import FileMenu from "./filemanager/FileMenu.svelte";
|
|
|
|
|
import EditWindow from "./edit_window/EditWindow.svelte";
|
2023-05-30 16:59:11 +02:00
|
|
|
|
2026-02-26 14:47:01 +01:00
|
|
|
let {
|
|
|
|
|
nav,
|
|
|
|
|
edit_window = null
|
|
|
|
|
}: {
|
2025-10-13 16:05:50 +02:00
|
|
|
nav: FSNavigator;
|
2026-02-26 14:47:01 +01:00
|
|
|
edit_window?: EditWindow;
|
2025-10-13 16:05:50 +02:00
|
|
|
} = $props();
|
2026-02-26 14:47:01 +01:00
|
|
|
|
|
|
|
|
let file_menu: FileMenu = $state()
|
2023-05-17 15:34:56 +02:00
|
|
|
</script>
|
|
|
|
|
|
2026-02-19 18:15:06 +01:00
|
|
|
<div class="breadcrumbs" class:menu_closed={!$menu_is_open}>
|
2024-08-09 13:02:07 +02:00
|
|
|
{#each $nav.path as node, i (node.path)}
|
2026-02-26 14:47:01 +01:00
|
|
|
<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)}
|
|
|
|
|
>
|
2024-05-17 16:32:53 +02:00
|
|
|
{#if node.abuse_type !== undefined}
|
|
|
|
|
<i class="icon small">block</i>
|
2025-10-13 23:20:42 +02:00
|
|
|
{:else if node.is_shared()}
|
2023-11-15 15:50:54 +01:00
|
|
|
<i class="icon small">share</i>
|
|
|
|
|
{/if}
|
2024-08-09 13:02:07 +02:00
|
|
|
<div class="node_name" class:base={$nav.base_index === i}>
|
2023-11-15 15:50:54 +01:00
|
|
|
{node.name}
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
2025-10-09 15:48:23 +02:00
|
|
|
{#if $nav.base_index !== i}
|
|
|
|
|
<i class="icon">chevron_right</i>
|
|
|
|
|
{/if}
|
2023-11-15 15:50:54 +01:00
|
|
|
{/each}
|
|
|
|
|
</div>
|
2023-05-17 15:34:56 +02:00
|
|
|
|
2026-02-26 14:47:01 +01:00
|
|
|
<FileMenu bind:this={file_menu} nav={nav} edit_window={edit_window} />
|
|
|
|
|
|
2023-05-17 15:34:56 +02:00
|
|
|
<style>
|
2023-11-15 15:50:54 +01:00
|
|
|
.breadcrumbs {
|
2025-10-09 15:48:23 +02:00
|
|
|
flex: 0 0 auto;
|
2023-11-15 15:50:54 +01:00
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
2025-10-09 15:48:23 +02:00
|
|
|
justify-content: left;
|
2023-11-15 15:50:54 +01:00
|
|
|
flex-wrap: wrap;
|
|
|
|
|
flex-direction: row;
|
2023-11-16 12:17:36 +01:00
|
|
|
overflow: hidden;
|
2025-10-09 15:48:23 +02:00
|
|
|
background: var(--shaded_background);
|
|
|
|
|
backdrop-filter: blur(4px);
|
|
|
|
|
border-bottom: 1px solid var(--separator);
|
2023-11-15 15:50:54 +01:00
|
|
|
}
|
2023-05-17 15:34:56 +02:00
|
|
|
.breadcrumb {
|
|
|
|
|
min-width: 1em;
|
|
|
|
|
text-align: center;
|
|
|
|
|
word-break: break-all;
|
2024-02-28 15:50:57 +01:00
|
|
|
display: inline-flex;
|
2023-05-17 19:27:46 +02:00
|
|
|
flex-direction: row;
|
2025-10-09 15:48:23 +02:00
|
|
|
background-color: unset;
|
|
|
|
|
box-shadow: none;
|
2023-05-17 19:27:46 +02:00
|
|
|
}
|
|
|
|
|
.node_name {
|
2024-04-11 20:32:55 +02:00
|
|
|
max-width: 20vw;
|
2024-04-10 18:35:51 +02:00
|
|
|
overflow-x: hidden;
|
2023-11-15 15:50:54 +01:00
|
|
|
text-overflow: ellipsis;
|
|
|
|
|
white-space: nowrap;
|
|
|
|
|
}
|
2024-02-28 15:50:57 +01:00
|
|
|
.base {
|
2023-11-16 12:17:36 +01:00
|
|
|
/* The base name uses all available space */
|
|
|
|
|
max-width: unset;
|
2023-05-17 19:27:46 +02:00
|
|
|
}
|
2026-02-19 18:15:06 +01:00
|
|
|
.menu_closed {
|
|
|
|
|
padding-left: 2em;
|
|
|
|
|
}
|
2023-05-17 15:34:56 +02:00
|
|
|
</style>
|