mercury/src/layouts/Layout.astro

80 lines
No EOL
2.3 KiB
Text

---
import '../styles/global.css';
import Search from '../components/Search.astro';
import ThemeSwitcher from '../components/ThemeSwitcher.astro';
import BackToTop from "../components/BackToTop.astro";
import { siteConfig } from "../config";
import Meta from "../components/helper/head/Meta.astro";
interface Props {
title: string;
description: string;
path?: string;
ogImage?: string;
}
const defaultTitle = siteConfig.title
const formattedRootPath = defaultTitle.toLowerCase().replace(/\s+/g, '-');
const relativePath = Astro.url.pathname
const path = formattedRootPath + (relativePath === '/' ? '' : relativePath)
const pageTitle = (relativePath === '/' ? defaultTitle : `${Astro.props.title} - ${defaultTitle}`)
const navBarItems = siteConfig.navBarItems
const customFooter = siteConfig.customFooter
const nekoType = siteConfig.neko?.type
const { title = pageTitle, description = siteConfig.description, ogImage = "" } = Astro.props;
---
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} />
<Meta title={pageTitle} description={description} ogImage={ogImage} />
<title>{pageTitle}</title>
</head>
<body>
<main>
<div class="container">
<div class="terminal-path">
{path}
</div>
<nav class="nav">
<a href="/">Home</a>
<a href="/blog">Blog</a>
{navBarItems.map((item) => <a href={item.link}>{item.text}</a>)}
</nav>
<Search />
<div class="content-box">
<slot />
</div>
</div>
</main>
<footer class="footer">
<div class="floating">
<BackToTop/>
<ThemeSwitcher/>
</div>
<div class="container">
<Fragment set:html={customFooter} />
<p>Powered by <a href="https://git.gb0.dev/gb/mercury"><img src="/mercury.svg" width="16px" alt="mercury logo" /> mercury</a></p>
</div>
</footer>
{ siteConfig.neko.enabled &&
<>
<script is:inline define:vars={{ nekoType }}>
window.NekoType = nekoType;
</script>
<script is:inline src="https://webneko.net/n20171213.js"></script>
</>
}
</body>
</html>