trailing_slash && pagination fn changed

This commit is contained in:
Al Murad Uzzaman
2024-05-19 22:54:59 +06:00
parent 340500efcc
commit 2acaa9534b
9 changed files with 133 additions and 46 deletions
+1 -1
View File
@@ -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,
+9 -5
View File
@@ -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) => (
<a
href={constructLocalizedUrl(
`/categories/${slugify(category)}`
`/categories/${slugify(category)}`,
)}
>
{humanize(category)}
+17 -6
View File
@@ -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);
}
};
---
<div
@@ -27,10 +41,7 @@ const lang = getLangFromUrl(Astro.url);
)
}
<h4 class="mb-3">
<a
href={`/${lang === default_language ? "authors" + "/" : lang}/${data.slug}`}
>{title}</a
>
<a href={constructLocalizedUrl(`/${data.slug}`)}>{title}</a>
</h4>
<p class="mb-4">
{plainify(data.body?.slice(0, 100))}
+36 -15
View File
@@ -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++) {
<a
href={
indexPageLink
? `/${lang}/${section ? section : ""}`
: `/${lang}/${section ? section : ""}/page/${currentPage - 1}`
? constructLocalizedUrl(`/${section ? section : ""}`)
: constructLocalizedUrl(
`/${section ? section : ""}/page/${currentPage - 1}`,
)
}
class="rounded px-2 py-1.5 text-dark hover:bg-theme-light dark:text-darkmode-dark dark:hover:bg-darkmode-theme-light"
>
@@ -85,23 +105,25 @@ for (let i = 1; i <= totalPages; i++) {
</span>
) : (
<a
href={
href={constructLocalizedUrl(
i === 0
? `/${lang}/${section ? section : ""}`
: `/${lang}/${section ? section : ""}/page/${pagination}`
}
? `/${section ? section : ""}`
: `/${section ? section : ""}/page/${pagination}`,
)}
aria-current="page"
class="rounded px-4 py-2 text-dark hover:bg-theme-light dark:text-darkmode-dark dark:hover:bg-darkmode-theme-light"
>
{pagination}
</a>
)
),
)}
{/* next page */}
{hasNextPage ? (
<a
href={`/${lang}/${section ? section : ""}/page/${currentPage + 1}`}
href={constructLocalizedUrl(
`/${section ? section : ""}/page/${currentPage + 1}`,
)}
class="rounded px-2 py-1.5 text-dark hover:bg-theme-light dark:text-darkmode-dark dark:hover:bg-darkmode-theme-light"
>
<span class="sr-only">Next</span>
@@ -140,4 +162,3 @@ for (let i = 1; i <= totalPages; i++) {
</nav>
)
}
+2 -2
View File
@@ -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();
}
+3 -3
View File
@@ -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,
);
---
+9 -8
View File
@@ -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(),
},
});
+28 -3
View File
@@ -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,
);
}
};
---
<Base title={"Categories"}>
@@ -30,7 +55,7 @@ const allCategories = await getAllTaxonomy(langCollection, "categories");
return (
<li class="m-3 inline-block">
<a
href={`/${lang === "" ? "categories" + "/" : lang}/categories/${category}`}
href={constructLocalizedUrl(`/categories/${category}`)}
class="block rounded bg-theme-light px-4 py-2 text-xl text-dark dark:bg-darkmode-theme-light dark:text-darkmode-dark"
>
{humanize(category)}{" "}
+28 -3
View File
@@ -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,
);
}
};
---
<Base title={"Tags"}>
@@ -30,7 +55,7 @@ const allTags = await getAllTaxonomy(langCollection, "tags");
return (
<li class="m-3 inline-block">
<a
href={`/${lang === "" ? "tags" + "/" : lang}/tags/${tag}`}
href={constructLocalizedUrl(`/tags/${tag}`)}
class="block rounded bg-theme-light px-4 py-2 text-xl text-dark dark:bg-darkmode-theme-light dark:text-darkmode-dark"
>
{humanize(tag)}{" "}