@opengis/fastify-table 1.1.49 → 1.1.51
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/.eslintrc.cjs +42 -42
- package/.gitlab-ci.yml +18 -0
- package/Changelog.md +352 -351
- package/cron/funcs/addCron.js +132 -132
- package/crud/controllers/deleteCrud.js +36 -31
- package/crud/controllers/insert.js +71 -70
- package/crud/controllers/update.js +76 -73
- package/crud/funcs/dataDelete.js +19 -19
- package/crud/funcs/dataInsert.js +30 -30
- package/crud/funcs/dataUpdate.js +48 -48
- package/crud/funcs/getAccess.js +46 -56
- package/crud/funcs/getOpt.js +10 -10
- package/crud/funcs/setOpt.js +16 -16
- package/crud/funcs/setToken.js +2 -2
- package/crud/funcs/utils/getFolder.js +9 -9
- package/crud/funcs/utils/logChanges.js +62 -62
- package/crud/index.js +36 -36
- package/docs/.vitepress/abbr.mjs +26 -26
- package/docs/.vitepress/config.mjs +127 -127
- package/docs/.vitepress/navigation.mjs +82 -82
- package/docs/.vitepress/theme/Layout.vue +17 -17
- package/docs/.vitepress/theme/components/NavigationLinks.vue +102 -102
- package/docs/.vitepress/theme/components/Panzoom.vue +169 -169
- package/docs/.vitepress/theme/index.mjs +15 -15
- package/docs/.vitepress/theme/style.scss +163 -163
- package/docs/abbr.json +4 -4
- package/docs/api/cron/cronApi.md +56 -56
- package/docs/api/crud/deleteCrud.md +58 -58
- package/docs/api/crud/insert.md +82 -82
- package/docs/api/crud/update.md +85 -85
- package/docs/api/index.md +47 -47
- package/docs/api/notification/testEmail.md +91 -91
- package/docs/api/table/card.md +73 -73
- package/docs/api/table/data.md +134 -134
- package/docs/api/table/export.md +60 -60
- package/docs/api/table/filter.md +104 -104
- package/docs/api/table/form.md +126 -126
- package/docs/api/table/search.md +123 -123
- package/docs/api/table/suggest.md +156 -156
- package/docs/api/table/table.md +107 -107
- package/docs/api/user/user.cls.id.md +77 -77
- package/docs/api/user/user.cls.md +49 -49
- package/docs/api/user/user.cls.post.md +62 -62
- package/docs/api/user/user.info.md +37 -37
- package/docs/api/utils/logger.file.md +60 -60
- package/docs/api/utils/next.id.md +34 -34
- package/docs/api/utils/properties.add.md +127 -127
- package/docs/api/utils/properties.get.md +73 -73
- package/docs/api/utils/status.monitor.md +36 -36
- package/docs/api/widget/widget.del.md +76 -76
- package/docs/api/widget/widget.get.md +233 -233
- package/docs/api/widget/widget.set.md +88 -88
- package/docs/db/admin.md +947 -947
- package/docs/db/crm.md +564 -564
- package/docs/db/index.md +9 -9
- package/docs/db/log.md +204 -204
- package/docs/hook/card/afterCard.md +20 -20
- package/docs/hook/card/preCard.md +25 -25
- package/docs/hook/data/afterData.md +26 -26
- package/docs/hook/data/preData.md +26 -26
- package/docs/hook/deleteCrud/afterDelete.md +21 -21
- package/docs/hook/deleteCrud/preDelete.md +26 -26
- package/docs/hook/form/afterForm.md +19 -19
- package/docs/hook/form/preForm.md +26 -26
- package/docs/hook/getTemplate/afterTemplate.md +24 -24
- package/docs/hook/getTemplate/preTemplate.md +29 -29
- package/docs/hook/index.md +45 -45
- package/docs/hook/insert/afterInsert.md +41 -41
- package/docs/hook/insert/preInsert.md +25 -25
- package/docs/hook/table/afterTable.md +20 -20
- package/docs/hook/table/preTable.md +25 -25
- package/docs/hook/update/afterUpdate.md +41 -41
- package/docs/hook/update/preUpdate.md +25 -25
- package/docs/index.md +42 -42
- package/docs/public/fastify-dark.svg +3 -3
- package/docs/public/logo-short-dark.svg +11 -11
- package/docs/public/logo-short.svg +10 -10
- package/docs/public/logo.svg +19 -19
- package/docs/readme/index.md +121 -121
- package/docs/templates/card.md +83 -83
- package/docs/templates/cls.md +29 -29
- package/docs/templates/filters.md +91 -91
- package/docs/templates/forms.md +139 -139
- package/docs/templates/index.md +28 -28
- package/docs/templates/select.md +90 -90
- package/docs/templates/table.md +162 -162
- package/docs/utils/cron/addCron.md +29 -29
- package/docs/utils/crud/dataInsert.md +51 -51
- package/docs/utils/crud/dataUpdate.md +52 -52
- package/docs/utils/crud/getOpt.md +33 -33
- package/docs/utils/crud/isFileExists.md +37 -37
- package/docs/utils/crud/setOpt.md +37 -37
- package/docs/utils/hook/addHook.md +74 -74
- package/docs/utils/hook/applyHook.md +64 -64
- package/docs/utils/index.md +47 -47
- package/docs/utils/notification/addNotification.md +28 -28
- package/docs/utils/notification/notification.md +41 -41
- package/docs/utils/pg/autoIndex.md +22 -22
- package/docs/utils/pg/getMeta.md +58 -58
- package/docs/utils/pg/getPG.md +34 -34
- package/docs/utils/pg/init.md +29 -29
- package/docs/utils/pg/pg.md +70 -70
- package/docs/utils/redis/getRedis.md +36 -36
- package/docs/utils/redis/rclient.md +74 -74
- package/docs/utils/table/getForm.md +68 -68
- package/docs/utils/table/getMeta.md +55 -55
- package/docs/utils/table/getSelect.md +38 -38
- package/docs/utils/table/getSelectMeta.md +46 -46
- package/docs/utils/table/getTable.md +77 -77
- package/helper.js +30 -30
- package/index.js +105 -105
- package/migration/exec.migrations.js +79 -79
- package/module/core/select/core.user_mentioned.sql +1 -1
- package/module/test/cls/itree.composition.json +25 -25
- package/module/test/table/test.rest_zone.table.json +265 -265
- package/notification/controllers/readNotifications.js +30 -30
- package/notification/controllers/testEmail.js +50 -50
- package/notification/controllers/userNotifications.js +64 -64
- package/notification/funcs/addNotification.js +21 -21
- package/notification/funcs/sendNotification.js +112 -112
- package/package.json +42 -41
- package/pg/funcs/getMeta.js +29 -29
- package/pg/funcs/getPG.js +30 -30
- package/pg/pgClients.js +20 -20
- package/policy/funcs/checkPolicy.js +92 -92
- package/policy/funcs/sqlInjection.js +33 -33
- package/policy/index.js +14 -14
- package/redis/client.js +8 -8
- package/redis/funcs/redisClients.js +2 -2
- package/redis/index.js +19 -19
- package/server/migrations/0.sql +78 -78
- package/server/migrations/cls.sql +39 -39
- package/server/migrations/properties.sql +144 -144
- package/server/migrations/roles.sql +172 -166
- package/server/migrations/users.sql +168 -168
- package/server.js +26 -26
- package/table/controllers/data.js +150 -134
- package/table/controllers/filter.js +50 -50
- package/table/controllers/form.js +42 -42
- package/table/controllers/search.js +80 -80
- package/table/controllers/suggest.js +79 -79
- package/table/controllers/table.js +83 -79
- package/table/controllers/utils/addTemplateDir.js +8 -8
- package/table/controllers/utils/getSelect.js +19 -19
- package/table/controllers/utils/getSelectMeta.js +66 -66
- package/table/controllers/utils/getTemplate_old.js +28 -28
- package/table/controllers/utils/getTemplates.js +18 -18
- package/table/controllers/utils/gisIRColumn.js +67 -67
- package/table/controllers/utils/loadTemplate.js +1 -1
- package/table/controllers/utils/loadTemplatePath.js +1 -1
- package/table/controllers/utils/userTemplateDir.js +1 -1
- package/table/funcs/getFilterSQL/index.js +94 -94
- package/table/funcs/getFilterSQL/util/formatValue.js +170 -170
- package/table/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
- package/table/funcs/getFilterSQL/util/getFilterQuery.js +66 -66
- package/table/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
- package/table/funcs/getFilterSQL/util/getTableSql.js +34 -34
- package/table/funcs/metaFormat/getSelectVal.js +21 -21
- package/table/funcs/metaFormat/index.js +28 -28
- package/table/index.js +37 -84
- package/table/schema.js +54 -0
- package/test/api/applyHook.test.js +95 -95
- package/test/api/crud.test.js +89 -89
- package/test/api/crud.xss.test.js +80 -80
- package/test/api/suggest.test.js +66 -66
- package/test/api/table.test.js +134 -134
- package/test/api/user.test.js +85 -85
- package/test/api/widget.test.js +117 -117
- package/test/helper/formatDate.test.js +62 -62
- package/test/templates/select/test.storage.data.json +3 -3
- package/test/templates/select/test.suggest.ato_new.json +3 -3
- package/test/templates/select/test.suggest.ato_new.sql +25 -25
- package/test/templates/select/test.suggest.data.json +4 -4
- package/test/templates/select/test.suggest.parent.sql +1 -1
- package/user/controllers/user.cls.id.js +14 -14
- package/user/controllers/user.cls.js +75 -75
- package/user/controllers/user.cls.post.js +55 -55
- package/user/controllers/user.info.js +21 -21
- package/util/controllers/logger.file.js +91 -91
- package/util/controllers/properties.add.js +60 -60
- package/util/controllers/status.monitor.js +8 -8
- package/util/controllers/utils/checkUserAccess.js +17 -17
- package/util/controllers/utils/getRootDir.js +25 -25
- package/utils.js +104 -104
- package/widget/controllers/utils/historyFormat.js +76 -76
- package/widget/controllers/utils/obj2db.js +13 -13
- package/widget/controllers/widget.del.js +44 -44
- package/widget/controllers/widget.get.js +102 -102
- package/widget/controllers/widget.set.js +79 -79
- package/widget/index.js +40 -40
|
@@ -1,127 +1,127 @@
|
|
|
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: 'Hook',
|
|
21
|
-
folder: 'hook',
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
text: 'Utils',
|
|
25
|
-
folder: 'utils',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
text: 'API',
|
|
29
|
-
folder: 'api',
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
text: 'ERD',
|
|
33
|
-
folder: 'db',
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
text: 'Templates',
|
|
37
|
-
folder: 'templates',
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
text: 'Readme',
|
|
41
|
-
folder: 'readme',
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
/*
|
|
45
|
-
Другий параметр функції (НЕобов'язковий) - об'єкт з двома ключами:
|
|
46
|
-
1) nav - параметри для налаштування хедера, може містити наступні ключі:
|
|
47
|
-
* disableHome (Booleadn, default: false) - чи скрити пункт меню, який веде на головну
|
|
48
|
-
* homeTitle (String, default: 'Головна') - назва пункту меню, який веде на головну
|
|
49
|
-
2) sidebar - параметри для налаштування сайдбару, може містити наступні ключі:
|
|
50
|
-
* ${назва_папки} (Object) - референс до кожного окремого сайдбару, який вказаний в першому параметрі функції. Ключем виступає те що вказано в folder. Перелік доступних ключів стандартний і описаний тут - https://github.com/jooy2/vitepress-sidebar#options
|
|
51
|
-
*/
|
|
52
|
-
{
|
|
53
|
-
// nav: {
|
|
54
|
-
// disableHome: false,
|
|
55
|
-
// homeTitle: 'Головна',
|
|
56
|
-
// },
|
|
57
|
-
// sidebar: {
|
|
58
|
-
// 'api': {
|
|
59
|
-
// includeFolderIndexFile: true,
|
|
60
|
-
// }
|
|
61
|
-
// }
|
|
62
|
-
},
|
|
63
|
-
/*
|
|
64
|
-
Третій параметр функції (НЕобов'язковий, default: '/docs') - вказує папку, в якій знаходиться конфігураційна папка .vitepress:
|
|
65
|
-
- наприклад, якщо у вас в проєкті вже є інша документація і папка docs зайнята, то тут потрібно вказати нову назву папки
|
|
66
|
-
- детальніше тут - https://github.com/jooy2/vitepress-sidebar?tab=readme-ov-file#documentrootpath
|
|
67
|
-
*/
|
|
68
|
-
// '/docs-dev',
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
export default withMermaid(
|
|
72
|
-
defineConfig({
|
|
73
|
-
base: '/fastify-table/',
|
|
74
|
-
|
|
75
|
-
title: "Core Fastify-Table",
|
|
76
|
-
description: "Модуль кор для роботи з таблицями",
|
|
77
|
-
|
|
78
|
-
ignoreDeadLinks: true,
|
|
79
|
-
|
|
80
|
-
markdown: {
|
|
81
|
-
config(md) {
|
|
82
|
-
md.use(tabsMarkdownPlugin);
|
|
83
|
-
md.use(markdownItAbbr);
|
|
84
|
-
md.use(handleAbbr);
|
|
85
|
-
},
|
|
86
|
-
languageAlias: {
|
|
87
|
-
'example': 'r',
|
|
88
|
-
'schema-api': 'r',
|
|
89
|
-
'scheme-api': 'r',
|
|
90
|
-
'schema': 'r',
|
|
91
|
-
'scheme': 'r'
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
head: [
|
|
96
|
-
['script', { src: 'https://cdn.tailwindcss.com' }],
|
|
97
|
-
['link', { rel: 'icon shortcut', href: './logo-short.svg' }],
|
|
98
|
-
['link', { href: 'https://cdn.softpro.ua/vue/v3-core/dev/style.css' }],
|
|
99
|
-
],
|
|
100
|
-
|
|
101
|
-
// https://vitepress.dev/reference/default-theme-config
|
|
102
|
-
themeConfig: {
|
|
103
|
-
nav,
|
|
104
|
-
sidebar,
|
|
105
|
-
|
|
106
|
-
logo: '/logo.svg',
|
|
107
|
-
siteTitle: false,
|
|
108
|
-
|
|
109
|
-
outline: 'deep',
|
|
110
|
-
|
|
111
|
-
search: {
|
|
112
|
-
provider: 'local',
|
|
113
|
-
},
|
|
114
|
-
|
|
115
|
-
socialLinks: [
|
|
116
|
-
{ icon: 'github', link: 'https://git.softpro.ua/', },
|
|
117
|
-
],
|
|
118
|
-
|
|
119
|
-
// Додаткові посилання в навігації - https://prnt.sc/5K70IDQh8J-f
|
|
120
|
-
// Виводиться на всіх сторінках
|
|
121
|
-
// Також можна оверрайдити/доповнювати на окремих сторінках, просто в потрібному .md файлі - https://prnt.sc/VAGE3r_RU389
|
|
122
|
-
navigationLinks: [
|
|
123
|
-
{ icon: 'brand-gitlab', link: 'https://git.softpro.ua/', text: 'GitLab', },
|
|
124
|
-
],
|
|
125
|
-
},
|
|
126
|
-
})
|
|
127
|
-
);
|
|
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: 'Hook',
|
|
21
|
+
folder: 'hook',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
text: 'Utils',
|
|
25
|
+
folder: 'utils',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
text: 'API',
|
|
29
|
+
folder: 'api',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
text: 'ERD',
|
|
33
|
+
folder: 'db',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
text: 'Templates',
|
|
37
|
+
folder: 'templates',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
text: 'Readme',
|
|
41
|
+
folder: 'readme',
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
/*
|
|
45
|
+
Другий параметр функції (НЕобов'язковий) - об'єкт з двома ключами:
|
|
46
|
+
1) nav - параметри для налаштування хедера, може містити наступні ключі:
|
|
47
|
+
* disableHome (Booleadn, default: false) - чи скрити пункт меню, який веде на головну
|
|
48
|
+
* homeTitle (String, default: 'Головна') - назва пункту меню, який веде на головну
|
|
49
|
+
2) sidebar - параметри для налаштування сайдбару, може містити наступні ключі:
|
|
50
|
+
* ${назва_папки} (Object) - референс до кожного окремого сайдбару, який вказаний в першому параметрі функції. Ключем виступає те що вказано в folder. Перелік доступних ключів стандартний і описаний тут - https://github.com/jooy2/vitepress-sidebar#options
|
|
51
|
+
*/
|
|
52
|
+
{
|
|
53
|
+
// nav: {
|
|
54
|
+
// disableHome: false,
|
|
55
|
+
// homeTitle: 'Головна',
|
|
56
|
+
// },
|
|
57
|
+
// sidebar: {
|
|
58
|
+
// 'api': {
|
|
59
|
+
// includeFolderIndexFile: true,
|
|
60
|
+
// }
|
|
61
|
+
// }
|
|
62
|
+
},
|
|
63
|
+
/*
|
|
64
|
+
Третій параметр функції (НЕобов'язковий, default: '/docs') - вказує папку, в якій знаходиться конфігураційна папка .vitepress:
|
|
65
|
+
- наприклад, якщо у вас в проєкті вже є інша документація і папка docs зайнята, то тут потрібно вказати нову назву папки
|
|
66
|
+
- детальніше тут - https://github.com/jooy2/vitepress-sidebar?tab=readme-ov-file#documentrootpath
|
|
67
|
+
*/
|
|
68
|
+
// '/docs-dev',
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
export default withMermaid(
|
|
72
|
+
defineConfig({
|
|
73
|
+
base: '/fastify-table/',
|
|
74
|
+
|
|
75
|
+
title: "Core Fastify-Table",
|
|
76
|
+
description: "Модуль кор для роботи з таблицями",
|
|
77
|
+
|
|
78
|
+
ignoreDeadLinks: true,
|
|
79
|
+
|
|
80
|
+
markdown: {
|
|
81
|
+
config(md) {
|
|
82
|
+
md.use(tabsMarkdownPlugin);
|
|
83
|
+
md.use(markdownItAbbr);
|
|
84
|
+
md.use(handleAbbr);
|
|
85
|
+
},
|
|
86
|
+
languageAlias: {
|
|
87
|
+
'example': 'r',
|
|
88
|
+
'schema-api': 'r',
|
|
89
|
+
'scheme-api': 'r',
|
|
90
|
+
'schema': 'r',
|
|
91
|
+
'scheme': 'r'
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
head: [
|
|
96
|
+
['script', { src: 'https://cdn.tailwindcss.com' }],
|
|
97
|
+
['link', { rel: 'icon shortcut', href: './logo-short.svg' }],
|
|
98
|
+
['link', { href: 'https://cdn.softpro.ua/vue/v3-core/dev/style.css' }],
|
|
99
|
+
],
|
|
100
|
+
|
|
101
|
+
// https://vitepress.dev/reference/default-theme-config
|
|
102
|
+
themeConfig: {
|
|
103
|
+
nav,
|
|
104
|
+
sidebar,
|
|
105
|
+
|
|
106
|
+
logo: '/logo.svg',
|
|
107
|
+
siteTitle: false,
|
|
108
|
+
|
|
109
|
+
outline: 'deep',
|
|
110
|
+
|
|
111
|
+
search: {
|
|
112
|
+
provider: 'local',
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
socialLinks: [
|
|
116
|
+
{ icon: 'github', link: 'https://git.softpro.ua/', },
|
|
117
|
+
],
|
|
118
|
+
|
|
119
|
+
// Додаткові посилання в навігації - https://prnt.sc/5K70IDQh8J-f
|
|
120
|
+
// Виводиться на всіх сторінках
|
|
121
|
+
// Також можна оверрайдити/доповнювати на окремих сторінках, просто в потрібному .md файлі - https://prnt.sc/VAGE3r_RU389
|
|
122
|
+
navigationLinks: [
|
|
123
|
+
{ icon: 'brand-gitlab', link: 'https://git.softpro.ua/', text: 'GitLab', },
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
})
|
|
127
|
+
);
|
|
@@ -1,82 +1,82 @@
|
|
|
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
|
+
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 +1,17 @@
|
|
|
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
|
+
<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 +1,102 @@
|
|
|
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
|
+
<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>
|