erudit 2.0.0-dev.9 → 3.0.0-dev.1

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 (237) hide show
  1. package/app/app.vue +172 -172
  2. package/app/components/Loading.vue +23 -23
  3. package/app/components/SiteAside.vue +382 -382
  4. package/app/components/SiteMain.vue +35 -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 -3
  18. package/app/components/aside/major/panes/nav/Nav.vue +91 -91
  19. package/app/components/aside/major/panes/nav/NavBook.vue +86 -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 +15 -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 -16
  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 +203 -203
  43. package/app/components/aside/minor/topic/TopicTocItem.vue +31 -31
  44. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  45. package/app/components/bitran/BitranContent.vue +63 -63
  46. package/app/components/bitran/RenderWrapper.vue +10 -10
  47. package/app/components/contributor/ContributorAvatar.vue +43 -43
  48. package/app/components/contributor/ContributorListItem.vue +35 -35
  49. package/app/components/main/topic/MainTopic.vue +79 -79
  50. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  51. package/app/components/main/utils/Breadcrumb.vue +75 -75
  52. package/app/components/main/utils/ContentDecoration.vue +29 -29
  53. package/app/components/main/utils/ContentDescription.vue +19 -20
  54. package/app/components/main/utils/ContentFlag.vue +15 -16
  55. package/app/components/main/utils/ContentPopover.vue +176 -176
  56. package/app/components/main/utils/ContentPopovers.vue +105 -105
  57. package/app/components/main/utils/ContentReferences.vue +70 -76
  58. package/app/components/main/utils/ContentSection.vue +45 -42
  59. package/app/components/main/utils/ContentTitle.vue +39 -37
  60. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -41
  61. package/app/components/main/utils/reference/ReferenceItem.vue +68 -64
  62. package/app/components/main/utils/reference/ReferenceSource.vue +116 -110
  63. package/app/components/preview/Preview.vue +177 -177
  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 -15
  67. package/app/components/preview/PreviewScreen.vue +99 -99
  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 +20 -20
  72. package/app/components/preview/display/Unique.vue +49 -49
  73. package/app/components/transition/Fade.vue +19 -22
  74. package/app/components/tree/TreeContainer.vue +11 -12
  75. package/app/components/tree/TreeItem.vue +89 -89
  76. package/app/composables/bitran.ts +127 -127
  77. package/app/composables/bitranContent.ts +37 -37
  78. package/app/composables/bitranLocation.ts +7 -7
  79. package/app/composables/contentData.ts +36 -36
  80. package/app/composables/contentPage.ts +156 -156
  81. package/app/composables/contentRoute.ts +45 -45
  82. package/app/composables/darkMagic.ts +24 -24
  83. package/app/composables/externalApi.ts +63 -63
  84. package/app/composables/favicon.ts +8 -8
  85. package/app/composables/formatText.ts +86 -86
  86. package/app/composables/majorPane.ts +60 -60
  87. package/app/composables/phrases.ts +80 -80
  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 +47 -47
  93. package/app/pages/group/[...groupId].vue +65 -65
  94. package/app/pages/index.vue +32 -32
  95. package/app/pages/members.vue +6 -7
  96. package/app/pages/practice/[...practice].vue +3 -3
  97. package/app/pages/summary/[...summaryId].vue +3 -3
  98. package/app/scripts/_immediate.js +9 -4
  99. package/app/scripts/aside/index.ts +59 -59
  100. package/app/scripts/aside/major/nav.ts +26 -26
  101. package/app/scripts/aside/minor/state.ts +37 -37
  102. package/app/scripts/aside/minor/topic.ts +3 -3
  103. package/app/scripts/flag.ts +28 -28
  104. package/app/scripts/og.ts +27 -27
  105. package/app/scripts/preview/build.ts +73 -84
  106. package/app/scripts/preview/data/alert.ts +19 -19
  107. package/app/scripts/preview/data/custom.ts +8 -8
  108. package/app/scripts/preview/data/genericLink.ts +24 -24
  109. package/app/scripts/preview/data/pageLink.ts +20 -20
  110. package/app/scripts/preview/data/unique.ts +70 -70
  111. package/app/scripts/preview/data.ts +24 -26
  112. package/app/scripts/preview/display.ts +37 -37
  113. package/app/scripts/preview/footer.ts +9 -9
  114. package/app/scripts/preview/request.ts +51 -51
  115. package/app/scripts/preview/state.ts +63 -63
  116. package/app/styles/_immediate.css +7 -3
  117. package/app/styles/_util.scss +43 -50
  118. package/app/styles/_utils.scss +44 -44
  119. package/app/styles/app.scss +91 -91
  120. package/app/styles/def/_bp.scss +27 -24
  121. package/app/styles/def/_size.scss +7 -7
  122. package/app/styles/def/_z.scss +5 -5
  123. package/app/styles/default.scss +83 -85
  124. package/app/styles/normalize.scss +63 -63
  125. package/app/styles/partials/_darkMagic.scss +5 -7
  126. package/app/styles/partials/_fnav.scss +15 -18
  127. package/app/styles/partials/_preview.scss +5 -7
  128. package/globalPath.ts +21 -21
  129. package/globals/bitran.ts +47 -47
  130. package/globals/content.ts +22 -22
  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 +95 -95
  135. package/languages/ru.ts +99 -99
  136. package/module/bitran.ts +34 -34
  137. package/module/config.ts +34 -34
  138. package/module/imports.ts +46 -46
  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 +111 -107
  144. package/package.json +3 -3
  145. package/server/api/aside/major/nav/bookIds.ts +5 -5
  146. package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -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 +78 -78
  150. package/server/api/bitran/content/[location].ts +7 -7
  151. package/server/api/bitran/toc/[location].ts +7 -7
  152. package/server/api/content/data.ts +72 -72
  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/preview/page/[...parts].ts +51 -51
  160. package/server/api/preview/unique/[location].ts +55 -55
  161. package/server/plugin/bitran/content.ts +187 -187
  162. package/server/plugin/bitran/location.ts +25 -25
  163. package/server/plugin/bitran/products/include.ts +230 -230
  164. package/server/plugin/bitran/products/link.ts +116 -116
  165. package/server/plugin/bitran/setup.ts +9 -9
  166. package/server/plugin/bitran/toc.ts +83 -83
  167. package/server/plugin/bitran/transpiler.ts +46 -46
  168. package/server/plugin/build/close.ts +10 -10
  169. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  170. package/server/plugin/build/jobs/content/generic.ts +176 -176
  171. package/server/plugin/build/jobs/content/parse.ts +100 -100
  172. package/server/plugin/build/jobs/content/path.ts +6 -6
  173. package/server/plugin/build/jobs/content/type/book.ts +9 -9
  174. package/server/plugin/build/jobs/content/type/group.ts +37 -37
  175. package/server/plugin/build/jobs/content/type/topic.ts +36 -36
  176. package/server/plugin/build/jobs/contributors.ts +66 -66
  177. package/server/plugin/build/jobs/language.ts +36 -36
  178. package/server/plugin/build/jobs/nav.ts +209 -209
  179. package/server/plugin/build/process.ts +25 -25
  180. package/server/plugin/build/rebuild.ts +55 -55
  181. package/server/plugin/build/setup.ts +21 -21
  182. package/server/plugin/content/absoluteId.ts +94 -94
  183. package/server/plugin/content/context.ts +112 -112
  184. package/server/plugin/db/entities/Book.ts +7 -7
  185. package/server/plugin/db/entities/Content.ts +49 -49
  186. package/server/plugin/db/entities/Contribution.ts +10 -10
  187. package/server/plugin/db/entities/Contributor.ts +16 -16
  188. package/server/plugin/db/entities/Group.ts +14 -14
  189. package/server/plugin/db/entities/Hash.ts +15 -15
  190. package/server/plugin/db/entities/Topic.ts +20 -20
  191. package/server/plugin/db/entities/Unique.ts +21 -21
  192. package/server/plugin/db/setup.ts +34 -34
  193. package/server/plugin/global.ts +18 -18
  194. package/server/plugin/importer.ts +12 -12
  195. package/server/plugin/index.ts +9 -9
  196. package/server/plugin/logger.ts +23 -23
  197. package/server/plugin/nav/node.ts +26 -26
  198. package/server/plugin/nav/utils.ts +129 -129
  199. package/server/plugin/repository/book.ts +21 -21
  200. package/server/plugin/repository/content.ts +238 -238
  201. package/server/plugin/repository/contributor.ts +8 -8
  202. package/server/plugin/repository/frontNav.ts +148 -148
  203. package/server/plugin/repository/topic.ts +32 -32
  204. package/server/tsconfig.json +7 -7
  205. package/shared/aside/minor.ts +50 -50
  206. package/shared/asset.ts +15 -15
  207. package/shared/bitran/context.ts +8 -8
  208. package/shared/bitran/default.ts +46 -46
  209. package/shared/bitran/link/Link.vue +167 -167
  210. package/shared/bitran/link/factory.ts +24 -24
  211. package/shared/bitran/link/languages/en.ts +7 -7
  212. package/shared/bitran/link/languages/ru.ts +7 -7
  213. package/shared/bitran/link/renderer.ts +21 -21
  214. package/shared/bitran/link/shared.ts +17 -17
  215. package/shared/bitran/link/target.ts +134 -134
  216. package/shared/bitran/link/transpiler.ts +10 -10
  217. package/shared/bitran/location.ts +166 -166
  218. package/shared/bitran/toc.ts +8 -8
  219. package/shared/content/context.ts +9 -9
  220. package/shared/content/data/base.ts +32 -32
  221. package/shared/content/data/index.ts +5 -5
  222. package/shared/content/data/type/book.ts +5 -5
  223. package/shared/content/data/type/group.ts +6 -6
  224. package/shared/content/data/type/topic.ts +11 -11
  225. package/shared/content/previousNext.ts +9 -9
  226. package/shared/contributor.ts +5 -5
  227. package/shared/frontNav.ts +41 -41
  228. package/shared/icons.ts +38 -38
  229. package/shared/image.ts +5 -5
  230. package/shared/link.ts +25 -25
  231. package/shared/types/language.ts +75 -75
  232. package/shared/utils/objectsEqual.ts +4 -4
  233. package/shared/utils/stringColor.ts +9 -9
  234. package/test/bitran/link/target.test.ts +141 -141
  235. package/test/bitran/location.test.ts +143 -143
  236. package/tsconfig.json +8 -8
  237. package/utils/stress.ts +9 -9
@@ -1,49 +1,49 @@
1
- <script lang="ts" setup>
2
- import { headingName } from '@erudit-js/bitran-elements/heading/shared';
3
-
4
- import type { PreviewDataUnique } from '../../../../app/scripts/preview/data/unique';
5
- import type { PreviewDisplayProps } from '../../../../app/scripts/preview/display';
6
-
7
- const { data } = defineProps<PreviewDisplayProps<PreviewDataUnique>>();
8
- </script>
9
-
10
- <template>
11
- <PreviewDisplay :footer="data.footer">
12
- <div
13
- :class="[
14
- $style.bitranPreviewContent,
15
- data.productName === headingName && $style.heading,
16
- ]"
17
- >
18
- <BitranContent
19
- :content="data.bitran.content"
20
- :context="data.bitran.context"
21
- />
22
- </div>
23
- </PreviewDisplay>
24
- </template>
25
-
26
- <style lang="scss" module>
27
- .bitranPreviewContent {
28
- position: relative;
29
- padding: var(--gap) 0;
30
- }
31
-
32
- .heading {
33
- max-height: 340px;
34
- overflow: hidden;
35
-
36
- &::after {
37
- content: '';
38
- position: absolute;
39
- top: 0;
40
- left: 0;
41
- width: 100%;
42
- height: 100%;
43
- z-index: 10;
44
- background: linear-gradient(to bottom, transparent, var(--bgAside) 95%);
45
- pointer-events: none;
46
- touch-action: none;
47
- }
48
- }
49
- </style>
1
+ <script lang="ts" setup>
2
+ import { headingName } from '@erudit-js/bitran-elements/heading/shared';
3
+
4
+ import type { PreviewDataUnique } from '@app/scripts/preview/data/unique';
5
+ import type { PreviewDisplayProps } from '@app/scripts/preview/display';
6
+
7
+ const { data } = defineProps<PreviewDisplayProps<PreviewDataUnique>>();
8
+ </script>
9
+
10
+ <template>
11
+ <PreviewDisplay :footer="data.footer">
12
+ <div
13
+ :class="[
14
+ $style.bitranPreviewContent,
15
+ data.productName === headingName && $style.heading,
16
+ ]"
17
+ >
18
+ <BitranContent
19
+ :content="data.bitran.content"
20
+ :context="data.bitran.context"
21
+ />
22
+ </div>
23
+ </PreviewDisplay>
24
+ </template>
25
+
26
+ <style lang="scss" module>
27
+ .bitranPreviewContent {
28
+ position: relative;
29
+ padding: var(--gap) 0;
30
+ }
31
+
32
+ .heading {
33
+ max-height: 340px;
34
+ overflow: hidden;
35
+
36
+ &::after {
37
+ content: '';
38
+ position: absolute;
39
+ top: 0;
40
+ left: 0;
41
+ width: 100%;
42
+ height: 100%;
43
+ z-index: 10;
44
+ background: linear-gradient(to bottom, transparent, var(--bgAside) 95%);
45
+ pointer-events: none;
46
+ touch-action: none;
47
+ }
48
+ }
49
+ </style>
@@ -1,22 +1,19 @@
1
- <template>
2
- <Transition name="EruditTransitionFade">
3
- <slot></slot>
4
- </Transition>
5
- </template>
6
-
7
- <style lang="scss">
8
- .EruditTransitionFade
9
- {
10
- &-enter-active,
11
- &-leave-active
12
- {
13
- transition: opacity var(--transitionSpeed) var(--transitionFunction);
14
- }
15
-
16
- &-enter-from,
17
- &-leave-to
18
- {
19
- opacity: 0;
20
- }
21
- }
22
- </style>
1
+ <template>
2
+ <Transition name="EruditTransitionFade">
3
+ <slot></slot>
4
+ </Transition>
5
+ </template>
6
+
7
+ <style lang="scss">
8
+ .EruditTransitionFade {
9
+ &-enter-active,
10
+ &-leave-active {
11
+ transition: opacity var(--transitionSpeed) var(--transitionFunction);
12
+ }
13
+
14
+ &-enter-from,
15
+ &-leave-to {
16
+ opacity: 0;
17
+ }
18
+ }
19
+ </style>
@@ -1,12 +1,11 @@
1
- <template>
2
- <div :class="$style.treeContainer">
3
- <slot></slot>
4
- </div>
5
- </template>
6
-
7
- <style lang="scss" module>
8
- .treeContainer
9
- {
10
- padding: calc(var(--gap) / 2) 0;
11
- }
12
- </style>
1
+ <template>
2
+ <div :class="$style.treeContainer">
3
+ <slot></slot>
4
+ </div>
5
+ </template>
6
+
7
+ <style lang="scss" module>
8
+ .treeContainer {
9
+ padding: calc(var(--gap) / 2) 0;
10
+ }
11
+ </style>
@@ -1,89 +1,89 @@
1
- <script lang="ts" setup>
2
- import type { MyIconName } from '#my-icons';
3
-
4
- defineProps<{
5
- label: string;
6
- icon?: MyIconName;
7
- svg?: string;
8
- level?: number;
9
- link?: string;
10
- active?: boolean;
11
- accent?: boolean;
12
- }>();
13
- </script>
14
-
15
- <template>
16
- <NuxtLink
17
- :prefetch="false"
18
- :to="link"
19
- :class="[
20
- $style.treeItem,
21
- active && $style.active,
22
- accent && $style.accent,
23
- ]"
24
- :style="{ ['--_level']: level ?? 0 }"
25
- >
26
- <MyIcon v-if="icon" :class="$style.icon" :name="icon" />
27
- <MyRuntimeIcon v-else :class="$style.icon" name="tree-item-icon" :svg />
28
- <div :class="$style.main">{{ label }}</div>
29
- <div v-if="$slots.default" :class="$style.after">
30
- <slot></slot>
31
- </div>
32
- </NuxtLink>
33
- </template>
34
-
35
- <style lang="scss" module>
36
- .treeItem {
37
- display: flex;
38
- flex-direction: row;
39
- align-items: center;
40
- gap: calc(var(--gap) / 1.6);
41
- padding: calc(var(--gap) / 2) var(--gap);
42
- padding-left: calc((var(--_level) + 1) * var(--gap));
43
- font-size: 0.95em;
44
- color: var(--textMuted);
45
- text-decoration: none;
46
- cursor: pointer;
47
-
48
- @include transition(background);
49
-
50
- &:hover {
51
- background: var(--bgAccent);
52
- .icon,
53
- .main {
54
- color: var(--text);
55
- }
56
- }
57
-
58
- &.active {
59
- .icon,
60
- .main {
61
- color: var(--brand);
62
- }
63
- }
64
- &.accent {
65
- .icon,
66
- .main {
67
- color: var(--text);
68
- }
69
- }
70
-
71
- .icon,
72
- .main {
73
- @include transition(color);
74
- }
75
-
76
- .main {
77
- flex: 1;
78
- }
79
-
80
- .icon,
81
- .after {
82
- flex-shrink: 0;
83
- }
84
-
85
- .icon {
86
- font-size: 16px;
87
- }
88
- }
89
- </style>
1
+ <script lang="ts" setup>
2
+ import type { MyIconName } from '#my-icons';
3
+
4
+ defineProps<{
5
+ label: string;
6
+ icon?: MyIconName;
7
+ svg?: string;
8
+ level?: number;
9
+ link?: string;
10
+ active?: boolean;
11
+ accent?: boolean;
12
+ }>();
13
+ </script>
14
+
15
+ <template>
16
+ <NuxtLink
17
+ :prefetch="false"
18
+ :to="link"
19
+ :class="[
20
+ $style.treeItem,
21
+ active && $style.active,
22
+ accent && $style.accent,
23
+ ]"
24
+ :style="{ ['--_level']: level ?? 0 }"
25
+ >
26
+ <MyIcon v-if="icon" :class="$style.icon" :name="icon" />
27
+ <MyRuntimeIcon v-else :class="$style.icon" name="tree-item-icon" :svg />
28
+ <div :class="$style.main">{{ label }}</div>
29
+ <div v-if="$slots.default" :class="$style.after">
30
+ <slot></slot>
31
+ </div>
32
+ </NuxtLink>
33
+ </template>
34
+
35
+ <style lang="scss" module>
36
+ .treeItem {
37
+ display: flex;
38
+ flex-direction: row;
39
+ align-items: center;
40
+ gap: calc(var(--gap) / 1.6);
41
+ padding: calc(var(--gap) / 2) var(--gap);
42
+ padding-left: calc((var(--_level) + 1) * var(--gap));
43
+ font-size: 0.95em;
44
+ color: var(--textMuted);
45
+ text-decoration: none;
46
+ cursor: pointer;
47
+
48
+ @include transition(background);
49
+
50
+ &:hover {
51
+ background: var(--bgAccent);
52
+ .icon,
53
+ .main {
54
+ color: var(--text);
55
+ }
56
+ }
57
+
58
+ &.active {
59
+ .icon,
60
+ .main {
61
+ color: var(--brand);
62
+ }
63
+ }
64
+ &.accent {
65
+ .icon,
66
+ .main {
67
+ color: var(--text);
68
+ }
69
+ }
70
+
71
+ .icon,
72
+ .main {
73
+ @include transition(color);
74
+ }
75
+
76
+ .main {
77
+ flex: 1;
78
+ }
79
+
80
+ .icon,
81
+ .after {
82
+ flex-shrink: 0;
83
+ }
84
+
85
+ .icon {
86
+ font-size: 16px;
87
+ }
88
+ }
89
+ </style>
@@ -1,127 +1,127 @@
1
- import eruditConfig from '#erudit/config';
2
- import bitranConfig from '#erudit/client/bitran';
3
-
4
- import {
5
- createPhraseCaller,
6
- getDefaultRenderers,
7
- getElementIcon,
8
- type ElementVueRenderers,
9
- } from '@bitran-js/renderer-vue';
10
- import {
11
- defineBitranTranspiler,
12
- type BitranTranspiler,
13
- type ElementTranspilers,
14
- } from '@bitran-js/transpiler';
15
- import { aliasesName } from '@erudit-js/bitran-elements/aliases/shared';
16
- import { aliasesTranspiler } from '@erudit-js/bitran-elements/aliases/transpiler';
17
- import { headingName } from '@erudit-js/bitran-elements/heading/shared';
18
- import { headingTranspiler } from '@erudit-js/bitran-elements/heading/transpiler';
19
- import { includeName } from '@erudit-js/bitran-elements/include/shared';
20
- import { includeTranspiler } from '@erudit-js/bitran-elements/include/transpiler';
21
- import { linkName } from '@erudit/shared/bitran/link/shared';
22
- import { linkTranspiler } from '@erudit/shared/bitran/link/transpiler';
23
- import { aliasesRenderer } from '@erudit-js/bitran-elements/aliases/renderer';
24
- import { headingRenderer } from '@erudit-js/bitran-elements/heading/renderer';
25
- import { includeRenderer } from '@erudit-js/bitran-elements/include/renderer';
26
- import { linkRenderer } from '@erudit/shared/bitran/link/renderer';
27
-
28
- let bitranTranspiler!: BitranTranspiler;
29
- let bitranRenderers!: ElementVueRenderers;
30
-
31
- //
32
- // Transpiler
33
- //
34
-
35
- export async function useBitranTranspiler() {
36
- if (bitranTranspiler) return bitranTranspiler;
37
-
38
- const projectTranspilers = await getProjectTranspilers();
39
-
40
- const defaultTranspilers = {
41
- [aliasesName]: aliasesTranspiler,
42
- [includeName]: includeTranspiler,
43
- [headingName]: headingTranspiler,
44
- [linkName]: linkTranspiler,
45
- };
46
-
47
- bitranTranspiler = defineBitranTranspiler({
48
- ...projectTranspilers,
49
- ...defaultTranspilers,
50
- });
51
-
52
- return bitranTranspiler;
53
- }
54
-
55
- async function getProjectTranspilers(): Promise<ElementTranspilers> {
56
- const bitranElements = bitranConfig.elements;
57
-
58
- if (!bitranElements) return {};
59
-
60
- const projectTranspilers: ElementTranspilers = {};
61
- for (const [name, bitranElement] of Object.entries(bitranElements))
62
- projectTranspilers[name] = await bitranElement.transpiler();
63
-
64
- return projectTranspilers;
65
- }
66
-
67
- //
68
- // Renderers
69
- //
70
-
71
- export async function useBitranRenderers() {
72
- if (bitranRenderers) return bitranRenderers;
73
-
74
- const projectRenderers = await getProjectRenderers();
75
-
76
- const defaultRenderers = {
77
- [aliasesName]: aliasesRenderer,
78
- [includeName]: includeRenderer,
79
- [headingName]: headingRenderer,
80
- [linkName]: linkRenderer,
81
- };
82
-
83
- // @ts-ignore
84
- bitranRenderers = {
85
- ...projectRenderers,
86
- ...defaultRenderers,
87
- };
88
-
89
- return bitranRenderers!;
90
- }
91
-
92
- async function getProjectRenderers() {
93
- const bitranElements = bitranConfig.elements;
94
-
95
- if (!bitranElements) return {};
96
-
97
- const projectRenderers: ElementVueRenderers = {};
98
- for (const [name, bitranElement] of Object.entries(bitranElements))
99
- projectRenderers[name] = await bitranElement.renderer();
100
-
101
- return projectRenderers;
102
- }
103
-
104
- //
105
- // Utils
106
- //
107
-
108
- export async function useBitranElementRenderer(productName: string) {
109
- const renderer =
110
- (await useBitranRenderers())[productName] ||
111
- getDefaultRenderers()[productName];
112
-
113
- if (!renderer)
114
- throw new Error(`Missing Bitran product render "${productName}"!`);
115
-
116
- return renderer;
117
- }
118
-
119
- export async function useBitranElementIcon(productName: string) {
120
- const renderer = await useBitranElementRenderer(productName);
121
- return await getElementIcon(renderer);
122
- }
123
-
124
- export async function useBitranElementLanguage(productName: string) {
125
- const renderer = await useBitranElementRenderer(productName);
126
- return await createPhraseCaller(renderer, eruditConfig?.language || 'en');
127
- }
1
+ import eruditConfig from '#erudit/config';
2
+ import bitranConfig from '#erudit/client/bitran';
3
+
4
+ import {
5
+ createPhraseCaller,
6
+ getDefaultRenderers,
7
+ getElementIcon,
8
+ type ElementVueRenderers,
9
+ } from '@bitran-js/renderer-vue';
10
+ import {
11
+ defineBitranTranspiler,
12
+ type BitranTranspiler,
13
+ type ElementTranspilers,
14
+ } from '@bitran-js/transpiler';
15
+ import { aliasesName } from '@erudit-js/bitran-elements/aliases/shared';
16
+ import { aliasesTranspiler } from '@erudit-js/bitran-elements/aliases/transpiler';
17
+ import { headingName } from '@erudit-js/bitran-elements/heading/shared';
18
+ import { headingTranspiler } from '@erudit-js/bitran-elements/heading/transpiler';
19
+ import { includeName } from '@erudit-js/bitran-elements/include/shared';
20
+ import { includeTranspiler } from '@erudit-js/bitran-elements/include/transpiler';
21
+ import { linkName } from '@erudit/shared/bitran/link/shared';
22
+ import { linkTranspiler } from '@erudit/shared/bitran/link/transpiler';
23
+ import { aliasesRenderer } from '@erudit-js/bitran-elements/aliases/renderer';
24
+ import { headingRenderer } from '@erudit-js/bitran-elements/heading/renderer';
25
+ import { includeRenderer } from '@erudit-js/bitran-elements/include/renderer';
26
+ import { linkRenderer } from '@erudit/shared/bitran/link/renderer';
27
+
28
+ let bitranTranspiler!: BitranTranspiler;
29
+ let bitranRenderers!: ElementVueRenderers;
30
+
31
+ //
32
+ // Transpiler
33
+ //
34
+
35
+ export async function useBitranTranspiler() {
36
+ if (bitranTranspiler) return bitranTranspiler;
37
+
38
+ const projectTranspilers = await getProjectTranspilers();
39
+
40
+ const defaultTranspilers = {
41
+ [aliasesName]: aliasesTranspiler,
42
+ [includeName]: includeTranspiler,
43
+ [headingName]: headingTranspiler,
44
+ [linkName]: linkTranspiler,
45
+ };
46
+
47
+ bitranTranspiler = defineBitranTranspiler({
48
+ ...projectTranspilers,
49
+ ...defaultTranspilers,
50
+ });
51
+
52
+ return bitranTranspiler;
53
+ }
54
+
55
+ async function getProjectTranspilers(): Promise<ElementTranspilers> {
56
+ const bitranElements = bitranConfig.elements;
57
+
58
+ if (!bitranElements) return {};
59
+
60
+ const projectTranspilers: ElementTranspilers = {};
61
+ for (const [name, bitranElement] of Object.entries(bitranElements))
62
+ projectTranspilers[name] = await bitranElement.transpiler();
63
+
64
+ return projectTranspilers;
65
+ }
66
+
67
+ //
68
+ // Renderers
69
+ //
70
+
71
+ export async function useBitranRenderers() {
72
+ if (bitranRenderers) return bitranRenderers;
73
+
74
+ const projectRenderers = await getProjectRenderers();
75
+
76
+ const defaultRenderers = {
77
+ [aliasesName]: aliasesRenderer,
78
+ [includeName]: includeRenderer,
79
+ [headingName]: headingRenderer,
80
+ [linkName]: linkRenderer,
81
+ };
82
+
83
+ // @ts-ignore
84
+ bitranRenderers = {
85
+ ...projectRenderers,
86
+ ...defaultRenderers,
87
+ };
88
+
89
+ return bitranRenderers!;
90
+ }
91
+
92
+ async function getProjectRenderers() {
93
+ const bitranElements = bitranConfig.elements;
94
+
95
+ if (!bitranElements) return {};
96
+
97
+ const projectRenderers: ElementVueRenderers = {};
98
+ for (const [name, bitranElement] of Object.entries(bitranElements))
99
+ projectRenderers[name] = await bitranElement.renderer();
100
+
101
+ return projectRenderers;
102
+ }
103
+
104
+ //
105
+ // Utils
106
+ //
107
+
108
+ export async function useBitranElementRenderer(productName: string) {
109
+ const renderer =
110
+ (await useBitranRenderers())[productName] ||
111
+ getDefaultRenderers()[productName];
112
+
113
+ if (!renderer)
114
+ throw new Error(`Missing Bitran product render "${productName}"!`);
115
+
116
+ return renderer;
117
+ }
118
+
119
+ export async function useBitranElementIcon(productName: string) {
120
+ const renderer = await useBitranElementRenderer(productName);
121
+ return await getElementIcon(renderer);
122
+ }
123
+
124
+ export async function useBitranElementLanguage(productName: string) {
125
+ const renderer = await useBitranElementRenderer(productName);
126
+ return await createPhraseCaller(renderer, eruditConfig?.language || 'en');
127
+ }
@@ -1,37 +1,37 @@
1
- import type { ShallowRef } from 'vue';
2
- import type { BitranContent } from '@bitran-js/renderer-vue';
3
-
4
- import {
5
- encodeBitranLocation,
6
- stringifyBitranLocation,
7
- type BitranLocation,
8
- } from '@erudit/shared/bitran/location';
9
-
10
- export async function useBitranContent(
11
- location: Ref<BitranLocation | undefined>,
12
- ) {
13
- const nuxtApp = useNuxtApp();
14
- const content = shallowRef<BitranContent>();
15
-
16
- let contentPromise: Promise<ShallowRef<BitranContent>>;
17
-
18
- watchEffect(() => {
19
- if (!location.value) {
20
- // @ts-ignore
21
- contentPromise = (() => {
22
- content.value = undefined;
23
- return content;
24
- })();
25
- }
26
-
27
- const apiRoute = `/api/bitran/content/${encodeBitranLocation(stringifyBitranLocation(location.value!))}`;
28
- nuxtApp.runWithContext(() => prerenderRoutes(apiRoute));
29
- // @ts-ignore
30
- contentPromise = (async () => {
31
- content.value = (await $fetch(apiRoute)) as BitranContent;
32
- return content;
33
- })();
34
- });
35
-
36
- return contentPromise!;
37
- }
1
+ import type { ShallowRef } from 'vue';
2
+ import type { BitranContent } from '@bitran-js/renderer-vue';
3
+
4
+ import {
5
+ encodeBitranLocation,
6
+ stringifyBitranLocation,
7
+ type BitranLocation,
8
+ } from '@erudit/shared/bitran/location';
9
+
10
+ export async function useBitranContent(
11
+ location: Ref<BitranLocation | undefined>,
12
+ ) {
13
+ const nuxtApp = useNuxtApp();
14
+ const content = shallowRef<BitranContent>();
15
+
16
+ let contentPromise: Promise<ShallowRef<BitranContent>>;
17
+
18
+ watchEffect(() => {
19
+ if (!location.value) {
20
+ // @ts-ignore
21
+ contentPromise = (() => {
22
+ content.value = undefined;
23
+ return content;
24
+ })();
25
+ }
26
+
27
+ const apiRoute = `/api/bitran/content/${encodeBitranLocation(stringifyBitranLocation(location.value!))}`;
28
+ nuxtApp.runWithContext(() => prerenderRoutes(apiRoute));
29
+ // @ts-ignore
30
+ contentPromise = (async () => {
31
+ content.value = (await $fetch(apiRoute)) as BitranContent;
32
+ return content;
33
+ })();
34
+ });
35
+
36
+ return contentPromise!;
37
+ }