Compare commits
5 Commits
fceafd9841
...
vue-plus-p
| Author | SHA1 | Date | |
|---|---|---|---|
| 6e5317d471 | |||
| 4e63ea50af | |||
| e4392a6781 | |||
| 530c3b0a93 | |||
| e5230a6f27 |
6
package-lock.json
generated
6
package-lock.json
generated
@@ -2361,9 +2361,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001663",
|
"version": "1.0.30001721",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
|
||||||
"integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
|
"integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,12 +6,8 @@
|
|||||||
"about": {
|
"about": {
|
||||||
"h": "About me",
|
"h": "About me",
|
||||||
"text": "<p>Fullstack developer from St. Petersburg.</p> <p>I like to explore new technologies, find unusual approaches to solving problems and work at the intersection of fields.</p>",
|
"text": "<p>Fullstack developer from St. Petersburg.</p> <p>I like to explore new technologies, find unusual approaches to solving problems and work at the intersection of fields.</p>",
|
||||||
"career": "Career:",
|
|
||||||
"career_value": "Selectel",
|
"career_value": "Selectel",
|
||||||
"bachelors": "BSIT:",
|
"masters_value": "ITMO"
|
||||||
"bachelors_value": "SPBSUT",
|
|
||||||
"masters": "MS:",
|
|
||||||
"masters_value": "ITMO (in progress)"
|
|
||||||
},
|
},
|
||||||
"projects": {
|
"projects": {
|
||||||
"h": "Projects",
|
"h": "Projects",
|
||||||
|
|||||||
@@ -1,33 +1,5 @@
|
|||||||
export default async function getStarsForUser(username: string) {
|
export default async function getStars(username: string) {
|
||||||
const userResponse = await request(`/users/${username}`);
|
const resp = await fetch(`https://user-stars.kopyl.dev/${username}`)
|
||||||
if (!userResponse || !userResponse.public_repos) {
|
const body = await resp.json()
|
||||||
throw new Error(userResponse ? userResponse.message : 'User not found.');
|
return body.stars
|
||||||
}
|
|
||||||
|
|
||||||
const pages = Math.ceil(userResponse.public_repos / 100);
|
|
||||||
let repos = [];
|
|
||||||
const fetchReposPromises = [];
|
|
||||||
|
|
||||||
for (let i = 1; i <= pages; i++) {
|
|
||||||
fetchReposPromises.push(request(`/users/${username}/repos?per_page=100&page=${i}`));
|
|
||||||
}
|
|
||||||
|
|
||||||
const reposResponses = await Promise.all(fetchReposPromises);
|
|
||||||
repos = reposResponses.flat();
|
|
||||||
|
|
||||||
return starSum(repos);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function request(url) {
|
|
||||||
const headers= {
|
|
||||||
'User-Agent': 'GitHub StarCounter',
|
|
||||||
// Authorization: `Basic ${Buffer.from(auth).toString('base64')}`
|
|
||||||
};
|
|
||||||
|
|
||||||
const response = await fetch(`https://api.github.com${url}`, { headers });
|
|
||||||
return response.json()
|
|
||||||
}
|
|
||||||
|
|
||||||
async function starSum(repos) {
|
|
||||||
return repos.reduce((acc, curr) => acc + curr.stargazers_count, 0);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,8 @@
|
|||||||
"about": {
|
"about": {
|
||||||
"h": "Обо мне",
|
"h": "Обо мне",
|
||||||
"text": "<p>Fullstack разработчик из Санкт-Петербурга.</p> <p>Люблю разбираться в новых технологиях, находить необычные подходы к решению проблем и работать на пересечении областей.</p>",
|
"text": "<p>Fullstack разработчик из Санкт-Петербурга.</p> <p>Люблю разбираться в новых технологиях, находить необычные подходы к решению проблем и работать на пересечении областей.</p>",
|
||||||
"career": "Работа:",
|
|
||||||
"career_value": "Selectel",
|
"career_value": "Selectel",
|
||||||
"bachelors": "Бакалавриат:",
|
"masters_value": "ИТМО"
|
||||||
"bachelors_value": "СПбГУТ",
|
|
||||||
"masters": "Магистратура:",
|
|
||||||
"masters_value": "ИТМО (в процессе)"
|
|
||||||
},
|
},
|
||||||
"projects": {
|
"projects": {
|
||||||
"h": "Проекты",
|
"h": "Проекты",
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import {loadTranslations} from '$lib/translations';
|
import {loadTranslations} from '$lib/translations';
|
||||||
import type {LayoutLoad} from "./$types";
|
import type {LayoutLoad} from "./$types";
|
||||||
|
|
||||||
export const load: LayoutLoad = async ({ url, data }) => {
|
export const load: LayoutLoad = async ({ data }) => {
|
||||||
const { pathname } = url;
|
|
||||||
const { locale } = data.i18n
|
const { locale } = data.i18n
|
||||||
|
|
||||||
await loadTranslations(locale, pathname);
|
await loadTranslations(locale);
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,19 +17,11 @@
|
|||||||
<div class="grid gap-x-2 grid-cols-[auto_1fr] h-fit items-center text-slate-400">
|
<div class="grid gap-x-2 grid-cols-[auto_1fr] h-fit items-center text-slate-400">
|
||||||
<div class="flex gap-2 items-center">
|
<div class="flex gap-2 items-center">
|
||||||
<MaterialSymbolsWork></MaterialSymbolsWork>
|
<MaterialSymbolsWork></MaterialSymbolsWork>
|
||||||
{$t('about.career')}
|
|
||||||
</div>
|
</div>
|
||||||
{$t('about.career_value')}
|
{$t('about.career_value')}
|
||||||
|
|
||||||
<div class="flex gap-2 items-center">
|
<div class="flex gap-2 items-center">
|
||||||
<MaterialSymbolsSchool></MaterialSymbolsSchool>
|
<MaterialSymbolsSchool></MaterialSymbolsSchool>
|
||||||
{$t('about.bachelors')}
|
|
||||||
</div>
|
|
||||||
{$t('about.bachelors_value')}
|
|
||||||
|
|
||||||
<div class="flex gap-2 items-center">
|
|
||||||
<MaterialSymbolsSchool></MaterialSymbolsSchool>
|
|
||||||
{$t('about.masters')}
|
|
||||||
</div>
|
</div>
|
||||||
{$t('about.masters_value')}
|
{$t('about.masters_value')}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -92,4 +92,8 @@ import { page } from '$app/stores';
|
|||||||
content: '+';
|
content: '+';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:global(article p) {
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
import {metadata as htmlInCssMetadata} from "./html-in-css/+page.svx"
|
import {metadata as htmlInCssMetadata} from "./html-in-css/+page.svx"
|
||||||
import {metadata as thisBlogMetadata} from "./this-blog/+page.svx"
|
import {metadata as thisBlogMetadata} from "./this-blog/+page.svx"
|
||||||
import {metadata as shortsMetadata} from "./shorts/+page.svx"
|
import {metadata as shortsMetadata} from "./shorts/+page.svx"
|
||||||
|
import {metadata as vuePlusPayloadMetadata} from "./vue-plus-payload/+page.svx"
|
||||||
|
|
||||||
const posts = [
|
const posts = [
|
||||||
|
{
|
||||||
|
href: '/blog/vue-plus-payload',
|
||||||
|
...vuePlusPayloadMetadata
|
||||||
|
},
|
||||||
{
|
{
|
||||||
href: '/blog/shorts',
|
href: '/blog/shorts',
|
||||||
...shortsMetadata
|
...shortsMetadata
|
||||||
|
|||||||
15
src/routes/blog/vue-plus-payload/+page.svx
Normal file
15
src/routes/blog/vue-plus-payload/+page.svx
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
title: "Vue + Payload"
|
||||||
|
date: "2025-xx-xx"
|
||||||
|
---
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ArticleTitle from "$lib/components/ArticleTitle.svelte"
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<ArticleTitle metadata={metadata}/>
|
||||||
|
|
||||||
|
Я разработал интеграцию между Vue и Payload CMS, превращающую последнюю в конструктор сайтов использующий готовые компоненты
|
||||||
|
Vue, которые есть в существующем проекте.
|
||||||
|
|
||||||
|
Допустим вы уже построили сайт, на котором сверстаны компоненты, они используются
|
||||||
@@ -13,7 +13,9 @@
|
|||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"*.config.ts",
|
"*.config.ts",
|
||||||
"src/**/*.svx",
|
"src/routes/blog/**/*.svx",
|
||||||
|
"src/**/*.svelte",
|
||||||
|
"src/**/*.ts",
|
||||||
"rehype/**/*.ts"
|
"rehype/**/*.ts"
|
||||||
]
|
]
|
||||||
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
|
// Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias
|
||||||
|
|||||||
Reference in New Issue
Block a user