Compare commits

..

3 Commits

Author SHA1 Message Date
d5f5fbc606 - Migrate from Decap CMS to Directus
- Added Dockerfile
- New form submittion
- Refactored
2026-02-25 14:09:03 +03:00
65d324064d
Merge pull request #290 from sergeyyarkov/cms/settings/siteconfig
Automatically generated. Merged on Decap CMS.
2025-11-06 23:23:02 +03:00
aa1767721c Update Настройки “siteconfig” 2025-11-06 23:22:38 +03:00
33 changed files with 129 additions and 483 deletions

View File

@ -2,21 +2,18 @@ ARG NODE_IMAGE=node:24.0.0-alpine
FROM ${NODE_IMAGE} AS build FROM ${NODE_IMAGE} AS build
RUN apk add --no-cache python3 make g++
WORKDIR /app WORKDIR /app
COPY package*.json . COPY package*.json .
RUN npm ci RUN npm ci
COPY . . COPY . .
RUN npm run build RUN npm run build
RUN npm prune --omit=dev
FROM ${NODE_IMAGE} AS production FROM ${NODE_IMAGE} AS production
WORKDIR /app WORKDIR /app
COPY --from=build /app/dist ./dist COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/package*.json . COPY --from=build /app/package*.json .
RUN npm ci --omit=dev
EXPOSE 9966 EXPOSE 9966
CMD [ "node", "./dist/server/entry.mjs"] CMD [ "node", "./dist/server/entry.mjs"]

View File

@ -1,6 +1,7 @@
# yarkov.tech # yarkov.tech
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Netlify Status](https://api.netlify.com/api/v1/badges/ccd0460a-9725-4e35-8263-1608c4186d9c/deploy-status)](https://app.netlify.com/sites/yarkov/deploys)
Personal website created with Astro. Personal website created with Astro.
@ -11,9 +12,9 @@ Personal website created with Astro.
- [x] Dark/Light Theme - [x] Dark/Light Theme
- [x] Multilang web-site - [x] Multilang web-site
- [x] Table of contents - [x] Table of contents
- [x] Content management via [Directus](https://directus.io/) - [x] Content management via [NetlifyCMS](https://www.netlifycms.org/)
- [x] Form handling - [x] Form handling via [Netlify Forms](https://www.netlify.com/products/forms/)
- [x] Comment system via [Remark42](https://github.com/umputun/remark42) - [x] Comment system via [Disqus](https://disqus.com/)
- [x] RSS Feed for articles - [x] RSS Feed for articles
- [x] SEO optimized - [x] SEO optimized
- [x] Views counter - [x] Views counter

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "yarkov.tech", "name": "yarkov.tech",
"version": "3.0.1", "version": "2.1.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "yarkov.tech", "name": "yarkov.tech",
"version": "3.0.1", "version": "2.1.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@astrojs/check": "^0.9.5", "@astrojs/check": "^0.9.5",

View File

@ -1,7 +1,7 @@
{ {
"name": "yarkov.tech", "name": "yarkov.tech",
"private": false, "private": false,
"version": "3.0.1", "version": "2.1.0",
"description": "Personal website created with Astro.", "description": "Personal website created with Astro.",
"author": { "author": {
"name": "Sergey Yarkov", "name": "Sergey Yarkov",

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

BIN
public/media/image1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
public/media/image2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

BIN
public/media/image3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
public/media/screen-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
public/media/screen-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
public/media/screen-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

View File

@ -158,9 +158,6 @@ type Subscription {
directus_activity_mutated(event: EventEnum): directus_activity_mutated directus_activity_mutated(event: EventEnum): directus_activity_mutated
directus_comments_mutated(event: EventEnum): directus_comments_mutated directus_comments_mutated(event: EventEnum): directus_comments_mutated
directus_dashboards_mutated(event: EventEnum): directus_dashboards_mutated directus_dashboards_mutated(event: EventEnum): directus_dashboards_mutated
directus_deployment_projects_mutated(event: EventEnum): directus_deployment_projects_mutated
directus_deployment_runs_mutated(event: EventEnum): directus_deployment_runs_mutated
directus_deployments_mutated(event: EventEnum): directus_deployments_mutated
directus_files_mutated(event: EventEnum): directus_files_mutated directus_files_mutated(event: EventEnum): directus_files_mutated
directus_flows_mutated(event: EventEnum): directus_flows_mutated directus_flows_mutated(event: EventEnum): directus_flows_mutated
directus_folders_mutated(event: EventEnum): directus_folders_mutated directus_folders_mutated(event: EventEnum): directus_folders_mutated
@ -177,6 +174,7 @@ type Subscription {
directus_translations_mutated(event: EventEnum): directus_translations_mutated directus_translations_mutated(event: EventEnum): directus_translations_mutated
directus_users_mutated(event: EventEnum): directus_users_mutated directus_users_mutated(event: EventEnum): directus_users_mutated
directus_versions_mutated(event: EventEnum): directus_versions_mutated directus_versions_mutated(event: EventEnum): directus_versions_mutated
directus_webhooks_mutated(event: EventEnum): directus_webhooks_mutated
global_mutated(event: EventEnum): global_mutated global_mutated(event: EventEnum): global_mutated
global_translations_mutated(event: EventEnum): global_translations_mutated global_translations_mutated(event: EventEnum): global_translations_mutated
home_page_mutated(event: EventEnum): home_page_mutated home_page_mutated(event: EventEnum): home_page_mutated
@ -246,6 +244,7 @@ type appeal_mutated {
type article { type article {
id: ID! id: ID!
title: String
translations(filter: article_translations_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article_translations] translations(filter: article_translations_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article_translations]
translations_func: count_functions translations_func: count_functions
} }
@ -265,6 +264,7 @@ type article_aggregated {
type article_aggregated_count { type article_aggregated_count {
id: Int id: Int
title: Int
translations: Int translations: Int
} }
@ -276,6 +276,7 @@ input article_filter {
_and: [article_filter] _and: [article_filter]
_or: [article_filter] _or: [article_filter]
id: number_filter_operators id: number_filter_operators
title: string_filter_operators
translations: article_translations_quantifier_filter translations: article_translations_quantifier_filter
translations_func: count_function_filter_operators translations_func: count_function_filter_operators
} }
@ -486,6 +487,7 @@ input create_appeal_input {
input create_article_input { input create_article_input {
id: ID id: ID
title: String
translations: [create_article_translations_input] translations: [create_article_translations_input]
} }
@ -859,130 +861,6 @@ type directus_dashboards_mutated {
key: ID! key: ID!
} }
type directus_deployment_projects {
date_created: Date
date_created_func: datetime_functions
deployment(filter: directus_deployments_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): directus_deployments
external_id: String!
id: ID!
name: String!
runs(filter: directus_deployment_runs_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [directus_deployment_runs]
runs_func: count_functions
user_created(filter: directus_users_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): directus_users
}
input directus_deployment_projects_filter {
_and: [directus_deployment_projects_filter]
_or: [directus_deployment_projects_filter]
date_created: date_filter_operators
date_created_func: datetime_function_filter_operators
deployment: directus_deployments_filter
external_id: string_filter_operators
id: id_filter_operators
name: string_filter_operators
runs: directus_deployment_runs_quantifier_filter
runs_func: count_function_filter_operators
user_created: directus_users_filter
}
type directus_deployment_projects_mutated {
data: directus_deployment_projects
event: EventEnum
key: ID!
}
input directus_deployment_projects_quantifier_filter {
_and: [directus_deployment_projects_filter]
_none: directus_deployment_projects_filter
_or: [directus_deployment_projects_filter]
_some: directus_deployment_projects_filter
date_created: date_filter_operators
date_created_func: datetime_function_filter_operators
deployment: directus_deployments_filter
external_id: string_filter_operators
id: id_filter_operators
name: string_filter_operators
runs: directus_deployment_runs_quantifier_filter
runs_func: count_function_filter_operators
user_created: directus_users_filter
}
type directus_deployment_runs {
date_created: Date
date_created_func: datetime_functions
external_id: String!
id: ID!
project(filter: directus_deployment_projects_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): directus_deployment_projects
target: String!
user_created(filter: directus_users_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): directus_users
}
input directus_deployment_runs_filter {
_and: [directus_deployment_runs_filter]
_or: [directus_deployment_runs_filter]
date_created: date_filter_operators
date_created_func: datetime_function_filter_operators
external_id: string_filter_operators
id: id_filter_operators
project: directus_deployment_projects_filter
target: string_filter_operators
user_created: directus_users_filter
}
type directus_deployment_runs_mutated {
data: directus_deployment_runs
event: EventEnum
key: ID!
}
input directus_deployment_runs_quantifier_filter {
_and: [directus_deployment_runs_filter]
_none: directus_deployment_runs_filter
_or: [directus_deployment_runs_filter]
_some: directus_deployment_runs_filter
date_created: date_filter_operators
date_created_func: datetime_function_filter_operators
external_id: string_filter_operators
id: id_filter_operators
project: directus_deployment_projects_filter
target: string_filter_operators
user_created: directus_users_filter
}
type directus_deployments {
credentials: String
date_created: Date
date_created_func: datetime_functions
id: ID!
options: JSON
options_func: count_functions
projects(filter: directus_deployment_projects_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [directus_deployment_projects]
projects_func: count_functions
provider: String!
user_created(filter: directus_users_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): directus_users
}
input directus_deployments_filter {
_and: [directus_deployments_filter]
_or: [directus_deployments_filter]
credentials: string_filter_operators
date_created: date_filter_operators
date_created_func: datetime_function_filter_operators
id: id_filter_operators
options: string_filter_operators
options_func: count_function_filter_operators
projects: directus_deployment_projects_quantifier_filter
projects_func: count_function_filter_operators
provider: string_filter_operators
user_created: directus_users_filter
}
type directus_deployments_mutated {
data: directus_deployments
event: EventEnum
key: ID!
}
type directus_files { type directus_files {
charset: String charset: String
created_on: Date created_on: Date
@ -1509,30 +1387,10 @@ input directus_roles_quantifier_filter {
} }
type directus_settings { type directus_settings {
ai_anthropic_allowed_models: JSON
ai_anthropic_allowed_models_func: count_functions
ai_anthropic_api_key: String
ai_google_allowed_models: JSON
ai_google_allowed_models_func: count_functions
ai_google_api_key: String
ai_openai_allowed_models: JSON
ai_openai_allowed_models_func: count_functions
ai_openai_api_key: String
ai_openai_compatible_api_key: String
ai_openai_compatible_base_url: String
ai_openai_compatible_headers: JSON
ai_openai_compatible_headers_func: count_functions
ai_openai_compatible_models: JSON
ai_openai_compatible_models_func: count_functions
ai_openai_compatible_name: String
"""$t:fields.directus_settings.ai_system_prompt_note"""
ai_system_prompt: String
auth_login_attempts: Int auth_login_attempts: Int
auth_password_policy: String auth_password_policy: String
basemaps: JSON basemaps: JSON
basemaps_func: count_functions basemaps_func: count_functions
"""$t:fields.directus_settings.collaborative_editing_note"""
collaborative_editing_enabled: Boolean!
custom_aspect_ratios: JSON custom_aspect_ratios: JSON
custom_aspect_ratios_func: count_functions custom_aspect_ratios_func: count_functions
custom_css: String custom_css: String
@ -1805,6 +1663,27 @@ type directus_versions_mutated {
key: ID! key: ID!
} }
type directus_webhooks {
actions: [String]!
collections: [String]!
data: Boolean
headers: JSON
headers_func: count_functions
id: ID!
method: String
migrated_flow(filter: directus_flows_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): directus_flows
name: String!
status: String
url: String!
was_active_before_deprecation: Boolean!
}
type directus_webhooks_mutated {
data: directus_webhooks
event: EventEnum
key: ID!
}
type global { type global {
email: String! email: String!
github: String! github: String!
@ -2266,6 +2145,7 @@ input update_appeal_input {
input update_article_input { input update_article_input {
id: ID id: ID
title: String
translations: [update_article_translations_input] translations: [update_article_translations_input]
} }
@ -2479,6 +2359,7 @@ type version_appeal {
type version_article { type version_article {
id: ID id: ID
title: String
translations: JSON translations: JSON
} }

View File

@ -5,7 +5,7 @@
}, },
"isSiteUnderConstruction": false, "isSiteUnderConstruction": false,
"contacts": { "contacts": {
"email": "serzh.yarkov@gmail.com", "email": "email@yarkov.tech",
"telegram": "https://t.me/sergeyyarkov", "telegram": "https://t.me/sergeyyarkov",
"github": "https://github.com/sergeyyarkov" "github": "https://github.com/sergeyyarkov"
}, },

View File

@ -1,53 +1,44 @@
--- ---
import UIString from "./UIString.astro";
interface Props { interface Props {
url: string; url: string;
id: string; id: string;
lang: LanguageKeys;
} }
const { url, id, lang } = Astro.props as Props; const { url, id } = Astro.props as Props;
--- ---
<footer itemscope itemtype="http://schema.org/UserComments"> <footer itemscope itemtype="http://schema.org/UserComments">
<h2><UIString key={"articlePost.comments"} />:</h2> <div id="disqus_thread"></div>
<div id="remark42"></div>
</footer> </footer>
<script is:inline define:vars={{ url, id, lang }}> <script is:inline define:vars={{ url, id }}>
window.remark_config = { var disqus_config = function () {
host: "https://remark.yarkov.tech", this.page.url = url;
site_id: "remark", this.page.identifier = id;
theme: window.theme,
show_email_subscription: true,
url,
locale: lang,
no_footer: true,
}; };
var e = document.getElementById("remark42"); var e = document.getElementById("disqus_thread");
if ("IntersectionObserver" in window) { if ("IntersectionObserver" in window) {
var t = new IntersectionObserver((e) => { var t = new IntersectionObserver((e) => {
e.forEach((e) => { e.forEach((e) => {
if (e.isIntersecting) { e.isIntersecting &&
((e, n) => { ((function () {
for (var o = 0; o < e.length; o++) { var e = document,
var r = n.createElement("script"), t = e.createElement("script");
c = ".js", ((t.src = "https://yarkov-tech.disqus.com/embed.js"),
d = n.head || n.body; t.setAttribute("data-timestamp", +new Date()),
("noModule" in r ? ((r.type = "module"), (c = ".mjs")) : (r.async = !0), (e.head || e.body).appendChild(t));
(r.defer = !0), })(),
(r.src = remark_config.host + "/web/" + e[o] + c), t.unobserve(e.target));
d.appendChild(r));
}
})(remark_config.components || ["embed"], document);
t.unobserve(e.target);
}
}); });
}); });
t.observe(e); t.observe(e);
} }
window.addEventListener("onthemetoggled", (e) => window.REMARK42.changeTheme(e.detail)); window.addEventListener(
"onthemetoggled",
() =>
document.readyState == "complete" &&
setTimeout(() => "DISQUS" in window && DISQUS.reset({ reload: true, config: disqus_config }), 100)
);
</script> </script>

View File

@ -28,9 +28,7 @@ const {
views, views,
article_id: articleTranslations, article_id: articleTranslations,
} = article; } = article;
const t = useTranslation(Astro); const t = useTranslation(Astro);
// const articleCodeLangs = articleTranslations?.translations?.map((t) => t?.languages_code?.code);
--- ---
<article itemscope itemtype="http://schema.org/BlogPosting" class="article"> <article itemscope itemtype="http://schema.org/BlogPosting" class="article">
@ -65,7 +63,11 @@ const t = useTranslation(Astro);
</time> </time>
<span itemprop="author">{`${author?.first_name} ${author?.last_name}`}</span> <span itemprop="author">{`${author?.first_name} ${author?.last_name}`}</span>
</div> </div>
{cover_image && <ArticleCover src={`${DIRECTUS_URL}/assets/${cover_image.filename_disk}`} alt={title} />} {
cover_image && (
<ArticleCover src={`${DIRECTUS_URL}/assets/${cover_image.filename_disk}`} alt={title} />
)
}
<div class="description"> <div class="description">
<p> <p>
{description} {description}
@ -74,13 +76,9 @@ const t = useTranslation(Astro);
<AvailableOnLangs articles={articleTranslations} /> <AvailableOnLangs articles={articleTranslations} />
</header> </header>
<slot /> <slot />
<ArticleComments lang={pageLang} url={canonicalUrl.href} id={slug} /> <ArticleComments url={canonicalUrl.href} id={slug} />
</article> </article>
<!-- <script define:vars={{ articleCodeLangs }} is:inline>
console.log(navigator.language, articleCodeLangs);
</script> -->
<style lang="scss" is:global> <style lang="scss" is:global>
.article { .article {
& header { & header {

View File

@ -23,7 +23,6 @@ type Documents = {
"\n\t\tquery Article_translations($slug: String!) {\n\t\t\tarticle_translations(filter: { slug: { _eq: $slug } }) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\ttags {\n\t\t\t\t\ttag_id {\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescription\n\t\t\t\tslug\n\t\t\t\tcontent\n\t\t\t\tauthor {\n\t\t\t\t\tfirst_name\n\t\t\t\t\tlast_name\n\t\t\t\t}\n\t\t\t\tpub_date\n\t\t\t\tviews\n\t\t\t\tlanguages_code {\n\t\t\t\t\tcode\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t\tcover_image {\n\t\t\t\t\ttitle\n\t\t\t\t\ttype\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t\tarticle_id {\n\t\t\t\t\ttranslations {\n\t\t\t\t\t\tslug\n\t\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\t\tcode\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpub_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.Article_TranslationsDocument, "\n\t\tquery Article_translations($slug: String!) {\n\t\t\tarticle_translations(filter: { slug: { _eq: $slug } }) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\ttags {\n\t\t\t\t\ttag_id {\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescription\n\t\t\t\tslug\n\t\t\t\tcontent\n\t\t\t\tauthor {\n\t\t\t\t\tfirst_name\n\t\t\t\t\tlast_name\n\t\t\t\t}\n\t\t\t\tpub_date\n\t\t\t\tviews\n\t\t\t\tlanguages_code {\n\t\t\t\t\tcode\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t\tcover_image {\n\t\t\t\t\ttitle\n\t\t\t\t\ttype\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t\tarticle_id {\n\t\t\t\t\ttranslations {\n\t\t\t\t\t\tslug\n\t\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\t\tcode\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpub_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.Article_TranslationsDocument,
"\n\t\tmutation Update_article_translations_item($id: ID!, $views: Int!) {\n\t\t\tupdate_article_translations_item(id: $id, data: { views: $views }) {\n\t\t\t\tviews\n\t\t\t}\n\t\t}\n\t": typeof types.Update_Article_Translations_ItemDocument, "\n\t\tmutation Update_article_translations_item($id: ID!, $views: Int!) {\n\t\t\tupdate_article_translations_item(id: $id, data: { views: $views }) {\n\t\t\t\tviews\n\t\t\t}\n\t\t}\n\t": typeof types.Update_Article_Translations_ItemDocument,
"\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t": typeof types.AboutMeQueryDocument, "\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t": typeof types.AboutMeQueryDocument,
"\n\t\tquery SplashInfo($pageLang: String!) {\n\t\t\thome_page_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\theadline\n\t\t\t\tsubheadline\n\t\t\t\tdescription\n\t\t\t}\n\t\t}\n\t": typeof types.SplashInfoDocument,
"\n\t\tquery ContactsQuery {\n\t\t\tglobal {\n\t\t\t\temail\n\t\t\t\tgithub\n\t\t\t\ttelegram\n\t\t\t}\n\t\t}\n\t": typeof types.ContactsQueryDocument, "\n\t\tquery ContactsQuery {\n\t\t\tglobal {\n\t\t\t\temail\n\t\t\t\tgithub\n\t\t\t\ttelegram\n\t\t\t}\n\t\t}\n\t": typeof types.ContactsQueryDocument,
"\n\t\tquery SiteSettingsQuery {\n\t\t\tglobal {\n\t\t\t\tym_counter\n\t\t\t\trecent_articles_limit\n\t\t\t\tgithub\n\t\t\t}\n\t\t}\n\t": typeof types.SiteSettingsQueryDocument, "\n\t\tquery SiteSettingsQuery {\n\t\t\tglobal {\n\t\t\t\tym_counter\n\t\t\t\trecent_articles_limit\n\t\t\t\tgithub\n\t\t\t}\n\t\t}\n\t": typeof types.SiteSettingsQueryDocument,
"\n\t\tquery Project_translations($pageLang: String!) {\n\t\t\tproject_translations(filter: { languages_code: { code: { _contains: $pageLang } } }, sort: [\"-year\"]) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\tyear\n\t\t\t\tdescription\n\t\t\t\tsource_url\n\t\t\t\tdemo_url\n\t\t\t\tarticle_url\n\t\t\t\ticon {\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.Project_TranslationsDocument, "\n\t\tquery Project_translations($pageLang: String!) {\n\t\t\tproject_translations(filter: { languages_code: { code: { _contains: $pageLang } } }, sort: [\"-year\"]) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\tyear\n\t\t\t\tdescription\n\t\t\t\tsource_url\n\t\t\t\tdemo_url\n\t\t\t\tarticle_url\n\t\t\t\ticon {\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.Project_TranslationsDocument,
@ -38,7 +37,6 @@ const documents: Documents = {
"\n\t\tquery Article_translations($slug: String!) {\n\t\t\tarticle_translations(filter: { slug: { _eq: $slug } }) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\ttags {\n\t\t\t\t\ttag_id {\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescription\n\t\t\t\tslug\n\t\t\t\tcontent\n\t\t\t\tauthor {\n\t\t\t\t\tfirst_name\n\t\t\t\t\tlast_name\n\t\t\t\t}\n\t\t\t\tpub_date\n\t\t\t\tviews\n\t\t\t\tlanguages_code {\n\t\t\t\t\tcode\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t\tcover_image {\n\t\t\t\t\ttitle\n\t\t\t\t\ttype\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t\tarticle_id {\n\t\t\t\t\ttranslations {\n\t\t\t\t\t\tslug\n\t\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\t\tcode\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpub_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.Article_TranslationsDocument, "\n\t\tquery Article_translations($slug: String!) {\n\t\t\tarticle_translations(filter: { slug: { _eq: $slug } }) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\ttags {\n\t\t\t\t\ttag_id {\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescription\n\t\t\t\tslug\n\t\t\t\tcontent\n\t\t\t\tauthor {\n\t\t\t\t\tfirst_name\n\t\t\t\t\tlast_name\n\t\t\t\t}\n\t\t\t\tpub_date\n\t\t\t\tviews\n\t\t\t\tlanguages_code {\n\t\t\t\t\tcode\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t\tcover_image {\n\t\t\t\t\ttitle\n\t\t\t\t\ttype\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t\tarticle_id {\n\t\t\t\t\ttranslations {\n\t\t\t\t\t\tslug\n\t\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\t\tcode\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpub_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.Article_TranslationsDocument,
"\n\t\tmutation Update_article_translations_item($id: ID!, $views: Int!) {\n\t\t\tupdate_article_translations_item(id: $id, data: { views: $views }) {\n\t\t\t\tviews\n\t\t\t}\n\t\t}\n\t": types.Update_Article_Translations_ItemDocument, "\n\t\tmutation Update_article_translations_item($id: ID!, $views: Int!) {\n\t\t\tupdate_article_translations_item(id: $id, data: { views: $views }) {\n\t\t\t\tviews\n\t\t\t}\n\t\t}\n\t": types.Update_Article_Translations_ItemDocument,
"\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t": types.AboutMeQueryDocument, "\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t": types.AboutMeQueryDocument,
"\n\t\tquery SplashInfo($pageLang: String!) {\n\t\t\thome_page_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\theadline\n\t\t\t\tsubheadline\n\t\t\t\tdescription\n\t\t\t}\n\t\t}\n\t": types.SplashInfoDocument,
"\n\t\tquery ContactsQuery {\n\t\t\tglobal {\n\t\t\t\temail\n\t\t\t\tgithub\n\t\t\t\ttelegram\n\t\t\t}\n\t\t}\n\t": types.ContactsQueryDocument, "\n\t\tquery ContactsQuery {\n\t\t\tglobal {\n\t\t\t\temail\n\t\t\t\tgithub\n\t\t\t\ttelegram\n\t\t\t}\n\t\t}\n\t": types.ContactsQueryDocument,
"\n\t\tquery SiteSettingsQuery {\n\t\t\tglobal {\n\t\t\t\tym_counter\n\t\t\t\trecent_articles_limit\n\t\t\t\tgithub\n\t\t\t}\n\t\t}\n\t": types.SiteSettingsQueryDocument, "\n\t\tquery SiteSettingsQuery {\n\t\t\tglobal {\n\t\t\t\tym_counter\n\t\t\t\trecent_articles_limit\n\t\t\t\tgithub\n\t\t\t}\n\t\t}\n\t": types.SiteSettingsQueryDocument,
"\n\t\tquery Project_translations($pageLang: String!) {\n\t\t\tproject_translations(filter: { languages_code: { code: { _contains: $pageLang } } }, sort: [\"-year\"]) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\tyear\n\t\t\t\tdescription\n\t\t\t\tsource_url\n\t\t\t\tdemo_url\n\t\t\t\tarticle_url\n\t\t\t\ticon {\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.Project_TranslationsDocument, "\n\t\tquery Project_translations($pageLang: String!) {\n\t\t\tproject_translations(filter: { languages_code: { code: { _contains: $pageLang } } }, sort: [\"-year\"]) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\tyear\n\t\t\t\tdescription\n\t\t\t\tsource_url\n\t\t\t\tdemo_url\n\t\t\t\tarticle_url\n\t\t\t\ticon {\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.Project_TranslationsDocument,
@ -77,10 +75,6 @@ export function graphql(source: "\n\t\tmutation Update_article_translations_item
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t"): typeof import('./graphql').AboutMeQueryDocument; export function graphql(source: "\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t"): typeof import('./graphql').AboutMeQueryDocument;
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n\t\tquery SplashInfo($pageLang: String!) {\n\t\t\thome_page_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\theadline\n\t\t\t\tsubheadline\n\t\t\t\tdescription\n\t\t\t}\n\t\t}\n\t"): typeof import('./graphql').SplashInfoDocument;
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

View File

@ -1076,9 +1076,6 @@ export type Subscription = {
directus_activity_mutated?: Maybe<Directus_Activity_Mutated>; directus_activity_mutated?: Maybe<Directus_Activity_Mutated>;
directus_comments_mutated?: Maybe<Directus_Comments_Mutated>; directus_comments_mutated?: Maybe<Directus_Comments_Mutated>;
directus_dashboards_mutated?: Maybe<Directus_Dashboards_Mutated>; directus_dashboards_mutated?: Maybe<Directus_Dashboards_Mutated>;
directus_deployment_projects_mutated?: Maybe<Directus_Deployment_Projects_Mutated>;
directus_deployment_runs_mutated?: Maybe<Directus_Deployment_Runs_Mutated>;
directus_deployments_mutated?: Maybe<Directus_Deployments_Mutated>;
directus_files_mutated?: Maybe<Directus_Files_Mutated>; directus_files_mutated?: Maybe<Directus_Files_Mutated>;
directus_flows_mutated?: Maybe<Directus_Flows_Mutated>; directus_flows_mutated?: Maybe<Directus_Flows_Mutated>;
directus_folders_mutated?: Maybe<Directus_Folders_Mutated>; directus_folders_mutated?: Maybe<Directus_Folders_Mutated>;
@ -1095,6 +1092,7 @@ export type Subscription = {
directus_translations_mutated?: Maybe<Directus_Translations_Mutated>; directus_translations_mutated?: Maybe<Directus_Translations_Mutated>;
directus_users_mutated?: Maybe<Directus_Users_Mutated>; directus_users_mutated?: Maybe<Directus_Users_Mutated>;
directus_versions_mutated?: Maybe<Directus_Versions_Mutated>; directus_versions_mutated?: Maybe<Directus_Versions_Mutated>;
directus_webhooks_mutated?: Maybe<Directus_Webhooks_Mutated>;
global_mutated?: Maybe<Global_Mutated>; global_mutated?: Maybe<Global_Mutated>;
global_translations_mutated?: Maybe<Global_Translations_Mutated>; global_translations_mutated?: Maybe<Global_Translations_Mutated>;
home_page_mutated?: Maybe<Home_Page_Mutated>; home_page_mutated?: Maybe<Home_Page_Mutated>;
@ -1146,21 +1144,6 @@ export type SubscriptionDirectus_Dashboards_MutatedArgs = {
}; };
export type SubscriptionDirectus_Deployment_Projects_MutatedArgs = {
event?: InputMaybe<EventEnum>;
};
export type SubscriptionDirectus_Deployment_Runs_MutatedArgs = {
event?: InputMaybe<EventEnum>;
};
export type SubscriptionDirectus_Deployments_MutatedArgs = {
event?: InputMaybe<EventEnum>;
};
export type SubscriptionDirectus_Files_MutatedArgs = { export type SubscriptionDirectus_Files_MutatedArgs = {
event?: InputMaybe<EventEnum>; event?: InputMaybe<EventEnum>;
}; };
@ -1241,6 +1224,11 @@ export type SubscriptionDirectus_Versions_MutatedArgs = {
}; };
export type SubscriptionDirectus_Webhooks_MutatedArgs = {
event?: InputMaybe<EventEnum>;
};
export type SubscriptionGlobal_MutatedArgs = { export type SubscriptionGlobal_MutatedArgs = {
event?: InputMaybe<EventEnum>; event?: InputMaybe<EventEnum>;
}; };
@ -1345,6 +1333,7 @@ export type Appeal_Mutated = {
export type Article = { export type Article = {
__typename?: 'article'; __typename?: 'article';
id: Scalars['ID']['output']; id: Scalars['ID']['output'];
title?: Maybe<Scalars['String']['output']>;
translations?: Maybe<Array<Maybe<Article_Translations>>>; translations?: Maybe<Array<Maybe<Article_Translations>>>;
translations_func?: Maybe<Count_Functions>; translations_func?: Maybe<Count_Functions>;
}; };
@ -1376,6 +1365,7 @@ export type Article_Aggregated = {
export type Article_Aggregated_Count = { export type Article_Aggregated_Count = {
__typename?: 'article_aggregated_count'; __typename?: 'article_aggregated_count';
id?: Maybe<Scalars['Int']['output']>; id?: Maybe<Scalars['Int']['output']>;
title?: Maybe<Scalars['Int']['output']>;
translations?: Maybe<Scalars['Int']['output']>; translations?: Maybe<Scalars['Int']['output']>;
}; };
@ -1388,6 +1378,7 @@ export type Article_Filter = {
_and?: InputMaybe<Array<InputMaybe<Article_Filter>>>; _and?: InputMaybe<Array<InputMaybe<Article_Filter>>>;
_or?: InputMaybe<Array<InputMaybe<Article_Filter>>>; _or?: InputMaybe<Array<InputMaybe<Article_Filter>>>;
id?: InputMaybe<Number_Filter_Operators>; id?: InputMaybe<Number_Filter_Operators>;
title?: InputMaybe<String_Filter_Operators>;
translations?: InputMaybe<Article_Translations_Quantifier_Filter>; translations?: InputMaybe<Article_Translations_Quantifier_Filter>;
translations_func?: InputMaybe<Count_Function_Filter_Operators>; translations_func?: InputMaybe<Count_Function_Filter_Operators>;
}; };
@ -1680,6 +1671,7 @@ export type Create_Appeal_Input = {
export type Create_Article_Input = { export type Create_Article_Input = {
id?: InputMaybe<Scalars['ID']['input']>; id?: InputMaybe<Scalars['ID']['input']>;
title?: InputMaybe<Scalars['String']['input']>;
translations?: InputMaybe<Array<InputMaybe<Create_Article_Translations_Input>>>; translations?: InputMaybe<Array<InputMaybe<Create_Article_Translations_Input>>>;
}; };
@ -2154,206 +2146,6 @@ export type Directus_Dashboards_Mutated = {
key: Scalars['ID']['output']; key: Scalars['ID']['output'];
}; };
export type Directus_Deployment_Projects = {
__typename?: 'directus_deployment_projects';
date_created?: Maybe<Scalars['Date']['output']>;
date_created_func?: Maybe<Datetime_Functions>;
deployment?: Maybe<Directus_Deployments>;
external_id: Scalars['String']['output'];
id: Scalars['ID']['output'];
name: Scalars['String']['output'];
runs?: Maybe<Array<Maybe<Directus_Deployment_Runs>>>;
runs_func?: Maybe<Count_Functions>;
user_created?: Maybe<Directus_Users>;
};
export type Directus_Deployment_ProjectsDeploymentArgs = {
filter?: InputMaybe<Directus_Deployments_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_Deployment_ProjectsRunsArgs = {
filter?: InputMaybe<Directus_Deployment_Runs_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_Deployment_ProjectsUser_CreatedArgs = {
filter?: InputMaybe<Directus_Users_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_Deployment_Projects_Filter = {
_and?: InputMaybe<Array<InputMaybe<Directus_Deployment_Projects_Filter>>>;
_or?: InputMaybe<Array<InputMaybe<Directus_Deployment_Projects_Filter>>>;
date_created?: InputMaybe<Date_Filter_Operators>;
date_created_func?: InputMaybe<Datetime_Function_Filter_Operators>;
deployment?: InputMaybe<Directus_Deployments_Filter>;
external_id?: InputMaybe<String_Filter_Operators>;
id?: InputMaybe<Id_Filter_Operators>;
name?: InputMaybe<String_Filter_Operators>;
runs?: InputMaybe<Directus_Deployment_Runs_Quantifier_Filter>;
runs_func?: InputMaybe<Count_Function_Filter_Operators>;
user_created?: InputMaybe<Directus_Users_Filter>;
};
export type Directus_Deployment_Projects_Mutated = {
__typename?: 'directus_deployment_projects_mutated';
data?: Maybe<Directus_Deployment_Projects>;
event?: Maybe<EventEnum>;
key: Scalars['ID']['output'];
};
export type Directus_Deployment_Projects_Quantifier_Filter = {
_and?: InputMaybe<Array<InputMaybe<Directus_Deployment_Projects_Filter>>>;
_none?: InputMaybe<Directus_Deployment_Projects_Filter>;
_or?: InputMaybe<Array<InputMaybe<Directus_Deployment_Projects_Filter>>>;
_some?: InputMaybe<Directus_Deployment_Projects_Filter>;
date_created?: InputMaybe<Date_Filter_Operators>;
date_created_func?: InputMaybe<Datetime_Function_Filter_Operators>;
deployment?: InputMaybe<Directus_Deployments_Filter>;
external_id?: InputMaybe<String_Filter_Operators>;
id?: InputMaybe<Id_Filter_Operators>;
name?: InputMaybe<String_Filter_Operators>;
runs?: InputMaybe<Directus_Deployment_Runs_Quantifier_Filter>;
runs_func?: InputMaybe<Count_Function_Filter_Operators>;
user_created?: InputMaybe<Directus_Users_Filter>;
};
export type Directus_Deployment_Runs = {
__typename?: 'directus_deployment_runs';
date_created?: Maybe<Scalars['Date']['output']>;
date_created_func?: Maybe<Datetime_Functions>;
external_id: Scalars['String']['output'];
id: Scalars['ID']['output'];
project?: Maybe<Directus_Deployment_Projects>;
target: Scalars['String']['output'];
user_created?: Maybe<Directus_Users>;
};
export type Directus_Deployment_RunsProjectArgs = {
filter?: InputMaybe<Directus_Deployment_Projects_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_Deployment_RunsUser_CreatedArgs = {
filter?: InputMaybe<Directus_Users_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_Deployment_Runs_Filter = {
_and?: InputMaybe<Array<InputMaybe<Directus_Deployment_Runs_Filter>>>;
_or?: InputMaybe<Array<InputMaybe<Directus_Deployment_Runs_Filter>>>;
date_created?: InputMaybe<Date_Filter_Operators>;
date_created_func?: InputMaybe<Datetime_Function_Filter_Operators>;
external_id?: InputMaybe<String_Filter_Operators>;
id?: InputMaybe<Id_Filter_Operators>;
project?: InputMaybe<Directus_Deployment_Projects_Filter>;
target?: InputMaybe<String_Filter_Operators>;
user_created?: InputMaybe<Directus_Users_Filter>;
};
export type Directus_Deployment_Runs_Mutated = {
__typename?: 'directus_deployment_runs_mutated';
data?: Maybe<Directus_Deployment_Runs>;
event?: Maybe<EventEnum>;
key: Scalars['ID']['output'];
};
export type Directus_Deployment_Runs_Quantifier_Filter = {
_and?: InputMaybe<Array<InputMaybe<Directus_Deployment_Runs_Filter>>>;
_none?: InputMaybe<Directus_Deployment_Runs_Filter>;
_or?: InputMaybe<Array<InputMaybe<Directus_Deployment_Runs_Filter>>>;
_some?: InputMaybe<Directus_Deployment_Runs_Filter>;
date_created?: InputMaybe<Date_Filter_Operators>;
date_created_func?: InputMaybe<Datetime_Function_Filter_Operators>;
external_id?: InputMaybe<String_Filter_Operators>;
id?: InputMaybe<Id_Filter_Operators>;
project?: InputMaybe<Directus_Deployment_Projects_Filter>;
target?: InputMaybe<String_Filter_Operators>;
user_created?: InputMaybe<Directus_Users_Filter>;
};
export type Directus_Deployments = {
__typename?: 'directus_deployments';
credentials?: Maybe<Scalars['String']['output']>;
date_created?: Maybe<Scalars['Date']['output']>;
date_created_func?: Maybe<Datetime_Functions>;
id: Scalars['ID']['output'];
options?: Maybe<Scalars['JSON']['output']>;
options_func?: Maybe<Count_Functions>;
projects?: Maybe<Array<Maybe<Directus_Deployment_Projects>>>;
projects_func?: Maybe<Count_Functions>;
provider: Scalars['String']['output'];
user_created?: Maybe<Directus_Users>;
};
export type Directus_DeploymentsProjectsArgs = {
filter?: InputMaybe<Directus_Deployment_Projects_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_DeploymentsUser_CreatedArgs = {
filter?: InputMaybe<Directus_Users_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_Deployments_Filter = {
_and?: InputMaybe<Array<InputMaybe<Directus_Deployments_Filter>>>;
_or?: InputMaybe<Array<InputMaybe<Directus_Deployments_Filter>>>;
credentials?: InputMaybe<String_Filter_Operators>;
date_created?: InputMaybe<Date_Filter_Operators>;
date_created_func?: InputMaybe<Datetime_Function_Filter_Operators>;
id?: InputMaybe<Id_Filter_Operators>;
options?: InputMaybe<String_Filter_Operators>;
options_func?: InputMaybe<Count_Function_Filter_Operators>;
projects?: InputMaybe<Directus_Deployment_Projects_Quantifier_Filter>;
projects_func?: InputMaybe<Count_Function_Filter_Operators>;
provider?: InputMaybe<String_Filter_Operators>;
user_created?: InputMaybe<Directus_Users_Filter>;
};
export type Directus_Deployments_Mutated = {
__typename?: 'directus_deployments_mutated';
data?: Maybe<Directus_Deployments>;
event?: Maybe<EventEnum>;
key: Scalars['ID']['output'];
};
export type Directus_Files = { export type Directus_Files = {
__typename?: 'directus_files'; __typename?: 'directus_files';
charset?: Maybe<Scalars['String']['output']>; charset?: Maybe<Scalars['String']['output']>;
@ -3183,30 +2975,10 @@ export type Directus_Roles_Quantifier_Filter = {
export type Directus_Settings = { export type Directus_Settings = {
__typename?: 'directus_settings'; __typename?: 'directus_settings';
ai_anthropic_allowed_models?: Maybe<Scalars['JSON']['output']>;
ai_anthropic_allowed_models_func?: Maybe<Count_Functions>;
ai_anthropic_api_key?: Maybe<Scalars['String']['output']>;
ai_google_allowed_models?: Maybe<Scalars['JSON']['output']>;
ai_google_allowed_models_func?: Maybe<Count_Functions>;
ai_google_api_key?: Maybe<Scalars['String']['output']>;
ai_openai_allowed_models?: Maybe<Scalars['JSON']['output']>;
ai_openai_allowed_models_func?: Maybe<Count_Functions>;
ai_openai_api_key?: Maybe<Scalars['String']['output']>;
ai_openai_compatible_api_key?: Maybe<Scalars['String']['output']>;
ai_openai_compatible_base_url?: Maybe<Scalars['String']['output']>;
ai_openai_compatible_headers?: Maybe<Scalars['JSON']['output']>;
ai_openai_compatible_headers_func?: Maybe<Count_Functions>;
ai_openai_compatible_models?: Maybe<Scalars['JSON']['output']>;
ai_openai_compatible_models_func?: Maybe<Count_Functions>;
ai_openai_compatible_name?: Maybe<Scalars['String']['output']>;
/** $t:fields.directus_settings.ai_system_prompt_note */
ai_system_prompt?: Maybe<Scalars['String']['output']>;
auth_login_attempts?: Maybe<Scalars['Int']['output']>; auth_login_attempts?: Maybe<Scalars['Int']['output']>;
auth_password_policy?: Maybe<Scalars['String']['output']>; auth_password_policy?: Maybe<Scalars['String']['output']>;
basemaps?: Maybe<Scalars['JSON']['output']>; basemaps?: Maybe<Scalars['JSON']['output']>;
basemaps_func?: Maybe<Count_Functions>; basemaps_func?: Maybe<Count_Functions>;
/** $t:fields.directus_settings.collaborative_editing_note */
collaborative_editing_enabled: Scalars['Boolean']['output'];
custom_aspect_ratios?: Maybe<Scalars['JSON']['output']>; custom_aspect_ratios?: Maybe<Scalars['JSON']['output']>;
custom_aspect_ratios_func?: Maybe<Count_Functions>; custom_aspect_ratios_func?: Maybe<Count_Functions>;
custom_css?: Maybe<Scalars['String']['output']>; custom_css?: Maybe<Scalars['String']['output']>;
@ -3618,6 +3390,39 @@ export type Directus_Versions_Mutated = {
key: Scalars['ID']['output']; key: Scalars['ID']['output'];
}; };
export type Directus_Webhooks = {
__typename?: 'directus_webhooks';
actions: Array<Maybe<Scalars['String']['output']>>;
collections: Array<Maybe<Scalars['String']['output']>>;
data?: Maybe<Scalars['Boolean']['output']>;
headers?: Maybe<Scalars['JSON']['output']>;
headers_func?: Maybe<Count_Functions>;
id: Scalars['ID']['output'];
method?: Maybe<Scalars['String']['output']>;
migrated_flow?: Maybe<Directus_Flows>;
name: Scalars['String']['output'];
status?: Maybe<Scalars['String']['output']>;
url: Scalars['String']['output'];
was_active_before_deprecation: Scalars['Boolean']['output'];
};
export type Directus_WebhooksMigrated_FlowArgs = {
filter?: InputMaybe<Directus_Flows_Filter>;
limit?: InputMaybe<Scalars['Int']['input']>;
offset?: InputMaybe<Scalars['Int']['input']>;
page?: InputMaybe<Scalars['Int']['input']>;
search?: InputMaybe<Scalars['String']['input']>;
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
};
export type Directus_Webhooks_Mutated = {
__typename?: 'directus_webhooks_mutated';
data?: Maybe<Directus_Webhooks>;
event?: Maybe<EventEnum>;
key: Scalars['ID']['output'];
};
export type Global = { export type Global = {
__typename?: 'global'; __typename?: 'global';
email: Scalars['String']['output']; email: Scalars['String']['output'];
@ -4212,6 +4017,7 @@ export type Update_Appeal_Input = {
export type Update_Article_Input = { export type Update_Article_Input = {
id?: InputMaybe<Scalars['ID']['input']>; id?: InputMaybe<Scalars['ID']['input']>;
title?: InputMaybe<Scalars['String']['input']>;
translations?: InputMaybe<Array<InputMaybe<Update_Article_Translations_Input>>>; translations?: InputMaybe<Array<InputMaybe<Update_Article_Translations_Input>>>;
}; };
@ -4427,6 +4233,7 @@ export type Version_Appeal = {
export type Version_Article = { export type Version_Article = {
__typename?: 'version_article'; __typename?: 'version_article';
id?: Maybe<Scalars['ID']['output']>; id?: Maybe<Scalars['ID']['output']>;
title?: Maybe<Scalars['String']['output']>;
translations?: Maybe<Scalars['JSON']['output']>; translations?: Maybe<Scalars['JSON']['output']>;
}; };
@ -4587,13 +4394,6 @@ export type AboutMeQueryQueryVariables = Exact<{
export type AboutMeQueryQuery = { __typename?: 'Query', global_translations: Array<{ __typename?: 'global_translations', about?: string | null }> }; export type AboutMeQueryQuery = { __typename?: 'Query', global_translations: Array<{ __typename?: 'global_translations', about?: string | null }> };
export type SplashInfoQueryVariables = Exact<{
pageLang: Scalars['String']['input'];
}>;
export type SplashInfoQuery = { __typename?: 'Query', home_page_translations: Array<{ __typename?: 'home_page_translations', headline?: string | null, subheadline?: string | null, description?: string | null }> };
export type ContactsQueryQueryVariables = Exact<{ [key: string]: never; }>; export type ContactsQueryQueryVariables = Exact<{ [key: string]: never; }>;
@ -4773,15 +4573,6 @@ export const AboutMeQueryDocument = new TypedDocumentString(`
} }
} }
`) as unknown as TypedDocumentString<AboutMeQueryQuery, AboutMeQueryQueryVariables>; `) as unknown as TypedDocumentString<AboutMeQueryQuery, AboutMeQueryQueryVariables>;
export const SplashInfoDocument = new TypedDocumentString(`
query SplashInfo($pageLang: String!) {
home_page_translations(filter: {languages_code: {code: {_contains: $pageLang}}}) {
headline
subheadline
description
}
}
`) as unknown as TypedDocumentString<SplashInfoQuery, SplashInfoQueryVariables>;
export const ContactsQueryDocument = new TypedDocumentString(` export const ContactsQueryDocument = new TypedDocumentString(`
query ContactsQuery { query ContactsQuery {
global { global {

View File

@ -25,6 +25,10 @@ export default {
"navigation.about": "About me", "navigation.about": "About me",
"navigation.contacts": "Contacts", "navigation.contacts": "Contacts",
/* Home page */ /* Home page */
"splash.headline": "Hello, I'am Sergey",
"splash.subheadline": "Fullstack web-developer & freelancer",
"splash.description":
"I develop websites and web applications of varying complexity, and also publish articles and tutorials on various IT topics.",
"splash.about": "about me", "splash.about": "about me",
"splash.contact": "text me", "splash.contact": "text me",
/* Recent articles */ /* Recent articles */

View File

@ -25,6 +25,10 @@ export default {
"navigation.about": "Обо мне", "navigation.about": "Обо мне",
"navigation.contacts": "Контакты", "navigation.contacts": "Контакты",
/* Home page */ /* Home page */
"splash.headline": "Hello, I'am Sergey",
"splash.subheadline": "Fullstack web-developer & freelancer",
"splash.description":
"Я занимаюсь разработкой веб-сайтов и веб-приложений разной сложности, а также публикую статьи и туториалы на разные IT темы.",
"splash.about": "обо мне", "splash.about": "обо мне",
"splash.contact": "написать мне", "splash.contact": "написать мне",
/* Recent articles */ /* Recent articles */

View File

@ -17,24 +17,6 @@ export async function getAboutMe(pageLang: string) {
return result.data.global_translations[0]; return result.data.global_translations[0];
} }
export async function getSplashInfo(pageLang: string) {
const SplashInfoQuery = graphql(`
query SplashInfo($pageLang: String!) {
home_page_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {
headline
subheadline
description
}
}
`);
const result = await execute(SplashInfoQuery, { pageLang });
if (!result.data || result.data.home_page_translations.length === 0) return null;
return result.data.home_page_translations[0];
}
export async function getContacts() { export async function getContacts() {
const ContactsQuery = graphql(` const ContactsQuery = graphql(`
query ContactsQuery { query ContactsQuery {

View File

@ -151,6 +151,6 @@ button {
border: 1px solid var(--border-color-hover); border: 1px solid var(--border-color-hover);
} }
} }
#remark42 svg { #disqus_thread svg {
filter: none; filter: none;
} }

View File

@ -140,4 +140,11 @@
--icon-filter: invert(100%); --icon-filter: invert(100%);
--image-filter: grayscale(50%); --image-filter: grayscale(50%);
/*
https://sergeyski.com/css-color-scheme-and-iframes-lessons-learned-from-disqus-background-bug/
*/
iframe[src*="disqus.com"] {
color-scheme: light;
}
} }

View File

@ -7,10 +7,8 @@ import SplashLink from "@components/Splash/SplashLink.astro";
import RecentArticles from "@components/RecentArticles.astro"; import RecentArticles from "@components/RecentArticles.astro";
import UIString from "@components/UIString.astro"; import UIString from "@components/UIString.astro";
import { getLanguageFromURL, useTranslation } from "@root/i18n/utils"; import { getLanguageFromURL, useTranslation } from "@root/i18n/utils";
import { getSplashInfo } from "../queries";
const pageLang = getLanguageFromURL(Astro.url.pathname); const pageLang = getLanguageFromURL(Astro.url.pathname);
const data = await getSplashInfo(pageLang);
const t = useTranslation(Astro); const t = useTranslation(Astro);
--- ---
@ -18,10 +16,10 @@ const t = useTranslation(Astro);
<Splash> <Splash>
<SplashHeading> <SplashHeading>
<hgroup> <hgroup>
<h1>{data?.headline}</h1> <h1><UIString key={"splash.headline"} /></h1>
<h2>{data?.subheadline}</h2> <h2>Fullstack <b>web-developer</b> & <b>freelancer</b></h2>
</hgroup> </hgroup>
<p>{data?.description}</p> <p><UIString key={"splash.description"} /></p>
</SplashHeading> </SplashHeading>
<SplashLinks> <SplashLinks>
<SplashLink icon="information" href="/about/"><UIString key={"splash.about"} /></SplashLink> <SplashLink icon="information" href="/about/"><UIString key={"splash.about"} /></SplashLink>

2
src/types/main.d.ts vendored
View File

@ -10,8 +10,6 @@ declare global {
type: K, type: K,
listener: (this: Window, ev: CustomEventMap[K]) => void listener: (this: Window, ev: CustomEventMap[K]) => void
): void; ): void;
REMARK42: any;
remark_config: any;
} }
interface CustomEventMap { interface CustomEventMap {