erudit 3.0.0-dev.17 → 3.0.0-dev.18

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 (233) hide show
  1. package/app/app.vue +193 -191
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +393 -393
  4. package/app/components/SiteMain.vue +32 -32
  5. package/app/components/aside/AsideListItem.vue +74 -74
  6. package/app/components/aside/AsideMajor.vue +56 -56
  7. package/app/components/aside/AsideMinor.vue +73 -73
  8. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  9. package/app/components/aside/major/PaneSwitch.vue +54 -54
  10. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  11. package/app/components/aside/major/SiteInfo.vue +85 -85
  12. package/app/components/aside/major/panes/Language.vue +79 -79
  13. package/app/components/aside/major/panes/Pages.vue +34 -34
  14. package/app/components/aside/major/panes/Search.vue +11 -11
  15. package/app/components/aside/major/panes/nav/Nav.vue +92 -92
  16. package/app/components/aside/major/panes/nav/NavBook.vue +95 -95
  17. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  18. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  19. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  20. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  21. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  22. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  23. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  24. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  25. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  26. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  27. package/app/components/aside/major/panes/other/ItemGenerator.vue +13 -13
  28. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  29. package/app/components/aside/major/panes/other/Other.vue +16 -16
  30. package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
  31. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  32. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  33. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  34. package/app/components/aside/minor/Contribute.vue +145 -145
  35. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  36. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  37. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  38. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  39. package/app/components/aside/minor/topic/TopicToc.vue +214 -214
  40. package/app/components/aside/minor/topic/TopicTocItem.vue +32 -32
  41. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  42. package/app/components/bitran/BitranContent.vue +91 -91
  43. package/app/components/bitran/RenderWrapper.vue +10 -10
  44. package/app/components/contributor/ContributorAvatar.vue +45 -45
  45. package/app/components/contributor/ContributorListItem.vue +35 -35
  46. package/app/components/main/topic/MainTopic.vue +88 -88
  47. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  48. package/app/components/main/utils/Breadcrumb.vue +74 -74
  49. package/app/components/main/utils/ContentDecoration.vue +29 -29
  50. package/app/components/main/utils/ContentDescription.vue +19 -19
  51. package/app/components/main/utils/ContentPopover.vue +188 -188
  52. package/app/components/main/utils/ContentPopovers.vue +111 -111
  53. package/app/components/main/utils/ContentReferences.vue +70 -70
  54. package/app/components/main/utils/ContentSection.vue +45 -45
  55. package/app/components/main/utils/ContentTitle.vue +63 -63
  56. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  57. package/app/components/main/utils/reference/ReferenceItem.vue +70 -70
  58. package/app/components/main/utils/reference/ReferenceSource.vue +120 -120
  59. package/app/components/preview/Preview.vue +186 -186
  60. package/app/components/preview/PreviewDisplay.vue +139 -139
  61. package/app/components/preview/PreviewFooterAction.vue +73 -73
  62. package/app/components/preview/PreviewLoading.vue +14 -14
  63. package/app/components/preview/PreviewScreen.vue +141 -141
  64. package/app/components/preview/display/Alert.vue +50 -50
  65. package/app/components/preview/display/Custom.vue +18 -18
  66. package/app/components/preview/display/GenericLink.vue +48 -48
  67. package/app/components/preview/display/PageLink.vue +22 -22
  68. package/app/components/preview/display/Unique.vue +55 -55
  69. package/app/components/transition/Fade.vue +19 -19
  70. package/app/components/tree/TreeContainer.vue +11 -11
  71. package/app/components/tree/TreeItem.vue +89 -89
  72. package/app/composables/adsAllowed.ts +11 -0
  73. package/app/composables/bitran.ts +108 -108
  74. package/app/composables/bitranContent.ts +96 -92
  75. package/app/composables/bitranLocation.ts +7 -7
  76. package/app/composables/contentData.ts +38 -38
  77. package/app/composables/contentPage.ts +168 -158
  78. package/app/composables/contentRoute.ts +45 -45
  79. package/app/composables/darkMagic.ts +24 -24
  80. package/app/composables/externalApi.ts +69 -69
  81. package/app/composables/favicon.ts +8 -8
  82. package/app/composables/formatText.ts +99 -99
  83. package/app/composables/majorPane.ts +60 -60
  84. package/app/composables/phrases.ts +65 -65
  85. package/app/composables/theme.ts +29 -29
  86. package/app/composables/url.ts +33 -33
  87. package/app/pages/_test/preview.vue +110 -110
  88. package/app/pages/article/[...articleId].vue +3 -3
  89. package/app/pages/book/[...bookId].vue +47 -47
  90. package/app/pages/group/[...groupId].vue +66 -66
  91. package/app/pages/index.vue +32 -32
  92. package/app/pages/members.vue +5 -6
  93. package/app/pages/practice/[...practice].vue +3 -3
  94. package/app/pages/summary/[...summaryId].vue +3 -3
  95. package/app/plugins/analytics.ts +8 -0
  96. package/app/plugins/prerender.server.ts +22 -22
  97. package/app/scripts/_immediate.js +9 -9
  98. package/app/scripts/aside/index.ts +59 -59
  99. package/app/scripts/aside/major/nav.ts +26 -26
  100. package/app/scripts/aside/minor/state.ts +37 -37
  101. package/app/scripts/aside/minor/topic.ts +3 -3
  102. package/app/scripts/flag.ts +28 -28
  103. package/app/scripts/og.ts +27 -27
  104. package/app/scripts/preview/build.ts +76 -76
  105. package/app/scripts/preview/data/alert.ts +19 -19
  106. package/app/scripts/preview/data/custom.ts +8 -8
  107. package/app/scripts/preview/data/genericLink.ts +24 -24
  108. package/app/scripts/preview/data/pageLink.ts +23 -23
  109. package/app/scripts/preview/data/unique.ts +72 -72
  110. package/app/scripts/preview/data.ts +24 -24
  111. package/app/scripts/preview/display.ts +37 -37
  112. package/app/scripts/preview/footer.ts +9 -9
  113. package/app/scripts/preview/request.ts +51 -51
  114. package/app/scripts/preview/state.ts +63 -63
  115. package/app/styles/_immediate.css +7 -7
  116. package/app/styles/_util.scss +43 -43
  117. package/app/styles/_utils.scss +44 -44
  118. package/app/styles/app.scss +91 -91
  119. package/app/styles/def/_bp.scss +27 -27
  120. package/app/styles/def/_size.scss +7 -7
  121. package/app/styles/def/_z.scss +5 -5
  122. package/app/styles/normalize.scss +49 -49
  123. package/app/styles/partials/_darkMagic.scss +5 -5
  124. package/app/styles/partials/_fnav.scss +15 -15
  125. package/app/styles/partials/_preview.scss +5 -5
  126. package/bin/erudit.mjs +2 -2
  127. package/const.ts +4 -4
  128. package/globalPath.ts +21 -21
  129. package/globals/bitran.ts +1 -1
  130. package/globals/content.ts +27 -27
  131. package/globals/contributor.ts +5 -5
  132. package/globals/erudit.ts +5 -5
  133. package/globals/register.ts +18 -18
  134. package/languages/en.ts +94 -94
  135. package/languages/ru.ts +98 -98
  136. package/module/bitran.ts +66 -66
  137. package/module/config.ts +35 -35
  138. package/module/imports.ts +67 -67
  139. package/module/index.ts +47 -47
  140. package/module/logger.ts +10 -10
  141. package/module/paths.ts +22 -22
  142. package/module/restart.ts +61 -61
  143. package/nuxt.config.ts +131 -131
  144. package/package.json +4 -4
  145. package/server/api/aside/major/nav/bookIds.ts +5 -5
  146. package/server/api/aside/major/nav/bookNav/[...bookId].ts +17 -20
  147. package/server/api/aside/major/nav/global.ts +7 -7
  148. package/server/api/aside/minor/news.ts +7 -7
  149. package/server/api/aside/minor/path.ts +82 -82
  150. package/server/api/bitran/content/[...location].ts +10 -10
  151. package/server/api/bitran/toc/[...location].ts +9 -9
  152. package/server/api/content/data.ts +75 -75
  153. package/server/api/contributor/count.ts +6 -6
  154. package/server/api/fake/content.ts +11 -11
  155. package/server/api/fake/shared/languages.ts +12 -12
  156. package/server/api/language/functions.ts +12 -12
  157. package/server/api/language/phrase/[phraseId].ts +19 -19
  158. package/server/api/language/phraseIds.ts +8 -8
  159. package/server/api/prerender.ts +19 -120
  160. package/server/api/preview/page/[...parts].ts +78 -78
  161. package/server/api/preview/unique/[...location].ts +61 -61
  162. package/server/plugin/bitran/content.ts +237 -190
  163. package/server/plugin/bitran/elements/include.ts +229 -229
  164. package/server/plugin/bitran/location.ts +39 -39
  165. package/server/plugin/bitran/toc.ts +94 -94
  166. package/server/plugin/bitran/transpiler.ts +18 -18
  167. package/server/plugin/build/close.ts +12 -12
  168. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  169. package/server/plugin/build/jobs/content/generic.ts +191 -191
  170. package/server/plugin/build/jobs/content/parse.ts +113 -113
  171. package/server/plugin/build/jobs/content/path.ts +6 -6
  172. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  173. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  174. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  175. package/server/plugin/build/jobs/contributors.ts +66 -66
  176. package/server/plugin/build/jobs/language.ts +36 -36
  177. package/server/plugin/build/jobs/nav.ts +345 -345
  178. package/server/plugin/build/process.ts +32 -32
  179. package/server/plugin/build/rebuild.ts +66 -66
  180. package/server/plugin/build/setup.ts +19 -19
  181. package/server/plugin/content/context.ts +119 -119
  182. package/server/plugin/db/entities/Book.ts +7 -7
  183. package/server/plugin/db/entities/Content.ts +45 -45
  184. package/server/plugin/db/entities/Contribution.ts +10 -10
  185. package/server/plugin/db/entities/Contributor.ts +16 -16
  186. package/server/plugin/db/entities/File.ts +10 -10
  187. package/server/plugin/db/entities/Group.ts +14 -14
  188. package/server/plugin/db/entities/Hash.ts +15 -15
  189. package/server/plugin/db/entities/Topic.ts +20 -20
  190. package/server/plugin/db/entities/Unique.ts +21 -21
  191. package/server/plugin/db/reset.ts +12 -12
  192. package/server/plugin/db/setup.ts +49 -49
  193. package/server/plugin/global.ts +16 -16
  194. package/server/plugin/importer.ts +16 -16
  195. package/server/plugin/index.ts +9 -9
  196. package/server/plugin/logger.ts +23 -23
  197. package/server/plugin/nav/node.ts +27 -27
  198. package/server/plugin/nav/utils.ts +179 -175
  199. package/server/plugin/repository/book.ts +23 -21
  200. package/server/plugin/repository/content.ts +240 -240
  201. package/server/plugin/repository/contentId.ts +40 -40
  202. package/server/plugin/repository/contributor.ts +8 -8
  203. package/server/plugin/repository/file.ts +10 -10
  204. package/server/plugin/repository/frontNav.ts +145 -145
  205. package/server/plugin/repository/topic.ts +35 -35
  206. package/server/tsconfig.json +9 -9
  207. package/shared/aside/minor.ts +51 -51
  208. package/shared/asset.ts +22 -22
  209. package/shared/bitran/contentId.ts +56 -56
  210. package/shared/bitran/stringContent.ts +6 -6
  211. package/shared/bitran/toc.ts +8 -8
  212. package/shared/content/bookId.ts +12 -12
  213. package/shared/content/context.ts +9 -9
  214. package/shared/content/data/base.ts +32 -32
  215. package/shared/content/data/index.ts +5 -5
  216. package/shared/content/data/type/book.ts +5 -5
  217. package/shared/content/data/type/group.ts +6 -6
  218. package/shared/content/data/type/topic.ts +11 -11
  219. package/shared/content/previousNext.ts +9 -9
  220. package/shared/contributor.ts +5 -5
  221. package/shared/frontNav.ts +41 -41
  222. package/shared/icons.ts +38 -38
  223. package/shared/image.ts +5 -5
  224. package/shared/link.ts +28 -28
  225. package/shared/popover.ts +8 -8
  226. package/shared/types/language.ts +74 -74
  227. package/shared/utils/objectsEqual.ts +4 -4
  228. package/shared/utils/stringColor.ts +9 -9
  229. package/test/contentId.test.ts +91 -91
  230. package/tsconfig.json +8 -8
  231. package/utils/contentPath.ts +67 -67
  232. package/utils/slash.ts +11 -11
  233. package/utils/stress.ts +9 -9
package/nuxt.config.ts CHANGED
@@ -1,131 +1,131 @@
1
- import {
2
- PUBLIC_CONTENT_ASSET,
3
- PUBLIC_CONTRIBUTOR_ASSET,
4
- PUBLIC_ERUDIT_ASSET,
5
- PUBLIC_USER_ASSET,
6
- } from './const';
7
- import { eruditPath, projectPath } from './globalPath';
8
-
9
- export default defineNuxtConfig({
10
- compatibilityDate: '2025-01-01',
11
- devtools: { enabled: true },
12
- future: { compatibilityVersion: 4 },
13
- ssr: true,
14
- alias: {
15
- '@erudit': eruditPath(),
16
- '@module': eruditPath('module'),
17
- '@server': eruditPath('server/plugin'),
18
- '@shared': eruditPath('shared'),
19
- '@app': eruditPath('app'),
20
- $: eruditPath('app/styles'),
21
- },
22
- modules: [eruditPath('module'), 'nuxt-my-icons'],
23
- myicons: {
24
- iconsDir: eruditPath('app/assets/icons'),
25
- },
26
- features: {
27
- inlineStyles: false,
28
- },
29
- typescript: {
30
- tsConfig: {
31
- include: [eruditPath('**/*'), projectPath('**/*')],
32
- },
33
- },
34
- build: {
35
- transpile: [
36
- 'yaml',
37
- 'photoswipe',
38
- '@bitran-js/renderer-vue',
39
- '@erudit-js/bitran-elements',
40
- ],
41
- },
42
- ignore: [
43
- // Content assets
44
- ...[
45
- '**/{book,group,topic}.{js,ts}',
46
- '**/{article,summary,practice,content}.bi',
47
- ].map((pattern) => projectPath(`content/${pattern}`)),
48
- // Contributors assets
49
- ...['*/contributor.{js,ts}', '*/description.bi'].map((pattern) =>
50
- projectPath(`contributors/${pattern}`),
51
- ),
52
- ],
53
- nitro: {
54
- preset: 'github-pages',
55
- plugins: [eruditPath('server/plugin')],
56
- prerender: {
57
- crawlLinks: true,
58
- failOnError: false,
59
- concurrency: 10,
60
- ignore: [
61
- (path: string) => {
62
- const regexps = [/\?element=/gm, /#/gm, /\.json\?/gm];
63
- const shouldIgnore = regexps.some((re) => re.test(path));
64
- return shouldIgnore;
65
- },
66
- ],
67
- },
68
- output: {
69
- publicDir: projectPath('dist'),
70
- },
71
- externals: {
72
- inline: [/bitran-elements/],
73
- },
74
- publicAssets: [
75
- {
76
- baseURL: PUBLIC_ERUDIT_ASSET,
77
- dir: eruditPath('app/public'),
78
- maxAge: 60 * 60 * 24 * 30,
79
- },
80
- {
81
- baseURL: PUBLIC_USER_ASSET,
82
- dir: projectPath('public'),
83
- maxAge: 60 * 60 * 24 * 30,
84
- },
85
- {
86
- baseURL: PUBLIC_CONTENT_ASSET,
87
- dir: projectPath('content'),
88
- maxAge: 60 * 60 * 24 * 30,
89
- },
90
- {
91
- baseURL: PUBLIC_CONTRIBUTOR_ASSET,
92
- dir: projectPath('contributors'),
93
- maxAge: 60 * 60 * 24 * 30,
94
- },
95
- ],
96
- esbuild: {
97
- options: {
98
- charset: 'utf8',
99
- tsconfigRaw: {
100
- compilerOptions: {
101
- experimentalDecorators: true, // Make TypeORM work with Nuxt,
102
- },
103
- },
104
- },
105
- },
106
- },
107
- vite: {
108
- optimizeDeps: {
109
- include: [
110
- 'yaml',
111
- 'photoswipe',
112
- '@floating-ui/vue',
113
- '@bitran-js/core',
114
- '@bitran-js/transpiler',
115
- '@bitran-js/renderer-vue',
116
- '@erudit-js/bitran-elements',
117
- ],
118
- },
119
- server: {
120
- fs: { strict: false },
121
- },
122
- css: {
123
- preprocessorOptions: {
124
- scss: {
125
- api: 'modern-compiler',
126
- additionalData: `@use '$/utils' as *;`,
127
- },
128
- },
129
- },
130
- },
131
- });
1
+ import {
2
+ PUBLIC_CONTENT_ASSET,
3
+ PUBLIC_CONTRIBUTOR_ASSET,
4
+ PUBLIC_ERUDIT_ASSET,
5
+ PUBLIC_USER_ASSET,
6
+ } from './const';
7
+ import { eruditPath, projectPath } from './globalPath';
8
+
9
+ export default defineNuxtConfig({
10
+ compatibilityDate: '2025-01-01',
11
+ devtools: { enabled: true },
12
+ future: { compatibilityVersion: 4 },
13
+ ssr: true,
14
+ alias: {
15
+ '@erudit': eruditPath(),
16
+ '@module': eruditPath('module'),
17
+ '@server': eruditPath('server/plugin'),
18
+ '@shared': eruditPath('shared'),
19
+ '@app': eruditPath('app'),
20
+ $: eruditPath('app/styles'),
21
+ },
22
+ modules: [eruditPath('module'), 'nuxt-my-icons'],
23
+ myicons: {
24
+ iconsDir: eruditPath('app/assets/icons'),
25
+ },
26
+ features: {
27
+ inlineStyles: false,
28
+ },
29
+ typescript: {
30
+ tsConfig: {
31
+ include: [eruditPath('**/*'), projectPath('**/*')],
32
+ },
33
+ },
34
+ build: {
35
+ transpile: [
36
+ 'yaml',
37
+ 'photoswipe',
38
+ '@bitran-js/renderer-vue',
39
+ '@erudit-js/bitran-elements',
40
+ ],
41
+ },
42
+ ignore: [
43
+ // Content assets
44
+ ...[
45
+ '**/{book,group,topic}.{js,ts}',
46
+ '**/{article,summary,practice,content}.bi',
47
+ ].map((pattern) => projectPath(`content/${pattern}`)),
48
+ // Contributors assets
49
+ ...['*/contributor.{js,ts}', '*/description.bi'].map((pattern) =>
50
+ projectPath(`contributors/${pattern}`),
51
+ ),
52
+ ],
53
+ nitro: {
54
+ preset: 'github-pages',
55
+ plugins: [eruditPath('server/plugin')],
56
+ prerender: {
57
+ crawlLinks: true,
58
+ failOnError: false,
59
+ concurrency: 10,
60
+ ignore: [
61
+ (path: string) => {
62
+ const regexps = [/\?element=/gm, /#/gm, /\.json\?/gm];
63
+ const shouldIgnore = regexps.some((re) => re.test(path));
64
+ return shouldIgnore;
65
+ },
66
+ ],
67
+ },
68
+ output: {
69
+ publicDir: projectPath('dist'),
70
+ },
71
+ externals: {
72
+ inline: [/bitran-elements/],
73
+ },
74
+ publicAssets: [
75
+ {
76
+ baseURL: PUBLIC_ERUDIT_ASSET,
77
+ dir: eruditPath('app/public'),
78
+ maxAge: 60 * 60 * 24 * 30,
79
+ },
80
+ {
81
+ baseURL: PUBLIC_USER_ASSET,
82
+ dir: projectPath('public'),
83
+ maxAge: 60 * 60 * 24 * 30,
84
+ },
85
+ {
86
+ baseURL: PUBLIC_CONTENT_ASSET,
87
+ dir: projectPath('content'),
88
+ maxAge: 60 * 60 * 24 * 30,
89
+ },
90
+ {
91
+ baseURL: PUBLIC_CONTRIBUTOR_ASSET,
92
+ dir: projectPath('contributors'),
93
+ maxAge: 60 * 60 * 24 * 30,
94
+ },
95
+ ],
96
+ esbuild: {
97
+ options: {
98
+ charset: 'utf8',
99
+ tsconfigRaw: {
100
+ compilerOptions: {
101
+ experimentalDecorators: true, // Make TypeORM work with Nuxt,
102
+ },
103
+ },
104
+ },
105
+ },
106
+ },
107
+ vite: {
108
+ optimizeDeps: {
109
+ include: [
110
+ 'yaml',
111
+ 'photoswipe',
112
+ '@floating-ui/vue',
113
+ '@bitran-js/core',
114
+ '@bitran-js/transpiler',
115
+ '@bitran-js/renderer-vue',
116
+ '@erudit-js/bitran-elements',
117
+ ],
118
+ },
119
+ server: {
120
+ fs: { strict: false },
121
+ },
122
+ css: {
123
+ preprocessorOptions: {
124
+ scss: {
125
+ api: 'modern-compiler',
126
+ additionalData: `@use '$/utils' as *;`,
127
+ },
128
+ },
129
+ },
130
+ },
131
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erudit",
3
- "version": "3.0.0-dev.17",
3
+ "version": "3.0.0-dev.18",
4
4
  "type": "module",
5
5
  "description": "🤓 CMS for perfect educational sites.",
6
6
  "license": "MIT",
@@ -15,9 +15,9 @@
15
15
  "erudit": "bin/erudit.mjs"
16
16
  },
17
17
  "peerDependencies": {
18
- "@erudit-js/cog": "3.0.0-dev.17",
19
- "@erudit-js/cli": "3.0.0-dev.17",
20
- "@erudit-js/bitran-elements": "3.0.0-dev.17"
18
+ "@erudit-js/cog": "3.0.0-dev.18",
19
+ "@erudit-js/cli": "3.0.0-dev.18",
20
+ "@erudit-js/bitran-elements": "3.0.0-dev.18"
21
21
  },
22
22
  "dependencies": {
23
23
  "@bitran-js/core": "1.0.0-dev.13",
@@ -1,5 +1,5 @@
1
- import { getNavBookIds } from '@server/nav/utils';
2
-
3
- export default defineEventHandler(() => {
4
- return getNavBookIds('short');
5
- });
1
+ import { getNavBookIds } from '@server/nav/utils';
2
+
3
+ export default defineEventHandler(() => {
4
+ return getNavBookIds('short');
5
+ });
@@ -1,20 +1,17 @@
1
- import { ERUDIT_SERVER } from '@server/global';
2
- import { createBookFrontNav } from '@server/repository/frontNav';
3
-
4
- export default defineEventHandler(async (event) => {
5
- const bookId = getRouterParam(event, 'bookId');
6
-
7
- if (
8
- !bookId ||
9
- !ERUDIT_SERVER.NAV_BOOKS ||
10
- !(bookId in ERUDIT_SERVER.NAV_BOOKS)
11
- )
12
- throw createError({
13
- statusCode: 400,
14
- statusText: `Unknown book id "${bookId}"!`,
15
- });
16
-
17
- const bookNode = ERUDIT_SERVER.NAV_BOOKS[bookId]!;
18
-
19
- return await createBookFrontNav(bookNode);
20
- });
1
+ import { getNavNode } from '@server/nav/utils';
2
+ import { createBookFrontNav } from '@server/repository/frontNav';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const bookId = getRouterParam(event, 'bookId');
6
+
7
+ if (!bookId) {
8
+ throw createError({
9
+ statusCode: 400,
10
+ statusText: 'Missing book ID!',
11
+ });
12
+ }
13
+
14
+ const bookNode = getNavNode(bookId);
15
+
16
+ return await createBookFrontNav(bookNode);
17
+ });
@@ -1,7 +1,7 @@
1
- import type { FrontNav } from '@erudit/shared/frontNav';
2
- import { ERUDIT_SERVER } from '@server/global';
3
- import { createGlobalFrontNav } from '@server/repository/frontNav';
4
-
5
- export default defineEventHandler(async () => {
6
- return (await createGlobalFrontNav(ERUDIT_SERVER.NAV)) as FrontNav;
7
- });
1
+ import type { FrontNav } from '@erudit/shared/frontNav';
2
+ import { ERUDIT_SERVER } from '@server/global';
3
+ import { createGlobalFrontNav } from '@server/repository/frontNav';
4
+
5
+ export default defineEventHandler(async () => {
6
+ return (await createGlobalFrontNav(ERUDIT_SERVER.NAV)) as FrontNav;
7
+ });
@@ -1,7 +1,7 @@
1
- import type { AsideMinorNews } from '@shared/aside/minor';
2
-
3
- export default defineEventHandler(async () => {
4
- return <AsideMinorNews>{
5
- type: 'news',
6
- };
7
- });
1
+ import type { AsideMinorNews } from '@shared/aside/minor';
2
+
3
+ export default defineEventHandler(async () => {
4
+ return <AsideMinorNews>{
5
+ type: 'news',
6
+ };
7
+ });
@@ -1,82 +1,82 @@
1
- import { isTopicPart, locationFromPath } from '@erudit-js/cog/schema';
2
-
3
- import type { AsideMinorContent, AsideMinorTopic } from '@shared/aside/minor';
4
- import { getBitranToc } from '@server/bitran/toc';
5
- import {
6
- getContentContributors,
7
- getPreviousNext,
8
- } from '@server/repository/content';
9
- import { getTopicPartsLinks } from '@server/repository/topic';
10
- import { getFullContentId } from '@server/repository/contentId';
11
-
12
- export default defineEventHandler(async (event) => {
13
- const query = getQuery<{ path: string }>(event);
14
-
15
- if (!query.path) {
16
- throw createError({
17
- statusCode: 400,
18
- statusText: 'Missing "path" query parameter!',
19
- });
20
- }
21
-
22
- const path = query.path.substring(1);
23
- const pathStart = path.split('/')[0];
24
-
25
- if (isTopicPart(pathStart)) return await createTopicData(path);
26
-
27
- if (['book', 'group'].includes(pathStart))
28
- return await createContentData(pathStart, path);
29
-
30
- return 'news';
31
- });
32
-
33
- async function createTopicData(path: string): Promise<AsideMinorTopic> {
34
- const location = locationFromPath(path);
35
-
36
- if (!location) {
37
- throw createError({
38
- statusCode: 400,
39
- statusText: `Provided path "${path}" is not a valid topic location!`,
40
- });
41
- }
42
-
43
- if (location.path) {
44
- location.path = await getFullContentId(location.path);
45
- }
46
-
47
- const contentId = location.path;
48
-
49
- const toc = await getBitranToc(location);
50
- const previousNext = await getPreviousNext(contentId);
51
- const topicPartsLinks = await getTopicPartsLinks(contentId);
52
- const contributors = await getContentContributors(contentId);
53
-
54
- return {
55
- type: 'topic',
56
- topicId: contentId,
57
- location,
58
- toc,
59
- nav: {
60
- ...previousNext,
61
- ...topicPartsLinks,
62
- },
63
- contributors,
64
- };
65
- }
66
-
67
- async function createContentData(
68
- type: string,
69
- path: string,
70
- ): Promise<AsideMinorContent> {
71
- const rawContentId = path.split('/').slice(1).join('/');
72
- const contentId = getFullContentId(rawContentId);
73
- const previousNext = await getPreviousNext(contentId);
74
- const contributors = await getContentContributors(contentId);
75
-
76
- return {
77
- type: type as any,
78
- contentId,
79
- nav: previousNext,
80
- contributors,
81
- };
82
- }
1
+ import { isTopicPart, locationFromPath } from '@erudit-js/cog/schema';
2
+
3
+ import type { AsideMinorContent, AsideMinorTopic } from '@shared/aside/minor';
4
+ import { getBitranToc } from '@server/bitran/toc';
5
+ import {
6
+ getContentContributors,
7
+ getPreviousNext,
8
+ } from '@server/repository/content';
9
+ import { getTopicPartsLinks } from '@server/repository/topic';
10
+ import { getFullContentId } from '@server/repository/contentId';
11
+
12
+ export default defineEventHandler(async (event) => {
13
+ const query = getQuery<{ path: string }>(event);
14
+
15
+ if (!query.path) {
16
+ throw createError({
17
+ statusCode: 400,
18
+ statusText: 'Missing "path" query parameter!',
19
+ });
20
+ }
21
+
22
+ const path = query.path.substring(1);
23
+ const pathStart = path.split('/')[0];
24
+
25
+ if (isTopicPart(pathStart)) return await createTopicData(path);
26
+
27
+ if (['book', 'group'].includes(pathStart))
28
+ return await createContentData(pathStart, path);
29
+
30
+ return 'news';
31
+ });
32
+
33
+ async function createTopicData(path: string): Promise<AsideMinorTopic> {
34
+ const location = locationFromPath(path);
35
+
36
+ if (!location) {
37
+ throw createError({
38
+ statusCode: 400,
39
+ statusText: `Provided path "${path}" is not a valid topic location!`,
40
+ });
41
+ }
42
+
43
+ if (location.path) {
44
+ location.path = await getFullContentId(location.path);
45
+ }
46
+
47
+ const contentId = location.path;
48
+
49
+ const toc = await getBitranToc(location);
50
+ const previousNext = await getPreviousNext(contentId);
51
+ const topicPartsLinks = await getTopicPartsLinks(contentId);
52
+ const contributors = await getContentContributors(contentId);
53
+
54
+ return {
55
+ type: 'topic',
56
+ topicId: contentId,
57
+ location,
58
+ toc,
59
+ nav: {
60
+ ...previousNext,
61
+ ...topicPartsLinks,
62
+ },
63
+ contributors,
64
+ };
65
+ }
66
+
67
+ async function createContentData(
68
+ type: string,
69
+ path: string,
70
+ ): Promise<AsideMinorContent> {
71
+ const rawContentId = path.split('/').slice(1).join('/');
72
+ const contentId = getFullContentId(rawContentId);
73
+ const previousNext = await getPreviousNext(contentId);
74
+ const contributors = await getContentContributors(contentId);
75
+
76
+ return {
77
+ type: type as any,
78
+ contentId,
79
+ nav: previousNext,
80
+ contributors,
81
+ };
82
+ }
@@ -1,10 +1,10 @@
1
- import { parseClientBitranLocation } from '@server/bitran/location';
2
- import { getBitranContent } from '@server/bitran/content';
3
-
4
- export default defineEventHandler(async (event) => {
5
- setResponseHeader(event, 'Content-Type', 'application/json; charset=utf-8');
6
- const location = await parseClientBitranLocation(
7
- event.context.params!.location,
8
- );
9
- return await getBitranContent(location);
10
- });
1
+ import { parseClientBitranLocation } from '@server/bitran/location';
2
+ import { getBitranContent } from '@server/bitran/content';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ setResponseHeader(event, 'Content-Type', 'application/json; charset=utf-8');
6
+ const location = await parseClientBitranLocation(
7
+ event.context.params!.location,
8
+ );
9
+ return await getBitranContent(location);
10
+ });
@@ -1,9 +1,9 @@
1
- import { parseClientBitranLocation } from '@server/bitran/location';
2
- import { getBitranToc } from '@server/bitran/toc';
3
-
4
- export default defineEventHandler(async (event) => {
5
- const location = await parseClientBitranLocation(
6
- event.context.params!.location,
7
- );
8
- return await getBitranToc(location);
9
- });
1
+ import { parseClientBitranLocation } from '@server/bitran/location';
2
+ import { getBitranToc } from '@server/bitran/toc';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const location = await parseClientBitranLocation(
6
+ event.context.params!.location,
7
+ );
8
+ return await getBitranToc(location);
9
+ });