erudit 3.0.0-dev.1 → 3.0.0-dev.10

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 (252) hide show
  1. package/app/app.vue +195 -172
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +393 -382
  4. package/app/components/SiteMain.vue +34 -35
  5. package/app/components/ads/BannerTemplate.vue +51 -51
  6. package/app/components/ads/BottomBanner.vue +45 -45
  7. package/app/components/ads/LeftBanner.vue +50 -50
  8. package/app/components/aside/AsideListItem.vue +74 -74
  9. package/app/components/aside/AsideMajor.vue +56 -56
  10. package/app/components/aside/AsideMinor.vue +71 -71
  11. package/app/components/aside/major/PaneContentScroll.vue +23 -23
  12. package/app/components/aside/major/PaneSwitch.vue +54 -54
  13. package/app/components/aside/major/PaneSwitchButton.vue +63 -63
  14. package/app/components/aside/major/SiteInfo.vue +85 -85
  15. package/app/components/aside/major/panes/Language.vue +79 -79
  16. package/app/components/aside/major/panes/Pages.vue +34 -34
  17. package/app/components/aside/major/panes/Search.vue +11 -11
  18. package/app/components/aside/major/panes/nav/Nav.vue +87 -91
  19. package/app/components/aside/major/panes/nav/NavBook.vue +87 -86
  20. package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
  21. package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
  22. package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
  23. package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
  24. package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
  25. package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
  26. package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
  27. package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
  28. package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
  29. package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
  30. package/app/components/aside/major/panes/other/ItemGenerator.vue +13 -15
  31. package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
  32. package/app/components/aside/major/panes/other/Other.vue +16 -16
  33. package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
  34. package/app/components/aside/minor/AsideMinorNews.vue +11 -11
  35. package/app/components/aside/minor/AsideMinorPane.vue +15 -15
  36. package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
  37. package/app/components/aside/minor/Contribute.vue +145 -145
  38. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  39. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  40. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  41. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  42. package/app/components/aside/minor/topic/TopicToc.vue +219 -203
  43. package/app/components/aside/minor/topic/TopicTocItem.vue +30 -31
  44. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  45. package/app/components/bitran/BitranContent.vue +91 -63
  46. package/app/components/bitran/RenderWrapper.vue +10 -10
  47. package/app/components/contributor/ContributorAvatar.vue +45 -43
  48. package/app/components/contributor/ContributorListItem.vue +35 -35
  49. package/app/components/main/topic/MainTopic.vue +78 -79
  50. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  51. package/app/components/main/utils/Breadcrumb.vue +70 -75
  52. package/app/components/main/utils/ContentDecoration.vue +29 -29
  53. package/app/components/main/utils/ContentDescription.vue +19 -19
  54. package/app/components/main/utils/ContentPopover.vue +188 -176
  55. package/app/components/main/utils/ContentPopovers.vue +111 -105
  56. package/app/components/main/utils/ContentReferences.vue +70 -70
  57. package/app/components/main/utils/ContentSection.vue +45 -45
  58. package/app/components/main/utils/ContentTitle.vue +63 -39
  59. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  60. package/app/components/main/utils/reference/ReferenceItem.vue +68 -68
  61. package/app/components/main/utils/reference/ReferenceSource.vue +116 -116
  62. package/app/components/preview/Preview.vue +186 -177
  63. package/app/components/preview/PreviewDisplay.vue +139 -139
  64. package/app/components/preview/PreviewFooterAction.vue +73 -73
  65. package/app/components/preview/PreviewLoading.vue +14 -14
  66. package/app/components/preview/PreviewScreen.vue +141 -99
  67. package/app/components/preview/display/Alert.vue +50 -50
  68. package/app/components/preview/display/Custom.vue +18 -18
  69. package/app/components/preview/display/GenericLink.vue +48 -48
  70. package/app/components/preview/display/PageLink.vue +20 -20
  71. package/app/components/preview/display/Unique.vue +55 -49
  72. package/app/components/transition/Fade.vue +19 -19
  73. package/app/components/tree/TreeContainer.vue +11 -11
  74. package/app/components/tree/TreeItem.vue +89 -89
  75. package/app/composables/bitran.ts +108 -127
  76. package/app/composables/bitranContent.ts +69 -37
  77. package/app/composables/bitranLocation.ts +7 -7
  78. package/app/composables/contentData.ts +36 -36
  79. package/app/composables/contentPage.ts +157 -156
  80. package/app/composables/contentRoute.ts +45 -45
  81. package/app/composables/darkMagic.ts +24 -24
  82. package/app/composables/externalApi.ts +63 -63
  83. package/app/composables/favicon.ts +8 -8
  84. package/app/composables/formatText.ts +86 -86
  85. package/app/composables/majorPane.ts +60 -60
  86. package/app/composables/phrases.ts +81 -80
  87. package/app/composables/theme.ts +29 -29
  88. package/app/composables/url.ts +33 -33
  89. package/app/pages/_test/preview.vue +110 -110
  90. package/app/pages/article/[...articleId].vue +3 -3
  91. package/app/pages/book/[...bookId].vue +47 -47
  92. package/app/pages/group/[...groupId].vue +64 -65
  93. package/app/pages/index.vue +32 -32
  94. package/app/pages/members.vue +6 -6
  95. package/app/pages/practice/[...practice].vue +3 -3
  96. package/app/pages/summary/[...summaryId].vue +3 -3
  97. package/app/public/favicon/article.svg +5 -5
  98. package/app/public/favicon/default.svg +3 -3
  99. package/app/public/favicon/practice.svg +3 -3
  100. package/app/public/favicon/summary.svg +4 -4
  101. package/app/public/logotype.svg +2 -2
  102. package/app/scripts/_immediate.js +9 -9
  103. package/app/scripts/aside/index.ts +59 -59
  104. package/app/scripts/aside/major/nav.ts +26 -26
  105. package/app/scripts/aside/minor/state.ts +37 -37
  106. package/app/scripts/aside/minor/topic.ts +3 -3
  107. package/app/scripts/flag.ts +28 -28
  108. package/app/scripts/og.ts +27 -27
  109. package/app/scripts/preview/build.ts +73 -73
  110. package/app/scripts/preview/data/alert.ts +19 -19
  111. package/app/scripts/preview/data/custom.ts +8 -8
  112. package/app/scripts/preview/data/genericLink.ts +24 -24
  113. package/app/scripts/preview/data/pageLink.ts +22 -20
  114. package/app/scripts/preview/data/unique.ts +72 -70
  115. package/app/scripts/preview/data.ts +24 -24
  116. package/app/scripts/preview/display.ts +37 -37
  117. package/app/scripts/preview/footer.ts +9 -9
  118. package/app/scripts/preview/request.ts +51 -51
  119. package/app/scripts/preview/state.ts +63 -63
  120. package/app/styles/_immediate.css +7 -7
  121. package/app/styles/_util.scss +43 -43
  122. package/app/styles/_utils.scss +44 -44
  123. package/app/styles/app.scss +91 -91
  124. package/app/styles/def/_bp.scss +27 -27
  125. package/app/styles/def/_size.scss +7 -7
  126. package/app/styles/def/_z.scss +5 -5
  127. package/app/styles/normalize.scss +63 -63
  128. package/app/styles/partials/_darkMagic.scss +5 -5
  129. package/app/styles/partials/_fnav.scss +15 -15
  130. package/app/styles/partials/_preview.scss +5 -5
  131. package/bin/erudit.mjs +2 -0
  132. package/const.ts +4 -0
  133. package/globalPath.ts +21 -21
  134. package/globals/bitran.ts +1 -47
  135. package/globals/content.ts +22 -22
  136. package/globals/contributor.ts +5 -5
  137. package/globals/erudit.ts +5 -5
  138. package/globals/register.ts +18 -18
  139. package/languages/en.ts +94 -95
  140. package/languages/ru.ts +98 -99
  141. package/module/bitran.ts +66 -34
  142. package/module/config.ts +35 -34
  143. package/module/imports.ts +61 -46
  144. package/module/index.ts +47 -47
  145. package/module/logger.ts +10 -10
  146. package/module/paths.ts +22 -22
  147. package/module/restart.ts +61 -61
  148. package/nuxt.config.ts +123 -111
  149. package/package.json +19 -13
  150. package/server/api/aside/major/nav/bookIds.ts +5 -5
  151. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -20
  152. package/server/api/aside/major/nav/global.ts +7 -7
  153. package/server/api/aside/minor/news.ts +7 -7
  154. package/server/api/aside/minor/path.ts +77 -78
  155. package/server/api/bitran/content/{[location].ts → [...location].ts} +8 -7
  156. package/server/api/bitran/toc/{[location].ts → [...location].ts} +7 -7
  157. package/server/api/content/data.ts +72 -72
  158. package/server/api/contributor/count.ts +6 -6
  159. package/server/api/fake/content.ts +11 -11
  160. package/server/api/fake/shared/languages.ts +12 -12
  161. package/server/api/language/functions.ts +12 -12
  162. package/server/api/language/phrase/[phraseId].ts +19 -19
  163. package/server/api/language/phraseIds.ts +8 -8
  164. package/server/api/preview/page/[...parts].ts +52 -51
  165. package/server/api/preview/unique/[location].ts +60 -55
  166. package/server/plugin/bitran/content.ts +214 -187
  167. package/server/plugin/bitran/{products → elements}/include.ts +216 -230
  168. package/server/plugin/bitran/location.ts +25 -25
  169. package/server/plugin/bitran/toc.ts +75 -83
  170. package/server/plugin/bitran/transpiler.ts +9 -46
  171. package/server/plugin/build/close.ts +10 -10
  172. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  173. package/server/plugin/build/jobs/content/files.ts +79 -0
  174. package/server/plugin/build/jobs/content/generic.ts +192 -176
  175. package/server/plugin/build/jobs/content/parse.ts +109 -100
  176. package/server/plugin/build/jobs/content/path.ts +6 -6
  177. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  178. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  179. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  180. package/server/plugin/build/jobs/contributors.ts +66 -66
  181. package/server/plugin/build/jobs/language.ts +36 -36
  182. package/server/plugin/build/jobs/nav.ts +214 -209
  183. package/server/plugin/build/process.ts +25 -25
  184. package/server/plugin/build/rebuild.ts +55 -55
  185. package/server/plugin/build/setup.ts +19 -21
  186. package/server/plugin/content/context.ts +116 -112
  187. package/server/plugin/db/entities/Book.ts +7 -7
  188. package/server/plugin/db/entities/Content.ts +49 -49
  189. package/server/plugin/db/entities/Contribution.ts +10 -10
  190. package/server/plugin/db/entities/Contributor.ts +16 -16
  191. package/server/plugin/db/entities/File.ts +10 -0
  192. package/server/plugin/db/entities/Group.ts +14 -14
  193. package/server/plugin/db/entities/Hash.ts +15 -15
  194. package/server/plugin/db/entities/Topic.ts +20 -20
  195. package/server/plugin/db/entities/Unique.ts +21 -21
  196. package/server/plugin/db/setup.ts +36 -34
  197. package/server/plugin/global.ts +16 -18
  198. package/server/plugin/importer.ts +12 -12
  199. package/server/plugin/index.ts +9 -9
  200. package/server/plugin/logger.ts +23 -23
  201. package/server/plugin/nav/node.ts +26 -26
  202. package/server/plugin/nav/utils.ts +133 -129
  203. package/server/plugin/repository/book.ts +21 -21
  204. package/server/plugin/repository/content.ts +237 -238
  205. package/server/plugin/repository/contributor.ts +8 -8
  206. package/server/plugin/repository/file.ts +10 -0
  207. package/server/plugin/repository/frontNav.ts +148 -148
  208. package/server/plugin/repository/topic.ts +32 -32
  209. package/server/tsconfig.json +9 -7
  210. package/shared/aside/minor.ts +51 -50
  211. package/shared/asset.ts +22 -15
  212. package/shared/bitran/contentId.ts +88 -0
  213. package/shared/bitran/stringContent.ts +6 -0
  214. package/shared/bitran/toc.ts +8 -8
  215. package/shared/content/context.ts +9 -9
  216. package/shared/content/data/base.ts +32 -32
  217. package/shared/content/data/index.ts +5 -5
  218. package/shared/content/data/type/book.ts +5 -5
  219. package/shared/content/data/type/group.ts +6 -6
  220. package/shared/content/data/type/topic.ts +11 -11
  221. package/shared/content/previousNext.ts +9 -9
  222. package/shared/contributor.ts +5 -5
  223. package/shared/frontNav.ts +41 -41
  224. package/shared/icons.ts +38 -38
  225. package/shared/image.ts +5 -5
  226. package/shared/link.ts +28 -25
  227. package/shared/popover.ts +8 -0
  228. package/shared/types/language.ts +74 -75
  229. package/shared/utils/objectsEqual.ts +4 -4
  230. package/shared/utils/stringColor.ts +9 -9
  231. package/test/contentId.test.ts +91 -0
  232. package/tsconfig.json +8 -8
  233. package/utils/stress.ts +9 -9
  234. package/app/components/main/utils/ContentFlag.vue +0 -15
  235. package/app/styles/default.scss +0 -83
  236. package/server/plugin/bitran/products/link.ts +0 -116
  237. package/server/plugin/bitran/setup.ts +0 -9
  238. package/server/plugin/content/absoluteId.ts +0 -94
  239. package/shared/bitran/context.ts +0 -8
  240. package/shared/bitran/default.ts +0 -46
  241. package/shared/bitran/link/Link.vue +0 -167
  242. package/shared/bitran/link/factory.ts +0 -24
  243. package/shared/bitran/link/icon.svg +0 -3
  244. package/shared/bitran/link/languages/en.ts +0 -7
  245. package/shared/bitran/link/languages/ru.ts +0 -7
  246. package/shared/bitran/link/renderer.ts +0 -21
  247. package/shared/bitran/link/shared.ts +0 -17
  248. package/shared/bitran/link/target.ts +0 -134
  249. package/shared/bitran/link/transpiler.ts +0 -10
  250. package/shared/bitran/location.ts +0 -166
  251. package/test/bitran/link/target.test.ts +0 -141
  252. package/test/bitran/location.test.ts +0 -143
@@ -1,63 +1,91 @@
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
+ <script lang="ts" setup>
2
+ import { Bitran, type BitranContent } from '@bitran-js/renderer-vue';
3
+ import {
4
+ setEruditBitranRuntime,
5
+ type BitranContext,
6
+ } from '@erudit-js/cog/schema';
7
+
8
+ import eruditConfig from '#erudit/config';
9
+
10
+ import RenderWrapper from './RenderWrapper.vue';
11
+
12
+ const props = defineProps<{
13
+ content: BitranContent;
14
+ context: BitranContext;
15
+ }>();
16
+
17
+ /* Remove transpiler from Bitran Vue Component at all? It takes RootNode already... */
18
+ const bitranTranspiler = await useBitranTranspiler();
19
+ const bitranRenderers = await useBitranRenderers();
20
+
21
+ [(bitranTranspiler.parser, bitranTranspiler.stringifier)].forEach((item) => {
22
+ setEruditBitranRuntime(item, {
23
+ eruditConfig,
24
+ insideInclude: false,
25
+ context: props.context,
26
+ });
27
+ });
28
+
29
+ const formatText = useFormatText();
30
+
31
+ // onMounted(() => {
32
+ // watch(urlElement, () => {
33
+ // //console.log('Highlighting product:', urlElement.value);
34
+ // }, { immediate: true });
35
+ // });
36
+
37
+ const isDev = import.meta.dev;
38
+ const isServer = import.meta.server;
39
+ </script>
40
+
41
+ <template>
42
+ <Bitran
43
+ :class="$style.eruditBitranContainer"
44
+ :transpiler="bitranTranspiler"
45
+ :renderers="bitranRenderers"
46
+ :content
47
+ :editMode="false"
48
+ :formatText
49
+ :RenderWrapper
50
+ :isDev
51
+ :isServer
52
+ :language="eruditConfig.language"
53
+ />
54
+ </template>
55
+
56
+ <style lang="scss" module>
57
+ @use '$/def/bp';
58
+
59
+ .eruditBitranContainer {
60
+ padding: var(--_pMainY) var(--_pMainX);
61
+ padding-left: calc(var(--_pMainX) - var(--_bitran_asideWidth));
62
+
63
+ // Setting up Bitran
64
+
65
+ --bitran_gap: var(--gap);
66
+ --bitran_gapSmall: var(--gapSmall);
67
+ --bitran_gapBig: var(--gapBig);
68
+ --bitran_gapBlocks: var(--gapBig);
69
+
70
+ --bitran_xPadding: var(--_pMainX);
71
+ --bitran_transitionSpeed: var(--transitionSpeed);
72
+ --bitran_transitionFunction: var(--transitionFunction);
73
+
74
+ --bitran_fontMain: 'Noto Sans', sans-serif;
75
+ --bitran_fontAlt: 'Noto Serif', serif;
76
+
77
+ --bitran_text: var(--text);
78
+ --bitran_textMuted: var(--textMuted);
79
+ --bitran_textDimmed: var(--textDimmed);
80
+ --bitran_textDisabled: var(--textDisabled);
81
+ --bitran_textDeep: var(--textDeep);
82
+
83
+ --bitran_colorBrand: var(--brand);
84
+
85
+ --bitran_colorBorder: var(--border);
86
+
87
+ @include bp.below('mobile') {
88
+ --bitran_gapBlocks: calc(22px);
89
+ }
90
+ }
91
+ </style>
@@ -1,10 +1,10 @@
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
+ <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,45 @@
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"
11
+ :style="{
12
+ ...(!hasAvatar
13
+ ? {
14
+ backgroundImage: `url(${eruditAsset('user.svg')})`,
15
+ backgroundColor: stringColor(props.contributorId),
16
+ backgroundBlendMode: 'hard-light',
17
+ }
18
+ : {}),
19
+ }"
20
+ >
21
+ <img
22
+ v-if="hasAvatar"
23
+ :src="baseUrlPath(contributorAsset(avatar!))"
24
+ loading="lazy"
25
+ />
26
+ </div>
27
+ </template>
28
+
29
+ <style lang="scss" module>
30
+ .contributorAvatar {
31
+ $avatarSize: 40px;
32
+ --_avatarBlendColor: var(--brand);
33
+
34
+ position: relative;
35
+ width: #{$avatarSize};
36
+ height: #{$avatarSize};
37
+ border-radius: 50%;
38
+ overflow: hidden;
39
+ background: var(--border);
40
+
41
+ > img {
42
+ display: block;
43
+ }
44
+ }
45
+ </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,78 @@
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>
1
+ <script lang="ts" setup>
2
+ import { NO_ALIASES, type TopicPart } from '@erudit-js/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
+
19
+ const location = useBitranLocation();
20
+ const topicPart = computed(() => location.value?.type as TopicPart);
21
+
22
+ const topicData = await useContentData<ContentTopicData>();
23
+ await useContentPage(topicData);
24
+
25
+ const phrase = await usePhrases('article', 'summary', 'practice');
26
+
27
+ const content = await useBitranContent(location);
28
+
29
+ onMounted(() => {
30
+ watchEffect(() => {
31
+ // Telling live toc that content is mounted
32
+ topicLocation.value = location.value;
33
+ });
34
+ });
35
+ </script>
36
+
37
+ <template>
38
+ <ContentDecoration
39
+ v-if="topicData.generic.decoration"
40
+ :decoration="topicData.generic.decoration"
41
+ />
42
+
43
+ <Breadcrumb
44
+ v-if="topicData.generic.context?.length > 1"
45
+ :context="topicData.generic.context"
46
+ />
47
+
48
+ <ContentTitle
49
+ :title="
50
+ topicData.generic?.title ||
51
+ topicData.generic.contentId.split('/').pop()!
52
+ "
53
+ :icon="TOPIC_PART_ICON[location!.type as TopicPart]"
54
+ :hint="phrase[location!.type as TopicPart]"
55
+ />
56
+
57
+ <ContentDescription
58
+ v-if="topicData.generic?.description"
59
+ :description="topicData.generic?.description"
60
+ />
61
+
62
+ <ContentPopovers :generic="topicData.generic" />
63
+
64
+ <TopicPartSwitch
65
+ :partLinks="topicData.topicPartLinks"
66
+ :active="topicPart"
67
+ />
68
+
69
+ <div style="clear: both"></div>
70
+
71
+ <BitranContent :content :context="{ location, aliases: NO_ALIASES() }" />
72
+
73
+ <ContentSection v-if="topicData.generic.references">
74
+ <ContentReferences :references="topicData.generic.references" />
75
+ </ContentSection>
76
+
77
+ <AdsBottomBanner v-if="eruditConfig.ads?.bottomBlockId" />
78
+ </template>