Added Bootstrap's top nav
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/vue": "^7.0.2",
|
"@astrojs/vue": "^7.0.2",
|
||||||
"@nanostores/vue": "^1.0.1",
|
"@nanostores/vue": "^1.0.1",
|
||||||
|
"@popperjs/core": "^2.11.8",
|
||||||
"astro": "^7.2.10",
|
"astro": "^7.2.10",
|
||||||
"bootstrap": "^5.3.8",
|
"bootstrap": "^5.3.8",
|
||||||
"nanostores": "^1.1.0",
|
"nanostores": "^1.1.0",
|
||||||
|
|||||||
Generated
+3
@@ -14,6 +14,9 @@ importers:
|
|||||||
'@nanostores/vue':
|
'@nanostores/vue':
|
||||||
specifier: ^1.0.1
|
specifier: ^1.0.1
|
||||||
version: 1.0.1(@nanostores/logger@1.0.0(nanostores@1.1.0))(nanostores@1.1.0)(vue@3.5.42(typescript@5.9.3))
|
version: 1.0.1(@nanostores/logger@1.0.0(nanostores@1.1.0))(nanostores@1.1.0)(vue@3.5.42(typescript@5.9.3))
|
||||||
|
'@popperjs/core':
|
||||||
|
specifier: ^2.11.8
|
||||||
|
version: 2.11.8
|
||||||
astro:
|
astro:
|
||||||
specifier: ^7.2.10
|
specifier: ^7.2.10
|
||||||
version: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@25.0.3)(sass-embedded@1.104.0)(sass@1.104.0)
|
version: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@25.0.3)(sass-embedded@1.104.0)(sass@1.104.0)
|
||||||
|
|||||||
@@ -3,34 +3,15 @@ import Link from './top_nav/Link.astro'
|
|||||||
import UserAction from './top_nav/UserAction.vue'
|
import UserAction from './top_nav/UserAction.vue'
|
||||||
---
|
---
|
||||||
|
|
||||||
<nav>
|
<nav class="navbar navbar-expand bg-primary-subtle">
|
||||||
<a class="brand" href="/">NV</a>
|
<div class="container-fluid">
|
||||||
<ul class="center">
|
<a class="brand p-2" href="/">NV</a>
|
||||||
<li><Link href="/auctions">Auctions</Link></li>
|
|
||||||
|
<ul class="navbar-nav me-auto">
|
||||||
|
<li class="nav-item"><Link href="/auctions">Auctions</Link></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="right">
|
<ul class="navbar-nav">
|
||||||
<li><UserAction client:only /></li>
|
<UserAction client:load />
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<style>
|
|
||||||
nav {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
> ul {
|
|
||||||
list-style: none;
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
> .center {
|
|
||||||
margin-inline: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
> .right {
|
|
||||||
margin-left: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import * as bootstrap from 'bootstrap'
|
||||||
@@ -3,6 +3,6 @@ const {href} = Astro.props
|
|||||||
const isActive = Astro.url.pathname.startsWith(href)
|
const isActive = Astro.url.pathname.startsWith(href)
|
||||||
---
|
---
|
||||||
|
|
||||||
<a class:list={[{active: isActive}]} href={href}>
|
<a class:list={["nav-link", {active: isActive}]} href={href}>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</a>
|
</a>
|
||||||
@@ -11,16 +11,22 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div v-if="token === Loading" class="placeholder"></div> <!-- TODO: replace with an actual placeholder -->
|
<li :class="['nav-item', {'dropdown': (token !== Loading && token !== Anonymous)}]">
|
||||||
<a href="/login" v-else-if="token === Anonymous">Login</a>
|
<div v-if="token === Loading" class="placeholder"></div>
|
||||||
<span v-else>{{ token.username || "Username" }}</span>
|
<a v-else-if="token === Anonymous" class="nav-link" href="/login">Login</a>
|
||||||
|
<template v-else>
|
||||||
|
<a href="#" class="btn btn-secondary dropdown-toggle" role="button"
|
||||||
|
data-bs-toggle="dropdown">{{ token.username || "Username" }}</a>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
|
<li><a href="#" class="dropdown-item">Logout</a></li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
</li>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.placeholder {
|
.placeholder {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 2em;
|
width: 2em;
|
||||||
height: 1em;
|
}
|
||||||
background: gray;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
---
|
---
|
||||||
import '../styles/app.scss'
|
import '../styles/app.scss'
|
||||||
|
|
||||||
import TopNav from '../components/TopNav.astro'
|
import TopNav from '../components/TopNav.astro'
|
||||||
|
|
||||||
const {title} = Astro.props
|
const {title} = Astro.props
|
||||||
@@ -13,14 +14,16 @@ const {title} = Astro.props
|
|||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg"/>
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg"/>
|
||||||
<meta name="generator" content={Astro.generator}/>
|
<meta name="generator" content={Astro.generator}/>
|
||||||
<title>Neon Vertigo</title>
|
<title>Neon Vertigo</title>
|
||||||
<script src="../components/scripts/load_token.js"></script>
|
<script src="../components/scripts/load_bootstrap.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
<TopNav />
|
<TopNav />
|
||||||
</header>
|
</header>
|
||||||
|
<main class="container">
|
||||||
<h1>{title}</h1>
|
<h1>{title}</h1>
|
||||||
<slot/>
|
<slot/>
|
||||||
|
</main>
|
||||||
|
|
||||||
{import.meta.env.DEV &&
|
{import.meta.env.DEV &&
|
||||||
<script>
|
<script>
|
||||||
|
|||||||
Reference in New Issue
Block a user