You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
101 lines
5.6 KiB
101 lines
5.6 KiB
<script setup> |
|
import { Link, usePage } from '@inertiajs/vue3'; |
|
import NavLink from '@/Components/NavLink.vue'; |
|
import { onMounted, onUpdated, ref, watch } from 'vue'; |
|
import ResponsiveNavLink from '@/Components/ResponsiveNavLink.vue'; |
|
|
|
const user = usePage().props.auth.user; |
|
const banner = usePage().props.banner; |
|
const message = ref(usePage().props.errors.message); |
|
const error = ref(usePage().props.errors.error); |
|
|
|
const isFocus = ref(false); |
|
|
|
onUpdated(() => { |
|
if(message.value != usePage().props.errors.message) { |
|
message.value = usePage().props.errors.message; |
|
setTimeout(() => { |
|
usePage().props.errors.message = null; |
|
message.value = null; |
|
}, 6000); |
|
} |
|
if(error.value != usePage().props.errors.error) { |
|
error.value = usePage().props.errors.error; |
|
setTimeout(() => { |
|
usePage().props.errors.error = null; |
|
error.value = null; |
|
}, 6000); |
|
} |
|
}); |
|
|
|
message.value = usePage().props.errors.message; |
|
error.value = usePage().props.errors.error; |
|
usePage().props.errors.message = null; |
|
usePage().props.errors.error = null; |
|
</script> |
|
|
|
<template> |
|
<nav class="fixed top-0 right-0 left-0 h-16 w-full z-50 bg-gray-950/45"> |
|
<div class="w-full h-full flex items-center justify-between lg:px-[10%] md:px-[5%]"> |
|
|
|
<div class="flex text-lg text-textColor-100 items-center font-medium h-full"> |
|
<Link :href="route('home')" class="md:mr-2"><img src="/img/logo.png" class="md:h-[6.8rem] h-[6.3rem]"></Link> |
|
<NavLink :href="route('home')" :active="route().current('home')" class="mr-5 h-full md:flex items-center hidden">Home</NavLink> |
|
<NavLink :href="route('servers.create')" :active="route().current('servers.create')" class="mr-5 h-full md:flex items-center hidden">Spawn server</NavLink> |
|
<NavLink v-if="user" |
|
:href="route('servers.index')" :active="route().current('servers.index') || route().current('servers.show')" |
|
class="h-full md:flex items-center hidden">Management</NavLink> |
|
</div> |
|
<div v-if="!user" class="md:flex hidden text-lg text-textColor-300 items-center font-medium md:mr-5 mr-1 h-full"> |
|
<NavLink :href="route('login')" :active="route().current('login')" class="mr-5 md:flex items-center hidden h-full">Log in</NavLink> |
|
</div> |
|
<div v-else class="md:flex hidden text-lg text-textColor-300 items-center font-medium md:mr-5 mr-1 h-full"> |
|
<NavLink :href="route('logout')" :active="route().current('logout')" class="mr-5 h-full md:flex items-center hidden">Log out</NavLink> |
|
</div> |
|
<button @click="isFocus = !isFocus" class="md:hidden"> |
|
<img src="/icons/menu.svg" class="h-12 invert mr-1"> |
|
</button> |
|
</div> |
|
</nav> |
|
<div v-show="isFocus" class="md:hidden fixed top-0 right-0 left-0 bottom-0 pt-16 w-full z-40 bg-gray-800"> |
|
<div class="flex flex-col gap-1"> |
|
<ResponsiveNavLink :href="route('home')" :active="route().current('home')" class="mr-5">Home</ResponsiveNavLink> |
|
<ResponsiveNavLink :href="route('servers.create')" :active="route().current('servers.create')" class="mr-5">Spawn server</ResponsiveNavLink> |
|
<ResponsiveNavLink v-if="user" :href="route('servers.index')" :active="route().current('servers.index') || route().current('servers.show')">Management</ResponsiveNavLink> |
|
<ResponsiveNavLink v-if="!user" :href="route('login')" :active="route().current('login')" class="items-center">Log in</ResponsiveNavLink> |
|
<ResponsiveNavLink v-else :href="route('logout')" :active="route().current('logout')" class="items-center">Log out</ResponsiveNavLink> |
|
</div> |
|
</div> |
|
<main class="w-full max-h-full overflow-y-auto text-white"> |
|
<div v-if="banner" class="w-full md:h-80 flex items-center justify-between overflow-hidden"> |
|
<img :src="banner" class="w-full pb-20"> |
|
</div> |
|
<div v-else class="pt-20"></div> |
|
<slot /> |
|
</main> |
|
<!-- Footer --> |
|
<section id="tech" class="py-20 px-6 text-center bg-gray-800 text-white"> |
|
<h2 class="text-3xl font-bold mb-10 fade-in">Notre Technologie</h2> |
|
<p class="text-gray-300 max-w-3xl mx-auto">Tous nos serveurs fonctionnent dans des environnements Docker sécurisés. Ils disposent de 10Go de stockage maximum et s'éteignent automatiquement après une longue période d'inactivité pour garantir des performances optimales.</p> |
|
<p class="text-gray-400 mt-4">Code source disponible sur <a href="https://github.com/anulax1225/minecraft.anulax.ch" class="text-green-400 hover:underline">GitHub</a></p> |
|
</section> |
|
<footer class="bg-gray-800 text-center py-6"> |
|
<p class="text-gray-400">© 2024 Hosting - Tous droits réservés</p> |
|
</footer> |
|
<div v-if="message" class="fixed bottom-0 left-0 right-0 h-16 bg-green-600"> |
|
<div class="relative w-full h-full flex items-center justify-center"> |
|
<div class="absolute top-0 bottom-0 right-0 left-0"> |
|
<div class="h-full bg-green-500 grow"></div> |
|
</div> |
|
<p class="text-white text-2xl font-bold z-10">{{ message }}</p> |
|
</div> |
|
</div> |
|
<div v-if="error" class="fixed bottom-0 left-0 right-0 h-16 bg-red-600"> |
|
<div class="relative w-full h-full flex items-center justify-center"> |
|
<div class="absolute top-0 bottom-0 right-0 left-0"> |
|
<div class="h-full bg-red-500 grow"></div> |
|
</div> |
|
<p class="text-white text-2xl font-bold z-10">{{ error }}</p> |
|
</div> |
|
</div> |
|
</template> |