From 2acaa9534b1253a615699f5c84c670ae23de1983 Mon Sep 17 00:00:00 2001 From: Al Murad Uzzaman Date: Sun, 19 May 2024 22:54:59 +0600 Subject: [PATCH] trailing_slash && pagination fn changed --- astro.config.mjs | 2 +- src/layouts/PostSingle.astro | 14 +++--- src/layouts/components/AuthorCard.astro | 23 +++++++--- src/layouts/components/Pagination.astro | 51 +++++++++++++++------- src/pages/[...lang]/[regular].astro | 4 +- src/pages/[...lang]/authors/index.astro | 6 +-- src/pages/[...lang]/blog/page/[slug].astro | 17 ++++---- src/pages/[...lang]/categories/index.astro | 31 +++++++++++-- src/pages/[...lang]/tags/index.astro | 31 +++++++++++-- 9 files changed, 133 insertions(+), 46 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 8f2beda..458ba56 100755 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -22,7 +22,7 @@ const filteredSupportedLang = supportedLang.filter( export default defineConfig({ site: config.site.base_url ? config.site.base_url : "http://examplesite.com", base: config.site.base_path ? config.site.base_path : "/", - trailingSlash: config.site.trailing_slash ? "always" : "never", + trailingSlash: config.site.trailing_slash ? "always" : "ignore", i18n: { locales: filteredSupportedLang, defaultLocale: default_language, diff --git a/src/layouts/PostSingle.astro b/src/layouts/PostSingle.astro index e9eeefc..f4a95f1 100755 --- a/src/layouts/PostSingle.astro +++ b/src/layouts/PostSingle.astro @@ -16,11 +16,15 @@ const { trailing_slash } = config.site; const COLLECTION_FOLDER = "blog"; const { post } = Astro.props; -const { lang } = Astro.params; +let { lang } = Astro.params; + +if (!lang) { + lang = default_language; +} const posts = await getSinglePage( COLLECTION_FOLDER, - lang as keyof ContentEntryMap + lang as keyof ContentEntryMap, ); const similarPosts = similarItems(post, posts); const { Content } = await post.render(); @@ -32,14 +36,14 @@ const constructLocalizedUrl = (url: string) => { default_language_in_path ? `/${lang}${url}` : url, lang, default_language, - trailing_slash + trailing_slash, ); } else { return constructUrl( url, lang as keyof ContentEntryMap, default_language, - trailing_slash + trailing_slash, ); } }; @@ -77,7 +81,7 @@ const constructLocalizedUrl = (url: string) => { categories.map((category: string, index: number) => ( {humanize(category)} diff --git a/src/layouts/components/AuthorCard.astro b/src/layouts/components/AuthorCard.astro index b2e0141..9f14be9 100644 --- a/src/layouts/components/AuthorCard.astro +++ b/src/layouts/components/AuthorCard.astro @@ -1,14 +1,28 @@ --- -import { getLangFromUrl } from "@/lib/utils/i18nUtils"; +import { constructUrl, getLangFromUrl } from "@/lib/utils/i18nUtils"; import { plainify } from "@/lib/utils/textConverter"; import ImageMod from "./ImageMod.astro"; import Social from "./Social.astro"; import config from "@/config/config.json"; -const { default_language } = config.settings; +const { default_language, default_language_in_path } = config.settings; +const { trailing_slash } = config.site; const { data } = Astro.props; const { title, image, social } = data.data; const lang = getLangFromUrl(Astro.url); + +const constructLocalizedUrl = (url: string) => { + if (lang === default_language) { + return constructUrl( + default_language_in_path ? `/${lang}${url}` : url, + lang, + default_language, + trailing_slash, + ); + } else { + return constructUrl(url, lang, default_language, trailing_slash); + } +}; ---
- {title} + {title}

{plainify(data.body?.slice(0, 100))} diff --git a/src/layouts/components/Pagination.astro b/src/layouts/components/Pagination.astro index c5eb4a5..8b9722c 100644 --- a/src/layouts/components/Pagination.astro +++ b/src/layouts/components/Pagination.astro @@ -1,5 +1,9 @@ --- -import { getLangFromUrl } from "@/lib/utils/i18nUtils"; +import { constructUrl, getLangFromUrl } from "@/lib/utils/i18nUtils"; +import config from "@/config/config.json"; +import type { ContentEntryMap } from "astro:content"; +const { default_language, default_language_in_path } = config.settings; +const { trailing_slash } = config.site; const lang = getLangFromUrl(Astro.url); @@ -8,11 +12,7 @@ type Pagination = { currentPage?: number; totalPages?: number; }; -const { - section, - currentPage = 1, - totalPages = 1 -}: Pagination = Astro.props; +const { section, currentPage = 1, totalPages = 1 }: Pagination = Astro.props; const indexPageLink = currentPage === 2; const hasPrevPage = currentPage > 1; @@ -22,6 +22,24 @@ let pageList: number[] = []; for (let i = 1; i <= totalPages; i++) { pageList.push(i); } + +const constructLocalizedUrl = (url: string) => { + if (lang === default_language) { + return constructUrl( + default_language_in_path ? `/${lang}${url}` : url, + lang, + default_language, + trailing_slash, + ); + } else { + return constructUrl( + url, + lang as keyof ContentEntryMap, + default_language, + trailing_slash, + ); + } +}; --- { @@ -35,8 +53,10 @@ for (let i = 1; i <= totalPages; i++) { @@ -85,23 +105,25 @@ for (let i = 1; i <= totalPages; i++) { ) : ( {pagination} - ) + ), )} {/* next page */} {hasNextPage ? ( Next @@ -140,4 +162,3 @@ for (let i = 1; i <= totalPages; i++) { ) } - diff --git a/src/pages/[...lang]/[regular].astro b/src/pages/[...lang]/[regular].astro index 3d95f11..2f9da2c 100755 --- a/src/pages/[...lang]/[regular].astro +++ b/src/pages/[...lang]/[regular].astro @@ -10,7 +10,7 @@ export async function getStaticPaths() { supportedLang.map(async (lang) => { const pages = await getSinglePage("pages", lang as keyof ContentEntryMap); - return pages.map((page) => ({ + return pages.map((page: any) => ({ params: { lang: lang || undefined, regular: page.slug.split("/").pop(), @@ -19,7 +19,7 @@ export async function getStaticPaths() { page, }, })); - }) + }), ); return paths.flat(); } diff --git a/src/pages/[...lang]/authors/index.astro b/src/pages/[...lang]/authors/index.astro index c144956..c95249e 100755 --- a/src/pages/[...lang]/authors/index.astro +++ b/src/pages/[...lang]/authors/index.astro @@ -16,13 +16,13 @@ export function getStaticPaths() { } const { lang } = Astro.params; -const authorIndex = await getListPage( +const authorIndex: any = await getListPage( COLLECTION_FOLDER, - lang as keyof ContentEntryMap + lang as keyof ContentEntryMap, ); const authors = await getSinglePage( COLLECTION_FOLDER, - lang as keyof ContentEntryMap + lang as keyof ContentEntryMap, ); --- diff --git a/src/pages/[...lang]/blog/page/[slug].astro b/src/pages/[...lang]/blog/page/[slug].astro index 8a3c25d..945d6c0 100755 --- a/src/pages/[...lang]/blog/page/[slug].astro +++ b/src/pages/[...lang]/blog/page/[slug].astro @@ -10,10 +10,14 @@ import { sortByDate } from "@/lib/utils/sortFunctions"; import PageHeader from "@/partials/PageHeader.astro"; import PostSidebar from "@/partials/PostSidebar.astro"; import type { ContentEntryMap } from "astro:content"; -import { getCollection } from "astro:content"; const BLOG_FOLDER = "blog"; +const { default_language } = config.settings; -const { slug, lang } = Astro.params; +let { slug, lang } = Astro.params; + +if (!lang) { + lang = default_language; +} const postIndex: any = await getListPage( BLOG_FOLDER, @@ -41,13 +45,10 @@ export async function getStaticPaths() { const paths = await Promise.all( supportedLang.map(async (lang) => { - const posts = await getCollection( + const posts = await getSinglePage( + BLOG_FOLDER, lang as keyof ContentEntryMap, - ({ id }: any) => { - return id.startsWith(BLOG_FOLDER) && !id.endsWith("-index.md"); - }, ); - const totalPages = Math.ceil(posts.length / config.settings.pagination); const langString = lang.toString(); const langPaths = []; @@ -55,7 +56,7 @@ export async function getStaticPaths() { for (let i = 1; i < totalPages; i++) { langPaths.push({ params: { - lang: langString, + lang: langString || undefined, slug: (i + 1).toString(), }, }); diff --git a/src/pages/[...lang]/categories/index.astro b/src/pages/[...lang]/categories/index.astro index 49e8c69..c8af314 100755 --- a/src/pages/[...lang]/categories/index.astro +++ b/src/pages/[...lang]/categories/index.astro @@ -1,10 +1,13 @@ --- +import config from "@/config/config.json"; import Base from "@/layouts/Base.astro"; import { getAllTaxonomy, getTaxonomy } from "@/lib/taxonomyParser.astro"; -import { supportedLang } from "@/lib/utils/i18nUtils"; +import { constructUrl, supportedLang } from "@/lib/utils/i18nUtils"; import { humanize } from "@/lib/utils/textConverter"; import PageHeader from "@/partials/PageHeader.astro"; import type { ContentEntryMap } from "astro:content"; +const { default_language, default_language_in_path } = config.settings; +const { trailing_slash } = config.site; export function getStaticPaths() { const paths = supportedLang.map((lang) => ({ @@ -13,10 +16,32 @@ export function getStaticPaths() { return paths; } -const { lang } = Astro.params; +let { lang } = Astro.params; +if (!lang) { + lang = default_language; +} + const langCollection: keyof ContentEntryMap = lang as keyof ContentEntryMap; const categories = await getTaxonomy(langCollection, "categories"); const allCategories = await getAllTaxonomy(langCollection, "categories"); + +const constructLocalizedUrl = (url: string) => { + if (lang === default_language) { + return constructUrl( + default_language_in_path ? `/${lang}${url}` : url, + lang, + default_language, + trailing_slash, + ); + } else { + return constructUrl( + url, + lang as keyof ContentEntryMap, + default_language, + trailing_slash, + ); + } +}; --- @@ -30,7 +55,7 @@ const allCategories = await getAllTaxonomy(langCollection, "categories"); return (

  • {humanize(category)}{" "} diff --git a/src/pages/[...lang]/tags/index.astro b/src/pages/[...lang]/tags/index.astro index cf25d0b..380957c 100644 --- a/src/pages/[...lang]/tags/index.astro +++ b/src/pages/[...lang]/tags/index.astro @@ -1,10 +1,13 @@ --- +import config from "@/config/config.json"; import Base from "@/layouts/Base.astro"; import { getAllTaxonomy, getTaxonomy } from "@/lib/taxonomyParser.astro"; -import { supportedLang } from "@/lib/utils/i18nUtils"; +import { constructUrl, supportedLang } from "@/lib/utils/i18nUtils"; import { humanize } from "@/lib/utils/textConverter"; import PageHeader from "@/partials/PageHeader.astro"; import type { ContentEntryMap } from "astro:content"; +const { default_language, default_language_in_path } = config.settings; +const { trailing_slash } = config.site; export function getStaticPaths() { const paths = supportedLang.map((lang) => ({ @@ -13,10 +16,32 @@ export function getStaticPaths() { return paths; } -const { lang } = Astro.params; +let { lang } = Astro.params; + +if (!lang) { + lang = default_language; +} const langCollection: keyof ContentEntryMap = lang as keyof ContentEntryMap; const tags = await getTaxonomy(langCollection, "tags"); const allTags = await getAllTaxonomy(langCollection, "tags"); + +const constructLocalizedUrl = (url: string) => { + if (lang === default_language) { + return constructUrl( + default_language_in_path ? `/${lang}${url}` : url, + lang, + default_language, + trailing_slash, + ); + } else { + return constructUrl( + url, + lang as keyof ContentEntryMap, + default_language, + trailing_slash, + ); + } +}; --- @@ -30,7 +55,7 @@ const allTags = await getAllTaxonomy(langCollection, "tags"); return (
  • {humanize(tag)}{" "}