first commit

This commit is contained in:
Ilia Miheev
2025-11-22 22:14:33 +03:00
commit b4d17173e5
12 changed files with 422 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto
+2
View File
@@ -0,0 +1,2 @@
node_modules/
example/
+2
View File
@@ -0,0 +1,2 @@
node_modules/
example/
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Ilia Miheev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+43
View File
@@ -0,0 +1,43 @@
# Создание структуры сайта-документации на docsify
**docidoci** — это cli программа для создания структуры сайта-документации на docsify.
При базовой конфигурации docsify сайт не выглядит впечатляющим, поэтому в 100% случаев к нему добавляют плагины и изменяют начальную конфигурацию. С помощью docidoci можно создать проект за считанные секунды, в котором не нужно тратить время на подключение:
1. Навигационной и боковой панели, а так же титульной страницы и страницы 404
2. Переключения световой темы
3. Подсветки и копирования кода
4. Поиска по документации
5. Небольшой seo оптимизации сайта
6. Прочего
После создания проекта плагины по умолчанию можно легко отключить или подключить свои.
## Установка
Скачать docidoci можно с помощью следущей команды:
```bash
npm i -g docidoci
```
## Использование
Интерфейс программы предоставлет собой три команды:
### docidoci help
Выводит список доступных команд. Так же посмотреть список команд можно введя docidoci без параметров
### docidoci settings
Создаёт в текущей дирректории файл `docidociSettings.json` с помощью которого осуществляется настройка проекта. В файле можно указать название проекта, ссылку на репозиторий, цветовую тему, данные для seo и другое. Создание файла настроек не является обязательным, но оно поможет ускорить процесс создания сайта.
### docidoci init
Самая главная команда, использующаяся для создания структуры проекта. Если в текущей дирректории существует файл `docidociSettings.json`, то проект будет создан на основе вписанных настроек, иначе — будет создана более "скромная" версия проекта.
+13
View File
@@ -0,0 +1,13 @@
{
"projectName": "Название проекта",
"repo": "Ссылка на репозиторий если есть",
"preloaderText": "Текст выводимый при загрузке страницы",
"themeColor": "Цветовая тема сайта",
"seo": {
"title": "Заголовок сайта",
"description": "Описание сайта",
"keywords": "Ключевые слова, через запятую",
"image": "Картинка при отображении ссылки",
"url": "Ссылка на сайт"
}
}
BIN
View File
Binary file not shown.
+89
View File
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>{title}</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<link rel="icon" href="./logo.png" type="image/x-icon">
<!-- Meta Tags -->
<meta name="title" content="{title}">
<meta name="description" content="{description}">
<meta name="keywords" content="{keywords}">
<meta name="theme-color" content="{themeColor}">
<!-- Open Graph Tags -->
<meta property="og:title" content="{title}">
<meta property="og:description" content="{description}">
<meta property="og:image" content="{image}">
<meta property="og:url" content="{url}">
<meta property="og:type" content="website">
<!-- Стили при переключении темы -->
<!-- docsify-themeable styles-->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify-darklight-theme@3/dist/docsify-themeable/style.min.css"
type="text/css">
<link title="light" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple.css"
rel="stylesheet">
<link title="dark" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple-dark.css"
rel="stylesheet alternative">
<!-- Персональные стили -->
<link rel="stylesheet" href="./styles.css">
</head>
<body>
<div id="app">
<h2 id="preloaderText">{preloaderText}</h2>
</div>
<script>
window.$docsify = {
name: '{projectName}', // заголовок на боковой панели
mergeNavbar: true, // на малых экранах шапка будет переходить в панель навигации
coverpage: true, // подключение начальной страницы
loadSidebar: true, // подключение панели навигации
loadNavbar: true, // подключение шапки
auto2top: true, // автопрокрутка на верх странице при переходе на другую страницу
homepage: 'home.md', // домашняя страница
repo: '{repo}', // ссылка на репозиторий в правом верхнем углу экрана
subMaxLevel: 3, // максимальный уровень заголовка который появится в панели навигации
notFoundPage: './_404.md', // страница не найдена
themeColor: '{themeColor}', // цветовая тема
search: {
maxAge: 86400000, // хз что это
paths: 'auto', // по каким путям будет осуществляться поиск
placeholder: 'Поиск', // надпись внутри поискового поля
noData: 'Ничего не найдено(', // сообщение если нет результатов
depth: 3, // глубина заголовка
hideOtherSidebarContent: true, // следует ли скрывать другое содержимое боковой панели
},
};
</script>
<!-- Подключаем Dostifi -->
<!-- Docsify v4 -->
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
<!-- Подключаем поиск -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
<!-- Плагин для переключения темы -->
<script src="//cdn.jsdelivr.net/npm/docsify-darklight-theme@3/dist/docsify-themeable/main.min.js"
type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/npm/docsify-darklight-theme@3/dist/docsify-themeable/index.min.js"
type="text/javascript"> </script>
<!-- Расширение для копирования кода -->
<!-- Latest v2.x.x -->
<script src="https://unpkg.com/docsify-copy-code@2"></script>
<!-- Подсветка синтаксиса bash и python -->
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-bash.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-python.min.js"></script>
</body>
</html>
+75
View File
@@ -0,0 +1,75 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>О чём будет ваша дока?</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<link rel="icon" href="./logo.png" type="image/x-icon">
<!-- Стили при переключении темы -->
<!-- docsify-themeable styles-->
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify-darklight-theme@3/dist/docsify-themeable/style.min.css"
type="text/css">
<link title="light" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple.css"
rel="stylesheet">
<link title="dark" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple-dark.css"
rel="stylesheet alternative">
<!-- Персональные стили -->
<link rel="stylesheet" href="./styles.css">
</head>
<body>
<div id="app">
<h2 id="preloaderText">Секундочку...</h2>
</div>
<script>
window.$docsify = {
name: 'Название проекта', // заголовок на боковой панели
mergeNavbar: true, // на малых экранах шапка будет переходить в панель навигации
coverpage: true, // подключение начальной страницы
loadSidebar: true, // подключение панели навигации
loadNavbar: true, // подключение шапки
auto2top: true, // автопрокрутка на верх странице при переходе на другую страницу
homepage: 'home.md', // домашняя страница
repo: '', // ссылка на репозиторий в правом верхнем углу экрана
subMaxLevel: 3, // максимальный уровень заголовка который появится в панели навигации
notFoundPage: './_404.md', // страница не найдена
themeColor: 'orangered', // цветовая тема
search: {
maxAge: 86400000, // хз что это
paths: 'auto', // по каким путям будет осуществляться поиск
placeholder: 'Поиск', // надпись внутри поискового поля
noData: 'Ничего не найдено(', // сообщение если нет результатов
depth: 3, // глубина заголовка
hideOtherSidebarContent: true, // следует ли скрывать другое содержимое боковой панели
},
};
</script>
<!-- Подключаем Dostifi -->
<!-- Docsify v4 -->
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
<!-- Подключаем поиск -->
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
<!-- Плагин для переключения темы -->
<script src="//cdn.jsdelivr.net/npm/docsify-darklight-theme@3/dist/docsify-themeable/main.min.js"
type="text/javascript"></script>
<script src="//cdn.jsdelivr.net/npm/docsify-darklight-theme@3/dist/docsify-themeable/index.min.js"
type="text/javascript"> </script>
<!-- Расширение для копирования кода -->
<!-- Latest v2.x.x -->
<script src="https://unpkg.com/docsify-copy-code@2"></script>
<!-- Подсветка синтаксиса bash и python -->
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-bash.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-python.min.js"></script>
</body>
</html>
+111
View File
@@ -0,0 +1,111 @@
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const AdmZip = require('adm-zip');
const minimist = require('minimist');
const helpMessage = `Список доступных команд docidoci:
help — вывод списка доступных команд
settings — создаёт файл в котором нужно указать мета-теги для сайта
init — создание структуры проекта на основе указанных настроек
`
function rebrendingData() {
const settingsPath = path.join(process.cwd(), 'docidociSettings.json')
const indexHtmlPath = path.join(process.cwd(), 'index.html')
const settings = JSON.parse(fs.readFileSync(settingsPath))
data = String(fs.readFileSync('./index.html'))
htmlSample = data.replace('{projectName}', settings.projectName)
htmlSample = htmlSample.replace('{repo}', settings.repo)
htmlSample = htmlSample.replace(/{themeColor}/g, settings.themeColor)
htmlSample = htmlSample.replace('{preloaderText}', settings.preloaderText)
htmlSample = htmlSample.replace(/{title}/g, settings.seo.title)
htmlSample = htmlSample.replace(/{description}/g, settings.seo.description)
htmlSample = htmlSample.replace('{keywords}', settings.seo.keywords)
htmlSample = htmlSample.replace('{image}', settings.seo.image)
htmlSample = htmlSample.replace('{url}', settings.seo.url)
fs.writeFileSync(indexHtmlPath, htmlSample)
}
function castomCopyFile(from, to) {
const originalFile = path.join(__dirname, from);
const copyFile = path.join(process.cwd(), to);
fs.copyFileSync(originalFile, copyFile);
}
function commandInit() {
const archivePath = path.join(__dirname, './files/files.zip');
const targetPath = process.cwd();
const settingsPath = path.join(process.cwd(), 'docidociSettings.json')
// Проверяем наличие архива
if (!fs.existsSync(archivePath)) {
console.log('Архив со структурой проекта не найден!');
process.exit(1)
}
// Проверяем, существует ли уже проект
let indexHtmlPath = path.join(process.cwd(), './index.html')
if (fs.existsSync(indexHtmlPath) && !argv.y) {
console.log(`Ошибка инициализации!
В папке "${targetPath}" уже существует проект!
Если хочешь его реинициализировать, то введи команду "docidoci init -y"`);
process.exit(1)
}
// Разархивировываем архив
const zip = new AdmZip(archivePath);
zip.extractAllTo(targetPath, true);
// Переносим html шаблон
if (fs.existsSync(settingsPath)) {
castomCopyFile('./files/index.html', 'index.html')
rebrendingData()
} else {
castomCopyFile('./files/indexWithoutSettings.html', 'index.html')
}
console.log(`Готово, проект инициализирован)
Проект находится в папке ${targetPath}
Запустить проект docsify можно командой "docsify serve"`);
process.exit()
};
function commandSettings() {
castomCopyFile('./files/docidociSettings.json', 'docidociSettings.json')
console.log(`Файл настроек скопирован!
Заполни поля своими данными или сделай их пустыми.
После выполни команду "docidoci init"`);
}
// Обработка аргументов из командной строки
const argv = minimist(process.argv.slice(2));
if (argv._.length == 0) {
console.log(helpMessage);
return
} else if (argv._.length > 1) {
console.log('За раз можно указывать только одну команду!!!\n');
console.log(helpMessage);
return
}
// Обработка команд
const command = argv._[0] // основная команда
if (command === 'init') {
commandInit();
} else if (command == 'help') {
console.log(helpMessage)
} else if (command == 'settings') {
commandSettings()
} else {
console.log(`Неизвестная команда "${command}". Введи "docidoci help", чтобы увидеть список доступных команд`);
}
+36
View File
@@ -0,0 +1,36 @@
{
"name": "docidoci",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "docidoci",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"adm-zip": "^0.5.16",
"minimist": "^1.2.8"
},
"bin": {
"docidoci": "index.js"
}
},
"node_modules/adm-zip": {
"version": "0.5.16",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
"integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
"engines": {
"node": ">=12.0"
}
},
"node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
}
}
}
+28
View File
@@ -0,0 +1,28 @@
{
"name": "docidoci",
"version": "1.0.0",
"description": "Создание структуры сайта-документации на docsify",
"main": "index.js",
"bin": {
"docidoci": "./index.js"
},
"keywords": [
"docsify",
"doc",
"documentation",
"maket",
"constructor",
"документация",
"макет",
"конструктор"
],
"author": {
"name": "m_ilia",
"email": "polo-volumes-ounce@duck.com"
},
"license": "ISC",
"dependencies": {
"adm-zip": "^0.5.16",
"minimist": "^1.2.8"
}
}