erudit 2.0.0-dev.7 → 2.0.0-dev.9

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 (212) hide show
  1. package/.nuxtrc +1 -1
  2. package/app/app.vue +172 -172
  3. package/app/components/Loading.vue +23 -23
  4. package/app/components/SiteAside.vue +382 -382
  5. package/app/components/SiteMain.vue +35 -35
  6. package/app/components/ads/BannerTemplate.vue +51 -51
  7. package/app/components/ads/BottomBanner.vue +45 -45
  8. package/app/components/ads/LeftBanner.vue +50 -50
  9. package/app/components/aside/AsideListItem.vue +74 -74
  10. package/app/components/aside/AsideMajor.vue +56 -56
  11. package/app/components/aside/AsideMinor.vue +71 -71
  12. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  13. package/app/components/aside/major/PaneSwitch.vue +54 -54
  14. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  15. package/app/components/aside/major/SiteInfo.vue +85 -85
  16. package/app/components/aside/major/panes/Language.vue +79 -79
  17. package/app/components/aside/major/panes/Pages.vue +34 -34
  18. package/app/components/aside/major/panes/Search.vue +2 -2
  19. package/app/components/aside/major/panes/nav/Nav.vue +91 -91
  20. package/app/components/aside/major/panes/nav/NavBook.vue +86 -86
  21. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  22. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  23. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  24. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  25. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  26. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  27. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  28. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  29. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  30. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  31. package/app/components/aside/major/panes/other/ItemGenerator.vue +15 -15
  32. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  33. package/app/components/aside/major/panes/other/Other.vue +16 -16
  34. package/app/components/aside/minor/AsideMinorContributor.vue +4 -4
  35. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  36. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  37. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  38. package/app/components/aside/minor/Contribute.vue +145 -145
  39. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  40. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  41. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  42. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  43. package/app/components/aside/minor/topic/TopicToc.vue +203 -202
  44. package/app/components/aside/minor/topic/TopicTocItem.vue +31 -31
  45. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  46. package/app/components/bitran/BitranContent.vue +63 -64
  47. package/app/components/bitran/RenderWrapper.vue +10 -12
  48. package/app/components/contributor/ContributorAvatar.vue +43 -43
  49. package/app/components/contributor/ContributorListItem.vue +35 -35
  50. package/app/components/main/topic/MainTopic.vue +79 -79
  51. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  52. package/app/components/main/utils/Breadcrumb.vue +75 -75
  53. package/app/components/main/utils/ContentDecoration.vue +29 -29
  54. package/app/components/main/utils/ContentDescription.vue +19 -19
  55. package/app/components/main/utils/ContentFlag.vue +15 -15
  56. package/app/components/main/utils/ContentPopover.vue +176 -176
  57. package/app/components/main/utils/ContentPopovers.vue +105 -105
  58. package/app/components/main/utils/ContentReferences.vue +75 -75
  59. package/app/components/main/utils/ContentSection.vue +41 -41
  60. package/app/components/main/utils/ContentTitle.vue +36 -36
  61. package/app/components/main/utils/reference/ReferenceGroup.vue +40 -40
  62. package/app/components/main/utils/reference/ReferenceItem.vue +63 -63
  63. package/app/components/main/utils/reference/ReferenceSource.vue +109 -109
  64. package/app/components/preview/Preview.vue +177 -177
  65. package/app/components/preview/PreviewDisplay.vue +139 -139
  66. package/app/components/preview/PreviewFooterAction.vue +73 -73
  67. package/app/components/preview/PreviewLoading.vue +14 -14
  68. package/app/components/preview/PreviewScreen.vue +99 -99
  69. package/app/components/preview/display/Alert.vue +50 -50
  70. package/app/components/preview/display/Custom.vue +18 -18
  71. package/app/components/preview/display/GenericLink.vue +48 -48
  72. package/app/components/preview/display/PageLink.vue +20 -20
  73. package/app/components/preview/display/Unique.vue +49 -49
  74. package/app/components/transition/Fade.vue +21 -21
  75. package/app/components/tree/TreeContainer.vue +11 -11
  76. package/app/components/tree/TreeItem.vue +89 -89
  77. package/app/composables/bitran.ts +98 -103
  78. package/app/composables/bitranContent.ts +2 -1
  79. package/app/composables/contentPage.ts +1 -1
  80. package/app/composables/phrases.ts +80 -80
  81. package/app/pages/_test/preview.vue +110 -110
  82. package/app/pages/article/[...articleId].vue +2 -2
  83. package/app/pages/book/[...bookId].vue +47 -47
  84. package/app/pages/group/[...groupId].vue +65 -64
  85. package/app/pages/index.vue +32 -32
  86. package/app/pages/members.vue +6 -6
  87. package/app/pages/practice/[...practice].vue +2 -2
  88. package/app/pages/summary/[...summaryId].vue +2 -2
  89. package/app/public/favicon/article.svg +9 -9
  90. package/app/public/favicon/default.svg +9 -9
  91. package/app/public/favicon/practice.svg +9 -9
  92. package/app/public/favicon/summary.svg +9 -9
  93. package/app/public/logotype.svg +16 -16
  94. package/app/public/user.svg +9 -9
  95. package/app/scripts/_immediate.js +3 -3
  96. package/app/scripts/flag.ts +28 -28
  97. package/app/scripts/og.ts +27 -27
  98. package/app/scripts/preview/data/unique.ts +3 -3
  99. package/app/scripts/preview/display.ts +5 -7
  100. package/app/scripts/preview/request.ts +2 -2
  101. package/app/styles/_immediate.css +2 -2
  102. package/app/styles/_util.scss +49 -49
  103. package/app/styles/_utils.scss +44 -44
  104. package/app/styles/default.scss +84 -84
  105. package/app/styles/partials/_darkMagic.scss +6 -6
  106. package/app/styles/partials/_fnav.scss +17 -17
  107. package/app/styles/partials/_preview.scss +6 -6
  108. package/globalPath.ts +21 -24
  109. package/globals/bitran.ts +21 -13
  110. package/globals/erudit.ts +5 -5
  111. package/globals/register.ts +18 -18
  112. package/languages/en.ts +95 -95
  113. package/languages/ru.ts +99 -99
  114. package/module/config.ts +34 -34
  115. package/module/imports.ts +46 -46
  116. package/module/index.ts +47 -35
  117. package/module/logger.ts +10 -10
  118. package/module/restart.ts +61 -61
  119. package/nuxt.config.ts +107 -96
  120. package/package.json +9 -6
  121. package/server/api/aside/major/nav/bookIds.ts +5 -5
  122. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  123. package/server/api/aside/major/nav/global.ts +7 -7
  124. package/server/api/aside/minor/news.ts +7 -7
  125. package/server/api/aside/minor/path.ts +78 -78
  126. package/server/api/bitran/content/[location].ts +7 -7
  127. package/server/api/bitran/toc/[location].ts +7 -7
  128. package/server/api/content/data.ts +72 -72
  129. package/server/api/fake/content.ts +10 -10
  130. package/server/api/fake/shared/languages.ts +12 -12
  131. package/server/api/language/functions.ts +12 -12
  132. package/server/api/language/phrase/[phraseId].ts +19 -19
  133. package/server/api/language/phraseIds.ts +8 -8
  134. package/server/api/preview/page/[...parts].ts +51 -51
  135. package/server/api/preview/unique/[location].ts +55 -55
  136. package/server/plugin/bitran/content.ts +55 -44
  137. package/server/plugin/bitran/products/include.ts +28 -27
  138. package/server/plugin/bitran/products/link.ts +11 -9
  139. package/server/plugin/bitran/setup.ts +0 -1
  140. package/server/plugin/bitran/toc.ts +25 -24
  141. package/server/plugin/bitran/transpiler.ts +46 -0
  142. package/server/plugin/build/close.ts +10 -10
  143. package/server/plugin/build/jobs/content/parse.ts +37 -27
  144. package/server/plugin/build/jobs/language.ts +36 -36
  145. package/server/plugin/build/process.ts +25 -25
  146. package/server/plugin/build/rebuild.ts +55 -55
  147. package/server/plugin/build/setup.ts +21 -21
  148. package/server/plugin/global.ts +18 -18
  149. package/server/plugin/importer.ts +12 -12
  150. package/server/plugin/index.ts +9 -9
  151. package/server/plugin/logger.ts +23 -23
  152. package/server/tsconfig.json +7 -7
  153. package/shared/bitran/context.ts +3 -2
  154. package/shared/bitran/default.ts +46 -0
  155. package/shared/bitran/{products/link/render → link}/Link.vue +7 -14
  156. package/shared/bitran/link/factory.ts +24 -0
  157. package/shared/bitran/link/languages/en.ts +7 -0
  158. package/shared/bitran/link/languages/ru.ts +7 -0
  159. package/shared/bitran/link/renderer.ts +21 -0
  160. package/shared/bitran/link/shared.ts +17 -0
  161. package/shared/bitran/{products/link → link}/target.ts +1 -1
  162. package/shared/bitran/link/transpiler.ts +10 -0
  163. package/shared/content/context.ts +9 -9
  164. package/shared/content/data/base.ts +32 -32
  165. package/shared/content/data/index.ts +5 -5
  166. package/shared/content/data/type/book.ts +5 -5
  167. package/shared/content/data/type/group.ts +6 -6
  168. package/shared/content/data/type/topic.ts +11 -11
  169. package/shared/content/previousNext.ts +9 -9
  170. package/shared/link.ts +25 -25
  171. package/shared/types/language.ts +75 -75
  172. package/test/bitran/{products/link → link}/target.test.ts +5 -2
  173. package/tsconfig.json +8 -8
  174. package/utils/stress.ts +9 -9
  175. package/server/plugin/bitran/core.ts +0 -51
  176. package/shared/bitran/alias.ts +0 -17
  177. package/shared/bitran/products/alias/core/factory.ts +0 -46
  178. package/shared/bitran/products/alias/core/index.ts +0 -13
  179. package/shared/bitran/products/alias/render/Alias.vue +0 -10
  180. package/shared/bitran/products/alias/render/icon.svg +0 -3
  181. package/shared/bitran/products/alias/render/index.ts +0 -17
  182. package/shared/bitran/products/alias/render/languages/en.ts +0 -5
  183. package/shared/bitran/products/alias/render/languages/ru.ts +0 -5
  184. package/shared/bitran/products/alias/shared.ts +0 -11
  185. package/shared/bitran/products/heading/core/factory.ts +0 -53
  186. package/shared/bitran/products/heading/core/index.ts +0 -19
  187. package/shared/bitran/products/heading/render/Heading.vue +0 -47
  188. package/shared/bitran/products/heading/render/icon.svg +0 -3
  189. package/shared/bitran/products/heading/render/index.ts +0 -17
  190. package/shared/bitran/products/heading/render/languages/en.ts +0 -5
  191. package/shared/bitran/products/heading/render/languages/ru.ts +0 -5
  192. package/shared/bitran/products/heading/shared.ts +0 -13
  193. package/shared/bitran/products/include/core/factory.ts +0 -61
  194. package/shared/bitran/products/include/core/index.ts +0 -13
  195. package/shared/bitran/products/include/render/Include.vue +0 -13
  196. package/shared/bitran/products/include/render/icon.svg +0 -3
  197. package/shared/bitran/products/include/render/index.ts +0 -18
  198. package/shared/bitran/products/include/render/languages/en.ts +0 -5
  199. package/shared/bitran/products/include/render/languages/ru.ts +0 -5
  200. package/shared/bitran/products/include/shared.ts +0 -15
  201. package/shared/bitran/products/link/core/factory.ts +0 -20
  202. package/shared/bitran/products/link/core/index.ts +0 -17
  203. package/shared/bitran/products/link/render/index.ts +0 -17
  204. package/shared/bitran/products/link/render/languages/en.ts +0 -5
  205. package/shared/bitran/products/link/render/languages/ru.ts +0 -5
  206. package/shared/bitran/products/link/shared.ts +0 -15
  207. package/test/bitran/alias.test.ts +0 -44
  208. package/test/bitran/products/alias.test.ts +0 -83
  209. package/test/bitran/products/heading.test.ts +0 -119
  210. package/test/bitran/products/include.test.ts +0 -77
  211. package/test/bitran/products/link/factory.test.ts +0 -30
  212. /package/shared/bitran/{products/link/render → link}/icon.svg +0 -0
@@ -1,64 +1,63 @@
1
- <script lang="ts" setup>
2
- import 'bitran/style.css';
3
- import type { BitranContent } from 'bitran';
4
- import { Bitran } from 'bitran/render';
5
-
6
- import type { BitranContext } from '@shared/bitran/context';
7
-
8
- const props = defineProps<{
9
- content: BitranContent;
10
- context: BitranContext;
11
- }>();
12
-
13
- const { bitranCore, bitranRender } = await useBitran(props.context);
14
-
15
- // onMounted(() => {
16
- // watch(urlElement, () => {
17
- // //console.log('Highlighting product:', urlElement.value);
18
- // }, { immediate: true });
19
- // });
20
- </script>
21
-
22
- <template>
23
- <Bitran
24
- :bitranCore
25
- :bitranRender
26
- :content
27
- :editMode="false"
28
- :class="$style.eruditBitranContainer"
29
- />
30
- </template>
31
-
32
- <style lang="scss" module>
33
- .eruditBitranContainer {
34
- padding-top: var(--_pMainY);
35
- padding-bottom: var(--_pMainY);
36
-
37
- // Setting up Bitran
38
-
39
- --bitran_gap: var(--gap);
40
- --bitran_gapSmall: var(--gapSmall);
41
- --bitran_gapBig: var(--gapBig);
42
-
43
- --bitran_xPadding: var(--_pMainX);
44
- --bitran_blocksGap: calc(2 * var(--_pMainY));
45
- --bitran_transitionSpeed: var(--transitionSpeed);
46
- --bitran_transitionFunction: var(--transitionFunction);
47
- --bitran_fontSans: 'Noto Sans', sans-serif;
48
- --bitran_fontSerif: 'Noto Serif', serif;
49
-
50
- --bitran_text: var(--text);
51
- --bitran_textMuted: var(--textMuted);
52
- --bitran_textDimmed: var(--textDimmed);
53
- --bitran_textDisabled: var(--textDisabled);
54
- }
55
- </style>
56
-
57
- <style lang="scss">
58
- @use '$/def/bp';
59
- @use 'bitran/public/scss/external' as bitranExternal;
60
-
61
- @include bp.below('mobile') {
62
- @include bitranExternal.narrowMode;
63
- }
64
- </style>
1
+ <script lang="ts" setup>
2
+ import { Bitran, type BitranContent } from '@bitran-js/renderer-vue';
3
+
4
+ import type { BitranContext } from '@shared/bitran/context';
5
+
6
+ import RenderWrapper from './RenderWrapper.vue';
7
+
8
+ const props = defineProps<{
9
+ content: BitranContent;
10
+ context: BitranContext;
11
+ }>();
12
+
13
+ const bitranTranspiler = await useBitranTranspiler();
14
+ const bitranRenderers = await useBitranRenderers();
15
+
16
+ const formatText = useFormatText();
17
+
18
+ // onMounted(() => {
19
+ // watch(urlElement, () => {
20
+ // //console.log('Highlighting product:', urlElement.value);
21
+ // }, { immediate: true });
22
+ // });
23
+ </script>
24
+
25
+ <template>
26
+ <Bitran
27
+ :class="$style.eruditBitranContainer"
28
+ :transpiler="bitranTranspiler"
29
+ :renderers="bitranRenderers"
30
+ :content
31
+ :editMode="false"
32
+ :formatText
33
+ :RenderWrapper
34
+ />
35
+ </template>
36
+
37
+ <style lang="scss" module>
38
+ @use '@bitran-js/renderer-vue/scss/def' as bitranDef;
39
+
40
+ .eruditBitranContainer {
41
+ padding: var(--_pMainY) var(--_pMainX);
42
+ padding-left: calc(var(--_pMainX) - #{bitranDef.$asideWidth});
43
+
44
+ // Setting up Bitran
45
+
46
+ --bitran_gap: var(--gap);
47
+ --bitran_gapSmall: var(--gapSmall);
48
+ --bitran_gapBig: var(--gapBig);
49
+ --bitran_gapBlocks: var(--gapBig);
50
+
51
+ --bitran_xPadding: var(--_pMainX);
52
+ --bitran_transitionSpeed: var(--transitionSpeed);
53
+ --bitran_transitionFunction: var(--transitionFunction);
54
+
55
+ --bitran_fontMain: 'Noto Sans', sans-serif;
56
+ --bitran_fontAlt: 'Noto Serif', serif;
57
+
58
+ --bitran_text: var(--text);
59
+ --bitran_textMuted: var(--textMuted);
60
+ --bitran_textDimmed: var(--textDimmed);
61
+ --bitran_textDisabled: var(--textDisabled);
62
+ }
63
+ </style>
@@ -1,12 +1,10 @@
1
- <script lang="ts" setup>
2
- import { RenderMode } from 'bitran/render';
3
-
4
- defineProps<{ renderMode: RenderMode }>();
5
- </script>
6
-
7
- <template>
8
- <slot v-if="renderMode > RenderMode.Client"></slot>
9
- <ClientOnly v-else>
10
- <slot></slot>
11
- </ClientOnly>
12
- </template>
1
+ <script lang="ts" setup>
2
+ defineProps<{ mode: 'hybrid' | 'client' }>();
3
+ </script>
4
+
5
+ <template>
6
+ <slot v-if="mode !== 'client'"></slot>
7
+ <ClientOnly v-else>
8
+ <slot></slot>
9
+ </ClientOnly>
10
+ </template>
@@ -1,43 +1,43 @@
1
- <script lang="ts" setup>
2
- const props = defineProps<{ contributorId: string; avatar?: string }>();
3
- const baseUrlPath = useBaseUrlPath();
4
-
5
- const hasAvatar = computed(() => !!props.avatar);
6
- </script>
7
-
8
- <template>
9
- <div
10
- :class="[$style.contributorAvatar, !hasAvatar && $style.noAvatar]"
11
- :style="{ '--_avatarBlendColor': stringColor(props.contributorId) }"
12
- >
13
- <img
14
- v-if="hasAvatar"
15
- :src="baseUrlPath(contributorAsset(avatar!))"
16
- loading="lazy"
17
- />
18
- </div>
19
- </template>
20
-
21
- <style lang="scss" module>
22
- .contributorAvatar {
23
- $avatarSize: 40px;
24
- --_avatarBlendColor: var(--brand);
25
-
26
- position: relative;
27
- width: #{$avatarSize};
28
- height: #{$avatarSize};
29
- border-radius: 50%;
30
- overflow: hidden;
31
- background: var(--border);
32
-
33
- &.noAvatar {
34
- background-image: url('/_erudit-asset/user.svg');
35
- background-color: var(--_avatarBlendColor);
36
- background-blend-mode: hard-light;
37
- }
38
-
39
- > img {
40
- display: block;
41
- }
42
- }
43
- </style>
1
+ <script lang="ts" setup>
2
+ const props = defineProps<{ contributorId: string; avatar?: string }>();
3
+ const baseUrlPath = useBaseUrlPath();
4
+
5
+ const hasAvatar = computed(() => !!props.avatar);
6
+ </script>
7
+
8
+ <template>
9
+ <div
10
+ :class="[$style.contributorAvatar, !hasAvatar && $style.noAvatar]"
11
+ :style="{ '--_avatarBlendColor': stringColor(props.contributorId) }"
12
+ >
13
+ <img
14
+ v-if="hasAvatar"
15
+ :src="baseUrlPath(contributorAsset(avatar!))"
16
+ loading="lazy"
17
+ />
18
+ </div>
19
+ </template>
20
+
21
+ <style lang="scss" module>
22
+ .contributorAvatar {
23
+ $avatarSize: 40px;
24
+ --_avatarBlendColor: var(--brand);
25
+
26
+ position: relative;
27
+ width: #{$avatarSize};
28
+ height: #{$avatarSize};
29
+ border-radius: 50%;
30
+ overflow: hidden;
31
+ background: var(--border);
32
+
33
+ &.noAvatar {
34
+ background-image: url('/_erudit-asset/user.svg');
35
+ background-color: var(--_avatarBlendColor);
36
+ background-blend-mode: hard-light;
37
+ }
38
+
39
+ > img {
40
+ display: block;
41
+ }
42
+ }
43
+ </style>
@@ -1,35 +1,35 @@
1
- <script lang="ts" setup>
2
- import { type ContentContributor } from '@shared/contributor';
3
- import { createContributorLink } from '@shared/link';
4
-
5
- defineProps<ContentContributor>();
6
-
7
- const Link = defineNuxtLink({ prefetch: false });
8
- </script>
9
-
10
- <template>
11
- <Link
12
- :class="$style.contributor"
13
- :to="createContributorLink(contributorId)"
14
- >
15
- <ContributorAvatar :contributorId :avatar />
16
- <span>{{ displayName || contributorId }}</span>
17
- </Link>
18
- </template>
19
-
20
- <style lang="scss" module>
21
- .contributor {
22
- display: flex;
23
- align-items: center;
24
- gap: var(--gap);
25
- padding: var(--gap);
26
- color: var(--text);
27
- text-decoration: none;
28
-
29
- @include transition(background);
30
-
31
- &:hover {
32
- background: var(--bgAccent);
33
- }
34
- }
35
- </style>
1
+ <script lang="ts" setup>
2
+ import { type ContentContributor } from '@shared/contributor';
3
+ import { createContributorLink } from '@shared/link';
4
+
5
+ defineProps<ContentContributor>();
6
+
7
+ const Link = defineNuxtLink({ prefetch: false });
8
+ </script>
9
+
10
+ <template>
11
+ <Link
12
+ :class="$style.contributor"
13
+ :to="createContributorLink(contributorId)"
14
+ >
15
+ <ContributorAvatar :contributorId :avatar />
16
+ <span>{{ displayName || contributorId }}</span>
17
+ </Link>
18
+ </template>
19
+
20
+ <style lang="scss" module>
21
+ .contributor {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: var(--gap);
25
+ padding: var(--gap);
26
+ color: var(--text);
27
+ text-decoration: none;
28
+
29
+ @include transition(background);
30
+
31
+ &:hover {
32
+ background: var(--bgAccent);
33
+ }
34
+ }
35
+ </style>
@@ -1,79 +1,79 @@
1
- <script lang="ts" setup>
2
- import type { TopicPart } from 'erudit-cog/schema';
3
-
4
- import eruditConfig from '#erudit/config';
5
-
6
- import { type ContentTopicData } from '@erudit/shared/content/data/type/topic';
7
- import { topicLocation } from '@app/scripts/aside/minor/topic';
8
-
9
- import ContentDecoration from '../utils/ContentDecoration.vue';
10
- import ContentTitle from '../utils/ContentTitle.vue';
11
- import ContentDescription from '../utils/ContentDescription.vue';
12
- import TopicPartSwitch from './TopicPartSwitch.vue';
13
- import Breadcrumb from '../utils/Breadcrumb.vue';
14
- import ContentPopovers from '../utils/ContentPopovers.vue';
15
- import ContentReferences from '../utils/ContentReferences.vue';
16
- import ContentSection from '../utils/ContentSection.vue';
17
- import { TOPIC_PART_ICON } from '@erudit/shared/icons';
18
- import { NO_ALIASES } from '@erudit/shared/bitran/alias';
19
-
20
- const location = useBitranLocation();
21
- const topicPart = computed(() => location.value?.type as TopicPart);
22
-
23
- const topicData = await useContentData<ContentTopicData>();
24
- await useContentPage(topicData);
25
-
26
- const phrase = await usePhrases('article', 'summary', 'practice');
27
-
28
- const content = await useBitranContent(location);
29
-
30
- onMounted(() => {
31
- watchEffect(() => {
32
- // Telling live toc that content is mounted
33
- topicLocation.value = location.value;
34
- });
35
- });
36
- </script>
37
-
38
- <template>
39
- <ContentDecoration
40
- v-if="topicData.generic.decoration"
41
- :decoration="topicData.generic.decoration"
42
- />
43
-
44
- <Breadcrumb
45
- v-if="topicData.generic.context?.length > 1"
46
- :context="topicData.generic.context"
47
- />
48
-
49
- <ContentTitle
50
- :title="
51
- topicData.generic?.title ||
52
- topicData.generic.contentId.split('/').pop()!
53
- "
54
- :icon="TOPIC_PART_ICON[location!.type as TopicPart]"
55
- :hint="phrase[location!.type as TopicPart]"
56
- />
57
-
58
- <ContentDescription
59
- v-if="topicData.generic?.description"
60
- :description="topicData.generic?.description"
61
- />
62
-
63
- <ContentPopovers :generic="topicData.generic" />
64
-
65
- <TopicPartSwitch
66
- :partLinks="topicData.topicPartLinks"
67
- :active="topicPart"
68
- />
69
-
70
- <div style="clear: both"></div>
71
-
72
- <BitranContent :content :context="{ location, aliases: NO_ALIASES() }" />
73
-
74
- <ContentSection v-if="topicData.generic.references">
75
- <ContentReferences :references="topicData.generic.references" />
76
- </ContentSection>
77
-
78
- <AdsBottomBanner v-if="eruditConfig.ads?.bottomBlockId" />
79
- </template>
1
+ <script lang="ts" setup>
2
+ import type { TopicPart } from 'erudit-cog/schema';
3
+ import { NO_ALIASES } from '@erudit-js/bitran-elements/aliases/shared';
4
+
5
+ import eruditConfig from '#erudit/config';
6
+
7
+ import { type ContentTopicData } from '@erudit/shared/content/data/type/topic';
8
+ import { topicLocation } from '../../../../app/scripts/aside/minor/topic';
9
+
10
+ import ContentDecoration from '../utils/ContentDecoration.vue';
11
+ import ContentTitle from '../utils/ContentTitle.vue';
12
+ import ContentDescription from '../utils/ContentDescription.vue';
13
+ import TopicPartSwitch from './TopicPartSwitch.vue';
14
+ import Breadcrumb from '../utils/Breadcrumb.vue';
15
+ import ContentPopovers from '../utils/ContentPopovers.vue';
16
+ import ContentReferences from '../utils/ContentReferences.vue';
17
+ import ContentSection from '../utils/ContentSection.vue';
18
+ import { TOPIC_PART_ICON } from '@erudit/shared/icons';
19
+
20
+ const location = useBitranLocation();
21
+ const topicPart = computed(() => location.value?.type as TopicPart);
22
+
23
+ const topicData = await useContentData<ContentTopicData>();
24
+ await useContentPage(topicData);
25
+
26
+ const phrase = await usePhrases('article', 'summary', 'practice');
27
+
28
+ const content = await useBitranContent(location);
29
+
30
+ onMounted(() => {
31
+ watchEffect(() => {
32
+ // Telling live toc that content is mounted
33
+ topicLocation.value = location.value;
34
+ });
35
+ });
36
+ </script>
37
+
38
+ <template>
39
+ <ContentDecoration
40
+ v-if="topicData.generic.decoration"
41
+ :decoration="topicData.generic.decoration"
42
+ />
43
+
44
+ <Breadcrumb
45
+ v-if="topicData.generic.context?.length > 1"
46
+ :context="topicData.generic.context"
47
+ />
48
+
49
+ <ContentTitle
50
+ :title="
51
+ topicData.generic?.title ||
52
+ topicData.generic.contentId.split('/').pop()!
53
+ "
54
+ :icon="TOPIC_PART_ICON[location!.type as TopicPart]"
55
+ :hint="phrase[location!.type as TopicPart]"
56
+ />
57
+
58
+ <ContentDescription
59
+ v-if="topicData.generic?.description"
60
+ :description="topicData.generic?.description"
61
+ />
62
+
63
+ <ContentPopovers :generic="topicData.generic" />
64
+
65
+ <TopicPartSwitch
66
+ :partLinks="topicData.topicPartLinks"
67
+ :active="topicPart"
68
+ />
69
+
70
+ <div style="clear: both"></div>
71
+
72
+ <BitranContent :content :context="{ location, aliases: NO_ALIASES() }" />
73
+
74
+ <ContentSection v-if="topicData.generic.references">
75
+ <ContentReferences :references="topicData.generic.references" />
76
+ </ContentSection>
77
+
78
+ <AdsBottomBanner v-if="eruditConfig.ads?.bottomBlockId" />
79
+ </template>