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
@@ -1,91 +1,91 @@
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
- :global(.bitran-component).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
+ <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
+ :global(.bitran-component).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,45 +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"
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
+ <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,88 +1,88 @@
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
- <ContentSection v-if="eruditConfig.ads?.bottom">
78
- <AdsBannerBottom />
79
- </ContentSection>
80
- </template>
81
-
82
- <style lang="scss" module>
83
- .foo {
84
- position: relative;
85
- width: 100%;
86
- height: 300px;
87
- }
88
- </style>
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
+ <ContentSection v-if="adsAllowed() && eruditConfig.ads?.bottom">
78
+ <AdsBannerBottom />
79
+ </ContentSection>
80
+ </template>
81
+
82
+ <style lang="scss" module>
83
+ .foo {
84
+ position: relative;
85
+ width: 100%;
86
+ height: 300px;
87
+ }
88
+ </style>