You've already forked AstralRinth
forked from didirus/AstralRinth
* chore: dedupe lockfile Signed-off-by: Evan Song <theevansong@gmail.com> * fix: incorrect spacing between editing and browsing state Signed-off-by: Evan Song <theevansong@gmail.com> * chore: improve files image viewer toolbar Signed-off-by: Evan Song <theevansong@gmail.com> * chore: image viewer cursor affordance Signed-off-by: Evan Song <theevansong@gmail.com> * chore: clean imports Signed-off-by: Evan Song <theevansong@gmail.com> * chore: add tooltips Signed-off-by: Evan Song <theevansong@gmail.com> * chore: use black background Signed-off-by: Evan Song <theevansong@gmail.com> * feat: show scale factor, handle large images, consolidate state Signed-off-by: Evan Song <theevansong@gmail.com> * chore: add types to fs operations Signed-off-by: Evan Song <theevansong@gmail.com> * feat: add date create sorting option Signed-off-by: Evan Song <theevansong@gmail.com> * fix: match name of folder creation modal Signed-off-by: Evan Song <theevansong@gmail.com> * fix: add it here too Signed-off-by: Evan Song <theevansong@gmail.com> * feat: add creation date to file item, file manager header Signed-off-by: Evan Song <theevansong@gmail.com> * chore: a11y Signed-off-by: Evan Song <theevansong@gmail.com> * fix: ensure move item modal always has leading slash Signed-off-by: Evan Song <theevansong@gmail.com> * fix: correct move input placeholder Signed-off-by: Evan Song <theevansong@gmail.com> * chore: correct design disparity Signed-off-by: Evan Song <theevansong@gmail.com> * chore: add better affordance on active file item state Signed-off-by: Evan Song <theevansong@gmail.com> * fix: correct instances where we dont sentence case Signed-off-by: Evan Song <theevansong@gmail.com> * chore: clean Signed-off-by: Evan Song <theevansong@gmail.com> * chore: notify that server restarted on saveandrestart Signed-off-by: Evan Song <theevansong@gmail.com> * fix: consolidate error state in file manager Signed-off-by: Evan Song <theevansong@gmail.com> * chore: adjust sizing Signed-off-by: Evan Song <theevansong@gmail.com> * feat: drag and drop file items to move them Signed-off-by: Evan Song <theevansong@gmail.com> * feat: enable ability to drag folders too Signed-off-by: Evan Song <theevansong@gmail.com> * feat: better file movement toasts Signed-off-by: Evan Song <theevansong@gmail.com> * just say u hate me Signed-off-by: Evan Song <theevansong@gmail.com> * feat: uploading indicator for file uploads Signed-off-by: Evan Song <theevansong@gmail.com> * chore: cleaner file item ghost when dragging Signed-off-by: Evan Song <theevansong@gmail.com> * fix: enforce max length and truncate on ghost Signed-off-by: Evan Song <theevansong@gmail.com> * chore: improve item rename toast Signed-off-by: Evan Song <theevansong@gmail.com> * chore: improve item create toast Signed-off-by: Evan Song <theevansong@gmail.com> * feat: undo and redo stack Signed-off-by: Evan Song <theevansong@gmail.com> * fix: confusing behavior where folders were not sorted alphabetically Signed-off-by: Evan Song <theevansong@gmail.com> * feat: find and replace in file editor Signed-off-by: Evan Song <theevansong@gmail.com> * feat: correctly set language mode of file editor Signed-off-by: Evan Song <theevansong@gmail.com> * chore: slop Signed-off-by: Evan Song <theevansong@gmail.com> * chore: actually handle case with multiple dots in file name before setting language Signed-off-by: Evan Song <theevansong@gmail.com> * fix: match move icons in file context/threedot Signed-off-by: Evan Song <theevansong@gmail.com> * feat: upload indicator Signed-off-by: Evan Song <theevansong@gmail.com> * chore: dedupe lockfile again Signed-off-by: Evan Song <theevansong@gmail.com> * lockfile Signed-off-by: Evan Song <theevansong@gmail.com> * fix: file undefinedness Signed-off-by: Evan Song <theevansong@gmail.com> * checkpoint Signed-off-by: Evan Song <theevansong@gmail.com> * checkpoint Signed-off-by: Evan Song <theevansong@gmail.com> * checkpoint Signed-off-by: Evan Song <theevansong@gmail.com> * remove shitty animation logic Signed-off-by: Evan Song <theevansong@gmail.com> * feat: file upload queuer Signed-off-by: Evan Song <theevansong@gmail.com> * chore: only allow editable files to have active affordance Signed-off-by: Evan Song <theevansong@gmail.com> * fix: properly throw pyrofetcherror when rename fails Signed-off-by: Evan Song <theevansong@gmail.com> * feat: cancel file uploads Signed-off-by: Evan Song <theevansong@gmail.com> * chore: clean Signed-off-by: Evan Song <theevansong@gmail.com> --------- Signed-off-by: Evan Song <theevansong@gmail.com>
141 lines
5.0 KiB
Vue
141 lines
5.0 KiB
Vue
<template>
|
|
<header
|
|
data-pyro-files-state="editing"
|
|
class="flex h-12 select-none items-center justify-between rounded-t-2xl bg-table-alternateRow p-3"
|
|
aria-label="File editor navigation"
|
|
>
|
|
<nav
|
|
aria-label="Breadcrumb navigation"
|
|
class="m-0 flex min-w-0 flex-shrink items-center p-0 text-contrast"
|
|
>
|
|
<ol class="m-0 flex min-w-0 flex-shrink list-none items-center p-0">
|
|
<li class="-ml-1 flex-shrink-0">
|
|
<ButtonStyled type="transparent">
|
|
<button
|
|
v-tooltip="'Back to home'"
|
|
type="button"
|
|
class="mr-2 grid h-12 w-10 place-content-center focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand"
|
|
@click="goHome"
|
|
>
|
|
<span
|
|
class="grid size-8 place-content-center rounded-full bg-button-bg p-[6px] group-hover:bg-brand-highlight group-hover:text-brand"
|
|
>
|
|
<HomeIcon class="h-5 w-5" />
|
|
<span class="sr-only">Home</span>
|
|
</span>
|
|
</button>
|
|
</ButtonStyled>
|
|
</li>
|
|
<li class="m-0 -ml-2 p-0">
|
|
<ol class="m-0 flex items-center p-0">
|
|
<li
|
|
v-for="(segment, index) in breadcrumbSegments"
|
|
:key="index"
|
|
class="flex items-center text-sm"
|
|
>
|
|
<ButtonStyled type="transparent">
|
|
<button
|
|
class="cursor-pointer focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand"
|
|
:class="{ '!text-contrast': index === breadcrumbSegments.length - 1 }"
|
|
@click="$emit('navigate', index)"
|
|
>
|
|
{{ segment || "" }}
|
|
</button>
|
|
</ButtonStyled>
|
|
<ChevronRightIcon
|
|
v-if="index < breadcrumbSegments.length"
|
|
class="size-4 text-secondary"
|
|
aria-hidden="true"
|
|
/>
|
|
</li>
|
|
<li class="flex items-center px-3 text-sm">
|
|
<span class="font-semibold !text-contrast" aria-current="location">{{
|
|
fileName
|
|
}}</span>
|
|
</li>
|
|
</ol>
|
|
</li>
|
|
</ol>
|
|
</nav>
|
|
<div v-if="!isImage" class="flex gap-2">
|
|
<Button
|
|
v-if="isLogFile"
|
|
v-tooltip="'Share to mclo.gs'"
|
|
icon-only
|
|
transparent
|
|
aria-label="Share to mclo.gs"
|
|
@click="$emit('share')"
|
|
>
|
|
<ShareIcon />
|
|
</Button>
|
|
<ButtonStyled type="transparent">
|
|
<UiServersTeleportOverflowMenu
|
|
position="bottom"
|
|
direction="left"
|
|
aria-label="Save file"
|
|
:options="[
|
|
{ id: 'save', action: () => $emit('save') },
|
|
{ id: 'save-as', action: () => $emit('save-as') },
|
|
{ id: 'save&restart', action: () => $emit('save-restart') },
|
|
]"
|
|
>
|
|
<SaveIcon aria-hidden="true" />
|
|
<DropdownIcon aria-hidden="true" class="h-5 w-5 text-secondary" />
|
|
<template #save> <SaveIcon aria-hidden="true" /> Save </template>
|
|
<template #save-as> <SaveIcon aria-hidden="true" /> Save as... </template>
|
|
<template #save&restart>
|
|
<svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
>
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M15.312 11.424a5.5 5.5 0 0 1-9.201 2.466l-.312-.311h2.433a.75.75 0 0 0 0-1.5H3.989a.75.75 0 0 0-.75.75v4.242a.75.75 0 0 0 1.5 0v-2.43l.31.31a7 7 0 0 0 11.712-3.138.75.75 0 0 0-1.449-.39Zm1.23-3.723a.75.75 0 0 0 .219-.53V2.929a.75.75 0 0 0-1.5 0V5.36l-.31-.31A7 7 0 0 0 3.239 8.188a.75.75 0 1 0 1.448.389A5.5 5.5 0 0 1 13.89 6.11l.311.31h-2.432a.75.75 0 0 0 0 1.5h4.243a.75.75 0 0 0 .53-.219Z"
|
|
clip-rule="evenodd"
|
|
/>
|
|
</svg>
|
|
Save & restart
|
|
</template>
|
|
</UiServersTeleportOverflowMenu>
|
|
</ButtonStyled>
|
|
</div>
|
|
</header>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { DropdownIcon, SaveIcon, ShareIcon, HomeIcon, ChevronRightIcon } from "@modrinth/assets";
|
|
import { Button, ButtonStyled } from "@modrinth/ui";
|
|
import { computed } from "vue";
|
|
import { useRoute, useRouter } from "vue-router";
|
|
|
|
const props = defineProps<{
|
|
breadcrumbSegments: string[];
|
|
fileName?: string;
|
|
isImage: boolean;
|
|
filePath?: string;
|
|
}>();
|
|
|
|
const isLogFile = computed(() => {
|
|
return props.filePath?.startsWith("logs") || props.filePath?.endsWith(".log");
|
|
});
|
|
|
|
const route = useRoute();
|
|
const router = useRouter();
|
|
|
|
const emit = defineEmits<{
|
|
(e: "cancel"): void;
|
|
(e: "save"): void;
|
|
(e: "save-as"): void;
|
|
(e: "save-restart"): void;
|
|
(e: "share"): void;
|
|
(e: "navigate", index: number): void;
|
|
}>();
|
|
|
|
const goHome = () => {
|
|
emit("cancel");
|
|
router.push({ path: "/servers/manage/" + route.params.id + "/files" });
|
|
};
|
|
</script>
|