@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.
Files changed (190) hide show
  1. package/.eslintrc.cjs +42 -42
  2. package/.gitlab-ci.yml +18 -0
  3. package/Changelog.md +352 -351
  4. package/cron/funcs/addCron.js +132 -132
  5. package/crud/controllers/deleteCrud.js +36 -31
  6. package/crud/controllers/insert.js +71 -70
  7. package/crud/controllers/update.js +76 -73
  8. package/crud/funcs/dataDelete.js +19 -19
  9. package/crud/funcs/dataInsert.js +30 -30
  10. package/crud/funcs/dataUpdate.js +48 -48
  11. package/crud/funcs/getAccess.js +46 -56
  12. package/crud/funcs/getOpt.js +10 -10
  13. package/crud/funcs/setOpt.js +16 -16
  14. package/crud/funcs/setToken.js +2 -2
  15. package/crud/funcs/utils/getFolder.js +9 -9
  16. package/crud/funcs/utils/logChanges.js +62 -62
  17. package/crud/index.js +36 -36
  18. package/docs/.vitepress/abbr.mjs +26 -26
  19. package/docs/.vitepress/config.mjs +127 -127
  20. package/docs/.vitepress/navigation.mjs +82 -82
  21. package/docs/.vitepress/theme/Layout.vue +17 -17
  22. package/docs/.vitepress/theme/components/NavigationLinks.vue +102 -102
  23. package/docs/.vitepress/theme/components/Panzoom.vue +169 -169
  24. package/docs/.vitepress/theme/index.mjs +15 -15
  25. package/docs/.vitepress/theme/style.scss +163 -163
  26. package/docs/abbr.json +4 -4
  27. package/docs/api/cron/cronApi.md +56 -56
  28. package/docs/api/crud/deleteCrud.md +58 -58
  29. package/docs/api/crud/insert.md +82 -82
  30. package/docs/api/crud/update.md +85 -85
  31. package/docs/api/index.md +47 -47
  32. package/docs/api/notification/testEmail.md +91 -91
  33. package/docs/api/table/card.md +73 -73
  34. package/docs/api/table/data.md +134 -134
  35. package/docs/api/table/export.md +60 -60
  36. package/docs/api/table/filter.md +104 -104
  37. package/docs/api/table/form.md +126 -126
  38. package/docs/api/table/search.md +123 -123
  39. package/docs/api/table/suggest.md +156 -156
  40. package/docs/api/table/table.md +107 -107
  41. package/docs/api/user/user.cls.id.md +77 -77
  42. package/docs/api/user/user.cls.md +49 -49
  43. package/docs/api/user/user.cls.post.md +62 -62
  44. package/docs/api/user/user.info.md +37 -37
  45. package/docs/api/utils/logger.file.md +60 -60
  46. package/docs/api/utils/next.id.md +34 -34
  47. package/docs/api/utils/properties.add.md +127 -127
  48. package/docs/api/utils/properties.get.md +73 -73
  49. package/docs/api/utils/status.monitor.md +36 -36
  50. package/docs/api/widget/widget.del.md +76 -76
  51. package/docs/api/widget/widget.get.md +233 -233
  52. package/docs/api/widget/widget.set.md +88 -88
  53. package/docs/db/admin.md +947 -947
  54. package/docs/db/crm.md +564 -564
  55. package/docs/db/index.md +9 -9
  56. package/docs/db/log.md +204 -204
  57. package/docs/hook/card/afterCard.md +20 -20
  58. package/docs/hook/card/preCard.md +25 -25
  59. package/docs/hook/data/afterData.md +26 -26
  60. package/docs/hook/data/preData.md +26 -26
  61. package/docs/hook/deleteCrud/afterDelete.md +21 -21
  62. package/docs/hook/deleteCrud/preDelete.md +26 -26
  63. package/docs/hook/form/afterForm.md +19 -19
  64. package/docs/hook/form/preForm.md +26 -26
  65. package/docs/hook/getTemplate/afterTemplate.md +24 -24
  66. package/docs/hook/getTemplate/preTemplate.md +29 -29
  67. package/docs/hook/index.md +45 -45
  68. package/docs/hook/insert/afterInsert.md +41 -41
  69. package/docs/hook/insert/preInsert.md +25 -25
  70. package/docs/hook/table/afterTable.md +20 -20
  71. package/docs/hook/table/preTable.md +25 -25
  72. package/docs/hook/update/afterUpdate.md +41 -41
  73. package/docs/hook/update/preUpdate.md +25 -25
  74. package/docs/index.md +42 -42
  75. package/docs/public/fastify-dark.svg +3 -3
  76. package/docs/public/logo-short-dark.svg +11 -11
  77. package/docs/public/logo-short.svg +10 -10
  78. package/docs/public/logo.svg +19 -19
  79. package/docs/readme/index.md +121 -121
  80. package/docs/templates/card.md +83 -83
  81. package/docs/templates/cls.md +29 -29
  82. package/docs/templates/filters.md +91 -91
  83. package/docs/templates/forms.md +139 -139
  84. package/docs/templates/index.md +28 -28
  85. package/docs/templates/select.md +90 -90
  86. package/docs/templates/table.md +162 -162
  87. package/docs/utils/cron/addCron.md +29 -29
  88. package/docs/utils/crud/dataInsert.md +51 -51
  89. package/docs/utils/crud/dataUpdate.md +52 -52
  90. package/docs/utils/crud/getOpt.md +33 -33
  91. package/docs/utils/crud/isFileExists.md +37 -37
  92. package/docs/utils/crud/setOpt.md +37 -37
  93. package/docs/utils/hook/addHook.md +74 -74
  94. package/docs/utils/hook/applyHook.md +64 -64
  95. package/docs/utils/index.md +47 -47
  96. package/docs/utils/notification/addNotification.md +28 -28
  97. package/docs/utils/notification/notification.md +41 -41
  98. package/docs/utils/pg/autoIndex.md +22 -22
  99. package/docs/utils/pg/getMeta.md +58 -58
  100. package/docs/utils/pg/getPG.md +34 -34
  101. package/docs/utils/pg/init.md +29 -29
  102. package/docs/utils/pg/pg.md +70 -70
  103. package/docs/utils/redis/getRedis.md +36 -36
  104. package/docs/utils/redis/rclient.md +74 -74
  105. package/docs/utils/table/getForm.md +68 -68
  106. package/docs/utils/table/getMeta.md +55 -55
  107. package/docs/utils/table/getSelect.md +38 -38
  108. package/docs/utils/table/getSelectMeta.md +46 -46
  109. package/docs/utils/table/getTable.md +77 -77
  110. package/helper.js +30 -30
  111. package/index.js +105 -105
  112. package/migration/exec.migrations.js +79 -79
  113. package/module/core/select/core.user_mentioned.sql +1 -1
  114. package/module/test/cls/itree.composition.json +25 -25
  115. package/module/test/table/test.rest_zone.table.json +265 -265
  116. package/notification/controllers/readNotifications.js +30 -30
  117. package/notification/controllers/testEmail.js +50 -50
  118. package/notification/controllers/userNotifications.js +64 -64
  119. package/notification/funcs/addNotification.js +21 -21
  120. package/notification/funcs/sendNotification.js +112 -112
  121. package/package.json +42 -41
  122. package/pg/funcs/getMeta.js +29 -29
  123. package/pg/funcs/getPG.js +30 -30
  124. package/pg/pgClients.js +20 -20
  125. package/policy/funcs/checkPolicy.js +92 -92
  126. package/policy/funcs/sqlInjection.js +33 -33
  127. package/policy/index.js +14 -14
  128. package/redis/client.js +8 -8
  129. package/redis/funcs/redisClients.js +2 -2
  130. package/redis/index.js +19 -19
  131. package/server/migrations/0.sql +78 -78
  132. package/server/migrations/cls.sql +39 -39
  133. package/server/migrations/properties.sql +144 -144
  134. package/server/migrations/roles.sql +172 -166
  135. package/server/migrations/users.sql +168 -168
  136. package/server.js +26 -26
  137. package/table/controllers/data.js +150 -134
  138. package/table/controllers/filter.js +50 -50
  139. package/table/controllers/form.js +42 -42
  140. package/table/controllers/search.js +80 -80
  141. package/table/controllers/suggest.js +79 -79
  142. package/table/controllers/table.js +83 -79
  143. package/table/controllers/utils/addTemplateDir.js +8 -8
  144. package/table/controllers/utils/getSelect.js +19 -19
  145. package/table/controllers/utils/getSelectMeta.js +66 -66
  146. package/table/controllers/utils/getTemplate_old.js +28 -28
  147. package/table/controllers/utils/getTemplates.js +18 -18
  148. package/table/controllers/utils/gisIRColumn.js +67 -67
  149. package/table/controllers/utils/loadTemplate.js +1 -1
  150. package/table/controllers/utils/loadTemplatePath.js +1 -1
  151. package/table/controllers/utils/userTemplateDir.js +1 -1
  152. package/table/funcs/getFilterSQL/index.js +94 -94
  153. package/table/funcs/getFilterSQL/util/formatValue.js +170 -170
  154. package/table/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  155. package/table/funcs/getFilterSQL/util/getFilterQuery.js +66 -66
  156. package/table/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  157. package/table/funcs/getFilterSQL/util/getTableSql.js +34 -34
  158. package/table/funcs/metaFormat/getSelectVal.js +21 -21
  159. package/table/funcs/metaFormat/index.js +28 -28
  160. package/table/index.js +37 -84
  161. package/table/schema.js +54 -0
  162. package/test/api/applyHook.test.js +95 -95
  163. package/test/api/crud.test.js +89 -89
  164. package/test/api/crud.xss.test.js +80 -80
  165. package/test/api/suggest.test.js +66 -66
  166. package/test/api/table.test.js +134 -134
  167. package/test/api/user.test.js +85 -85
  168. package/test/api/widget.test.js +117 -117
  169. package/test/helper/formatDate.test.js +62 -62
  170. package/test/templates/select/test.storage.data.json +3 -3
  171. package/test/templates/select/test.suggest.ato_new.json +3 -3
  172. package/test/templates/select/test.suggest.ato_new.sql +25 -25
  173. package/test/templates/select/test.suggest.data.json +4 -4
  174. package/test/templates/select/test.suggest.parent.sql +1 -1
  175. package/user/controllers/user.cls.id.js +14 -14
  176. package/user/controllers/user.cls.js +75 -75
  177. package/user/controllers/user.cls.post.js +55 -55
  178. package/user/controllers/user.info.js +21 -21
  179. package/util/controllers/logger.file.js +91 -91
  180. package/util/controllers/properties.add.js +60 -60
  181. package/util/controllers/status.monitor.js +8 -8
  182. package/util/controllers/utils/checkUserAccess.js +17 -17
  183. package/util/controllers/utils/getRootDir.js +25 -25
  184. package/utils.js +104 -104
  185. package/widget/controllers/utils/historyFormat.js +76 -76
  186. package/widget/controllers/utils/obj2db.js +13 -13
  187. package/widget/controllers/widget.del.js +44 -44
  188. package/widget/controllers/widget.get.js +102 -102
  189. package/widget/controllers/widget.set.js +79 -79
  190. 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>