cozy/src/pages/index.astro

65 lines
No EOL
1.7 KiB
Text

---
import Serialize from "@ayco/astro-resume";
import { ArticleData, extract } from "@extractus/article-extractor";
import AddressBar from "../components/AddressBar.astro";
import Post from "../components/Post.astro";
import Layout from "../layouts/Layout.astro";
import Library from "../components/Library.astro";
import Footer from "../components/Footer.astro";
const appConfig = {
routerOutlet: 'router-outlet',
baseUrl: Astro.url.origin
};
export type AppConfig = typeof appConfig;
let url = Astro.url.searchParams.get('url');
let article: ArticleData | null = {url: '/'};
while (url?.startsWith(Astro.url.origin)) {
url = new URL(url).searchParams.get('url');
}
if (url)
try {
article = await extract(url);
} catch {
article = null;
}
---
<Layout article={article}>
<AddressBar url={url} />
<div slot="post" id={appConfig.routerOutlet}>
<Post article={article} />
</div>
<Library slot="library" skipSave={article === null} />
<Footer slot="footer" />
</Layout>
<Serialize id="app-config" data={appConfig} />
<script>
const registerSW = async () => {
if ("serviceWorker" in navigator) {
try {
const registration = await navigator.serviceWorker.register("/sw.js", {
scope: "/",
});
if (registration.installing) {
console.log("Service worker installing");
} else if (registration.waiting) {
console.log("Service worker installed");
} else if (registration.active) {
console.log("Service worker active");
}
} catch (error) {
console.error(`Registration failed with ${error}`);
}
} else {
console.log('browser doesn\'t support service workers. boo')
}
}
registerSW();
</script>