aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2024-09-13 01:57:55 +0300
committerValentin Popov <valentin@popov.link>2024-09-13 01:57:55 +0300
commit33c9464dad0979b05323e4d508875ad47e1c425f (patch)
tree2bc986dbbb0278250ec6c48c4a1dae43ea20bd08 /src
parentb16d8ce36ce5c603a4444979c30998416c416929 (diff)
downloadpopov.link-33c9464dad0979b05323e4d508875ad47e1c425f.tar.xz
popov.link-33c9464dad0979b05323e4d508875ad47e1c425f.zip
Refactor Analytics and Head components
Diffstat (limited to 'src')
-rw-r--r--src/components/Analytics.astro16
-rw-r--r--src/components/Head.astro10
-rw-r--r--src/components/Pagination.astro4
-rw-r--r--src/layouts/BaseLayout.astro9
-rw-r--r--src/pages/[...page].astro6
-rw-r--r--src/pages/blog/[...slug].astro6
6 files changed, 33 insertions, 18 deletions
diff --git a/src/components/Analytics.astro b/src/components/Analytics.astro
index 8c4303a..977c610 100644
--- a/src/components/Analytics.astro
+++ b/src/components/Analytics.astro
@@ -1,5 +1,17 @@
---
-const id = "T5X0z12SoASBV8Dv";
+type Props = {
+ readonly title: string;
+};
+
+const path = Astro.url.pathname;
+const { title } = Astro.props;
---
-<script is:inline src={`https://appmetrix.com/pixel/${id}`}></script>
+<!-- AppMetrix -->
+<script is:inline src="https://appmetrix.com/pixel/T5X0z12SoASBV8Dv"></script>
+
+<!-- GoatCounter -->
+<script is:inline data-goatcounter="https://analytics.popov.link/count" src="//gc.zgo.at/count.js"></script>
+<noscript>
+ <img alt="pixel" src={`https://analytics.popov.link/count?p=${path}&t=${title}`} />
+</noscript>
diff --git a/src/components/Head.astro b/src/components/Head.astro
index 7a575a9..9d7f39c 100644
--- a/src/components/Head.astro
+++ b/src/components/Head.astro
@@ -1,18 +1,18 @@
---
type Props = {
- readonly description?: string;
- readonly title?: string;
+ readonly description: string;
+ readonly title: string;
};
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
-const { title, description } = Astro.props;
+const { description, title } = Astro.props;
---
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <meta name="description" content={description ?? import.meta.env.DEFAULT_DESCRIPTION} />
+ <meta name="description" content={description} />
<meta name="robots" content="index, follow" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
@@ -20,5 +20,5 @@ const { title, description } = Astro.props;
<link href="/sitemap-index.xml" rel="sitemap" />
<link href={canonicalURL} rel="canonical" />
- <title>{title ?? import.meta.env.DEFAULT_TITLE}</title>
+ <title>{title}</title>
</head>
diff --git a/src/components/Pagination.astro b/src/components/Pagination.astro
index cc85db7..835ea2d 100644
--- a/src/components/Pagination.astro
+++ b/src/components/Pagination.astro
@@ -3,11 +3,11 @@ import Next from "./Pagination/Next.astro";
import Prev from "./Pagination/Prev.astro";
type Props = {
- readonly prevUrl?: string;
readonly nextUrl?: string;
+ readonly prevUrl?: string;
};
-const { prevUrl, nextUrl } = Astro.props;
+const { nextUrl, prevUrl } = Astro.props;
---
<style lang="scss">
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index 6a253a8..8456916 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -9,17 +9,20 @@ type Props = {
readonly title?: string;
};
-const { title, description } = Astro.props;
+const { description, title } = Astro.props;
---
<html lang="ru">
- <Head title={title} description={description} />
+ <Head
+ description={description ?? import.meta.env.DEFAULT_DESCRIPTION}
+ title={title ?? import.meta.env.DEFAULT_TITLE}
+ />
<body>
<Header />
<main>
<slot />
</main>
- <Analytics />
+ <Analytics title={title ?? import.meta.env.DEFAULT_TITLE} />
</body>
</html>
diff --git a/src/pages/[...page].astro b/src/pages/[...page].astro
index 23a5d51..2a6f5cc 100644
--- a/src/pages/[...page].astro
+++ b/src/pages/[...page].astro
@@ -5,6 +5,8 @@ import Layout from "../layouts/BaseLayout.astro";
import Pagination from "../components/Pagination.astro";
import PostSummary from "../components/PostSummary.astro";
+type Props = InferGetStaticPropsType<typeof getStaticPaths>;
+
export const getStaticPaths = (async ({ paginate }) => {
const posts = await getCollection("blog");
posts.sort((a, b) => b.data.pubDate.getTime() - a.data.pubDate.getTime());
@@ -14,8 +16,6 @@ export const getStaticPaths = (async ({ paginate }) => {
});
}) satisfies GetStaticPaths;
-type Props = InferGetStaticPropsType<typeof getStaticPaths>;
-
const { page } = Astro.props;
---
@@ -25,6 +25,6 @@ const { page } = Astro.props;
</section>
<section>
- <Pagination prevUrl={page.url.prev} nextUrl={page.url.next} />
+ <Pagination nextUrl={page.url.next} prevUrl={page.url.prev} />
</section>
</Layout>
diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro
index 6754653..bcd5eed 100644
--- a/src/pages/blog/[...slug].astro
+++ b/src/pages/blog/[...slug].astro
@@ -3,6 +3,8 @@ import { type CollectionEntry, getCollection } from "astro:content";
import Comments from "../../components/Comments.astro";
import Layout from "../../layouts/BaseLayout.astro";
+type Props = CollectionEntry<"blog">;
+
export async function getStaticPaths() {
const posts = await getCollection("blog");
@@ -12,8 +14,6 @@ export async function getStaticPaths() {
}));
}
-type Props = CollectionEntry<"blog">;
-
const post = Astro.props;
const { Content, remarkPluginFrontmatter } = await post.render();
---
@@ -24,7 +24,7 @@ const { Content, remarkPluginFrontmatter } = await post.render();
}
</style>
-<Layout title={post.data.title} description={post.data.description}>
+<Layout description={post.data.description} title={post.data.title}>
<article>
<section class="header">
<h1>{post.data.title}</h1>