mirror of
https://github.com/xHyroM/website.git
synced 2024-11-10 01:38:05 +01:00
refactor: cleanup
This commit is contained in:
parent
016872e3af
commit
c4b15d1fad
25 changed files with 452 additions and 482 deletions
|
@ -1,2 +1,2 @@
|
||||||
dist/*
|
dist/**
|
||||||
node_modules/*
|
node_modules/**
|
|
@ -17,6 +17,10 @@ import prefetch from "@astrojs/prefetch";
|
||||||
import robotsTxt from "astro-robots-txt";
|
import robotsTxt from "astro-robots-txt";
|
||||||
import minify from "./astro-integrations/minify";
|
import minify from "./astro-integrations/minify";
|
||||||
|
|
||||||
|
import { dirname, resolve } from "node:path";
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
site: "https://xhyrom.dev/",
|
site: "https://xhyrom.dev/",
|
||||||
|
@ -40,4 +44,15 @@ export default defineConfig({
|
||||||
}),
|
}),
|
||||||
minify(),
|
minify(),
|
||||||
],
|
],
|
||||||
|
vite: {
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
"~": resolve(__dirname, "./src"),
|
||||||
|
"@pages": resolve(__dirname, "./src/pages"),
|
||||||
|
"@assets": resolve(__dirname, "./src/assets"),
|
||||||
|
"@layouts": resolve(__dirname, "./src/layouts"),
|
||||||
|
"@components": resolve(__dirname, "./src/components"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
---
|
|
||||||
const { schemaOrg } = Astro.props;
|
|
||||||
---
|
|
||||||
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<!-- Primary Meta Tags -->
|
|
||||||
<title>xHyroM</title>
|
|
||||||
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
|
||||||
<meta name="title" content="xHyroM" />
|
|
||||||
<meta name="description" content="I'm Hyro :) o/" />
|
|
||||||
<meta name="keywords" content="xhyrom developer dev hyro hyrousek" />
|
|
||||||
|
|
||||||
<!-- Open Graph / Facebook -->
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content="https://xhyrom.dev/" />
|
|
||||||
<meta property="og:title" content="xHyroM" />
|
|
||||||
<meta property="og:description" content="I'm Hyro :) o/" />
|
|
||||||
<meta property="og:image" content="/banner.png" />
|
|
||||||
|
|
||||||
<!-- Twitter -->
|
|
||||||
<meta property="twitter:card" content="summary_large_image" />
|
|
||||||
<meta property="twitter:url" content="https://xhyrom.dev/" />
|
|
||||||
<meta property="twitter:title" content="xHyroM" />
|
|
||||||
<meta property="twitter:description" content="I'm Hyro :) o/" />
|
|
||||||
<meta property="twitter:image" content="/banner.png" />
|
|
||||||
|
|
||||||
<!-- CSP -->
|
|
||||||
<meta
|
|
||||||
http-equiv="Content-Security-Policy"
|
|
||||||
content="img-src 'self'; font-src *; style-src 'self' 'unsafe-inline' fonts.googleapis.com; script-src 'self' 'unsafe-inline'; object-src 'none'"
|
|
||||||
/>
|
|
||||||
|
|
||||||
{
|
|
||||||
schemaOrg && (
|
|
||||||
<script type="application/ld+json" set:html={JSON.stringify(schemaOrg)} />
|
|
||||||
)
|
|
||||||
}
|
|
24
src/components/widgets/SEOEmbed.astro
Normal file
24
src/components/widgets/SEOEmbed.astro
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
const { url, title, description, image } = {
|
||||||
|
// default values
|
||||||
|
url: "https://xhyrom.dev/",
|
||||||
|
title: "xHyroM",
|
||||||
|
description: "I'm Hyro :) o/",
|
||||||
|
image: "/banner.png",
|
||||||
|
...Astro.props,
|
||||||
|
};
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- Open Graph / Facebook -->
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:url" content={url} />
|
||||||
|
<meta property="og:title" content={title} />
|
||||||
|
<meta property="og:description" content={description} />
|
||||||
|
<meta property="og:image" content="/banner.png" />
|
||||||
|
|
||||||
|
<!-- Twitter -->
|
||||||
|
<meta property="twitter:card" content="summary_large_image" />
|
||||||
|
<meta property="twitter:url" content={url} />
|
||||||
|
<meta property="twitter:title" content={title} />
|
||||||
|
<meta property="twitter:description" content={description} />
|
||||||
|
<meta property="twitter:image" content="/banner.png" />
|
|
@ -1,61 +0,0 @@
|
||||||
---
|
|
||||||
const url = Astro.url.pathname;
|
|
||||||
const { title, date } = Astro.props;
|
|
||||||
---
|
|
||||||
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<!-- Primary Meta Tags -->
|
|
||||||
<title>xHyroM</title>
|
|
||||||
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
|
||||||
<meta name="title" content="xHyroM" />
|
|
||||||
<meta name="description" content={title} />
|
|
||||||
<meta name="keywords" content="xhyrom developer dev hyro hyrousek" />
|
|
||||||
|
|
||||||
<!-- Open Graph / Facebook -->
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:url" content={`https://xhyrom.dev${url}`} />
|
|
||||||
<meta property="og:title" content="xHyroM" />
|
|
||||||
<meta property="og:description" content={title} />
|
|
||||||
<meta property="og:image" content="/banner.png" />
|
|
||||||
|
|
||||||
<!-- Twitter -->
|
|
||||||
<meta property="twitter:card" content="summary_large_image" />
|
|
||||||
<meta property="twitter:url" content={`https://xhyrom.dev${url}`} />
|
|
||||||
<meta property="twitter:title" content="xHyroM" />
|
|
||||||
<meta property="twitter:description" content={title} />
|
|
||||||
<meta property="twitter:image" content="/banner.png" />
|
|
||||||
|
|
||||||
<!-- CSP -->
|
|
||||||
<meta
|
|
||||||
http-equiv="Content-Security-Policy"
|
|
||||||
content="img-src 'self'; font-src *; style-src 'self' 'unsafe-inline' fonts.googleapis.com; script-src 'self' 'unsafe-inline'; object-src 'none'"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<script
|
|
||||||
type="application/ld+json"
|
|
||||||
set:html={JSON.stringify({
|
|
||||||
"@context": "https://schema.org",
|
|
||||||
"@type": "BlogPosting",
|
|
||||||
mainEntityOfPage: {
|
|
||||||
"@type": "WebPage",
|
|
||||||
"@id": `https://xhyrom.dev${url}`,
|
|
||||||
},
|
|
||||||
headline: title,
|
|
||||||
description: title,
|
|
||||||
image: "https://xhyrom.dev/banner.png",
|
|
||||||
author: {
|
|
||||||
"@type": "Person",
|
|
||||||
name: "xHyroM",
|
|
||||||
url: "https://xhyrom.dev",
|
|
||||||
},
|
|
||||||
publisher: {
|
|
||||||
"@type": "Person",
|
|
||||||
name: "xHyroM",
|
|
||||||
url: "https://xhyrom.dev"
|
|
||||||
},
|
|
||||||
datePublished: new Date(date).toISOString().split("T")[0],
|
|
||||||
dateModified: new Date(date).toISOString().split("T")[0],
|
|
||||||
})}
|
|
||||||
></script>
|
|
|
@ -3,58 +3,58 @@ import type { MarkdownInstance } from "astro";
|
||||||
|
|
||||||
import rightArrow from "../../../../public/icons/chevrons-right.svg";
|
import rightArrow from "../../../../public/icons/chevrons-right.svg";
|
||||||
|
|
||||||
const files = await Astro.glob("../../../pages/docs/items/**/*.md");
|
const files = await Astro.glob("@pages/docs/items/**/*.md");
|
||||||
|
|
||||||
const sections = files.reduce((acc, file) => {
|
const sections = files.reduce((acc, file) => {
|
||||||
const category: string = file.url!.split("/")[3];
|
const category: string = file.url!.split("/")[3];
|
||||||
|
|
||||||
if (!acc[category]) acc[category] = [];
|
if (!acc[category]) acc[category] = [];
|
||||||
|
|
||||||
acc[category].push(file);
|
acc[category].push(file);
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}, {} as Record<string, MarkdownInstance<Record<string, any>>[]>);
|
}, {} as Record<string, MarkdownInstance<Record<string, any>>[]>);
|
||||||
|
|
||||||
const categories = Object.keys(sections);
|
const categories = Object.keys(sections);
|
||||||
---
|
---
|
||||||
|
|
||||||
<aside aria-label="Sidebar">
|
<aside aria-label="Sidebar">
|
||||||
<div class="absolute z-10 text-white md:hidden">
|
<div class="absolute z-10 text-white md:hidden">
|
||||||
<button id="sidebar-show" class="p-4 pl-2">
|
<button id="sidebar-show" class="p-4 pl-2">
|
||||||
<span class="sr-only">sidebar menu</span>
|
<span class="sr-only">sidebar menu</span>
|
||||||
<img
|
<img
|
||||||
src={rightArrow}
|
src={rightArrow}
|
||||||
alt="sidebar hamburger menu icon"
|
alt="sidebar hamburger menu icon"
|
||||||
id="open-arrow"
|
id="open-arrow"
|
||||||
class="h-6 w-6 duration-200"
|
class="h-6 w-6 duration-200"
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<nav
|
<nav
|
||||||
id="sidebar"
|
id="sidebar"
|
||||||
class="invisible absolute mt-6 mr-16 w-full -translate-x-full bg-dark py-4 transition-transform duration-200 md:visible md:relative md:mt-0 md:inline md:translate-x-0 md:bg-transparent"
|
class="invisible absolute mr-16 mt-6 w-full -translate-x-full bg-dark py-4 transition-transform duration-200 md:visible md:relative md:mt-0 md:inline md:translate-x-0 md:bg-transparent"
|
||||||
>
|
>
|
||||||
<ul class="overflow-y-auto overflow-x-visible">
|
<ul class="overflow-y-auto overflow-x-visible">
|
||||||
{
|
{
|
||||||
categories.map((category) => (
|
categories.map((category) => (
|
||||||
<li>
|
<li>
|
||||||
<div class="pt-5">
|
<div class="pt-5">
|
||||||
<h1 class="w-full text-2xl font-extrabold text-white ">
|
<h1 class="w-full text-2xl font-extrabold text-white ">
|
||||||
{category}
|
{category}
|
||||||
</h1>
|
</h1>
|
||||||
<ul>
|
<ul>
|
||||||
{sections[category].map((section) => (
|
{sections[category].map((section) => (
|
||||||
<li class="my-2 rounded-sm p-2 text-white transition-colors duration-150 hover:bg-white/20">
|
<li class="my-2 rounded-sm p-2 text-white transition-colors duration-150 hover:bg-white/20">
|
||||||
<a href={section.url} class="px-4">
|
<a href={section.url} class="px-4">
|
||||||
{section.frontmatter.title}
|
{section.frontmatter.title}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</nav>
|
</nav>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
---
|
|
||||||
import Socials from "./Socials.astro";
|
|
||||||
import { Picture } from "@astrojs/image/components";
|
|
||||||
import logo from "../../../assets/logo.png";
|
|
||||||
import Name from "./Name.astro";
|
|
||||||
---
|
|
||||||
|
|
||||||
<main
|
|
||||||
class="mt-24 flex flex-col items-center justify-center md:mt-64 md:flex-row"
|
|
||||||
>
|
|
||||||
<div class="justify-cener flex items-center">
|
|
||||||
<Picture
|
|
||||||
src={logo}
|
|
||||||
formats={["png"]}
|
|
||||||
sizes="(max-width: 200px) 100vw, 200px"
|
|
||||||
widths={[200, 400]}
|
|
||||||
alt="descriptive text"
|
|
||||||
class={"h-[200px] w-[200px]"}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<section class="text-center md:ml-6 md:text-left">
|
|
||||||
<Name />
|
|
||||||
<Socials />
|
|
||||||
</section>
|
|
||||||
</main>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<div class="flex drop-shadow-yellow">
|
|
||||||
<h1 class="text-6xl font-extrabold text-white">xHyroM</h1>
|
|
||||||
</div>
|
|
|
@ -1,45 +0,0 @@
|
||||||
---
|
|
||||||
const socials = [
|
|
||||||
{
|
|
||||||
name: "GitHub",
|
|
||||||
link: "https://github.com/xHyroM/",
|
|
||||||
icon: "github.svg",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Discord.svg",
|
|
||||||
link: "https://s.xhyrom.dev/discord",
|
|
||||||
icon: "discord.svg",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Twitter",
|
|
||||||
link: "https://twitter.com/hyrousek/",
|
|
||||||
icon: "twitter.svg",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Instagram",
|
|
||||||
link: "https://www.instagram.com/hyro.dev/",
|
|
||||||
icon: "instagram.svg",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "ko-fi",
|
|
||||||
link: "https://ko-fi.com/xhyrom",
|
|
||||||
icon: "ko-fi.png",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
---
|
|
||||||
|
|
||||||
<ul class="my-5 flex justify-center text-white md:justify-start">
|
|
||||||
{
|
|
||||||
socials.map((social) => (
|
|
||||||
<li class="mr-4 ">
|
|
||||||
<a class="h-10 w-10" href={social.link} title={social.name}>
|
|
||||||
<img
|
|
||||||
class="h-8 w-8 transition-all hover:-translate-y-1"
|
|
||||||
src={`/icons/${social.icon}`}
|
|
||||||
alt={`${social.name} icon`}
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
))
|
|
||||||
}
|
|
||||||
</ul>
|
|
220
src/config.ts
Normal file
220
src/config.ts
Normal file
|
@ -0,0 +1,220 @@
|
||||||
|
export const socials = [
|
||||||
|
{
|
||||||
|
name: "GitHub",
|
||||||
|
link: "https://github.com/xHyroM/",
|
||||||
|
icon: "github.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Discord.svg",
|
||||||
|
link: "https://s.xhyrom.dev/discord",
|
||||||
|
icon: "discord.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Twitter",
|
||||||
|
link: "https://twitter.com/hyrousek/",
|
||||||
|
icon: "twitter.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Instagram",
|
||||||
|
link: "https://www.instagram.com/hyro.dev/",
|
||||||
|
icon: "instagram.svg",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ko-fi",
|
||||||
|
link: "https://ko-fi.com/xhyrom",
|
||||||
|
icon: "ko-fi.png",
|
||||||
|
},
|
||||||
|
] as {
|
||||||
|
name: string;
|
||||||
|
link: string;
|
||||||
|
icon: string;
|
||||||
|
}[];
|
||||||
|
|
||||||
|
export const skills = [
|
||||||
|
{
|
||||||
|
name: "TypeScript",
|
||||||
|
icon: "logos:typescript-icon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "JavaScript",
|
||||||
|
icon: "logos:javascript",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bun",
|
||||||
|
icon: "logos:bun",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "NodeJS",
|
||||||
|
icon: "logos:nodejs-icon-alt",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Deno",
|
||||||
|
icon: "logos:deno",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "React",
|
||||||
|
icon: "logos:react",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "NextJS",
|
||||||
|
icon: "file-icons:nextjs",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Astro",
|
||||||
|
icon: "vscode-icons:file-type-astro",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "TailwindCSS",
|
||||||
|
icon: "logos:tailwindcss-icon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Java",
|
||||||
|
icon: "logos:java",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Kotlin",
|
||||||
|
icon: "logos:kotlin-icon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Rust",
|
||||||
|
icon: "vscode-icons:file-type-rust",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Go",
|
||||||
|
icon: "vscode-icons:file-type-go-aqua",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MySQL",
|
||||||
|
icon: "logos:mysql-icon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MongoDB",
|
||||||
|
icon: "devicon:mongodb",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Redis",
|
||||||
|
icon: "devicon:redis",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Git",
|
||||||
|
icon: "logos:git-icon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "GitHub",
|
||||||
|
icon: "mdi:github",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "GitHub Actions",
|
||||||
|
icon: "devicon:githubactions",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Cloudflare",
|
||||||
|
icon: "logos:cloudflare",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Cloudflare Pages",
|
||||||
|
icon: "simple-icons:cloudflarepages",
|
||||||
|
color: "#f48120",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Cloudflare Workers",
|
||||||
|
icon: "logos:cloudflare-workers-icon",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Visual Studio Code",
|
||||||
|
icon: "logos:visual-studio-code",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "IntelliJ IDEA",
|
||||||
|
icon: "logos:intellij-idea",
|
||||||
|
},
|
||||||
|
] as {
|
||||||
|
name: string;
|
||||||
|
icon: string;
|
||||||
|
}[];
|
||||||
|
|
||||||
|
export const projects = [
|
||||||
|
{
|
||||||
|
name: "HyLib",
|
||||||
|
link: "https://github.com/xHyroM/HyLib",
|
||||||
|
desc: "Source code for HyLib, a paper plugin and powerful library.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HyChat",
|
||||||
|
link: "https://github.com/xHyroM/HyChat",
|
||||||
|
desc: "Source code for HyChat, a paper plugin.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "HyX",
|
||||||
|
link: "https://github.com/xHyroM/HyX",
|
||||||
|
desc: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque, quaerat.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Mashe",
|
||||||
|
link: "https://github.com/xHyroM/mashe",
|
||||||
|
desc: "Simple, fast, and easy to use Event Handling for Java.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Mumblum",
|
||||||
|
link: "https://github.com/xHyroM/mumblum",
|
||||||
|
desc: "Mumblum is a simple, modern discord bot in JDA.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "setup-bun",
|
||||||
|
link: "https://github.com/oven-sh/setup-bun",
|
||||||
|
desc: "Set up your GitHub Actions workflow with a specific version of Bun.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Roles Bot",
|
||||||
|
link: "https://github.com/xHyroM/roles-bot",
|
||||||
|
desc: 'Discord bot for "button" roles, using Cloudflare Workers.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Bun Discord Bot",
|
||||||
|
link: "https://github.com/xHyroM/bun-discord-bot",
|
||||||
|
desc: "Official serverless discord bot for bun discord server.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "hykord",
|
||||||
|
link: "https://github.com/xHyroM/hykord",
|
||||||
|
desc: "My @discord client modification.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "frog",
|
||||||
|
link: "https://github.com/xHyroM/frog",
|
||||||
|
desc: "Frog is an extremely simple language based on the monkey language.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "lsx",
|
||||||
|
link: "https://github.com/xHyroM/lsx",
|
||||||
|
desc: "Lsx is a simple, fast, and easy to use ls implementation in Rust.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Slovensko v Grafoch",
|
||||||
|
link: "https://github.com/xHyroM/slovensko-v-grafoch",
|
||||||
|
desc: "Slovensko v Grafoch is a website that shows data about Slovakia in graphs.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Peddler's Pocket",
|
||||||
|
link: "https://github.com/xHyroM/peddlerspocket",
|
||||||
|
desc: "/sell command that allows you to put things into GUI and then sell them by closing",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Peak Pursuit",
|
||||||
|
link: "https://github.com/xHyroM/peakpursuit",
|
||||||
|
desc: "PeakPursuit is a plugin for King of the Hill events that adds a competitive edge to your server gameplay. Conquer the hill and claim the crown!",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Spawner Genz",
|
||||||
|
link: "https://github.com/xHyroM/spawnergenz",
|
||||||
|
desc: "Spawner Genz is a plugin that modifies the functionality of spawners so that they don't spawn entities, but instead store drops in a virtual storag in which you can then sell or move everything to your inventory.",
|
||||||
|
},
|
||||||
|
] as {
|
||||||
|
name: string;
|
||||||
|
link: string;
|
||||||
|
desc: string;
|
||||||
|
stats?: {
|
||||||
|
forks: number;
|
||||||
|
stars: number;
|
||||||
|
};
|
||||||
|
}[];
|
|
@ -1,31 +1,49 @@
|
||||||
---
|
---
|
||||||
import Snow from "../components/widgets/Snow.astro";
|
import SEOEmbed from "@components/widgets/SEOEmbed.astro";
|
||||||
import Fireworks from "../components/widgets/Fireworks.astro";
|
|
||||||
import DefaultHead from "../components/widgets/Head.astro";
|
|
||||||
|
|
||||||
const date = new Date();
|
const { title, description, keywords, schemaOrg } = {
|
||||||
|
title: "xHyroM",
|
||||||
const fireworks =
|
description: "I'm Hyro :) o/",
|
||||||
(date.getMonth() === 11 && date.getDate() === 31) ||
|
keywords: "xhyrom developer dev hyro hyrousek",
|
||||||
(date.getMonth() === 0 && date.getDate() <= 3);
|
...Astro.props,
|
||||||
const snow =
|
};
|
||||||
(date.getMonth() === 11 && date.getDate() === 10) ||
|
|
||||||
(date.getMonth() === 0 && date.getDate() <= 3);
|
|
||||||
|
|
||||||
const { head } = Astro.props;
|
|
||||||
const Head = head || DefaultHead;
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en-US">
|
<html lang="en-US">
|
||||||
<head>
|
<head>
|
||||||
<Head {...Astro.props} />
|
<meta charset="UTF-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<!-- Primary Meta Tags -->
|
||||||
|
<title>{title}</title>
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
|
<meta name="title" content={title} />
|
||||||
|
<meta name="description" content={description} />
|
||||||
|
<meta name="keywords" content={keywords} />
|
||||||
|
|
||||||
|
<SEOEmbed {...Astro.props} />
|
||||||
|
|
||||||
|
<!-- CSP -->
|
||||||
|
<meta
|
||||||
|
http-equiv="Content-Security-Policy"
|
||||||
|
content="img-src 'self'; font-src *; style-src 'self' 'unsafe-inline' fonts.googleapis.com; script-src 'self' 'unsafe-inline'; object-src 'none'"
|
||||||
|
/>
|
||||||
|
|
||||||
|
{
|
||||||
|
schemaOrg && (
|
||||||
|
<script
|
||||||
|
type="application/ld+json"
|
||||||
|
set:html={JSON.stringify(schemaOrg)}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
</head>
|
</head>
|
||||||
<body class="overflow-x-hidden bg-dark font-sans">
|
<body class="overflow-x-hidden bg-dark font-sans">
|
||||||
<slot />
|
<slot />
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import "../scripts/menu.js";
|
import "../scripts/menu.ts";
|
||||||
</script>
|
</script>
|
||||||
<style is:global>
|
<style is:global>
|
||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
---
|
---
|
||||||
import PostHead from "../../components/widgets/blog/PostHead.astro";
|
import Container from "@components/atoms/Container.astro";
|
||||||
import Container from "../../components/atoms/Container.astro";
|
import Navbar from "@components/widgets/Navbar.astro";
|
||||||
import Navbar from "../../components/widgets/Navbar.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
import Layout from "../Layout.astro";
|
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
content: {
|
content: {
|
||||||
|
@ -14,16 +13,18 @@ export interface Props {
|
||||||
const {
|
const {
|
||||||
content: { title, date },
|
content: { title, date },
|
||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
|
|
||||||
|
const url = Astro.url.pathname;
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout head={PostHead} title={title} date={date}>
|
<Layout description={title} date={date} url={`https://xhyrom.dev${url}`}>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
<h1 class="w-full py-32 text-center text-5xl font-extrabold text-white">
|
<h1 class="w-full py-32 text-center text-5xl font-extrabold text-white">
|
||||||
{title}
|
{title}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<Container>
|
<Container>
|
||||||
<main class="prose text-2xl prose-invert">
|
<main class="prose prose-invert text-2xl">
|
||||||
<article>
|
<article>
|
||||||
<slot />
|
<slot />
|
||||||
</article>
|
</article>
|
||||||
|
|
|
@ -1,38 +1,38 @@
|
||||||
---
|
---
|
||||||
import Container from "../../components/atoms/Container.astro";
|
import Container from "@components/atoms/Container.astro";
|
||||||
import Sidebar from "../../components/widgets/docs/Sidebar.astro";
|
import Sidebar from "@components/widgets/docs/Sidebar.astro";
|
||||||
import Navbar from "../../components/widgets/Navbar.astro";
|
import Navbar from "@components/widgets/Navbar.astro";
|
||||||
import Layout from "../../layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
|
|
||||||
export interface Props {
|
export interface Props {
|
||||||
content: {
|
content: {
|
||||||
title: string;
|
title: string;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const {
|
const {
|
||||||
content: { title },
|
content: { title },
|
||||||
} = Astro.props;
|
} = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout>
|
<Layout>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
|
|
||||||
<Container class="flex flex-row">
|
<Container class="flex flex-row">
|
||||||
<Sidebar />
|
<Sidebar />
|
||||||
|
|
||||||
<div class="w-full p-8">
|
<div class="w-full p-8">
|
||||||
<h1 class="py-10 text-5xl font-extrabold text-white">
|
<h1 class="py-10 text-5xl font-extrabold text-white">
|
||||||
{title}
|
{title}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<main class="prose text-2xl text-white">
|
<main class="prose text-2xl text-white">
|
||||||
<slot />
|
<slot />
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</Container>
|
</Container>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import "../../scripts/sidebarToggle.js";
|
import "../../scripts/sidebarToggle.js";
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
import Container from "../components/atoms/Container.astro";
|
import Container from "@components/atoms/Container.astro";
|
||||||
import Navbar from "../components/widgets/Navbar.astro";
|
import Navbar from "@components/widgets/Navbar.astro";
|
||||||
import Layout from "../layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout>
|
<Layout>
|
||||||
|
|
|
@ -1,108 +1,9 @@
|
||||||
---
|
---
|
||||||
import Container from "../components/atoms/Container.astro";
|
import Container from "@components/atoms/Container.astro";
|
||||||
import Navbar from "../components/widgets/Navbar.astro";
|
import Navbar from "@components/widgets/Navbar.astro";
|
||||||
import TechIcon from "../components/widgets/TechIcon.astro";
|
import TechIcon from "@components/widgets/TechIcon.astro";
|
||||||
import Layout from "../layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
|
import { skills } from "~/config";
|
||||||
const skills = [
|
|
||||||
{
|
|
||||||
name: "TypeScript",
|
|
||||||
icon: "logos:typescript-icon",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "JavaScript",
|
|
||||||
icon: "logos:javascript",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Bun",
|
|
||||||
icon: "logos:bun",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "NodeJS",
|
|
||||||
icon: "logos:nodejs-icon-alt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Deno",
|
|
||||||
icon: "logos:deno",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "React",
|
|
||||||
icon: "logos:react",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "NextJS",
|
|
||||||
icon: "file-icons:nextjs",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Astro",
|
|
||||||
icon: "vscode-icons:file-type-astro",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "TailwindCSS",
|
|
||||||
icon: "logos:tailwindcss-icon",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Java",
|
|
||||||
icon: "logos:java",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Kotlin",
|
|
||||||
icon: "logos:kotlin-icon",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Rust",
|
|
||||||
icon: "vscode-icons:file-type-rust",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Go",
|
|
||||||
icon: "vscode-icons:file-type-go-aqua",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "MySQL",
|
|
||||||
icon: "logos:mysql-icon",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "MongoDB",
|
|
||||||
icon: "devicon:mongodb",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Redis",
|
|
||||||
icon: "devicon:redis",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Git",
|
|
||||||
icon: "logos:git-icon",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "GitHub",
|
|
||||||
icon: "mdi:github",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "GitHub Actions",
|
|
||||||
icon: "devicon:githubactions",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Cloudflare",
|
|
||||||
icon: "logos:cloudflare",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Cloudflare Pages",
|
|
||||||
icon: "simple-icons:cloudflarepages",
|
|
||||||
color: "#f48120",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Cloudflare Workers",
|
|
||||||
icon: "logos:cloudflare-workers-icon",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Visual Studio Code",
|
|
||||||
icon: "logos:visual-studio-code",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "IntelliJ IDEA",
|
|
||||||
icon: "logos:intellij-idea",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout
|
<Layout
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
import Layout from "../../layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
import Navbar from "../../components/widgets/Navbar.astro";
|
import Navbar from "@components/widgets/Navbar.astro";
|
||||||
import Container from "../../components/atoms/Container.astro";
|
import Container from "@components/atoms/Container.astro";
|
||||||
|
|
||||||
const posts = (await Astro.glob('./posts/*.md')).sort(
|
const posts = (await Astro.glob('./posts/*.md')).sort(
|
||||||
(a, b) => new Date(b.frontmatter.date).valueOf() - new Date(a.frontmatter.date).valueOf()
|
(a, b) => new Date(b.frontmatter.date).valueOf() - new Date(a.frontmatter.date).valueOf()
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
---
|
---
|
||||||
import Layout from "../layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
import Hero from "../components/widgets/index/Hero.astro";
|
import Navbar from "@components/widgets/Navbar.astro";
|
||||||
import Navbar from "../components/widgets/Navbar.astro";
|
import { Picture } from "@astrojs/image/components";
|
||||||
|
import logo from "@assets/logo.png";
|
||||||
|
import { socials } from "../config";
|
||||||
---
|
---
|
||||||
|
|
||||||
<Layout
|
<Layout
|
||||||
|
@ -20,5 +22,40 @@ import Navbar from "../components/widgets/Navbar.astro";
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Navbar />
|
<Navbar />
|
||||||
<Hero />
|
<main
|
||||||
|
class="mt-24 flex flex-col items-center justify-center md:mt-64 md:flex-row"
|
||||||
|
>
|
||||||
|
<div class="justify-cener flex items-center">
|
||||||
|
<Picture
|
||||||
|
src={logo}
|
||||||
|
formats={["png"]}
|
||||||
|
sizes="(max-width: 200px) 100vw, 200px"
|
||||||
|
widths={[200, 400]}
|
||||||
|
aspectRatio={"1:1"}
|
||||||
|
alt="descriptive text"
|
||||||
|
class={"h-[200px] w-[200px]"}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<section class="text-center md:ml-6 md:text-left">
|
||||||
|
<div class="flex drop-shadow-yellow">
|
||||||
|
<h1 class="text-6xl font-extrabold text-white">xHyroM</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul class="my-5 flex justify-center text-white md:justify-start">
|
||||||
|
{
|
||||||
|
socials.map((social) => (
|
||||||
|
<li class="mr-4 ">
|
||||||
|
<a class="h-10 w-10" href={social.link} title={social.name}>
|
||||||
|
<img
|
||||||
|
class="h-8 w-8 transition-all hover:-translate-y-1"
|
||||||
|
src={`/icons/${social.icon}`}
|
||||||
|
alt={`${social.name} icon`}
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
))
|
||||||
|
}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|
|
@ -1,95 +1,8 @@
|
||||||
---
|
---
|
||||||
import Layout from "../layouts/Layout.astro";
|
import Layout from "@layouts/Layout.astro";
|
||||||
import Navbar from "../components/widgets/Navbar.astro";
|
import Navbar from "@components/widgets/Navbar.astro";
|
||||||
import Container from "../components/atoms/Container.astro";
|
import Container from "@components/atoms/Container.astro";
|
||||||
|
import { projects } from "~/config";
|
||||||
interface Project {
|
|
||||||
name: string;
|
|
||||||
link: string;
|
|
||||||
desc: string;
|
|
||||||
stats?: {
|
|
||||||
forks: number;
|
|
||||||
stars: number;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const projects: Project[] = [
|
|
||||||
{
|
|
||||||
name: "HyLib",
|
|
||||||
link: "https://github.com/xHyroM/HyLib",
|
|
||||||
desc: "Source code for HyLib, a paper plugin and powerful library.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "HyChat",
|
|
||||||
link: "https://github.com/xHyroM/HyChat",
|
|
||||||
desc: "Source code for HyChat, a paper plugin.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "HyX",
|
|
||||||
link: "https://github.com/xHyroM/HyX",
|
|
||||||
desc: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque, quaerat.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Mashe",
|
|
||||||
link: "https://github.com/xHyroM/mashe",
|
|
||||||
desc: "Simple, fast, and easy to use Event Handling for Java.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Mumblum",
|
|
||||||
link: "https://github.com/xHyroM/mumblum",
|
|
||||||
desc: "Mumblum is a simple, modern discord bot in JDA.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "setup-bun",
|
|
||||||
link: "https://github.com/oven-sh/setup-bun",
|
|
||||||
desc: "Set up your GitHub Actions workflow with a specific version of Bun.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Roles Bot",
|
|
||||||
link: "https://github.com/xHyroM/roles-bot",
|
|
||||||
desc: 'Discord bot for "button" roles, using Cloudflare Workers.',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Bun Discord Bot",
|
|
||||||
link: "https://github.com/xHyroM/bun-discord-bot",
|
|
||||||
desc: "Official serverless discord bot for bun discord server.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "hykord",
|
|
||||||
link: "https://github.com/xHyroM/hykord",
|
|
||||||
desc: "My @discord client modification.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "frog",
|
|
||||||
link: "https://github.com/xHyroM/frog",
|
|
||||||
desc: "Frog is an extremely simple language based on the monkey language.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "lsx",
|
|
||||||
link: "https://github.com/xHyroM/lsx",
|
|
||||||
desc: "Lsx is a simple, fast, and easy to use ls implementation in Rust.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Slovensko v Grafoch",
|
|
||||||
link: "https://github.com/xHyroM/slovensko-v-grafoch",
|
|
||||||
desc: "Slovensko v Grafoch is a website that shows data about Slovakia in graphs.",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Peddler's Pocket",
|
|
||||||
link: "https://github.com/xHyroM/peddlerspocket",
|
|
||||||
desc: "/sell command that allows you to put things into GUI and then sell them by closing",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Peak Pursuit",
|
|
||||||
link: "https://github.com/xHyroM/peakpursuit",
|
|
||||||
desc: "PeakPursuit is a plugin for King of the Hill events that adds a competitive edge to your server gameplay. Conquer the hill and claim the crown!",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Spawner Genz",
|
|
||||||
link: "https://github.com/xHyroM/spawnergenz",
|
|
||||||
desc: "Spawner Genz is a plugin that modifies the functionality of spawners so that they don't spawn entities, but instead store drops in a virtual storag in which you can then sell or move everything to your inventory.",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
for (const project of projects) {
|
for (const project of projects) {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
document.querySelector(".hamburger").addEventListener("click", () => {
|
|
||||||
document.querySelector(".nav-links").classList.remove("hidden");
|
|
||||||
document.querySelector(".hamburger-close").classList.remove("hidden");
|
|
||||||
});
|
|
||||||
|
|
||||||
document.querySelector(".hamburger-close").addEventListener("click", () => {
|
|
||||||
document.querySelector(".nav-links").classList.toggle("hidden");
|
|
||||||
document.querySelector(".hamburger-close").classList.toggle("hidden");
|
|
||||||
});
|
|
9
src/scripts/menu.ts
Normal file
9
src/scripts/menu.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
document.querySelector(".hamburger")!.addEventListener("click", () => {
|
||||||
|
document.querySelector(".nav-links")!.classList.remove("hidden");
|
||||||
|
document.querySelector(".hamburger-close")!.classList.remove("hidden");
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector(".hamburger-close")!.addEventListener("click", () => {
|
||||||
|
document.querySelector(".nav-links")!.classList.toggle("hidden");
|
||||||
|
document.querySelector(".hamburger-close")!.classList.toggle("hidden");
|
||||||
|
});
|
|
@ -1,6 +0,0 @@
|
||||||
document.getElementById("sidebar-show").addEventListener("click", () => {
|
|
||||||
document.getElementById("sidebar-show").classList.remove("hidden");
|
|
||||||
document.getElementById("sidebar").classList.toggle("-translate-x-full");
|
|
||||||
document.getElementById("sidebar").classList.remove("invisible");
|
|
||||||
document.getElementById("open-arrow").classList.toggle("rotate-180");
|
|
||||||
});
|
|
10
src/scripts/sidebarToggle.ts
Normal file
10
src/scripts/sidebarToggle.ts
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
const sidebarShow = document.getElementById("sidebar-show")!;
|
||||||
|
|
||||||
|
sidebarShow.addEventListener("click", () => {
|
||||||
|
const sidebar = document.getElementById("sidebar")!;
|
||||||
|
|
||||||
|
sidebarShow.classList.remove("hidden");
|
||||||
|
sidebar.classList.toggle("-translate-x-full");
|
||||||
|
sidebar.classList.remove("invisible");
|
||||||
|
document.getElementById("open-arrow")!.classList.toggle("rotate-180");
|
||||||
|
});
|
|
@ -1,4 +1,14 @@
|
||||||
{
|
{
|
||||||
"extends": "astro/tsconfigs/strict",
|
"extends": "astro/tsconfigs/strict",
|
||||||
"exclude": ["node_modules", ".astro"]
|
"compilerOptions": {
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"~/*": ["src/*"],
|
||||||
|
"@pages/*": ["src/pages/*"],
|
||||||
|
"@assets/*": ["src/assets"],
|
||||||
|
"@layouts/*": ["src/layouts/*"],
|
||||||
|
"@components/*": ["src/components/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"exclude": ["node_modules", ".astro", "dist"]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue