decap cms

This commit is contained in:
Sergey Yarkov 2025-06-02 14:28:43 +03:00
parent 63909d59ba
commit 2a5367619f
5 changed files with 4556 additions and 7569 deletions

View File

@ -5,7 +5,7 @@ import { defineConfig } from "astro/config";
*/
import sitemap from "@astrojs/sitemap";
import solidJs from "@astrojs/solid-js";
import netlifyCMS from "astro-netlify-cms";
// import netlifyCMS from "astro-netlify-cms";
import icon from "astro-icon";
/**
@ -21,7 +21,7 @@ import { h } from "hastscript";
import { toString } from "hast-util-to-string";
import { escape } from "html-escaper";
import languages from "./src/i18n/languages";
import { DEFAULT_LANGUAGE, SUPPORTED_LANGUAGES } from "./src/constants";
import { DEFAULT_LANGUAGE } from "./src/constants";
const createAnchorLabel = (heading) => {
const node = h("span.anchor-label", escape(heading));
@ -42,359 +42,6 @@ export default defineConfig({
}),
icon(),
solidJs(),
netlifyCMS({
adminPath: "/cms",
config: {
editor: {
preview: false,
},
display_url: "https://yarkov.tech",
i18n: {
locales: SUPPORTED_LANGUAGES,
default_locale: DEFAULT_LANGUAGE,
structure: "multiple_folders",
},
locale: DEFAULT_LANGUAGE,
backend: {
name: "github",
repo: "sergeyyarkov/yarkov.tech",
branch: "main",
},
media_folder: "public/media",
public_folder: "/media",
collections: [
/**
* Articles
*/
{
name: "articles",
label: "Публикации",
label_singular: "публикацию",
description:
"Технические статьи, туториалы и различные справочные материалы которые связаны с IT тематикой",
folder: "src/content/blog",
slug: "{{slug}}",
create: true,
delete: true,
i18n: true,
fields: [
{
name: "coverImage",
widget: "image",
label: "Постер",
required: false,
i18n: true,
},
{
name: "draft",
label: "В черновике",
widget: "boolean",
hint: "Опубликована ли статья",
i18n: true,
required: false,
},
{
name: "author",
widget: "relation",
value_field: "{{firstName}} {{lastName}}",
search_fields: ["firstName", "lastName"],
collection: "authors",
label: "Автор",
i18n: true,
},
{
name: "title",
widget: "string",
label: "Заголовок",
i18n: true,
},
{
name: "description",
widget: "string",
label: "Описание",
i18n: true,
},
{
name: "tags",
widget: "relation",
label: "Тэги",
collection: "tags",
multiple: true,
value_field: "title",
search_fields: ["title"],
i18n: true,
},
{
name: "pubDate",
widget: "datetime",
label: "Дата публикации",
picker_utc: true,
i18n: true,
},
{
name: "updatedDate",
widget: "datetime",
label: "Дата обновления",
picker_utc: true,
i18n: true,
},
{
name: "body",
widget: "markdown",
label: "Содержание",
i18n: true,
},
],
},
/**
* Tags
*/
{
name: "tags",
label: "Тэги",
label_singular: "тэг",
description: "Используются для тегирования контента",
folder: "src/content/tags",
create: true,
delete: true,
fields: [
{
name: "title",
widget: "string",
label: "Название",
required: true,
},
],
},
/**
* Authors
*/
{
name: "authors",
label: "Авторы",
label_singular: "автора",
description: "На странице статьи отображается имя автора",
slug: "{{firstName}}-{{lastName}}",
folder: "src/content/authors",
create: true,
delete: true,
i18n: true,
fields: [
{
label: "Имя",
name: "firstName",
widget: "string",
required: true,
i18n: true,
},
{
label: "Фамилия",
name: "lastName",
widget: "string",
required: true,
i18n: true,
},
{
label: "Об авторе",
name: "body",
widget: "markdown",
required: false,
i18n: true,
},
],
},
/**
* Projects
*/
{
name: "projects",
label: "Проекты",
label_singular: "проект",
description: "Основные проекты, которые были разработаны в выложены в открытый доступ",
folder: "src/content/projects",
create: true,
delete: true,
i18n: true,
fields: [
{
name: "icon",
label: "Иконка",
widget: "string",
required: true,
i18n: true,
},
{
name: "title",
label: "Название",
widget: "string",
required: true,
i18n: true,
},
{
name: "year",
label: "В каком году разработал",
widget: "number",
required: true,
i18n: true,
},
{
name: "description",
label: "Описание",
widget: "string",
required: true,
i18n: true,
},
{
name: "sourceUrl",
label: "Ссылка на исходник",
widget: "string",
required: true,
i18n: true,
},
{
name: "demoUrl",
label: "Ссылка на демонстрацию",
widget: "string",
required: false,
i18n: true,
},
{
name: "articleUrl",
label: "Ссылка на статью",
widget: "string",
required: false,
i18n: true,
},
],
},
/**
* Skills
*/
{
name: "skills",
label: "Навыки",
label_singular: "навык",
folder: "src/content/skills",
create: true,
delete: true,
description: "Навыки отображаются на странице Обо мне",
i18n: true,
fields: [
{
name: "title",
label: "Категория",
widget: "string",
required: true,
i18n: true,
},
{
name: "list",
label: "Записи",
required: true,
widget: "list",
allow_add: true,
min: 1,
i18n: true,
fields: [
{ name: "icon", label: "Иконка", widget: "string", i18n: true, required: false },
{ name: "title", label: "Название", widget: "string", i18n: true },
],
},
],
},
/**
* Settings
*/
{
name: "settings",
label: "Настройки",
files: [
{
name: "siteconfig",
label: "Настройки веб-сайта",
file: "siteconfig.json",
fields: [
{
label: "Название сайта",
name: "name",
widget: "string",
hint: "Отображается в шапке.",
default: "yarkov.tech",
},
{
label: "Автор веб-сайта",
name: "author",
widget: "string",
hint: "Отображается в подвале.",
},
{
label: "Глобальный заголовок",
name: "globalTitle",
widget: "string",
hint: "Отображется во вкладке браузера.",
},
{
label: "В разработке",
name: "isSiteUnderConstruction",
widget: "boolean",
required: false,
default: false,
hint: "Отображает баннер на всех старницах о том, что веб-сайт находится в разработке",
},
{
label: "Счетчик Яндекс.Метрики",
name: "ymCounter",
widget: "number",
hint: "Например: 90034656",
required: false,
},
{
label: "Статьи",
name: "articles",
widget: "object",
fields: [
{
name: "recentLimit",
label: "Лимит на отображение",
widget: "number",
hint: "Кол-во публикаций на гл.странице",
default: 5,
},
],
},
{
label: "Контакты",
name: "contacts",
widget: "object",
required: false,
fields: [
{
label: "Telegram",
name: "telegram",
widget: "string",
required: false,
},
{
label: "Почта",
name: "email",
widget: "string",
required: false,
},
{
label: "Github",
name: "github",
widget: "string",
required: false,
},
],
},
],
},
],
},
],
},
}),
],
markdown: {
syntaxHighlight: "prism",

11506
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,7 @@
"@sindresorhus/slugify": "^2.2.1",
"astro": "^3.2.0",
"astro-icon": "^1.1.5",
"astro-netlify-cms": "^0.5.4",
"decap-cms-app": "^3.6.3",
"hast-util-to-string": "^3.0.0",
"hastscript": "^8.0.0",
"html-escaper": "^3.0.3",

247
public/admin/config.yml Normal file
View File

@ -0,0 +1,247 @@
editor:
preview: false
display_url: https://yarkov.tech
i18n:
locales: [ru, en]
default_locale: ru
structure: multiple_folders
locale: en
backend:
name: github
repo: sergeyyarkov/yarkov.tech
branch: main
media_folder: public/media
public_folder: "/media"
collections:
- name: articles
label: Публикации
label_singular: публикацию
description: Технические статьи, туториалы и различные справочные материалы которые связаны с IT тематикой
folder: src/content/blog
slug: "{{slug}}"
create: true
delete: true
i18n: true
fields:
- name: coverImage
widget: image
label: Постер
required: false
i18n: true
- name: draft
label: В черновике
widget: boolean
hint: Опубликована ли статья
i18n: true
required: false
- name: author
widget: relation
value_field: "{{firstName}} {{lastName}}"
search_fields:
- firstName
- lastName
collection: authors
label: Автор
i18n: true
- name: title
widget: string
label: Заголовок
i18n: true
- name: description
widget: string
label: Описание
i18n: true
- name: tags
widget: relation
label: Тэги
collection: tags
multiple: true
value_field: title
search_fields:
- title
i18n: true
- name: pubDate
widget: datetime
label: Дата публикации
picker_utc: true
i18n: true
- name: updatedDate
widget: datetime
label: Дата обновления
picker_utc: true
i18n: true
- name: body
widget: markdown
label: Содержание
i18n: true
- name: tags
label: Тэги
label_singular: тэг
description: Используются для тегирования контента
folder: src/content/tags
create: true
delete: true
fields:
- name: title
widget: string
label: Название
required: true
- name: authors
label: Авторы
label_singular: автора
description: На странице статьи отображается имя автора
slug: "{{firstName}}-{{lastName}}"
folder: src/content/authors
create: true
delete: true
i18n: true
fields:
- label: Имя
name: firstName
widget: string
required: true
i18n: true
- label: Фамилия
name: lastName
widget: string
required: true
i18n: true
- label: Об авторе
name: body
widget: markdown
required: false
i18n: true
- name: projects
label: Проекты
label_singular: проект
description: Основные проекты, которые были разработаны в выложены в открытый
доступ
folder: src/content/projects
create: true
delete: true
i18n: true
fields:
- name: icon
label: Иконка
widget: string
required: true
i18n: true
- name: title
label: Название
widget: string
required: true
i18n: true
- name: year
label: В каком году разработал
widget: number
required: true
i18n: true
- name: description
label: Описание
widget: string
required: true
i18n: true
- name: sourceUrl
label: Ссылка на исходник
widget: string
required: true
i18n: true
- name: demoUrl
label: Ссылка на демонстрацию
widget: string
required: false
i18n: true
- name: articleUrl
label: Ссылка на статью
widget: string
required: false
i18n: true
- name: skills
label: Навыки
label_singular: навык
folder: src/content/skills
create: true
delete: true
description: Навыки отображаются на странице Обо мне
i18n: true
fields:
- name: title
label: Категория
widget: string
required: true
i18n: true
- name: list
label: Записи
required: true
widget: list
allow_add: true
min: 1
i18n: true
fields:
- name: icon
label: Иконка
widget: string
i18n: true
required: false
- name: title
label: Название
widget: string
i18n: true
- name: settings
label: Настройки
files:
- name: siteconfig
label: Настройки веб-сайта
file: siteconfig.json
fields:
- label: Название сайта
name: name
widget: string
hint: Отображается в шапке.
default: yarkov.tech
- label: Автор веб-сайта
name: author
widget: string
hint: Отображается в подвале.
- label: Глобальный заголовок
name: globalTitle
widget: string
hint: Отображется во вкладке браузера.
- label: В разработке
name: isSiteUnderConstruction
widget: boolean
required: false
default: false
hint: Отображает баннер на всех старницах о том, что веб-сайт находится в
разработке
- label: Счетчик Яндекс.Метрики
name: ymCounter
widget: number
hint: "Например: 90034656"
required: false
- label: Статьи
name: articles
widget: object
fields:
- name: recentLimit
label: Лимит на отображение
widget: number
hint: Кол-во публикаций на гл.странице
default: 5
- label: Контакты
name: contacts
widget: object
required: false
fields:
- label: Telegram
name: telegram
widget: string
required: false
- label: Почта
name: email
widget: string
required: false
- label: Github
name: github
widget: string
required: false

13
src/pages/admin.html Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="noindex" />
<link href="/admin/config.yml" type="text/yaml" rel="cms-config-url" />
<title>Content Manager</title>
</head>
<body>
<script src="https://unpkg.com/decap-cms@^3.1.2/dist/decap-cms.js"></script>
</body>
</html>