@opengis/cms 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cms.js +5900 -0
- package/dist/cms.umd.cjs +19 -0
- package/package.json +4 -1
- package/.gitlab-ci.yml +0 -36
- package/config.example +0 -21
- package/docs/.vitepress/abbr.mjs +0 -26
- package/docs/.vitepress/config.mjs +0 -119
- package/docs/.vitepress/navigation.mjs +0 -82
- package/docs/.vitepress/theme/Layout.vue +0 -17
- package/docs/.vitepress/theme/components/NavigationLinks.vue +0 -102
- package/docs/.vitepress/theme/components/Panzoom.vue +0 -169
- package/docs/.vitepress/theme/index.mjs +0 -15
- package/docs/.vitepress/theme/style.scss +0 -136
- package/docs/abbr.json +0 -4
- package/docs/api/builder/cms.builder.delete.md +0 -65
- package/docs/api/builder/cms.builder.get.md +0 -70
- package/docs/api/builder/cms.builder.list.md +0 -98
- package/docs/api/builder/cms.builder.post.md +0 -72
- package/docs/api/builder/cms.builder.put.md +0 -88
- package/docs/api/category/cms.category.delete.md +0 -60
- package/docs/api/category/cms.category.get.md +0 -61
- package/docs/api/category/cms.category.list.md +0 -77
- package/docs/api/category/cms.category.post.md +0 -62
- package/docs/api/category/cms.category.put.md +0 -78
- package/docs/api/index.md +0 -50
- package/docs/api/manager/cms.manager.delete.md +0 -64
- package/docs/api/manager/cms.manager.get.md +0 -72
- package/docs/api/manager/cms.manager.list.md +0 -96
- package/docs/api/manager/cms.manager.post.md +0 -70
- package/docs/api/manager/cms.manager.put.md +0 -86
- package/docs/api/media/del.md +0 -64
- package/docs/api/media/edit.md +0 -92
- package/docs/api/media/list.md +0 -70
- package/docs/api/media/metadata.md +0 -57
- package/docs/api/media/preview.md +0 -33
- package/docs/api/media/upload.md +0 -84
- package/docs/db/erd.md +0 -173
- package/docs/db/index.md +0 -7
- package/docs/index.md +0 -39
- package/docs/public/logo-dark.svg +0 -24
- package/docs/public/logo-light.svg +0 -24
- package/docs/public/logo-short.svg +0 -15
- package/docs/public/logo.svg +0 -19
- package/docs/readme/index.md +0 -6
- package/docs/src/vs-button.vue +0 -157
- package/docs/vue/basic/button.md +0 -144
- package/docs/vue/index.md +0 -9
- package/index.html +0 -14
- package/server/app.js +0 -25
- package/server/config.js +0 -5
- package/server/index.js +0 -23
- package/server/migrations/media.sql +0 -30
- package/server/plugins/hook.js +0 -91
- package/server/plugins/vite.js +0 -80
- package/server/routes/builder/controllers/cms.builder.delete.js +0 -21
- package/server/routes/builder/controllers/cms.builder.get.js +0 -17
- package/server/routes/builder/controllers/cms.builder.list.js +0 -16
- package/server/routes/builder/controllers/cms.builder.post.js +0 -21
- package/server/routes/builder/controllers/cms.builder.put.js +0 -23
- package/server/routes/builder/index.mjs +0 -22
- package/server/routes/category/controllers/cms.category.delete.js +0 -21
- package/server/routes/category/controllers/cms.category.get.js +0 -17
- package/server/routes/category/controllers/cms.category.list.js +0 -16
- package/server/routes/category/controllers/cms.category.post.js +0 -21
- package/server/routes/category/controllers/cms.category.put.js +0 -23
- package/server/routes/category/index.mjs +0 -22
- package/server/routes/manager/controllers/cms.manager.delete.js +0 -22
- package/server/routes/manager/controllers/cms.manager.get.js +0 -21
- package/server/routes/manager/controllers/cms.manager.list.js +0 -31
- package/server/routes/manager/controllers/cms.manager.post.js +0 -28
- package/server/routes/manager/controllers/cms.manager.put.js +0 -23
- package/server/routes/manager/index.mjs +0 -22
- package/server/routes/media/controllers/delete.js +0 -59
- package/server/routes/media/controllers/edit.js +0 -94
- package/server/routes/media/controllers/list.js +0 -74
- package/server/routes/media/controllers/metadata.js +0 -51
- package/server/routes/media/controllers/preview.js +0 -47
- package/server/routes/media/controllers/upload.js +0 -79
- package/server/routes/media/index.mjs +0 -16
- package/server/routes/root.mjs +0 -15
- package/server/templates/cls/cms.category_type.json +0 -10
- package/server/templates/cls/cms.content_review_status.json +0 -10
- package/server/templates/cls/cms.content_status.json +0 -10
- package/server/templates/cls/cms.content_type.json +0 -10
- package/server/templates/cls/cms.lang.json +0 -10
- package/server/templates/page/login.html +0 -59
- package/server/templates/select/cms.category_id.sql +0 -1
- package/server/templates/select/cms.type_id.sql +0 -1
- package/src/App.vue +0 -4
- package/src/assets/tailwind/tailwind.js +0 -62
- package/src/assets/vue.svg +0 -1
- package/src/components/builder/vs-builder-content.vue +0 -163
- package/src/components/builder/vs-builder-menu.vue +0 -142
- package/src/components/formats/index.js +0 -8
- package/src/components/formats/vs-manager-table-date.vue +0 -29
- package/src/components/formats/vs-manager-table-switch.vue +0 -16
- package/src/components/icons/icon-actions.vue +0 -24
- package/src/components/icons/icon-arrow-left.vue +0 -19
- package/src/components/icons/icon-check.vue +0 -23
- package/src/components/icons/icon-chewron-right.vue +0 -16
- package/src/components/icons/icon-close.vue +0 -22
- package/src/components/icons/icon-edit.vue +0 -22
- package/src/components/icons/icon-folder.vue +0 -18
- package/src/components/icons/icon-folder2.vue +0 -17
- package/src/components/icons/icon-home.vue +0 -16
- package/src/components/icons/icon-image.vue +0 -18
- package/src/components/icons/icon-logo.vue +0 -22
- package/src/components/icons/icon-media.vue +0 -22
- package/src/components/icons/icon-point.vue +0 -11
- package/src/components/icons/icon-search.vue +0 -22
- package/src/components/icons/icon-table.vue +0 -22
- package/src/components/icons/icon-users.vue +0 -18
- package/src/components/icons/icon.plus.vue +0 -18
- package/src/components/manager/children/vs-manager-collection-content.vue +0 -55
- package/src/components/manager/children/vs-manager-collection-item-content.vue +0 -116
- package/src/components/manager/children/vs-manager-single-content.vue +0 -112
- package/src/components/manager/manager-table/vs-manager-colection-table-add.vue +0 -84
- package/src/components/manager/manager-table/vs-manager-collection-table.vue +0 -59
- package/src/components/manager/vs-manager-menu.vue +0 -73
- package/src/components/media/Breadcrumb.vue +0 -73
- package/src/components/shared-components/vs-not-data.vue +0 -213
- package/src/components/vs-main-menu.vue +0 -53
- package/src/helpers/debounce.js +0 -10
- package/src/helpers/translite.js +0 -19
- package/src/main.js +0 -30
- package/src/misc/import-file.js +0 -32
- package/src/pages/vs-builder.vue +0 -22
- package/src/pages/vs-layout.vue +0 -17
- package/src/pages/vs-manager.vue +0 -30
- package/src/pages/vs-media.vue +0 -398
- package/src/router/router.js +0 -9
- package/src/router/routes.config.js +0 -40
- package/src/style.css +0 -0
- package/src/templates/form-columns.js +0 -70
- package/src/templates/form-template.js +0 -22
- package/test/config.js +0 -17
- package/test/files/eye.svg +0 -4
- package/test/helper.js +0 -30
- package/test/routes/builder.test.js +0 -99
- package/test/routes/category.test.js +0 -97
- package/test/routes/manager.test.js +0 -103
- package/test/routes/media.test.js +0 -252
- package/vite.config.js +0 -37
- /package/{public → dist}/vite.svg +0 -0
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from 'vitepress';
|
|
2
|
-
import { withMermaid } from 'vitepress-plugin-mermaid';
|
|
3
|
-
import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs';
|
|
4
|
-
import markdownItAbbr from 'markdown-it-abbr';
|
|
5
|
-
import navigation from './navigation.mjs';
|
|
6
|
-
import handleAbbr from './abbr.mjs';
|
|
7
|
-
|
|
8
|
-
// Автоматична генерація одночасно nav (меню в хедері) і сайдбару для кожного пункту nav
|
|
9
|
-
const { nav, sidebar } = navigation(
|
|
10
|
-
/*
|
|
11
|
-
Перший параметр функції (обов'язковий) - масив об'єктів з ключами:
|
|
12
|
-
1) text (обов'язковий) - назва пункта меню, яка буде відображатись в хедері
|
|
13
|
-
2) folder (обов'язковий) - назва папки з документацією, яка повинна відкриватись по кліку на пункт меню з хедера
|
|
14
|
-
(на основі цієї папки буде автоматично сформований сайдбар)
|
|
15
|
-
3) link (необов'язковий) - кастомне посилання, по стандарту веде на файл `docs/${forder}/index.md`
|
|
16
|
-
4) інші необов'язкові ключі (activeMatch, target...) описані тут - https://vitepress.dev/reference/default-theme-nav#navigation-links
|
|
17
|
-
*/
|
|
18
|
-
[
|
|
19
|
-
{
|
|
20
|
-
text: 'DB',
|
|
21
|
-
folder: 'db',
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
text: 'API',
|
|
25
|
-
folder: 'api',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
text: 'Vue',
|
|
29
|
-
folder: 'vue',
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
text: 'Readme',
|
|
33
|
-
folder: 'readme',
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
/*
|
|
37
|
-
Другий параметр функції (НЕобов'язковий) - об'єкт з двома ключами:
|
|
38
|
-
1) nav - параметри для налаштування хедера, може містити наступні ключі:
|
|
39
|
-
* disableHome (Booleadn, default: false) - чи скрити пункт меню, який веде на головну
|
|
40
|
-
* homeTitle (String, default: 'Головна') - назва пункту меню, який веде на головну
|
|
41
|
-
2) sidebar - параметри для налаштування сайдбару, може містити наступні ключі:
|
|
42
|
-
* ${назва_папки} (Object) - референс до кожного окремого сайдбару, який вказаний в першому параметрі функції. Ключем виступає те що вказано в folder. Перелік доступних ключів стандартний і описаний тут - https://github.com/jooy2/vitepress-sidebar#options
|
|
43
|
-
*/
|
|
44
|
-
{
|
|
45
|
-
// nav: {
|
|
46
|
-
// disableHome: false,
|
|
47
|
-
// homeTitle: 'Головна',
|
|
48
|
-
// },
|
|
49
|
-
// sidebar: {
|
|
50
|
-
// 'api': {
|
|
51
|
-
// includeFolderIndexFile: true,
|
|
52
|
-
// }
|
|
53
|
-
// }
|
|
54
|
-
},
|
|
55
|
-
/*
|
|
56
|
-
Третій параметр функції (НЕобов'язковий, default: '/docs') - вказує папку, в якій знаходиться конфігураційна папка .vitepress:
|
|
57
|
-
- наприклад, якщо у вас в проєкті вже є інша документація і папка docs зайнята, то тут потрібно вказати нову назву папки
|
|
58
|
-
- детальніше тут - https://github.com/jooy2/vitepress-sidebar?tab=readme-ov-file#documentrootpath
|
|
59
|
-
*/
|
|
60
|
-
// '/docs-dev',
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
export default withMermaid(
|
|
64
|
-
defineConfig({
|
|
65
|
-
base: '/cms/',
|
|
66
|
-
|
|
67
|
-
title: "Content Management System",
|
|
68
|
-
description: "Система Керування Контентом",
|
|
69
|
-
|
|
70
|
-
ignoreDeadLinks: true,
|
|
71
|
-
|
|
72
|
-
markdown: {
|
|
73
|
-
config(md) {
|
|
74
|
-
md.use(tabsMarkdownPlugin);
|
|
75
|
-
md.use(markdownItAbbr);
|
|
76
|
-
md.use(handleAbbr);
|
|
77
|
-
},
|
|
78
|
-
languageAlias: {
|
|
79
|
-
'example': 'r',
|
|
80
|
-
'schema-api': 'r',
|
|
81
|
-
'scheme-api': 'r',
|
|
82
|
-
'schema': 'r',
|
|
83
|
-
'scheme': 'r'
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
|
|
87
|
-
head: [
|
|
88
|
-
['script', { src: 'https://cdn.tailwindcss.com' }],
|
|
89
|
-
['link', { rel: 'icon shortcut', href: './logo-short.svg' }],
|
|
90
|
-
['link', { href: 'https://cdn.softpro.ua/vue/v3-core/dev/style.css' }],
|
|
91
|
-
],
|
|
92
|
-
|
|
93
|
-
// https://vitepress.dev/reference/default-theme-config
|
|
94
|
-
themeConfig: {
|
|
95
|
-
nav,
|
|
96
|
-
sidebar,
|
|
97
|
-
|
|
98
|
-
logo: '/logo.svg',
|
|
99
|
-
siteTitle: false,
|
|
100
|
-
|
|
101
|
-
outline: 'deep',
|
|
102
|
-
|
|
103
|
-
search: {
|
|
104
|
-
provider: 'local',
|
|
105
|
-
},
|
|
106
|
-
|
|
107
|
-
socialLinks: [
|
|
108
|
-
{ icon: 'github', link: 'https://git.softpro.ua/', },
|
|
109
|
-
],
|
|
110
|
-
|
|
111
|
-
// Додаткові посилання в навігації - https://prnt.sc/5K70IDQh8J-f
|
|
112
|
-
// Виводиться на всіх сторінках
|
|
113
|
-
// Також можна оверрайдити/доповнювати на окремих сторінках, просто в потрібному .md файлі - https://prnt.sc/VAGE3r_RU389
|
|
114
|
-
navigationLinks: [
|
|
115
|
-
{ icon: 'brand-gitlab', link: 'https://git.softpro.ua/', text: 'GitLab', },
|
|
116
|
-
],
|
|
117
|
-
},
|
|
118
|
-
})
|
|
119
|
-
);
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { generateSidebar } from 'vitepress-sidebar';
|
|
2
|
-
|
|
3
|
-
function navigation(items = [], options = {}, documentRootPath = '/docs') {
|
|
4
|
-
const navHeader = [];
|
|
5
|
-
const navSidebar = [];
|
|
6
|
-
|
|
7
|
-
if (!options.nav) {
|
|
8
|
-
options.nav = {};
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
if (!options.sidebar) {
|
|
12
|
-
options.sidebar = {};
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (!options.nav.disableHome) {
|
|
16
|
-
navHeader.push(
|
|
17
|
-
{
|
|
18
|
-
text: options.nav.homeTitle || 'Головна',
|
|
19
|
-
link: '/',
|
|
20
|
-
}
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
items.forEach(item => {
|
|
25
|
-
if (item.text && item.items) {
|
|
26
|
-
navHeader.push(item);
|
|
27
|
-
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (!item.text || !item.folder) {
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// FORMAT INCOME DATA
|
|
36
|
-
const itemFolder = item.folder.trim();
|
|
37
|
-
const itemFolderFormatted = `/${itemFolder}/`;
|
|
38
|
-
|
|
39
|
-
// NAVBAR
|
|
40
|
-
navHeader.push(
|
|
41
|
-
{
|
|
42
|
-
...item,
|
|
43
|
-
link: item.link || itemFolderFormatted,
|
|
44
|
-
activeMatch: item.activeMatch || itemFolderFormatted,
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
// SIDEBAR
|
|
49
|
-
const sidebarOptions = options.sidebar[item.folder] || {};
|
|
50
|
-
|
|
51
|
-
navSidebar.push(
|
|
52
|
-
// https://github.com/jooy2/vitepress-sidebar#options
|
|
53
|
-
{
|
|
54
|
-
documentRootPath,
|
|
55
|
-
scanStartPath: itemFolder,
|
|
56
|
-
resolvePath: itemFolderFormatted,
|
|
57
|
-
useTitleFromFileHeading: true,
|
|
58
|
-
useTitleFromFrontmatter: true,
|
|
59
|
-
useFolderTitleFromIndexFile: true,
|
|
60
|
-
hyphenToSpace: true,
|
|
61
|
-
underscoreToSpace: true,
|
|
62
|
-
capitalizeFirst: true,
|
|
63
|
-
collapsed: true,
|
|
64
|
-
sortMenusByFrontmatterOrder: true,
|
|
65
|
-
frontmatterOrderDefaultValue: 1,
|
|
66
|
-
excludeFiles: [],
|
|
67
|
-
excludeFolders: [],
|
|
68
|
-
includeRootIndexFile: true,
|
|
69
|
-
includeFolderIndexFile: false,
|
|
70
|
-
|
|
71
|
-
...sidebarOptions,
|
|
72
|
-
}
|
|
73
|
-
);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
nav: navHeader,
|
|
78
|
-
sidebar: generateSidebar(navSidebar),
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export default navigation;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
import DefaultTheme from 'vitepress/theme';
|
|
3
|
-
import Panzoom from './components/Panzoom.vue';
|
|
4
|
-
import NavigationLinks from './components/NavigationLinks.vue';
|
|
5
|
-
|
|
6
|
-
const { Layout } = DefaultTheme;
|
|
7
|
-
</script>
|
|
8
|
-
|
|
9
|
-
<template>
|
|
10
|
-
<Layout>
|
|
11
|
-
<template #aside-outline-after>
|
|
12
|
-
<NavigationLinks />
|
|
13
|
-
</template>
|
|
14
|
-
</Layout>
|
|
15
|
-
|
|
16
|
-
<Panzoom />
|
|
17
|
-
</template>
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
import { computed } from 'vue';
|
|
3
|
-
import { useData } from 'vitepress';
|
|
4
|
-
|
|
5
|
-
const { frontmatter, theme } = useData();
|
|
6
|
-
|
|
7
|
-
const headingLabel = computed(() => frontmatter.value.navigationLinksLabel || 'Resources');
|
|
8
|
-
|
|
9
|
-
const links = computed(() => {
|
|
10
|
-
const arr = [];
|
|
11
|
-
|
|
12
|
-
if (frontmatter.value.navigationLinks && Array.isArray(frontmatter.value.navigationLinks) && frontmatter.value.navigationLinks.length) {
|
|
13
|
-
frontmatter.value.navigationLinks.forEach(link => {
|
|
14
|
-
arr.push(formatLink(link));
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if (theme.value.navigationLinks && Array.isArray(theme.value.navigationLinks) && theme.value.navigationLinks.length && !frontmatter.value.navigationLinksHideGlobal) {
|
|
19
|
-
theme.value.navigationLinks.forEach(link => {
|
|
20
|
-
arr.push(formatLink(link));
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return arr;
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
function formatLink(linkObj) {
|
|
28
|
-
const { link } = linkObj;
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
...linkObj,
|
|
32
|
-
isTargetBlank: link.startsWith('http') || link.startsWith('www'),
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
</script>
|
|
36
|
-
|
|
37
|
-
<template>
|
|
38
|
-
<div v-if="links.length" class="nav-links">
|
|
39
|
-
<div v-if="headingLabel?.length" class="nav-links__item">
|
|
40
|
-
<span class="nav-links__heading">{{ headingLabel }}</span>
|
|
41
|
-
</div>
|
|
42
|
-
|
|
43
|
-
<a v-for="(link, idx) in links" :key="idx" :href="link.link" :target="link.isTargetBlank ? '_blank' : '_self'" class="nav-links__item">
|
|
44
|
-
<i v-if="link.icon" :class="`nav-links__icon ti ti-${link.icon}`"></i>
|
|
45
|
-
|
|
46
|
-
<span v-if="link.text" class="nav-links__text">{{ link.text }}</span>
|
|
47
|
-
|
|
48
|
-
<i v-if="link.isTargetBlank" class="nav-links__target ti ti-arrow-up-right"></i>
|
|
49
|
-
</a>
|
|
50
|
-
</div>
|
|
51
|
-
</template>
|
|
52
|
-
|
|
53
|
-
<style lang="scss" scoped>
|
|
54
|
-
.nav-links {
|
|
55
|
-
display: flex;
|
|
56
|
-
flex-direction: column;
|
|
57
|
-
margin: 30px 0 0;
|
|
58
|
-
padding-left: 16px;
|
|
59
|
-
border-left: 1px solid var(--vp-c-divider);
|
|
60
|
-
|
|
61
|
-
// .nav-links__item
|
|
62
|
-
&__item {
|
|
63
|
-
display: flex;
|
|
64
|
-
align-items: center;
|
|
65
|
-
gap: 8px;
|
|
66
|
-
padding: 8px 0;
|
|
67
|
-
color: var(--vp-c-text-2);
|
|
68
|
-
transition: color 0.5s;
|
|
69
|
-
|
|
70
|
-
&:hover {
|
|
71
|
-
color: var(--vp-c-text);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// .nav-links__icon
|
|
76
|
-
&__icon {
|
|
77
|
-
font-size: 18px;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// .nav-links__heading
|
|
81
|
-
&__heading {
|
|
82
|
-
font-size: 14px;
|
|
83
|
-
font-weight: 600;
|
|
84
|
-
line-height: 1;
|
|
85
|
-
color: rgba(60, 60, 67);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// .nav-links__text
|
|
89
|
-
&__text {
|
|
90
|
-
font-size: 14px;
|
|
91
|
-
font-weight: 400;
|
|
92
|
-
line-height: 1;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// .nav-links__target
|
|
96
|
-
&__target {
|
|
97
|
-
align-self: flex-start;
|
|
98
|
-
font-size: 12px;
|
|
99
|
-
margin-left: -4px;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
</style>
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
<script setup>
|
|
2
|
-
import { onMounted, nextTick, watch } from 'vue';
|
|
3
|
-
import { useRouter } from 'vitepress';
|
|
4
|
-
import Panzoom from '@panzoom/panzoom';
|
|
5
|
-
|
|
6
|
-
const { route } = useRouter();
|
|
7
|
-
|
|
8
|
-
onMounted(() => createPanzoom());
|
|
9
|
-
|
|
10
|
-
watch(
|
|
11
|
-
() => route.path,
|
|
12
|
-
async () => {
|
|
13
|
-
await nextTick();
|
|
14
|
-
|
|
15
|
-
createPanzoom();
|
|
16
|
-
},
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
function createPanzoom() {
|
|
20
|
-
document.querySelectorAll('img[alt = "zoom"], .mermaid').forEach(async (m) => {
|
|
21
|
-
if (m.panzoom) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const wrapper = document.createElement('div');
|
|
26
|
-
wrapper.classList.add('mermaid-wrapper');
|
|
27
|
-
|
|
28
|
-
m.before(wrapper);
|
|
29
|
-
|
|
30
|
-
wrapper.appendChild(m);
|
|
31
|
-
|
|
32
|
-
await nextTick();
|
|
33
|
-
|
|
34
|
-
const pz = Panzoom(m, {
|
|
35
|
-
maxScale: 20,
|
|
36
|
-
minScale: 0.5,
|
|
37
|
-
canvas: true,
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
m.panzoom = pz;
|
|
41
|
-
|
|
42
|
-
wrapper.appendChild(createActions(pz, wrapper, m));
|
|
43
|
-
wrapper.addEventListener('wheel', pz.zoomWithWheel);
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function createActions(panzoom, wrapper, mermaid) {
|
|
48
|
-
const actions = document.createElement('div');
|
|
49
|
-
actions.classList.add('mermaid-wrapper__actions');
|
|
50
|
-
|
|
51
|
-
actions.appendChild(createZoomIn(panzoom, wrapper, mermaid));
|
|
52
|
-
actions.appendChild(createZoomOut(panzoom, wrapper, mermaid));
|
|
53
|
-
actions.appendChild(createZoomRestore(panzoom, wrapper, mermaid));
|
|
54
|
-
actions.appendChild(createFullScreenToggler(panzoom, wrapper, mermaid));
|
|
55
|
-
|
|
56
|
-
return actions;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function createZoomIn(panzoom, wrapper, mermaid) {
|
|
60
|
-
const zoomIn = document.createElement('div');
|
|
61
|
-
|
|
62
|
-
zoomIn.classList.add('mermaid-wrapper__action');
|
|
63
|
-
zoomIn.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none"
|
|
64
|
-
stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 5l0 14" /><path d="M5 12l14 0" /></svg>`;
|
|
65
|
-
|
|
66
|
-
zoomIn.onclick = () => {
|
|
67
|
-
panzoom.zoomIn();
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
return zoomIn;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function createZoomOut(panzoom, wrapper, mermaid) {
|
|
74
|
-
const zoomOut = document.createElement('div');
|
|
75
|
-
|
|
76
|
-
zoomOut.classList.add('mermaid-wrapper__action');
|
|
77
|
-
zoomOut.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none"
|
|
78
|
-
stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M5 12l14 0" /></svg>`;
|
|
79
|
-
|
|
80
|
-
zoomOut.onclick = () => {
|
|
81
|
-
panzoom.zoomOut();
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
return zoomOut;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function createZoomRestore(panzoom, wrapper, mermaid) {
|
|
88
|
-
const zoomRestore = document.createElement('div');
|
|
89
|
-
|
|
90
|
-
zoomRestore.classList.add('mermaid-wrapper__action');
|
|
91
|
-
zoomRestore.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" fill="none"
|
|
92
|
-
stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M21 21l-6 -6" />
|
|
93
|
-
<path d="M3.268 12.043a7.017 7.017 0 0 0 6.634 4.957a7.012 7.012 0 0 0 7.043 -6.131a7 7 0 0 0 -5.314 -7.672a7.021 7.021 0 0 0 -8.241 4.403" /><path d="M3 4v4h4" /></svg>`;
|
|
94
|
-
|
|
95
|
-
zoomRestore.onclick = () => {
|
|
96
|
-
panzoom.reset();
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
return zoomRestore;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function createFullScreenToggler(panzoom, wrapper, mermaid) {
|
|
103
|
-
const fullScreenToggler = document.createElement('div');
|
|
104
|
-
|
|
105
|
-
fullScreenToggler.classList.add('mermaid-wrapper__action');
|
|
106
|
-
fullScreenToggler.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
|
|
107
|
-
stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M4 8v-2a2 2 0 0 1 2 -2h2" />
|
|
108
|
-
<path d="M4 16v2a2 2 0 0 0 2 2h2" /><path d="M16 4h2a2 2 0 0 1 2 2v2" /><path d="M16 20h2a2 2 0 0 0 2 -2v-2" /></svg>`;
|
|
109
|
-
|
|
110
|
-
fullScreenToggler.onclick = () => {
|
|
111
|
-
panzoom.reset({ animate: false });
|
|
112
|
-
wrapper.classList.toggle('is-fullscreen');
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
return fullScreenToggler;
|
|
116
|
-
}
|
|
117
|
-
</script>
|
|
118
|
-
|
|
119
|
-
<template>
|
|
120
|
-
</template>
|
|
121
|
-
|
|
122
|
-
<style lang="scss">
|
|
123
|
-
.mermaid-wrapper {
|
|
124
|
-
display: block;
|
|
125
|
-
min-height: 168px;
|
|
126
|
-
overflow: hidden;
|
|
127
|
-
position: relative;
|
|
128
|
-
background: var(--vp-c-bg);
|
|
129
|
-
|
|
130
|
-
&__actions {
|
|
131
|
-
position: absolute;
|
|
132
|
-
z-index: 10;
|
|
133
|
-
right: 16px;
|
|
134
|
-
bottom: 16px;
|
|
135
|
-
display: flex;
|
|
136
|
-
flex-direction: column;
|
|
137
|
-
gap: 8px;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
&__action {
|
|
141
|
-
display: inline-flex;
|
|
142
|
-
align-items: center;
|
|
143
|
-
justify-content: center;
|
|
144
|
-
text-align: center;
|
|
145
|
-
font-weight: 600;
|
|
146
|
-
color: var(--vp-button-alt-hover-text);
|
|
147
|
-
background-color: var(--vp-button-alt-hover-bg);
|
|
148
|
-
border-radius: 4px;
|
|
149
|
-
padding: 4px;
|
|
150
|
-
line-height: 1;
|
|
151
|
-
white-space: nowrap;
|
|
152
|
-
cursor: pointer;
|
|
153
|
-
|
|
154
|
-
& > * {
|
|
155
|
-
display: block;
|
|
156
|
-
width: 20px;
|
|
157
|
-
height: 20px;
|
|
158
|
-
font-size: 20px;
|
|
159
|
-
line-height: 1;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
&.is-fullscreen {
|
|
164
|
-
position: fixed;
|
|
165
|
-
z-index: 1000;
|
|
166
|
-
inset: 0;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
</style>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// https://vitepress.dev/guide/custom-theme
|
|
2
|
-
import DefaultTheme from 'vitepress/theme';
|
|
3
|
-
import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client';
|
|
4
|
-
import './style.scss';
|
|
5
|
-
//import "@tabler/icons-webfont/tabler-icons.css";
|
|
6
|
-
import Layout from './Layout.vue';
|
|
7
|
-
|
|
8
|
-
/** @type {import('vitepress').Theme} */
|
|
9
|
-
export default {
|
|
10
|
-
extends: DefaultTheme,
|
|
11
|
-
Layout: Layout,
|
|
12
|
-
enhanceApp({ app, router, siteData }) {
|
|
13
|
-
enhanceAppWithTabs(app);
|
|
14
|
-
}
|
|
15
|
-
};
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Customize default theme styling by overriding CSS variables:
|
|
3
|
-
* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Colors
|
|
8
|
-
* -------------------------------------------------------------------------- */
|
|
9
|
-
|
|
10
|
-
:root {
|
|
11
|
-
--vp-c-default-1: var(--vp-c-gray-1);
|
|
12
|
-
--vp-c-default-2: var(--vp-c-gray-2);
|
|
13
|
-
--vp-c-default-3: var(--vp-c-gray-3);
|
|
14
|
-
--vp-c-default-soft: var(--vp-c-gray-soft);
|
|
15
|
-
|
|
16
|
-
--vp-c-brand-1: hsl(209, 85%, 57%); // Colored text
|
|
17
|
-
--vp-c-brand-2: hsl(209, 85%, 40%); // Hover Button
|
|
18
|
-
--vp-c-brand-3: hsl(209, 85%, 57%); // button
|
|
19
|
-
--vp-c-brand-soft: hsla(209, 100%, 60%, 0.342); // tip box
|
|
20
|
-
|
|
21
|
-
--vp-c-tip-1: var(--vp-c-brand-1);
|
|
22
|
-
--vp-c-tip-2: var(--vp-c-brand-2);
|
|
23
|
-
--vp-c-tip-3: var(--vp-c-brand-3);
|
|
24
|
-
--vp-c-tip-soft: var(--vp-c-brand-soft);
|
|
25
|
-
|
|
26
|
-
--vp-c-warning-1: var(--vp-c-yellow-1);
|
|
27
|
-
--vp-c-warning-2: var(--vp-c-yellow-2);
|
|
28
|
-
--vp-c-warning-3: var(--vp-c-yellow-3);
|
|
29
|
-
--vp-c-warning-soft: var(--vp-c-yellow-soft);
|
|
30
|
-
|
|
31
|
-
--vp-c-danger-1: var(--vp-c-red-1);
|
|
32
|
-
--vp-c-danger-2: var(--vp-c-red-2);
|
|
33
|
-
--vp-c-danger-3: var(--vp-c-red-3);
|
|
34
|
-
--vp-c-danger-soft: var(--vp-c-red-soft);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Component: Button
|
|
39
|
-
* -------------------------------------------------------------------------- */
|
|
40
|
-
|
|
41
|
-
:root {
|
|
42
|
-
--vp-button-brand-border: transparent;
|
|
43
|
-
--vp-button-brand-text: var(--vp-c-white);
|
|
44
|
-
--vp-button-brand-bg: var(--vp-c-brand-3);
|
|
45
|
-
--vp-button-brand-hover-border: transparent;
|
|
46
|
-
--vp-button-brand-hover-text: var(--vp-c-white);
|
|
47
|
-
--vp-button-brand-hover-bg: var(--vp-c-brand-2);
|
|
48
|
-
--vp-button-brand-active-border: transparent;
|
|
49
|
-
--vp-button-brand-active-text: var(--vp-c-white);
|
|
50
|
-
--vp-button-brand-active-bg: var(--vp-c-brand-1);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Component: Home
|
|
55
|
-
* -------------------------------------------------------------------------- */
|
|
56
|
-
|
|
57
|
-
:root {
|
|
58
|
-
--vp-home-hero-name-color: transparent;
|
|
59
|
-
--vp-home-hero-name-background: -webkit-linear-gradient(164deg,
|
|
60
|
-
hsl(209, 85%, 57%) 34%,
|
|
61
|
-
hsl(0, 79%, 62%) 1%);
|
|
62
|
-
|
|
63
|
-
// --vp-home-hero-image-background-image: linear-gradient(0deg,
|
|
64
|
-
// hsl(207, 100%, 50%) 1%,
|
|
65
|
-
// hsl(209, 85%, 57%) 60%);
|
|
66
|
-
// --vp-home-hero-image-filter: blur(44px);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@media (min-width: 640px) {
|
|
70
|
-
:root {
|
|
71
|
-
--vp-home-hero-image-filter: blur(56px);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
@media (min-width: 960px) {
|
|
76
|
-
:root {
|
|
77
|
-
--vp-home-hero-image-filter: blur(50px);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.VPHomeHero .VPImage {
|
|
82
|
-
width: 100%;
|
|
83
|
-
height: 100%;
|
|
84
|
-
object-fit: contain;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Component: Custom Block
|
|
89
|
-
* -------------------------------------------------------------------------- */
|
|
90
|
-
|
|
91
|
-
:root {
|
|
92
|
-
--vp-custom-block-tip-border: transparent;
|
|
93
|
-
--vp-custom-block-tip-text: var(--vp-c-text-1);
|
|
94
|
-
--vp-custom-block-tip-bg: var(--vp-c-brand-soft);
|
|
95
|
-
--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Component: Algolia
|
|
100
|
-
* -------------------------------------------------------------------------- */
|
|
101
|
-
|
|
102
|
-
.DocSearch {
|
|
103
|
-
--docsearch-primary-color: var(--vp-c-brand-1) !important;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Component: Badge
|
|
108
|
-
* -------------------------------------------------------------------------- */
|
|
109
|
-
|
|
110
|
-
.VPBadge[class*="code_"] {
|
|
111
|
-
margin-right: 5px;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.VPBadge.code_2xx {
|
|
115
|
-
border-color: #1cbb8c;
|
|
116
|
-
color: #189f77;
|
|
117
|
-
background-color: rgba(28, 187, 140, 0.15);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.VPBadge.code_3xx {
|
|
121
|
-
border-color: #17a2b8;
|
|
122
|
-
color: #148a9c;
|
|
123
|
-
background-color: rgba(23, 162, 184, 0.15);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
.VPBadge.code_4xx {
|
|
127
|
-
border-color: #fcb92c;
|
|
128
|
-
color: #d69d25;
|
|
129
|
-
background-color: rgba(252, 185, 44, 0.15);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
.VPBadge.code_5xx {
|
|
133
|
-
border-color: #dc3545;
|
|
134
|
-
color: #bb2d3b;
|
|
135
|
-
background-color: rgba(220, 53, 69, 0.15);
|
|
136
|
-
}
|
package/docs/abbr.json
DELETED