erudit 3.0.0-dev.16 → 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 (234) 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/ads/AdsProviderYandex.vue +2 -2
  6. package/app/components/aside/AsideListItem.vue +74 -74
  7. package/app/components/aside/AsideMajor.vue +56 -56
  8. package/app/components/aside/AsideMinor.vue +73 -73
  9. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  10. package/app/components/aside/major/PaneSwitch.vue +54 -54
  11. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  12. package/app/components/aside/major/SiteInfo.vue +85 -85
  13. package/app/components/aside/major/panes/Language.vue +79 -79
  14. package/app/components/aside/major/panes/Pages.vue +34 -34
  15. package/app/components/aside/major/panes/Search.vue +11 -11
  16. package/app/components/aside/major/panes/nav/Nav.vue +92 -92
  17. package/app/components/aside/major/panes/nav/NavBook.vue +95 -95
  18. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  19. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  20. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  21. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  22. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  23. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  24. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  25. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  26. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  27. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  28. package/app/components/aside/major/panes/other/ItemGenerator.vue +13 -13
  29. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  30. package/app/components/aside/major/panes/other/Other.vue +16 -16
  31. package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
  32. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  33. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  34. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  35. package/app/components/aside/minor/Contribute.vue +145 -145
  36. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  37. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  38. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  39. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  40. package/app/components/aside/minor/topic/TopicToc.vue +214 -214
  41. package/app/components/aside/minor/topic/TopicTocItem.vue +32 -32
  42. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  43. package/app/components/bitran/BitranContent.vue +91 -91
  44. package/app/components/bitran/RenderWrapper.vue +10 -10
  45. package/app/components/contributor/ContributorAvatar.vue +45 -45
  46. package/app/components/contributor/ContributorListItem.vue +35 -35
  47. package/app/components/main/topic/MainTopic.vue +88 -88
  48. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  49. package/app/components/main/utils/Breadcrumb.vue +74 -74
  50. package/app/components/main/utils/ContentDecoration.vue +29 -29
  51. package/app/components/main/utils/ContentDescription.vue +19 -19
  52. package/app/components/main/utils/ContentPopover.vue +188 -188
  53. package/app/components/main/utils/ContentPopovers.vue +111 -111
  54. package/app/components/main/utils/ContentReferences.vue +70 -70
  55. package/app/components/main/utils/ContentSection.vue +45 -45
  56. package/app/components/main/utils/ContentTitle.vue +63 -63
  57. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  58. package/app/components/main/utils/reference/ReferenceItem.vue +70 -70
  59. package/app/components/main/utils/reference/ReferenceSource.vue +120 -120
  60. package/app/components/preview/Preview.vue +186 -186
  61. package/app/components/preview/PreviewDisplay.vue +139 -139
  62. package/app/components/preview/PreviewFooterAction.vue +73 -73
  63. package/app/components/preview/PreviewLoading.vue +14 -14
  64. package/app/components/preview/PreviewScreen.vue +141 -141
  65. package/app/components/preview/display/Alert.vue +50 -50
  66. package/app/components/preview/display/Custom.vue +18 -18
  67. package/app/components/preview/display/GenericLink.vue +48 -48
  68. package/app/components/preview/display/PageLink.vue +22 -22
  69. package/app/components/preview/display/Unique.vue +55 -55
  70. package/app/components/transition/Fade.vue +19 -19
  71. package/app/components/tree/TreeContainer.vue +11 -11
  72. package/app/components/tree/TreeItem.vue +89 -89
  73. package/app/composables/adsAllowed.ts +11 -0
  74. package/app/composables/bitran.ts +108 -108
  75. package/app/composables/bitranContent.ts +96 -92
  76. package/app/composables/bitranLocation.ts +7 -7
  77. package/app/composables/contentData.ts +38 -38
  78. package/app/composables/contentPage.ts +168 -158
  79. package/app/composables/contentRoute.ts +45 -45
  80. package/app/composables/darkMagic.ts +24 -24
  81. package/app/composables/externalApi.ts +69 -69
  82. package/app/composables/favicon.ts +8 -8
  83. package/app/composables/formatText.ts +99 -99
  84. package/app/composables/majorPane.ts +60 -60
  85. package/app/composables/phrases.ts +65 -65
  86. package/app/composables/theme.ts +29 -29
  87. package/app/composables/url.ts +33 -33
  88. package/app/pages/_test/preview.vue +110 -110
  89. package/app/pages/article/[...articleId].vue +3 -3
  90. package/app/pages/book/[...bookId].vue +47 -47
  91. package/app/pages/group/[...groupId].vue +66 -66
  92. package/app/pages/index.vue +32 -32
  93. package/app/pages/members.vue +5 -6
  94. package/app/pages/practice/[...practice].vue +3 -3
  95. package/app/pages/summary/[...summaryId].vue +3 -3
  96. package/app/plugins/analytics.ts +8 -0
  97. package/app/plugins/prerender.server.ts +22 -22
  98. package/app/scripts/_immediate.js +9 -9
  99. package/app/scripts/aside/index.ts +59 -59
  100. package/app/scripts/aside/major/nav.ts +26 -26
  101. package/app/scripts/aside/minor/state.ts +37 -37
  102. package/app/scripts/aside/minor/topic.ts +3 -3
  103. package/app/scripts/flag.ts +28 -28
  104. package/app/scripts/og.ts +27 -27
  105. package/app/scripts/preview/build.ts +76 -76
  106. package/app/scripts/preview/data/alert.ts +19 -19
  107. package/app/scripts/preview/data/custom.ts +8 -8
  108. package/app/scripts/preview/data/genericLink.ts +24 -24
  109. package/app/scripts/preview/data/pageLink.ts +23 -23
  110. package/app/scripts/preview/data/unique.ts +72 -72
  111. package/app/scripts/preview/data.ts +24 -24
  112. package/app/scripts/preview/display.ts +37 -37
  113. package/app/scripts/preview/footer.ts +9 -9
  114. package/app/scripts/preview/request.ts +51 -51
  115. package/app/scripts/preview/state.ts +63 -63
  116. package/app/styles/_immediate.css +7 -7
  117. package/app/styles/_util.scss +43 -43
  118. package/app/styles/_utils.scss +44 -44
  119. package/app/styles/app.scss +91 -91
  120. package/app/styles/def/_bp.scss +27 -27
  121. package/app/styles/def/_size.scss +7 -7
  122. package/app/styles/def/_z.scss +5 -5
  123. package/app/styles/normalize.scss +49 -49
  124. package/app/styles/partials/_darkMagic.scss +5 -5
  125. package/app/styles/partials/_fnav.scss +15 -15
  126. package/app/styles/partials/_preview.scss +5 -5
  127. package/bin/erudit.mjs +2 -2
  128. package/const.ts +4 -4
  129. package/globalPath.ts +21 -21
  130. package/globals/bitran.ts +1 -1
  131. package/globals/content.ts +27 -27
  132. package/globals/contributor.ts +5 -5
  133. package/globals/erudit.ts +5 -5
  134. package/globals/register.ts +18 -18
  135. package/languages/en.ts +94 -94
  136. package/languages/ru.ts +98 -98
  137. package/module/bitran.ts +66 -66
  138. package/module/config.ts +35 -35
  139. package/module/imports.ts +67 -67
  140. package/module/index.ts +47 -47
  141. package/module/logger.ts +10 -10
  142. package/module/paths.ts +22 -22
  143. package/module/restart.ts +61 -61
  144. package/nuxt.config.ts +131 -131
  145. package/package.json +4 -4
  146. package/server/api/aside/major/nav/bookIds.ts +5 -5
  147. package/server/api/aside/major/nav/bookNav/[...bookId].ts +17 -20
  148. package/server/api/aside/major/nav/global.ts +7 -7
  149. package/server/api/aside/minor/news.ts +7 -7
  150. package/server/api/aside/minor/path.ts +82 -82
  151. package/server/api/bitran/content/[...location].ts +10 -10
  152. package/server/api/bitran/toc/[...location].ts +9 -9
  153. package/server/api/content/data.ts +75 -75
  154. package/server/api/contributor/count.ts +6 -6
  155. package/server/api/fake/content.ts +11 -11
  156. package/server/api/fake/shared/languages.ts +12 -12
  157. package/server/api/language/functions.ts +12 -12
  158. package/server/api/language/phrase/[phraseId].ts +19 -19
  159. package/server/api/language/phraseIds.ts +8 -8
  160. package/server/api/prerender.ts +19 -120
  161. package/server/api/preview/page/[...parts].ts +78 -78
  162. package/server/api/preview/unique/[...location].ts +61 -61
  163. package/server/plugin/bitran/content.ts +237 -190
  164. package/server/plugin/bitran/elements/include.ts +229 -229
  165. package/server/plugin/bitran/location.ts +39 -39
  166. package/server/plugin/bitran/toc.ts +94 -94
  167. package/server/plugin/bitran/transpiler.ts +18 -18
  168. package/server/plugin/build/close.ts +12 -12
  169. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  170. package/server/plugin/build/jobs/content/generic.ts +191 -191
  171. package/server/plugin/build/jobs/content/parse.ts +113 -113
  172. package/server/plugin/build/jobs/content/path.ts +6 -6
  173. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  174. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  175. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  176. package/server/plugin/build/jobs/contributors.ts +66 -66
  177. package/server/plugin/build/jobs/language.ts +36 -36
  178. package/server/plugin/build/jobs/nav.ts +345 -345
  179. package/server/plugin/build/process.ts +32 -32
  180. package/server/plugin/build/rebuild.ts +66 -66
  181. package/server/plugin/build/setup.ts +19 -19
  182. package/server/plugin/content/context.ts +119 -119
  183. package/server/plugin/db/entities/Book.ts +7 -7
  184. package/server/plugin/db/entities/Content.ts +45 -45
  185. package/server/plugin/db/entities/Contribution.ts +10 -10
  186. package/server/plugin/db/entities/Contributor.ts +16 -16
  187. package/server/plugin/db/entities/File.ts +10 -10
  188. package/server/plugin/db/entities/Group.ts +14 -14
  189. package/server/plugin/db/entities/Hash.ts +15 -15
  190. package/server/plugin/db/entities/Topic.ts +20 -20
  191. package/server/plugin/db/entities/Unique.ts +21 -21
  192. package/server/plugin/db/reset.ts +12 -12
  193. package/server/plugin/db/setup.ts +49 -49
  194. package/server/plugin/global.ts +16 -16
  195. package/server/plugin/importer.ts +16 -16
  196. package/server/plugin/index.ts +9 -9
  197. package/server/plugin/logger.ts +23 -23
  198. package/server/plugin/nav/node.ts +27 -27
  199. package/server/plugin/nav/utils.ts +179 -175
  200. package/server/plugin/repository/book.ts +23 -21
  201. package/server/plugin/repository/content.ts +240 -240
  202. package/server/plugin/repository/contentId.ts +40 -40
  203. package/server/plugin/repository/contributor.ts +8 -8
  204. package/server/plugin/repository/file.ts +10 -10
  205. package/server/plugin/repository/frontNav.ts +145 -145
  206. package/server/plugin/repository/topic.ts +35 -35
  207. package/server/tsconfig.json +9 -9
  208. package/shared/aside/minor.ts +51 -51
  209. package/shared/asset.ts +22 -22
  210. package/shared/bitran/contentId.ts +56 -56
  211. package/shared/bitran/stringContent.ts +6 -6
  212. package/shared/bitran/toc.ts +8 -8
  213. package/shared/content/bookId.ts +12 -12
  214. package/shared/content/context.ts +9 -9
  215. package/shared/content/data/base.ts +32 -32
  216. package/shared/content/data/index.ts +5 -5
  217. package/shared/content/data/type/book.ts +5 -5
  218. package/shared/content/data/type/group.ts +6 -6
  219. package/shared/content/data/type/topic.ts +11 -11
  220. package/shared/content/previousNext.ts +9 -9
  221. package/shared/contributor.ts +5 -5
  222. package/shared/frontNav.ts +41 -41
  223. package/shared/icons.ts +38 -38
  224. package/shared/image.ts +5 -5
  225. package/shared/link.ts +28 -28
  226. package/shared/popover.ts +8 -8
  227. package/shared/types/language.ts +74 -74
  228. package/shared/utils/objectsEqual.ts +4 -4
  229. package/shared/utils/stringColor.ts +9 -9
  230. package/test/contentId.test.ts +91 -91
  231. package/tsconfig.json +8 -8
  232. package/utils/contentPath.ts +67 -67
  233. package/utils/slash.ts +11 -11
  234. package/utils/stress.ts +9 -9
@@ -1,75 +1,75 @@
1
- import { getTopicPartsLinks } from '@server/repository/topic';
2
- import { getContentBookFor } from '@server/repository/book';
3
- import { getContentGenericData } from '@server/repository/content';
4
- import { getFullContentId } from '@server/repository/contentId';
5
-
6
- import type { ContentGenericData } from '@shared/content/data/base';
7
- import type { ContentTopicData } from '@shared/content/data/type/topic';
8
- import type { ContentGroupData } from '@shared/content/data/type/group';
9
- import type { ContentBookData } from '@shared/content/data/type/book';
10
-
11
- export default defineEventHandler(async (event) => {
12
- let contentId = getQuery(event)?.contentId as string;
13
- contentId = await getFullContentId(contentId);
14
-
15
- if (!contentId) {
16
- throw createError({
17
- statusCode: 400,
18
- statusText: 'Missing content ID!',
19
- });
20
- }
21
-
22
- const generic = await getContentGenericData(contentId);
23
-
24
- switch (generic.type) {
25
- case 'topic':
26
- return await getTopicData(generic);
27
- case 'group':
28
- return await getGroupData(generic);
29
- case 'book':
30
- return await getBookData(generic);
31
- }
32
-
33
- throw createError({
34
- statusCode: 400,
35
- statusText: `Unknown content data type "${generic.type}"!`,
36
- });
37
- });
38
-
39
- //
40
- //
41
- //
42
-
43
- async function getTopicData(
44
- generic: ContentGenericData,
45
- ): Promise<ContentTopicData> {
46
- const contentBook = await getContentBookFor(generic.contentId);
47
-
48
- return {
49
- type: 'topic',
50
- generic,
51
- bookTitle: contentBook?.title,
52
- topicPartLinks: await getTopicPartsLinks(generic.contentId),
53
- };
54
- }
55
-
56
- async function getGroupData(
57
- generic: ContentGenericData,
58
- ): Promise<ContentGroupData> {
59
- const contentBook = await getContentBookFor(generic.contentId);
60
-
61
- return {
62
- type: 'group',
63
- generic,
64
- bookTitle: contentBook?.title,
65
- };
66
- }
67
-
68
- async function getBookData(
69
- generic: ContentGenericData,
70
- ): Promise<ContentBookData> {
71
- return {
72
- type: 'book',
73
- generic,
74
- };
75
- }
1
+ import { getTopicPartsLinks } from '@server/repository/topic';
2
+ import { getContentBookFor } from '@server/repository/book';
3
+ import { getContentGenericData } from '@server/repository/content';
4
+ import { getFullContentId } from '@server/repository/contentId';
5
+
6
+ import type { ContentGenericData } from '@shared/content/data/base';
7
+ import type { ContentTopicData } from '@shared/content/data/type/topic';
8
+ import type { ContentGroupData } from '@shared/content/data/type/group';
9
+ import type { ContentBookData } from '@shared/content/data/type/book';
10
+
11
+ export default defineEventHandler(async (event) => {
12
+ let contentId = getQuery(event)?.contentId as string;
13
+ contentId = await getFullContentId(contentId);
14
+
15
+ if (!contentId) {
16
+ throw createError({
17
+ statusCode: 400,
18
+ statusText: 'Missing content ID!',
19
+ });
20
+ }
21
+
22
+ const generic = await getContentGenericData(contentId);
23
+
24
+ switch (generic.type) {
25
+ case 'topic':
26
+ return await getTopicData(generic);
27
+ case 'group':
28
+ return await getGroupData(generic);
29
+ case 'book':
30
+ return await getBookData(generic);
31
+ }
32
+
33
+ throw createError({
34
+ statusCode: 400,
35
+ statusText: `Unknown content data type "${generic.type}"!`,
36
+ });
37
+ });
38
+
39
+ //
40
+ //
41
+ //
42
+
43
+ async function getTopicData(
44
+ generic: ContentGenericData,
45
+ ): Promise<ContentTopicData> {
46
+ const contentBook = await getContentBookFor(generic.contentId);
47
+
48
+ return {
49
+ type: 'topic',
50
+ generic,
51
+ bookTitle: contentBook?.title,
52
+ topicPartLinks: await getTopicPartsLinks(generic.contentId),
53
+ };
54
+ }
55
+
56
+ async function getGroupData(
57
+ generic: ContentGenericData,
58
+ ): Promise<ContentGroupData> {
59
+ const contentBook = await getContentBookFor(generic.contentId);
60
+
61
+ return {
62
+ type: 'group',
63
+ generic,
64
+ bookTitle: contentBook?.title,
65
+ };
66
+ }
67
+
68
+ async function getBookData(
69
+ generic: ContentGenericData,
70
+ ): Promise<ContentBookData> {
71
+ return {
72
+ type: 'book',
73
+ generic,
74
+ };
75
+ }
@@ -1,6 +1,6 @@
1
- import { DbContributor } from '@server/db/entities/Contributor';
2
- import { ERUDIT_SERVER } from '@server/global';
3
-
4
- export default defineEventHandler(async () => {
5
- return await ERUDIT_SERVER.DB.manager.count(DbContributor);
6
- });
1
+ import { DbContributor } from '@server/db/entities/Contributor';
2
+ import { ERUDIT_SERVER } from '@server/global';
3
+
4
+ export default defineEventHandler(async () => {
5
+ return await ERUDIT_SERVER.DB.manager.count(DbContributor);
6
+ });
@@ -1,11 +1,11 @@
1
- export default defineEventHandler(() => {
2
- return {
3
- commit: {
4
- commit: {
5
- author: {
6
- date: '2019-08-30T14:57:06.000Z',
7
- },
8
- },
9
- },
10
- };
11
- });
1
+ export default defineEventHandler(() => {
2
+ return {
3
+ commit: {
4
+ commit: {
5
+ author: {
6
+ date: '2019-08-30T14:57:06.000Z',
7
+ },
8
+ },
9
+ },
10
+ };
11
+ });
@@ -1,12 +1,12 @@
1
- export default defineEventHandler(() => {
2
- return {
3
- en: {
4
- name: 'English',
5
- link: 'https://en.omath.net',
6
- },
7
- ru: {
8
- name: 'Русский',
9
- link: 'https://omath.ru',
10
- },
11
- };
12
- });
1
+ export default defineEventHandler(() => {
2
+ return {
3
+ en: {
4
+ name: 'English',
5
+ link: 'https://en.omath.net',
6
+ },
7
+ ru: {
8
+ name: 'Русский',
9
+ link: 'https://omath.ru',
10
+ },
11
+ };
12
+ });
@@ -1,12 +1,12 @@
1
- import { ERUDIT_SERVER } from '@server/global';
2
-
3
- export default defineEventHandler(() => {
4
- const strFunctions: Record<string, string> = {};
5
-
6
- for (const [key, func] of Object.entries(
7
- ERUDIT_SERVER.LANGUAGE?.functions || {},
8
- ))
9
- strFunctions[key] = 'return ' + func.toString();
10
-
11
- return strFunctions;
12
- });
1
+ import { ERUDIT_SERVER } from '@server/global';
2
+
3
+ export default defineEventHandler(() => {
4
+ const strFunctions: Record<string, string> = {};
5
+
6
+ for (const [key, func] of Object.entries(
7
+ ERUDIT_SERVER.LANGUAGE?.functions || {},
8
+ ))
9
+ strFunctions[key] = 'return ' + func.toString();
10
+
11
+ return strFunctions;
12
+ });
@@ -1,19 +1,19 @@
1
- import type { EruditPhraseId } from '@shared/types/language';
2
- import { ERUDIT_SERVER } from '@server/global';
3
-
4
- export default defineEventHandler((event) => {
5
- setResponseHeader(event, 'Content-Type', 'text/plain; charset=utf-8');
6
-
7
- const phraseId = getRouterParam(event, 'phraseId');
8
- const phrase =
9
- ERUDIT_SERVER.LANGUAGE?.phrases?.[phraseId as EruditPhraseId];
10
-
11
- if (typeof phrase === 'string') return phrase;
12
- else if (typeof phrase === 'function')
13
- return '~!~FUNC~!~' + 'return ' + phrase.toString();
14
-
15
- throw createError({
16
- statusCode: 400,
17
- statusText: `Unknown phrase id "${phraseId}"!`,
18
- });
19
- });
1
+ import type { EruditPhraseId } from '@shared/types/language';
2
+ import { ERUDIT_SERVER } from '@server/global';
3
+
4
+ export default defineEventHandler((event) => {
5
+ setResponseHeader(event, 'Content-Type', 'text/plain; charset=utf-8');
6
+
7
+ const phraseId = getRouterParam(event, 'phraseId');
8
+ const phrase =
9
+ ERUDIT_SERVER.LANGUAGE?.phrases?.[phraseId as EruditPhraseId];
10
+
11
+ if (typeof phrase === 'string') return phrase;
12
+ else if (typeof phrase === 'function')
13
+ return '~!~FUNC~!~' + 'return ' + phrase.toString();
14
+
15
+ throw createError({
16
+ statusCode: 400,
17
+ statusText: `Unknown phrase id "${phraseId}"!`,
18
+ });
19
+ });
@@ -1,8 +1,8 @@
1
- import { ERUDIT_SERVER } from '@server/global';
2
- import type { EruditPhraseId } from '@shared/types/language';
3
-
4
- export default defineEventHandler(() => {
5
- return Object.keys(
6
- ERUDIT_SERVER.LANGUAGE?.phrases || [],
7
- ) as EruditPhraseId[];
8
- });
1
+ import { ERUDIT_SERVER } from '@server/global';
2
+ import type { EruditPhraseId } from '@shared/types/language';
3
+
4
+ export default defineEventHandler(() => {
5
+ return Object.keys(
6
+ ERUDIT_SERVER.LANGUAGE?.phrases || [],
7
+ ) as EruditPhraseId[];
8
+ });
@@ -1,120 +1,19 @@
1
- import {
2
- encodeBitranLocation,
3
- parseBitranLocation,
4
- stringifyBitranLocation,
5
- } from '@erudit-js/cog/schema';
6
-
7
- import { DbUnique } from '@server/db/entities/Unique';
8
- import { ERUDIT_SERVER } from '@server/global';
9
- import { DbBook } from '@server/db/entities/Book';
10
- import { DbTopic } from '@server/db/entities/Topic';
11
- import { DbGroup } from '@server/db/entities/Group';
12
- import { DbContributor } from '@server/db/entities/Contributor';
13
- import { getShortContentId } from '@server/repository/contentId';
14
-
15
- export default defineEventHandler(async () => {
16
- const routes: string[] = [];
17
- routes.push(...language());
18
- routes.push(...(await previewUniques()));
19
- routes.push(...(await previewPages()));
20
-
21
- return routes;
22
- });
23
-
24
- //
25
- //
26
- //
27
-
28
- function language() {
29
- const phraseRoutes = Object.keys(ERUDIT_SERVER.LANGUAGE?.phrases || []).map(
30
- (phraseId) => `/api/language/phrase/${phraseId}`,
31
- );
32
- return ['/api/language/functions', ...phraseRoutes];
33
- }
34
-
35
- async function previewUniques() {
36
- const dbUniques = await ERUDIT_SERVER.DB.manager.find(DbUnique, {
37
- select: ['location'],
38
- });
39
-
40
- if (!dbUniques) {
41
- return [];
42
- }
43
-
44
- const routes: string[] = [];
45
- for (const dbUnique of dbUniques) {
46
- const location = parseBitranLocation(dbUnique.location);
47
-
48
- if (location.path) {
49
- location.path = await getShortContentId(location.path);
50
- }
51
-
52
- routes.push(
53
- `/api/preview/unique/${encodeBitranLocation(stringifyBitranLocation(location))}`,
54
- );
55
- }
56
- return routes;
57
- }
58
-
59
- async function previewPages() {
60
- const pageRoutes: string[] = [];
61
-
62
- // Books
63
-
64
- const dbBooks = await ERUDIT_SERVER.DB.manager.find(DbBook, {
65
- select: ['contentId'],
66
- });
67
-
68
- if (dbBooks) {
69
- for (const dbBook of dbBooks) {
70
- const bookId = await getShortContentId(dbBook.contentId);
71
- pageRoutes.push(`/api/preview/page/book/${bookId}`);
72
- }
73
- }
74
-
75
- // Topics
76
-
77
- const dbTopics = await ERUDIT_SERVER.DB.manager.find(DbTopic, {
78
- select: ['contentId', 'parts'],
79
- });
80
-
81
- if (dbTopics) {
82
- for (const dbTopic of dbTopics) {
83
- const topicId = await getShortContentId(dbTopic.contentId);
84
- for (const part of dbTopic.parts) {
85
- pageRoutes.push(`/api/preview/page/${part}/${topicId}`);
86
- }
87
- }
88
- }
89
-
90
- // Groups
91
-
92
- const dbGroups = await ERUDIT_SERVER.DB.manager.find(DbGroup, {
93
- select: ['contentId'],
94
- });
95
-
96
- if (dbGroups) {
97
- for (const dbGroup of dbGroups) {
98
- const groupId = await getShortContentId(dbGroup.contentId);
99
- pageRoutes.push(`/api/preview/page/group/${groupId}`);
100
- }
101
- }
102
-
103
- // Contributors
104
-
105
- const dbContributors = await ERUDIT_SERVER.DB.manager.find(DbContributor, {
106
- select: ['contributorId'],
107
- });
108
-
109
- if (dbContributors) {
110
- for (const dbContributor of dbContributors) {
111
- pageRoutes.push(
112
- `/api/preview/page/contributor/${dbContributor.contributorId}`,
113
- );
114
- }
115
- }
116
-
117
- // // //
118
-
119
- return pageRoutes;
120
- }
1
+ import { ERUDIT_SERVER } from '@server/global';
2
+
3
+ export default defineEventHandler(async () => {
4
+ const routes: string[] = [];
5
+ routes.push(...language());
6
+
7
+ return routes;
8
+ });
9
+
10
+ //
11
+ //
12
+ //
13
+
14
+ function language() {
15
+ const phraseRoutes = Object.keys(ERUDIT_SERVER.LANGUAGE?.phrases || []).map(
16
+ (phraseId) => `/api/language/phrase/${phraseId}`,
17
+ );
18
+ return ['/api/language/functions', ...phraseRoutes];
19
+ }
@@ -1,78 +1,78 @@
1
- import type { LinkTargetPageType } from '@erudit-js/bitran-elements/link/target';
2
- import { isContentType } from '@erudit-js/cog/schema';
3
-
4
- import {
5
- getContentContext,
6
- getTopicPartContext,
7
- getContributorContext,
8
- } from '@server/content/context';
9
- import { getFullContentId } from '@server/repository/contentId';
10
- import { ERUDIT_SERVER } from '@server/global';
11
- import { DbContent } from '@server/db/entities/Content';
12
-
13
- import type { Context, ContextItem } from '@erudit/shared/content/context';
14
- import type { PreviewDataPageLink } from '@app/scripts/preview/data/pageLink';
15
-
16
- export default defineEventHandler<Promise<PreviewDataPageLink>>(
17
- async (event) => {
18
- const urlParts = (event.context.params?.parts || '').split('/');
19
- const pageType: LinkTargetPageType = urlParts.shift() as any;
20
- const contentId: string = urlParts.join('/');
21
-
22
- const context: Context = await (async () => {
23
- switch (pageType) {
24
- case 'book':
25
- case 'group':
26
- return await getContentContext(contentId);
27
- case 'article':
28
- case 'summary':
29
- case 'practice':
30
- return await getTopicPartContext(pageType, contentId);
31
- case 'contributor':
32
- return await getContributorContext(contentId);
33
- }
34
-
35
- throw createError(`Can't handle "${pageType as any}" page type!`);
36
- })();
37
-
38
- const lastContextItem = context.pop() as ContextItem;
39
- const contextStr = context
40
- .filter((c) => !c.hidden)
41
- .map((c) => c.title)
42
- .join(' / ');
43
-
44
- const description = await (async () => {
45
- if (!isContentType(pageType)) {
46
- return;
47
- }
48
-
49
- const fullContentId = await getFullContentId(contentId);
50
- const dbContent = await ERUDIT_SERVER.DB.manager.findOne(
51
- DbContent,
52
- {
53
- select: ['description'],
54
- where: { contentId: fullContentId },
55
- },
56
- );
57
-
58
- if (!dbContent) {
59
- return;
60
- }
61
-
62
- return dbContent.description?.trim();
63
- })();
64
-
65
- return <PreviewDataPageLink>{
66
- type: 'page-link',
67
- description,
68
- footer: {
69
- secondary:
70
- (contextStr ? contextStr + ' • ' : '') +
71
- lastContextItem.type,
72
- primary: lastContextItem.title,
73
- href: lastContextItem.href,
74
- iconName: lastContextItem.icon,
75
- },
76
- };
77
- },
78
- );
1
+ import type { LinkTargetPageType } from '@erudit-js/bitran-elements/link/target';
2
+ import { isContentType } from '@erudit-js/cog/schema';
3
+
4
+ import {
5
+ getContentContext,
6
+ getTopicPartContext,
7
+ getContributorContext,
8
+ } from '@server/content/context';
9
+ import { getFullContentId } from '@server/repository/contentId';
10
+ import { ERUDIT_SERVER } from '@server/global';
11
+ import { DbContent } from '@server/db/entities/Content';
12
+
13
+ import type { Context, ContextItem } from '@erudit/shared/content/context';
14
+ import type { PreviewDataPageLink } from '@app/scripts/preview/data/pageLink';
15
+
16
+ export default defineEventHandler<Promise<PreviewDataPageLink>>(
17
+ async (event) => {
18
+ const urlParts = (event.context.params?.parts || '').split('/');
19
+ const pageType: LinkTargetPageType = urlParts.shift() as any;
20
+ const contentId: string = urlParts.join('/');
21
+
22
+ const context: Context = await (async () => {
23
+ switch (pageType) {
24
+ case 'book':
25
+ case 'group':
26
+ return await getContentContext(contentId);
27
+ case 'article':
28
+ case 'summary':
29
+ case 'practice':
30
+ return await getTopicPartContext(pageType, contentId);
31
+ case 'contributor':
32
+ return await getContributorContext(contentId);
33
+ }
34
+
35
+ throw createError(`Can't handle "${pageType as any}" page type!`);
36
+ })();
37
+
38
+ const lastContextItem = context.pop() as ContextItem;
39
+ const contextStr = context
40
+ .filter((c) => !c.hidden)
41
+ .map((c) => c.title)
42
+ .join(' / ');
43
+
44
+ const description = await (async () => {
45
+ if (!isContentType(pageType)) {
46
+ return;
47
+ }
48
+
49
+ const fullContentId = await getFullContentId(contentId);
50
+ const dbContent = await ERUDIT_SERVER.DB.manager.findOne(
51
+ DbContent,
52
+ {
53
+ select: ['description'],
54
+ where: { contentId: fullContentId },
55
+ },
56
+ );
57
+
58
+ if (!dbContent) {
59
+ return;
60
+ }
61
+
62
+ return dbContent.description?.trim();
63
+ })();
64
+
65
+ return <PreviewDataPageLink>{
66
+ type: 'page-link',
67
+ description,
68
+ footer: {
69
+ secondary:
70
+ (contextStr ? contextStr + ' • ' : '') +
71
+ lastContextItem.type,
72
+ primary: lastContextItem.title,
73
+ href: lastContextItem.href,
74
+ iconName: lastContextItem.icon,
75
+ },
76
+ };
77
+ },
78
+ );