mirror of
https://github.com/sergeyyarkov/yarkov.tech.git
synced 2026-10-11 10:29:21 +03:00
Merge branch 'develop' of https://github.com/sergeyyarkov/yarkov.tech into develop
This commit is contained in:
commit
946d52fd7c
@ -14,10 +14,19 @@ export const SITE_METADATA: SiteMetadataType = {
|
||||
telegramUrl: "https://t.me/sergeyyarkov",
|
||||
},
|
||||
nav: [
|
||||
{ key: "navigation.articles", url: "/articles/" },
|
||||
{ key: "navigation.projects", url: "/projects/" },
|
||||
{
|
||||
key: "navigation.articles",
|
||||
url: "/articles/",
|
||||
},
|
||||
{
|
||||
key: "navigation.projects",
|
||||
url: "/projects/",
|
||||
},
|
||||
{ key: "navigation.about", url: "/about/" },
|
||||
{ key: "navigation.contacts", url: "/contacts/" },
|
||||
{
|
||||
key: "navigation.contacts",
|
||||
url: "/contacts/",
|
||||
},
|
||||
],
|
||||
projects: [
|
||||
{
|
||||
@ -112,11 +121,20 @@ export const SITE_METADATA: SiteMetadataType = {
|
||||
en: "Programming",
|
||||
},
|
||||
list: [
|
||||
{ icon: "nodejs", name: "Javascript/Typescript" },
|
||||
{ icon: "language-c", name: "C Language" },
|
||||
{
|
||||
icon: "nodejs",
|
||||
name: "Javascript/Typescript",
|
||||
},
|
||||
{
|
||||
icon: "language-c",
|
||||
name: "C Language",
|
||||
},
|
||||
{ icon: "mysql", name: "SQL" },
|
||||
{ icon: "graphql", name: "GraphQL" },
|
||||
{ icon: "avr", name: "AVR instruction set" },
|
||||
{
|
||||
icon: "avr",
|
||||
name: "AVR instruction set",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -141,7 +159,10 @@ export const SITE_METADATA: SiteMetadataType = {
|
||||
list: [
|
||||
{ icon: "nodejs", name: "Node.js" },
|
||||
{ icon: "docker", name: "Docker" },
|
||||
{ icon: "git-branch", name: "Git/gitflow" },
|
||||
{
|
||||
icon: "git-branch",
|
||||
name: "Git/gitflow",
|
||||
},
|
||||
{ icon: "sass", name: "SASS" },
|
||||
{ icon: "webpack", name: "Webpack" },
|
||||
{ icon: "vite", name: "Vite.js" },
|
||||
@ -153,7 +174,10 @@ export const SITE_METADATA: SiteMetadataType = {
|
||||
en: "Databases",
|
||||
},
|
||||
list: [
|
||||
{ icon: "postgresql", name: "PostgreSQL" },
|
||||
{
|
||||
icon: "postgresql",
|
||||
name: "PostgreSQL",
|
||||
},
|
||||
{ icon: "mongodb", name: "MongoDB" },
|
||||
{ icon: "redis", name: "Redis" },
|
||||
],
|
||||
|
||||
@ -17,7 +17,9 @@ export interface Props {
|
||||
}
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const modules = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", { eager: true });
|
||||
const modules = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", {
|
||||
eager: true,
|
||||
});
|
||||
const entries = Object.keys(modules).map((key) => [key, key.split("/").slice(6)[0]]);
|
||||
const formatted = formatArticlesByLangs(modules);
|
||||
|
||||
@ -26,9 +28,14 @@ export async function getStaticPaths() {
|
||||
const article = modules[key];
|
||||
const dirName = key.split("/").at(-3);
|
||||
const published_at = new Date(article.frontmatter.published_at).toLocaleDateString("en-CA");
|
||||
const slug = `${lang !== DEFAULT_LANGUAGE ? `${lang}/` : ""}blog/${published_at}/${article.frontmatter.slug}`;
|
||||
const slug = `${lang !== DEFAULT_LANGUAGE ? `${lang}/` : ""}blog/${published_at}/${
|
||||
article.frontmatter.slug
|
||||
}`;
|
||||
|
||||
return { params: { slug }, props: { article, alternateLangs: Object.keys(formatted[dirName]) } };
|
||||
return {
|
||||
params: { slug },
|
||||
props: { article, alternateLangs: Object.keys(formatted[dirName]) },
|
||||
};
|
||||
})
|
||||
.filter(({ props: { article } }) => !article.frontmatter.draft);
|
||||
}
|
||||
@ -42,20 +49,6 @@ const { pathname } = Astro.url;
|
||||
---
|
||||
|
||||
<ArticleLayout lang={siteLang} content={frontmatter} canonicalUrl={canonicalUrl.href}>
|
||||
{
|
||||
alternateLangs.length > 1 && (
|
||||
<div class="languages-available">
|
||||
{t("article.availableOn")}:
|
||||
{alternateLangs
|
||||
.filter((lang) => lang !== siteLang)
|
||||
.map((lang) => (
|
||||
<a href={DEFAULT_LANGUAGE === lang ? `/${pathname.split("/").slice(2).join("/")}` : `/${lang}${pathname}`}>
|
||||
{languages[lang]}
|
||||
</a>
|
||||
))
|
||||
.reduce((prev, curr) => [prev, ", ", curr])}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
<Content />
|
||||
</ArticleLayout>
|
||||
|
||||
@ -4,7 +4,9 @@ import rss from "@astrojs/rss";
|
||||
import { DEFAULT_LANGUAGE, SITE_METADATA } from "@root/config";
|
||||
import * as utils from "@i18n/utils";
|
||||
|
||||
const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", { eager: true });
|
||||
const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", {
|
||||
eager: true,
|
||||
});
|
||||
const articles = Object.values(utils.formatArticlesByLangs(data));
|
||||
const items = [];
|
||||
|
||||
|
||||
@ -4,7 +4,9 @@ import { getLanguageFromURL } from "@utils/url";
|
||||
|
||||
class ArticleService {
|
||||
public getTranslatedArticles(Astro: Readonly<AstroGlobal>): MDXInstance<ArticleType>[] {
|
||||
const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", { eager: true });
|
||||
const data = import.meta.glob<MDXInstance<ArticleType>>("../../content/articles/**/*.mdx", {
|
||||
eager: true,
|
||||
});
|
||||
const modules = formatArticlesByLangs(data);
|
||||
const siteLang = getLanguageFromURL(Astro.url.pathname);
|
||||
const articles: MDXInstance<ArticleType>[] = [];
|
||||
|
||||
10
src/types/main.d.ts
vendored
10
src/types/main.d.ts
vendored
@ -28,7 +28,10 @@ declare global {
|
||||
githubUrl: string;
|
||||
telegramUrl: string;
|
||||
};
|
||||
nav: Array<{ key: UIDictionaryKeys; url: string }>;
|
||||
nav: Array<{
|
||||
key: UIDictionaryKeys;
|
||||
url: string;
|
||||
}>;
|
||||
projects: Array<ProjectType>;
|
||||
skills: Array<SkillsType>;
|
||||
};
|
||||
@ -57,7 +60,10 @@ declare global {
|
||||
|
||||
type SkillsType = {
|
||||
title: Record<LanguageKeys, string>;
|
||||
list: Array<{ icon?: string | undefined; name: string }>;
|
||||
list: Array<{
|
||||
icon?: string | undefined;
|
||||
name: string;
|
||||
}>;
|
||||
};
|
||||
|
||||
type ContactFieldsType = {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user