mirror of
https://github.com/sergeyyarkov/yarkov.tech.git
synced 2026-10-11 10:29:21 +03:00
decap cms
This commit is contained in:
parent
63909d59ba
commit
2a5367619f
357
astro.config.mjs
357
astro.config.mjs
@ -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
11506
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -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
247
public/admin/config.yml
Normal 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
13
src/pages/admin.html
Normal 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>
|
||||
Loading…
x
Reference in New Issue
Block a user