mirror of
https://github.com/sergeyyarkov/yarkov.tech.git
synced 2026-10-11 18:39:14 +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",
|
telegramUrl: "https://t.me/sergeyyarkov",
|
||||||
},
|
},
|
||||||
nav: [
|
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.about", url: "/about/" },
|
||||||
{ key: "navigation.contacts", url: "/contacts/" },
|
{
|
||||||
|
key: "navigation.contacts",
|
||||||
|
url: "/contacts/",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
projects: [
|
projects: [
|
||||||
{
|
{
|
||||||
@ -112,11 +121,20 @@ export const SITE_METADATA: SiteMetadataType = {
|
|||||||
en: "Programming",
|
en: "Programming",
|
||||||
},
|
},
|
||||||
list: [
|
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: "mysql", name: "SQL" },
|
||||||
{ icon: "graphql", name: "GraphQL" },
|
{ 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: [
|
list: [
|
||||||
{ icon: "nodejs", name: "Node.js" },
|
{ icon: "nodejs", name: "Node.js" },
|
||||||
{ icon: "docker", name: "Docker" },
|
{ icon: "docker", name: "Docker" },
|
||||||
{ icon: "git-branch", name: "Git/gitflow" },
|
{
|
||||||
|
icon: "git-branch",
|
||||||
|
name: "Git/gitflow",
|
||||||
|
},
|
||||||
{ icon: "sass", name: "SASS" },
|
{ icon: "sass", name: "SASS" },
|
||||||
{ icon: "webpack", name: "Webpack" },
|
{ icon: "webpack", name: "Webpack" },
|
||||||
{ icon: "vite", name: "Vite.js" },
|
{ icon: "vite", name: "Vite.js" },
|
||||||
@ -153,7 +174,10 @@ export const SITE_METADATA: SiteMetadataType = {
|
|||||||
en: "Databases",
|
en: "Databases",
|
||||||
},
|
},
|
||||||
list: [
|
list: [
|
||||||
{ icon: "postgresql", name: "PostgreSQL" },
|
{
|
||||||
|
icon: "postgresql",
|
||||||
|
name: "PostgreSQL",
|
||||||
|
},
|
||||||
{ icon: "mongodb", name: "MongoDB" },
|
{ icon: "mongodb", name: "MongoDB" },
|
||||||
{ icon: "redis", name: "Redis" },
|
{ icon: "redis", name: "Redis" },
|
||||||
],
|
],
|
||||||
|
|||||||
@ -17,7 +17,9 @@ export interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
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 entries = Object.keys(modules).map((key) => [key, key.split("/").slice(6)[0]]);
|
||||||
const formatted = formatArticlesByLangs(modules);
|
const formatted = formatArticlesByLangs(modules);
|
||||||
|
|
||||||
@ -26,9 +28,14 @@ export async function getStaticPaths() {
|
|||||||
const article = modules[key];
|
const article = modules[key];
|
||||||
const dirName = key.split("/").at(-3);
|
const dirName = key.split("/").at(-3);
|
||||||
const published_at = new Date(article.frontmatter.published_at).toLocaleDateString("en-CA");
|
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);
|
.filter(({ props: { article } }) => !article.frontmatter.draft);
|
||||||
}
|
}
|
||||||
@ -42,20 +49,6 @@ const { pathname } = Astro.url;
|
|||||||
---
|
---
|
||||||
|
|
||||||
<ArticleLayout lang={siteLang} content={frontmatter} canonicalUrl={canonicalUrl.href}>
|
<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 />
|
<Content />
|
||||||
</ArticleLayout>
|
</ArticleLayout>
|
||||||
|
|||||||
@ -4,7 +4,9 @@ import rss from "@astrojs/rss";
|
|||||||
import { DEFAULT_LANGUAGE, SITE_METADATA } from "@root/config";
|
import { DEFAULT_LANGUAGE, SITE_METADATA } from "@root/config";
|
||||||
import * as utils from "@i18n/utils";
|
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 articles = Object.values(utils.formatArticlesByLangs(data));
|
||||||
const items = [];
|
const items = [];
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,9 @@ import { getLanguageFromURL } from "@utils/url";
|
|||||||
|
|
||||||
class ArticleService {
|
class ArticleService {
|
||||||
public getTranslatedArticles(Astro: Readonly<AstroGlobal>): MDXInstance<ArticleType>[] {
|
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 modules = formatArticlesByLangs(data);
|
||||||
const siteLang = getLanguageFromURL(Astro.url.pathname);
|
const siteLang = getLanguageFromURL(Astro.url.pathname);
|
||||||
const articles: MDXInstance<ArticleType>[] = [];
|
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;
|
githubUrl: string;
|
||||||
telegramUrl: string;
|
telegramUrl: string;
|
||||||
};
|
};
|
||||||
nav: Array<{ key: UIDictionaryKeys; url: string }>;
|
nav: Array<{
|
||||||
|
key: UIDictionaryKeys;
|
||||||
|
url: string;
|
||||||
|
}>;
|
||||||
projects: Array<ProjectType>;
|
projects: Array<ProjectType>;
|
||||||
skills: Array<SkillsType>;
|
skills: Array<SkillsType>;
|
||||||
};
|
};
|
||||||
@ -57,7 +60,10 @@ declare global {
|
|||||||
|
|
||||||
type SkillsType = {
|
type SkillsType = {
|
||||||
title: Record<LanguageKeys, string>;
|
title: Record<LanguageKeys, string>;
|
||||||
list: Array<{ icon?: string | undefined; name: string }>;
|
list: Array<{
|
||||||
|
icon?: string | undefined;
|
||||||
|
name: string;
|
||||||
|
}>;
|
||||||
};
|
};
|
||||||
|
|
||||||
type ContactFieldsType = {
|
type ContactFieldsType = {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user