erudit 3.0.0-dev.17 → 3.0.0-dev.19

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 (250) hide show
  1. package/app/app.vue +193 -191
  2. package/app/assets/icons/graduation.svg +3 -0
  3. package/app/components/Loading.vue +23 -23
  4. package/app/components/SiteAside.vue +393 -393
  5. package/app/components/SiteMain.vue +32 -32
  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 +97 -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 +31 -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/{Contribute.vue → AsideMinorContribute.vue} +175 -145
  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/content/AsideMinorContent.vue +89 -92
  36. package/app/components/aside/minor/contributor/AsideMinorContributor.vue +78 -0
  37. package/app/components/aside/minor/contributor/BookContribution.vue +64 -0
  38. package/app/components/aside/minor/topic/AsideMinorTopic.vue +29 -32
  39. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  40. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  41. package/app/components/aside/minor/topic/TopicToc.vue +213 -214
  42. package/app/components/aside/minor/topic/TopicTocItem.vue +32 -32
  43. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  44. package/app/components/bitran/BitranContent.vue +90 -91
  45. package/app/components/bitran/RenderWrapper.vue +10 -10
  46. package/app/components/contributor/ContributorAvatar.vue +45 -45
  47. package/app/components/contributor/ContributorListItem.vue +35 -35
  48. package/app/components/main/MainBitranContent.vue +41 -0
  49. package/app/components/main/{utils/Breadcrumb.vue → MainBreadcrumb.vue} +67 -74
  50. package/app/components/main/MainDescription.vue +24 -0
  51. package/app/components/main/{utils/ContentTitle.vue → MainTitle.vue} +72 -63
  52. package/app/components/main/content/ContentBreadcrumb.vue +28 -0
  53. package/app/components/main/{utils → content}/ContentDecoration.vue +29 -29
  54. package/app/components/main/{utils → content}/ContentPopover.vue +188 -188
  55. package/app/components/main/{utils → content}/ContentPopovers.vue +111 -111
  56. package/app/components/main/{utils → content}/ContentReferences.vue +70 -70
  57. package/app/components/main/{utils → content}/ContentSection.vue +45 -45
  58. package/app/components/main/{utils → content}/reference/ReferenceGroup.vue +38 -38
  59. package/app/components/main/{utils → content}/reference/ReferenceItem.vue +70 -70
  60. package/app/components/main/{utils → content}/reference/ReferenceSource.vue +120 -120
  61. package/app/components/main/topic/MainTopic.vue +83 -88
  62. package/app/components/main/topic/TopicPartSwitch.vue +124 -118
  63. package/app/components/preview/Preview.vue +186 -186
  64. package/app/components/preview/PreviewDisplay.vue +139 -139
  65. package/app/components/preview/PreviewFooterAction.vue +73 -73
  66. package/app/components/preview/PreviewLoading.vue +14 -14
  67. package/app/components/preview/PreviewScreen.vue +141 -141
  68. package/app/components/preview/display/Alert.vue +50 -50
  69. package/app/components/preview/display/Custom.vue +18 -18
  70. package/app/components/preview/display/GenericLink.vue +48 -48
  71. package/app/components/preview/display/PageLink.vue +22 -22
  72. package/app/components/preview/display/Unique.vue +46 -55
  73. package/app/components/transition/Fade.vue +19 -19
  74. package/app/components/tree/TreeContainer.vue +11 -11
  75. package/app/components/tree/TreeItem.vue +89 -89
  76. package/app/composables/adsAllowed.ts +11 -0
  77. package/app/composables/bitran.ts +108 -108
  78. package/app/composables/bitranLocation.ts +7 -7
  79. package/app/composables/contentData.ts +38 -38
  80. package/app/composables/contentPage.ts +168 -158
  81. package/app/composables/contentRoute.ts +45 -45
  82. package/app/composables/darkMagic.ts +24 -24
  83. package/app/composables/externalApi.ts +69 -69
  84. package/app/composables/favicon.ts +8 -8
  85. package/app/composables/formatText.ts +99 -99
  86. package/app/composables/majorPane.ts +61 -60
  87. package/app/composables/phrases.ts +77 -65
  88. package/app/composables/theme.ts +29 -29
  89. package/app/composables/url.ts +33 -33
  90. package/app/pages/_test/preview.vue +110 -110
  91. package/app/pages/article/[...articleId].vue +3 -3
  92. package/app/pages/book/[...bookId].vue +42 -47
  93. package/app/pages/contributor/[contributorId].vue +225 -0
  94. package/app/pages/contributors.vue +183 -0
  95. package/app/pages/group/[...groupId].vue +58 -66
  96. package/app/pages/index.vue +32 -32
  97. package/app/pages/practice/[...practice].vue +3 -3
  98. package/app/pages/summary/[...summaryId].vue +3 -3
  99. package/app/plugins/analytics.ts +8 -0
  100. package/app/plugins/prerender.server.ts +22 -22
  101. package/app/scripts/_immediate.js +9 -9
  102. package/app/scripts/aside/index.ts +59 -59
  103. package/app/scripts/aside/major/nav.ts +26 -26
  104. package/app/scripts/aside/minor/state.ts +37 -37
  105. package/app/scripts/aside/minor/topic.ts +3 -3
  106. package/app/scripts/flag.ts +28 -28
  107. package/app/scripts/og.ts +27 -27
  108. package/app/scripts/preview/build.ts +76 -76
  109. package/app/scripts/preview/data/alert.ts +19 -19
  110. package/app/scripts/preview/data/custom.ts +8 -8
  111. package/app/scripts/preview/data/genericLink.ts +24 -24
  112. package/app/scripts/preview/data/pageLink.ts +23 -23
  113. package/app/scripts/preview/data/unique.ts +69 -72
  114. package/app/scripts/preview/data.ts +24 -24
  115. package/app/scripts/preview/display.ts +37 -37
  116. package/app/scripts/preview/footer.ts +9 -9
  117. package/app/scripts/preview/request.ts +51 -51
  118. package/app/scripts/preview/state.ts +63 -63
  119. package/app/styles/_immediate.css +7 -7
  120. package/app/styles/_util.scss +43 -43
  121. package/app/styles/_utils.scss +44 -44
  122. package/app/styles/app.scss +91 -91
  123. package/app/styles/def/_bp.scss +27 -27
  124. package/app/styles/def/_size.scss +7 -7
  125. package/app/styles/def/_z.scss +5 -5
  126. package/app/styles/normalize.scss +49 -49
  127. package/app/styles/partials/_darkMagic.scss +5 -5
  128. package/app/styles/partials/_fnav.scss +15 -15
  129. package/app/styles/partials/_preview.scss +5 -5
  130. package/bin/erudit.mjs +2 -2
  131. package/const.ts +4 -4
  132. package/globalPath.ts +21 -21
  133. package/globals/bitran.ts +1 -1
  134. package/globals/content.ts +27 -27
  135. package/globals/contributor.ts +5 -5
  136. package/globals/erudit.ts +5 -5
  137. package/globals/register.ts +18 -18
  138. package/languages/en.ts +103 -94
  139. package/languages/ru.ts +107 -98
  140. package/module/bitran.ts +66 -66
  141. package/module/config.ts +35 -35
  142. package/module/imports.ts +67 -67
  143. package/module/index.ts +47 -47
  144. package/module/logger.ts +10 -10
  145. package/module/paths.ts +22 -22
  146. package/module/restart.ts +61 -61
  147. package/nuxt.config.ts +131 -131
  148. package/package.json +5 -5
  149. package/server/api/aside/major/nav/bookIds.ts +5 -5
  150. package/server/api/aside/major/nav/bookNav/[...bookId].ts +17 -20
  151. package/server/api/aside/major/nav/global.ts +7 -7
  152. package/server/api/aside/minor/book/[...bookId].ts +18 -0
  153. package/server/api/aside/minor/contributor/[contributorId].ts +18 -0
  154. package/server/api/aside/minor/group/[...groupId].ts +18 -0
  155. package/server/api/aside/minor/news.ts +7 -7
  156. package/server/api/aside/minor/topic.ts +36 -0
  157. package/server/api/bitran/content/[...location].ts +13 -10
  158. package/server/api/bitran/toc/[...location].ts +9 -9
  159. package/server/api/content/data.ts +75 -75
  160. package/server/api/contributor/count.ts +6 -6
  161. package/server/api/contributor/list.ts +44 -0
  162. package/server/api/contributor/page/[contributorId].ts +14 -0
  163. package/server/api/fake/content.ts +11 -11
  164. package/server/api/fake/shared/languages.ts +12 -12
  165. package/server/api/language/functions.ts +12 -12
  166. package/server/api/language/phrase/[phraseId].ts +19 -19
  167. package/server/api/language/phraseIds.ts +8 -8
  168. package/server/api/prerender.ts +19 -120
  169. package/server/api/preview/page/[...parts].ts +78 -78
  170. package/server/api/preview/unique/[...location].ts +48 -61
  171. package/server/plugin/bitran/content.ts +252 -190
  172. package/server/plugin/bitran/elements/include.ts +229 -229
  173. package/server/plugin/bitran/location.ts +43 -39
  174. package/server/plugin/bitran/toc.ts +94 -94
  175. package/server/plugin/bitran/transpiler.ts +18 -18
  176. package/server/plugin/build/close.ts +12 -12
  177. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  178. package/server/plugin/build/jobs/content/generic.ts +191 -191
  179. package/server/plugin/build/jobs/content/parse.ts +113 -113
  180. package/server/plugin/build/jobs/content/path.ts +6 -6
  181. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  182. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  183. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  184. package/server/plugin/build/jobs/contributors.ts +69 -66
  185. package/server/plugin/build/jobs/language.ts +36 -36
  186. package/server/plugin/build/jobs/nav.ts +345 -345
  187. package/server/plugin/build/process.ts +32 -32
  188. package/server/plugin/build/rebuild.ts +66 -66
  189. package/server/plugin/build/setup.ts +19 -19
  190. package/server/plugin/content/context.ts +119 -119
  191. package/server/plugin/db/entities/Book.ts +7 -7
  192. package/server/plugin/db/entities/Content.ts +45 -45
  193. package/server/plugin/db/entities/Contribution.ts +10 -10
  194. package/server/plugin/db/entities/Contributor.ts +25 -16
  195. package/server/plugin/db/entities/File.ts +10 -10
  196. package/server/plugin/db/entities/Group.ts +14 -14
  197. package/server/plugin/db/entities/Hash.ts +15 -15
  198. package/server/plugin/db/entities/Topic.ts +20 -20
  199. package/server/plugin/db/entities/Unique.ts +21 -21
  200. package/server/plugin/db/reset.ts +12 -12
  201. package/server/plugin/db/setup.ts +49 -49
  202. package/server/plugin/global.ts +16 -16
  203. package/server/plugin/importer.ts +16 -16
  204. package/server/plugin/index.ts +9 -9
  205. package/server/plugin/logger.ts +23 -23
  206. package/server/plugin/nav/node.ts +27 -27
  207. package/server/plugin/nav/utils.ts +179 -175
  208. package/server/plugin/repository/asideMinor.ts +51 -0
  209. package/server/plugin/repository/book.ts +39 -21
  210. package/server/plugin/repository/content.ts +240 -240
  211. package/server/plugin/repository/contentId.ts +40 -40
  212. package/server/plugin/repository/contributor.ts +98 -8
  213. package/server/plugin/repository/file.ts +10 -10
  214. package/server/plugin/repository/frontNav.ts +145 -145
  215. package/server/plugin/repository/topic.ts +35 -35
  216. package/server/tsconfig.json +9 -9
  217. package/shared/aside/minor.ts +55 -51
  218. package/shared/asset.ts +22 -22
  219. package/shared/bitran/content.ts +9 -0
  220. package/shared/bitran/contentId.ts +56 -56
  221. package/shared/bitran/toc.ts +8 -8
  222. package/shared/breadcrumb.ts +7 -0
  223. package/shared/content/bookId.ts +12 -12
  224. package/shared/content/context.ts +9 -9
  225. package/shared/content/data/base.ts +32 -32
  226. package/shared/content/data/index.ts +5 -5
  227. package/shared/content/data/type/book.ts +5 -5
  228. package/shared/content/data/type/group.ts +6 -6
  229. package/shared/content/data/type/topic.ts +11 -11
  230. package/shared/content/previousNext.ts +9 -9
  231. package/shared/contributor.ts +33 -5
  232. package/shared/frontNav.ts +41 -41
  233. package/shared/icons.ts +38 -38
  234. package/shared/image.ts +5 -5
  235. package/shared/link.ts +28 -28
  236. package/shared/popover.ts +8 -8
  237. package/shared/types/language.ts +79 -74
  238. package/shared/utils/objectsEqual.ts +4 -4
  239. package/shared/utils/stringColor.ts +9 -9
  240. package/test/contentId.test.ts +91 -91
  241. package/tsconfig.json +8 -8
  242. package/utils/contentPath.ts +67 -67
  243. package/utils/slash.ts +11 -11
  244. package/utils/stress.ts +9 -9
  245. package/app/components/aside/minor/AsideMinorContributor.vue +0 -5
  246. package/app/components/main/utils/ContentDescription.vue +0 -19
  247. package/app/composables/bitranContent.ts +0 -92
  248. package/app/pages/members.vue +0 -6
  249. package/server/api/aside/minor/path.ts +0 -82
  250. package/shared/bitran/stringContent.ts +0 -6
@@ -1,32 +1,32 @@
1
- <script lang="ts" setup>
2
- import type { FrontNavBook } from '@shared/frontNav';
3
- import {
4
- insideNavBook,
5
- navBookId,
6
- navStateKey,
7
- } from '@app/scripts/aside/major/nav';
8
-
9
- import FNavFlags from './FNavFlags.vue';
10
-
11
- const props = defineProps<{ navItem: FrontNavBook }>();
12
- const navState = inject(navStateKey);
13
- const active = computed(() => !!navState!.value[props.navItem.id]!.value);
14
-
15
- function bookClick() {
16
- navBookId.value = props.navItem.id;
17
- insideNavBook.value = true;
18
- }
19
- </script>
20
-
21
- <template>
22
- <TreeItem
23
- icon="outline/book"
24
- :label="navItem.label"
25
- :level="navItem.level"
26
- :link="active ? undefined : `/book/${navItem.id}`"
27
- @click="bookClick"
28
- :active
29
- >
30
- <FNavFlags v-if="navItem.flags" :flags="navItem.flags" />
31
- </TreeItem>
32
- </template>
1
+ <script lang="ts" setup>
2
+ import type { FrontNavBook } from '@shared/frontNav';
3
+ import {
4
+ insideNavBook,
5
+ navBookId,
6
+ navStateKey,
7
+ } from '@app/scripts/aside/major/nav';
8
+
9
+ import FNavFlags from './FNavFlags.vue';
10
+
11
+ const props = defineProps<{ navItem: FrontNavBook }>();
12
+ const navState = inject(navStateKey);
13
+ const active = computed(() => !!navState!.value[props.navItem.id]!.value);
14
+
15
+ function bookClick() {
16
+ navBookId.value = props.navItem.id;
17
+ insideNavBook.value = true;
18
+ }
19
+ </script>
20
+
21
+ <template>
22
+ <TreeItem
23
+ icon="outline/book"
24
+ :label="navItem.label"
25
+ :level="navItem.level"
26
+ :link="active ? undefined : `/book/${navItem.id}`"
27
+ @click="bookClick"
28
+ :active
29
+ >
30
+ <FNavFlags v-if="navItem.flags" :flags="navItem.flags" />
31
+ </TreeItem>
32
+ </template>
@@ -1,40 +1,40 @@
1
- <script lang="ts" setup>
2
- import type { ContentFlag } from '@erudit-js/cog/schema';
3
- import { flagsData } from '@app/scripts/flag';
4
-
5
- defineProps<{ flags: Partial<Record<ContentFlag, boolean>> }>();
6
-
7
- const phrases = Object.values(flagsData).map((data) => data.title);
8
- const phrase = await usePhrases(...phrases);
9
- </script>
10
-
11
- <template>
12
- <div :class="$style.flags">
13
- <MyIcon
14
- v-for="(value, flag) in flags"
15
- :name="flagsData[flag].icon"
16
- :title="phrase[flagsData[flag].title]"
17
- :class="$style.flag"
18
- />
19
- </div>
20
- </template>
21
-
22
- <style lang="scss" module>
23
- .flags {
24
- display: flex;
25
- align-items: center;
26
- gap: var(--gapSmall);
27
- }
28
-
29
- .flag {
30
- cursor: help;
31
- font-size: 16px;
32
- color: var(--textDimmed);
33
- opacity: 0.65;
34
- @include transition(opacity);
35
-
36
- &:hover {
37
- opacity: 1;
38
- }
39
- }
40
- </style>
1
+ <script lang="ts" setup>
2
+ import type { ContentFlag } from '@erudit-js/cog/schema';
3
+ import { flagsData } from '@app/scripts/flag';
4
+
5
+ defineProps<{ flags: Partial<Record<ContentFlag, boolean>> }>();
6
+
7
+ const phrases = Object.values(flagsData).map((data) => data.title);
8
+ const phrase = await usePhrases(...phrases);
9
+ </script>
10
+
11
+ <template>
12
+ <div :class="$style.flags">
13
+ <MyIcon
14
+ v-for="(value, flag) in flags"
15
+ :name="flagsData[flag].icon"
16
+ :title="phrase[flagsData[flag].title]"
17
+ :class="$style.flag"
18
+ />
19
+ </div>
20
+ </template>
21
+
22
+ <style lang="scss" module>
23
+ .flags {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: var(--gapSmall);
27
+ }
28
+
29
+ .flag {
30
+ cursor: help;
31
+ font-size: 16px;
32
+ color: var(--textDimmed);
33
+ opacity: 0.65;
34
+ @include transition(opacity);
35
+
36
+ &:hover {
37
+ opacity: 1;
38
+ }
39
+ }
40
+ </style>
@@ -1,60 +1,60 @@
1
- <script lang="ts" setup>
2
- import type { FrontNavFolder } from '@shared/frontNav';
3
- import { navStateKey } from '@app/scripts/aside/major/nav';
4
-
5
- import FNavItem from './FNavItem.vue';
6
- import FNavFlags from './FNavFlags.vue';
7
-
8
- const props = defineProps<{ navItem: FrontNavFolder }>();
9
- const navState = inject(navStateKey);
10
-
11
- const active = ref(false);
12
- const accent = ref(false);
13
-
14
- function onStateUpdate() {
15
- const newState = navState!.value[props.navItem.id]!.value;
16
- active.value = newState === 'active';
17
- accent.value = newState === 'activePart';
18
- }
19
-
20
- onStateUpdate();
21
- watch(navState!.value[props.navItem.id]!, onStateUpdate);
22
-
23
- const visible = computed(() => active.value || accent.value);
24
- </script>
25
-
26
- <template>
27
- <div>
28
- <TreeItem
29
- :icon="`folder${visible ? '-open' : ''}`"
30
- :link="`/group/${navItem.id}`"
31
- :label="navItem.label"
32
- :active
33
- :accent
34
- :level="navItem.level"
35
- >
36
- <FNavFlags v-if="navItem.flags" :flags="navItem.flags" />
37
- </TreeItem>
38
-
39
- <div :class="[$style.groupBody, visible && $style.visible]">
40
- <FNavItem
41
- v-for="childItem of navItem.children"
42
- :navItem="childItem"
43
- />
44
- </div>
45
- </div>
46
- </template>
47
-
48
- <style lang="scss" module>
49
- @use '$/partials/fnav';
50
-
51
- .groupBody {
52
- overflow: hidden;
53
- height: 0;
54
- @include transition(height);
55
-
56
- &.visible {
57
- height: auto;
58
- }
59
- }
60
- </style>
1
+ <script lang="ts" setup>
2
+ import type { FrontNavFolder } from '@shared/frontNav';
3
+ import { navStateKey } from '@app/scripts/aside/major/nav';
4
+
5
+ import FNavItem from './FNavItem.vue';
6
+ import FNavFlags from './FNavFlags.vue';
7
+
8
+ const props = defineProps<{ navItem: FrontNavFolder }>();
9
+ const navState = inject(navStateKey);
10
+
11
+ const active = ref(false);
12
+ const accent = ref(false);
13
+
14
+ function onStateUpdate() {
15
+ const newState = navState!.value[props.navItem.id]!.value;
16
+ active.value = newState === 'active';
17
+ accent.value = newState === 'activePart';
18
+ }
19
+
20
+ onStateUpdate();
21
+ watch(navState!.value[props.navItem.id]!, onStateUpdate);
22
+
23
+ const visible = computed(() => active.value || accent.value);
24
+ </script>
25
+
26
+ <template>
27
+ <div>
28
+ <TreeItem
29
+ :icon="`folder${visible ? '-open' : ''}`"
30
+ :link="`/group/${navItem.id}`"
31
+ :label="navItem.label"
32
+ :active
33
+ :accent
34
+ :level="navItem.level"
35
+ >
36
+ <FNavFlags v-if="navItem.flags" :flags="navItem.flags" />
37
+ </TreeItem>
38
+
39
+ <div :class="[$style.groupBody, visible && $style.visible]">
40
+ <FNavItem
41
+ v-for="childItem of navItem.children"
42
+ :navItem="childItem"
43
+ />
44
+ </div>
45
+ </div>
46
+ </template>
47
+
48
+ <style lang="scss" module>
49
+ @use '$/partials/fnav';
50
+
51
+ .groupBody {
52
+ overflow: hidden;
53
+ height: 0;
54
+ @include transition(height);
55
+
56
+ &.visible {
57
+ height: auto;
58
+ }
59
+ }
60
+ </style>
@@ -1,34 +1,34 @@
1
- <script lang="ts" setup>
2
- import type { FrontNavItem, FrontNavType } from '@shared/frontNav';
3
-
4
- import FNavBook from './FNavBook.vue';
5
- import FNavSeparator from './FNavSeparator.vue';
6
- import FNavFolder from './FNavFolder.vue';
7
- import FNavTopic from './FNavTopic.vue';
8
-
9
- defineProps<{ navItem: FrontNavItem }>();
10
-
11
- const navComponent: Record<FrontNavType, Component> = {
12
- book: FNavBook,
13
- separator: FNavSeparator,
14
- folder: FNavFolder,
15
- topic: FNavTopic,
16
- };
17
- </script>
18
-
19
- <template>
20
- <component
21
- :is="navComponent[navItem.type]"
22
- :navItem
23
- :class="[
24
- $style.frontNavItem,
25
- $style[
26
- `frontNav${navItem.type[0]!.toUpperCase() + navItem.type.substring(1)}`
27
- ],
28
- ]"
29
- />
30
- </template>
31
-
32
- <style lang="scss" module>
33
- @use '$/partials/fnav';
34
- </style>
1
+ <script lang="ts" setup>
2
+ import type { FrontNavItem, FrontNavType } from '@shared/frontNav';
3
+
4
+ import FNavBook from './FNavBook.vue';
5
+ import FNavSeparator from './FNavSeparator.vue';
6
+ import FNavFolder from './FNavFolder.vue';
7
+ import FNavTopic from './FNavTopic.vue';
8
+
9
+ defineProps<{ navItem: FrontNavItem }>();
10
+
11
+ const navComponent: Record<FrontNavType, Component> = {
12
+ book: FNavBook,
13
+ separator: FNavSeparator,
14
+ folder: FNavFolder,
15
+ topic: FNavTopic,
16
+ };
17
+ </script>
18
+
19
+ <template>
20
+ <component
21
+ :is="navComponent[navItem.type]"
22
+ :navItem
23
+ :class="[
24
+ $style.frontNavItem,
25
+ $style[
26
+ `frontNav${navItem.type[0]!.toUpperCase() + navItem.type.substring(1)}`
27
+ ],
28
+ ]"
29
+ />
30
+ </template>
31
+
32
+ <style lang="scss" module>
33
+ @use '$/partials/fnav';
34
+ </style>
@@ -1,80 +1,80 @@
1
- <script lang="ts" setup>
2
- import { navStateKey } from '@app/scripts/aside/major/nav';
3
- import type { FrontNavSeparator } from '@shared/frontNav';
4
-
5
- import FNavItem from './FNavItem.vue';
6
- import FNavFlags from './FNavFlags.vue';
7
-
8
- const props = defineProps<{ navItem: FrontNavSeparator }>();
9
- const navState = inject(navStateKey);
10
-
11
- const active = ref(false);
12
- const accent = ref(false);
13
-
14
- function onStateUpdate() {
15
- const newState = navState!.value[props.navItem.id]!.value;
16
- active.value = newState === 'active';
17
- accent.value = newState === 'activePart';
18
- }
19
-
20
- onStateUpdate();
21
- watch(navState!.value[props.navItem.id]!, onStateUpdate);
22
- </script>
23
-
24
- <template>
25
- <div>
26
- <NuxtLink
27
- :to="`/group/${navItem.id}`"
28
- :class="[
29
- $style.header,
30
- active && $style.active,
31
- accent && $style.accent,
32
- ]"
33
- :prefetch="false"
34
- >
35
- <div :class="$style.label">{{ navItem.label }}</div>
36
- <FNavFlags
37
- :class="$style.flags"
38
- v-if="navItem.flags"
39
- :flags="navItem.flags"
40
- />
41
- </NuxtLink>
42
- <FNavItem v-for="childItem of navItem.children" :navItem="childItem" />
43
- </div>
44
- </template>
45
-
46
- <style lang="scss" module>
47
- .header {
48
- display: flex;
49
- gap: var(--gap);
50
- padding: calc(var(--gap) / 2) var(--gap);
51
- text-decoration: none;
52
- @include transition(background);
53
-
54
- .label {
55
- flex: 1;
56
- font-weight: 600;
57
- font-size: 0.95em;
58
- color: var(--textDimmed);
59
- @include transition(color);
60
- }
61
-
62
- .flags {
63
- flex-shrink: 0;
64
- }
65
-
66
- &:hover {
67
- background: var(--bgAccent);
68
- }
69
- &:hover:not(.active) .label {
70
- color: var(--text);
71
- }
72
-
73
- &.active .label {
74
- color: var(--brand);
75
- }
76
- &.accent .label {
77
- color: var(--textMuted);
78
- }
79
- }
80
- </style>
1
+ <script lang="ts" setup>
2
+ import { navStateKey } from '@app/scripts/aside/major/nav';
3
+ import type { FrontNavSeparator } from '@shared/frontNav';
4
+
5
+ import FNavItem from './FNavItem.vue';
6
+ import FNavFlags from './FNavFlags.vue';
7
+
8
+ const props = defineProps<{ navItem: FrontNavSeparator }>();
9
+ const navState = inject(navStateKey);
10
+
11
+ const active = ref(false);
12
+ const accent = ref(false);
13
+
14
+ function onStateUpdate() {
15
+ const newState = navState!.value[props.navItem.id]!.value;
16
+ active.value = newState === 'active';
17
+ accent.value = newState === 'activePart';
18
+ }
19
+
20
+ onStateUpdate();
21
+ watch(navState!.value[props.navItem.id]!, onStateUpdate);
22
+ </script>
23
+
24
+ <template>
25
+ <div>
26
+ <NuxtLink
27
+ :to="`/group/${navItem.id}`"
28
+ :class="[
29
+ $style.header,
30
+ active && $style.active,
31
+ accent && $style.accent,
32
+ ]"
33
+ :prefetch="false"
34
+ >
35
+ <div :class="$style.label">{{ navItem.label }}</div>
36
+ <FNavFlags
37
+ :class="$style.flags"
38
+ v-if="navItem.flags"
39
+ :flags="navItem.flags"
40
+ />
41
+ </NuxtLink>
42
+ <FNavItem v-for="childItem of navItem.children" :navItem="childItem" />
43
+ </div>
44
+ </template>
45
+
46
+ <style lang="scss" module>
47
+ .header {
48
+ display: flex;
49
+ gap: var(--gap);
50
+ padding: calc(var(--gap) / 2) var(--gap);
51
+ text-decoration: none;
52
+ @include transition(background);
53
+
54
+ .label {
55
+ flex: 1;
56
+ font-weight: 600;
57
+ font-size: 0.95em;
58
+ color: var(--textDimmed);
59
+ @include transition(color);
60
+ }
61
+
62
+ .flags {
63
+ flex-shrink: 0;
64
+ }
65
+
66
+ &:hover {
67
+ background: var(--bgAccent);
68
+ }
69
+ &:hover:not(.active) .label {
70
+ color: var(--text);
71
+ }
72
+
73
+ &.active .label {
74
+ color: var(--brand);
75
+ }
76
+ &.accent .label {
77
+ color: var(--textMuted);
78
+ }
79
+ }
80
+ </style>
@@ -1,24 +1,24 @@
1
- <script lang="ts" setup>
2
- import { navStateKey } from '@app/scripts/aside/major/nav';
3
- import type { FrontNavTopic } from '@shared/frontNav';
4
-
5
- import FNavFlags from './FNavFlags.vue';
6
-
7
- const props = defineProps<{ navItem: FrontNavTopic }>();
8
- const navState = inject(navStateKey);
9
- const active = computed(
10
- () => navState!.value[props.navItem.id]!.value === 'active',
11
- );
12
- </script>
13
-
14
- <template>
15
- <TreeItem
16
- icon="outline/file-lines"
17
- :active
18
- :label="navItem.label"
19
- :level="navItem.level"
20
- :link="`/${navItem.part}/${navItem.id}`"
21
- >
22
- <FNavFlags v-if="navItem.flags" :flags="navItem.flags" />
23
- </TreeItem>
24
- </template>
1
+ <script lang="ts" setup>
2
+ import { navStateKey } from '@app/scripts/aside/major/nav';
3
+ import type { FrontNavTopic } from '@shared/frontNav';
4
+
5
+ import FNavFlags from './FNavFlags.vue';
6
+
7
+ const props = defineProps<{ navItem: FrontNavTopic }>();
8
+ const navState = inject(navStateKey);
9
+ const active = computed(
10
+ () => navState!.value[props.navItem.id]!.value === 'active',
11
+ );
12
+ </script>
13
+
14
+ <template>
15
+ <TreeItem
16
+ icon="outline/file-lines"
17
+ :active
18
+ :label="navItem.label"
19
+ :level="navItem.level"
20
+ :link="`/${navItem.part}/${navItem.id}`"
21
+ >
22
+ <FNavFlags v-if="navItem.flags" :flags="navItem.flags" />
23
+ </TreeItem>
24
+ </template>
@@ -1,29 +1,29 @@
1
- <script lang="ts" setup>
2
- import eruditConfig from '#erudit/config';
3
-
4
- const phrase = await usePhrases('_language_code', 'content');
5
-
6
- const secondary = ref<string>();
7
-
8
- const githubResponse = await useExternalApiRepository();
9
- const strDate = githubResponse.commit?.commit?.author?.date;
10
-
11
- if (strDate) {
12
- secondary.value = new Date(strDate).toLocaleString(phrase._language_code, {
13
- day: 'numeric',
14
- month: 'short',
15
- year: 'numeric',
16
- });
17
- } else console.warn(`Bad content last commit date repsonse: ${strDate}`);
18
- </script>
19
-
20
- <template>
21
- <AsideListItem
22
- v-if="secondary"
23
- :link="`https://github.com/${eruditConfig.repository?.name}`"
24
- target="_blank"
25
- icon="draw"
26
- :main="phrase.content"
27
- :secondary
28
- />
29
- </template>
1
+ <script lang="ts" setup>
2
+ import eruditConfig from '#erudit/config';
3
+
4
+ const phrase = await usePhrases('_language_code', 'content');
5
+
6
+ const secondary = ref<string>();
7
+
8
+ const githubResponse = await useExternalApiRepository();
9
+ const strDate = githubResponse.commit?.commit?.author?.date;
10
+
11
+ if (strDate) {
12
+ secondary.value = new Date(strDate).toLocaleString(phrase._language_code, {
13
+ day: 'numeric',
14
+ month: 'short',
15
+ year: 'numeric',
16
+ });
17
+ } else console.warn(`Bad content last commit date repsonse: ${strDate}`);
18
+ </script>
19
+
20
+ <template>
21
+ <AsideListItem
22
+ v-if="secondary"
23
+ :link="`https://github.com/${eruditConfig.repository?.name}`"
24
+ target="_blank"
25
+ icon="draw"
26
+ :main="phrase.content"
27
+ :secondary
28
+ />
29
+ </template>
@@ -1,13 +1,13 @@
1
- <script lang="ts" setup>
2
- import { version } from '@erudit/package.json';
3
- </script>
4
-
5
- <template>
6
- <AsideListItem
7
- link="https://github.com/erudit-js/erudit"
8
- target="_blank"
9
- icon="chip"
10
- main="Erudit"
11
- :secondary="version"
12
- />
13
- </template>
1
+ <script lang="ts" setup>
2
+ import { version } from '@erudit/package.json';
3
+ </script>
4
+
5
+ <template>
6
+ <AsideListItem
7
+ link="https://github.com/erudit-js/erudit"
8
+ target="_blank"
9
+ icon="chip"
10
+ main="Erudit"
11
+ :secondary="version"
12
+ />
13
+ </template>