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,141 +1,141 @@
1
- <script lang="ts" setup>
2
- import type { PreviewRequest } from '@app/scripts/preview/request';
3
- import { type PreviewData } from '@app/scripts/preview/data';
4
- import { buildPreviewData } from '@app/scripts/preview/build';
5
- import { getPreviewDisplayComponent } from '@app/scripts/preview/display';
6
- import { createPreviewError } from '@app/scripts/preview/data/alert';
7
-
8
- import { LazyPreviewDisplayAlert } from '#components';
9
-
10
- const { request } = defineProps<{ request: PreviewRequest }>();
11
- const height = defineModel<number>('height');
12
-
13
- const loading = ref(true);
14
- const suspensePending = ref(true);
15
- const effectiveLoading = computed(() => loading.value || suspensePending.value);
16
-
17
- const loadingElem = useTemplateRef('loadingElem');
18
- const screenElem = useTemplateRef('screenElem');
19
- const screenSizeObserver = new ResizeObserver(updateContentHeight);
20
-
21
- const DisplayComponent = shallowRef<Component>();
22
- const previewData = shallowRef<PreviewData>();
23
-
24
- const setupDisplay = setTimeout(async () => {
25
- //await new Promise(resolve => setTimeout(resolve, 5000));
26
-
27
- try {
28
- previewData.value = await buildPreviewData(request);
29
- DisplayComponent.value = getPreviewDisplayComponent(previewData.value);
30
- } catch (error) {
31
- console.error(error);
32
-
33
- previewData.value = createPreviewError({
34
- // @ts-ignore
35
- message: error?.message || error,
36
- });
37
-
38
- DisplayComponent.value = LazyPreviewDisplayAlert;
39
- }
40
-
41
- await nextTick();
42
- loading.value = false;
43
- });
44
-
45
- function updateContentHeight() {
46
- // Use the proper element for height calculation based on which one is visible
47
- const targetElem = effectiveLoading.value
48
- ? loadingElem.value
49
- : screenElem.value;
50
- if (!targetElem) return;
51
-
52
- height.value = targetElem.offsetHeight;
53
- }
54
-
55
- function onSuspenseResolve() {
56
- suspensePending.value = false;
57
- }
58
-
59
- onMounted(() => {
60
- // Initialize height with either element that's available
61
- const initialElement = loadingElem.value || screenElem.value;
62
- height.value = initialElement?.offsetHeight ?? 0;
63
-
64
- // Observe both elements for size changes
65
- watch(
66
- [loadingElem, screenElem, effectiveLoading],
67
- () => {
68
- screenSizeObserver.disconnect();
69
-
70
- // Observe loading element when it's visible
71
- if (effectiveLoading.value && loadingElem.value) {
72
- screenSizeObserver.observe(loadingElem.value);
73
- }
74
- // Otherwise observe content element
75
- else if (screenElem.value) {
76
- screenSizeObserver.observe(screenElem.value);
77
- }
78
-
79
- // Update height after elements change
80
- updateContentHeight();
81
- },
82
- { immediate: true },
83
- );
84
- });
85
-
86
- onUnmounted(() => {
87
- clearTimeout(setupDisplay);
88
- screenSizeObserver.disconnect();
89
- });
90
- </script>
91
-
92
- <template>
93
- <div :class="$style.screenContainer">
94
- <TransitionFade>
95
- <div
96
- v-if="effectiveLoading"
97
- ref="loadingElem"
98
- :class="$style.loadingOverlay"
99
- >
100
- <PreviewLoading />
101
- </div>
102
- </TransitionFade>
103
-
104
- <div ref="screenElem" :class="$style.screen">
105
- <Suspense @resolve="onSuspenseResolve" v-if="DisplayComponent">
106
- <component :is="DisplayComponent" :data="previewData" />
107
- <template #fallback>
108
- <div></div>
109
- </template>
110
- </Suspense>
111
- </div>
112
- </div>
113
- </template>
114
-
115
- <style lang="scss" module>
116
- .screenContainer {
117
- position: absolute;
118
- top: 0;
119
- left: 0;
120
- width: 100%;
121
- height: 100%;
122
- }
123
-
124
- .loadingOverlay {
125
- position: absolute;
126
- top: 0;
127
- left: 0;
128
- width: 100%;
129
- height: auto;
130
- z-index: 2;
131
- background-color: var(--_previewThemeBg, var(--bgAside));
132
- }
133
-
134
- .screen {
135
- position: absolute;
136
- bottom: 0;
137
- left: 0;
138
- width: 100%;
139
- z-index: 1;
140
- }
141
- </style>
1
+ <script lang="ts" setup>
2
+ import type { PreviewRequest } from '@app/scripts/preview/request';
3
+ import { type PreviewData } from '@app/scripts/preview/data';
4
+ import { buildPreviewData } from '@app/scripts/preview/build';
5
+ import { getPreviewDisplayComponent } from '@app/scripts/preview/display';
6
+ import { createPreviewError } from '@app/scripts/preview/data/alert';
7
+
8
+ import { LazyPreviewDisplayAlert } from '#components';
9
+
10
+ const { request } = defineProps<{ request: PreviewRequest }>();
11
+ const height = defineModel<number>('height');
12
+
13
+ const loading = ref(true);
14
+ const suspensePending = ref(true);
15
+ const effectiveLoading = computed(() => loading.value || suspensePending.value);
16
+
17
+ const loadingElem = useTemplateRef('loadingElem');
18
+ const screenElem = useTemplateRef('screenElem');
19
+ const screenSizeObserver = new ResizeObserver(updateContentHeight);
20
+
21
+ const DisplayComponent = shallowRef<Component>();
22
+ const previewData = shallowRef<PreviewData>();
23
+
24
+ const setupDisplay = setTimeout(async () => {
25
+ //await new Promise(resolve => setTimeout(resolve, 5000));
26
+
27
+ try {
28
+ previewData.value = await buildPreviewData(request);
29
+ DisplayComponent.value = getPreviewDisplayComponent(previewData.value);
30
+ } catch (error) {
31
+ console.error(error);
32
+
33
+ previewData.value = createPreviewError({
34
+ // @ts-ignore
35
+ message: error?.message || error,
36
+ });
37
+
38
+ DisplayComponent.value = LazyPreviewDisplayAlert;
39
+ }
40
+
41
+ await nextTick();
42
+ loading.value = false;
43
+ });
44
+
45
+ function updateContentHeight() {
46
+ // Use the proper element for height calculation based on which one is visible
47
+ const targetElem = effectiveLoading.value
48
+ ? loadingElem.value
49
+ : screenElem.value;
50
+ if (!targetElem) return;
51
+
52
+ height.value = targetElem.offsetHeight;
53
+ }
54
+
55
+ function onSuspenseResolve() {
56
+ suspensePending.value = false;
57
+ }
58
+
59
+ onMounted(() => {
60
+ // Initialize height with either element that's available
61
+ const initialElement = loadingElem.value || screenElem.value;
62
+ height.value = initialElement?.offsetHeight ?? 0;
63
+
64
+ // Observe both elements for size changes
65
+ watch(
66
+ [loadingElem, screenElem, effectiveLoading],
67
+ () => {
68
+ screenSizeObserver.disconnect();
69
+
70
+ // Observe loading element when it's visible
71
+ if (effectiveLoading.value && loadingElem.value) {
72
+ screenSizeObserver.observe(loadingElem.value);
73
+ }
74
+ // Otherwise observe content element
75
+ else if (screenElem.value) {
76
+ screenSizeObserver.observe(screenElem.value);
77
+ }
78
+
79
+ // Update height after elements change
80
+ updateContentHeight();
81
+ },
82
+ { immediate: true },
83
+ );
84
+ });
85
+
86
+ onUnmounted(() => {
87
+ clearTimeout(setupDisplay);
88
+ screenSizeObserver.disconnect();
89
+ });
90
+ </script>
91
+
92
+ <template>
93
+ <div :class="$style.screenContainer">
94
+ <TransitionFade>
95
+ <div
96
+ v-if="effectiveLoading"
97
+ ref="loadingElem"
98
+ :class="$style.loadingOverlay"
99
+ >
100
+ <PreviewLoading />
101
+ </div>
102
+ </TransitionFade>
103
+
104
+ <div ref="screenElem" :class="$style.screen">
105
+ <Suspense @resolve="onSuspenseResolve" v-if="DisplayComponent">
106
+ <component :is="DisplayComponent" :data="previewData" />
107
+ <template #fallback>
108
+ <div></div>
109
+ </template>
110
+ </Suspense>
111
+ </div>
112
+ </div>
113
+ </template>
114
+
115
+ <style lang="scss" module>
116
+ .screenContainer {
117
+ position: absolute;
118
+ top: 0;
119
+ left: 0;
120
+ width: 100%;
121
+ height: 100%;
122
+ }
123
+
124
+ .loadingOverlay {
125
+ position: absolute;
126
+ top: 0;
127
+ left: 0;
128
+ width: 100%;
129
+ height: auto;
130
+ z-index: 2;
131
+ background-color: var(--_previewThemeBg, var(--bgAside));
132
+ }
133
+
134
+ .screen {
135
+ position: absolute;
136
+ bottom: 0;
137
+ left: 0;
138
+ width: 100%;
139
+ z-index: 1;
140
+ }
141
+ </style>
@@ -1,50 +1,50 @@
1
- <script lang="ts" setup>
2
- import type { PreviewDataAlert } from '@app/scripts/preview/data/alert';
3
- import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
- import type { PreviewFooter } from '@app/scripts/preview/footer';
5
- import { setPreviewTheme } from '@app/scripts/preview/state';
6
-
7
- const { data } = defineProps<PreviewDisplayProps<PreviewDataAlert>>();
8
-
9
- const phrase = await usePhrases('error');
10
-
11
- setPreviewTheme(data.theme!);
12
-
13
- const footer: PreviewFooter = {
14
- iconName: 'alert',
15
- primary: data.title || phrase.error,
16
- };
17
- </script>
18
-
19
- <template>
20
- <PreviewDisplay :footer>
21
- <div :class="$style.alertContent">
22
- <div v-html="data.message"></div>
23
- <pre v-if="data.pre" v-html="data.pre"></pre>
24
- </div>
25
- </PreviewDisplay>
26
- </template>
27
-
28
- <style lang="scss" module>
29
- .alertContent {
30
- display: flex;
31
- flex-direction: column;
32
- gap: var(--gap);
33
- padding: var(--gapBig);
34
-
35
- color: var(--_previewThemeText);
36
- font-size: 0.9em;
37
-
38
- @include transition(color);
39
-
40
- div {
41
- font-weight: 500;
42
- }
43
-
44
- pre {
45
- max-height: 100px;
46
- overflow: auto;
47
- @include scroll;
48
- }
49
- }
50
- </style>
1
+ <script lang="ts" setup>
2
+ import type { PreviewDataAlert } from '@app/scripts/preview/data/alert';
3
+ import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
+ import type { PreviewFooter } from '@app/scripts/preview/footer';
5
+ import { setPreviewTheme } from '@app/scripts/preview/state';
6
+
7
+ const { data } = defineProps<PreviewDisplayProps<PreviewDataAlert>>();
8
+
9
+ const phrase = await usePhrases('error');
10
+
11
+ setPreviewTheme(data.theme!);
12
+
13
+ const footer: PreviewFooter = {
14
+ iconName: 'alert',
15
+ primary: data.title || phrase.error,
16
+ };
17
+ </script>
18
+
19
+ <template>
20
+ <PreviewDisplay :footer>
21
+ <div :class="$style.alertContent">
22
+ <div v-html="data.message"></div>
23
+ <pre v-if="data.pre" v-html="data.pre"></pre>
24
+ </div>
25
+ </PreviewDisplay>
26
+ </template>
27
+
28
+ <style lang="scss" module>
29
+ .alertContent {
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: var(--gap);
33
+ padding: var(--gapBig);
34
+
35
+ color: var(--_previewThemeText);
36
+ font-size: 0.9em;
37
+
38
+ @include transition(color);
39
+
40
+ div {
41
+ font-weight: 500;
42
+ }
43
+
44
+ pre {
45
+ max-height: 100px;
46
+ overflow: auto;
47
+ @include scroll;
48
+ }
49
+ }
50
+ </style>
@@ -1,18 +1,18 @@
1
- <script lang="ts" setup>
2
- import type { PreviewDataCustom } from '@app/scripts/preview/data/custom';
3
- import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
-
5
- const { data } = defineProps<PreviewDisplayProps<PreviewDataCustom>>();
6
- </script>
7
-
8
- <template>
9
- <PreviewDisplay :footer="data.footer">
10
- <div :class="$style.message">{{ data.message }}</div>
11
- </PreviewDisplay>
12
- </template>
13
-
14
- <style lang="scss" module>
15
- .message {
16
- padding: var(--gapBig);
17
- }
18
- </style>
1
+ <script lang="ts" setup>
2
+ import type { PreviewDataCustom } from '@app/scripts/preview/data/custom';
3
+ import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
+
5
+ const { data } = defineProps<PreviewDisplayProps<PreviewDataCustom>>();
6
+ </script>
7
+
8
+ <template>
9
+ <PreviewDisplay :footer="data.footer">
10
+ <div :class="$style.message">{{ data.message }}</div>
11
+ </PreviewDisplay>
12
+ </template>
13
+
14
+ <style lang="scss" module>
15
+ .message {
16
+ padding: var(--gapBig);
17
+ }
18
+ </style>
@@ -1,48 +1,48 @@
1
- <script lang="ts" setup>
2
- import type { PreviewDataGenericLink } from '@app/scripts/preview/data/genericLink';
3
- import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
- import type { PreviewFooter } from '@app/scripts/preview/footer';
5
-
6
- const { data } = defineProps<PreviewDisplayProps<PreviewDataGenericLink>>();
7
-
8
- const phrase = await usePhrases(
9
- 'external_link',
10
- 'external_link_warn',
11
- 'internal_link',
12
- 'internal_link_warn',
13
- );
14
-
15
- const footer: PreviewFooter = {
16
- iconName: data.external ? 'link-external' : 'link',
17
- href: data.href,
18
- primary: data.external ? phrase.external_link : phrase.internal_link,
19
- };
20
-
21
- const warnMessage = data.external
22
- ? phrase.external_link_warn
23
- : phrase.internal_link_warn;
24
- </script>
25
-
26
- <template>
27
- <PreviewDisplay :footer>
28
- <div :class="$style.wrapper">
29
- <div :class="$style.warn">{{ warnMessage }}</div>
30
- <pre>{{ data.href }}</pre>
31
- </div>
32
- </PreviewDisplay>
33
- </template>
34
-
35
- <style lang="scss" module>
36
- .wrapper {
37
- padding: var(--gapBig);
38
-
39
- pre {
40
- font-family: monospace;
41
- }
42
- }
43
-
44
- .warn {
45
- color: var(--textMuted);
46
- margin-bottom: var(--gap);
47
- }
48
- </style>
1
+ <script lang="ts" setup>
2
+ import type { PreviewDataGenericLink } from '@app/scripts/preview/data/genericLink';
3
+ import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
+ import type { PreviewFooter } from '@app/scripts/preview/footer';
5
+
6
+ const { data } = defineProps<PreviewDisplayProps<PreviewDataGenericLink>>();
7
+
8
+ const phrase = await usePhrases(
9
+ 'external_link',
10
+ 'external_link_warn',
11
+ 'internal_link',
12
+ 'internal_link_warn',
13
+ );
14
+
15
+ const footer: PreviewFooter = {
16
+ iconName: data.external ? 'link-external' : 'link',
17
+ href: data.href,
18
+ primary: data.external ? phrase.external_link : phrase.internal_link,
19
+ };
20
+
21
+ const warnMessage = data.external
22
+ ? phrase.external_link_warn
23
+ : phrase.internal_link_warn;
24
+ </script>
25
+
26
+ <template>
27
+ <PreviewDisplay :footer>
28
+ <div :class="$style.wrapper">
29
+ <div :class="$style.warn">{{ warnMessage }}</div>
30
+ <pre>{{ data.href }}</pre>
31
+ </div>
32
+ </PreviewDisplay>
33
+ </template>
34
+
35
+ <style lang="scss" module>
36
+ .wrapper {
37
+ padding: var(--gapBig);
38
+
39
+ pre {
40
+ font-family: monospace;
41
+ }
42
+ }
43
+
44
+ .warn {
45
+ color: var(--textMuted);
46
+ margin-bottom: var(--gap);
47
+ }
48
+ </style>
@@ -1,22 +1,22 @@
1
- <script lang="ts" setup>
2
- import type { PreviewDataPageLink } from '@app/scripts/preview/data/pageLink';
3
- import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
-
5
- const { data } = defineProps<PreviewDisplayProps<PreviewDataPageLink>>();
6
-
7
- const phrase = await usePhrases('internal_link_warn');
8
- </script>
9
-
10
- <template>
11
- <PreviewDisplay :footer="data.footer">
12
- <div :class="$style.wrapper">
13
- {{ data.description || phrase.internal_link_warn }}
14
- </div>
15
- </PreviewDisplay>
16
- </template>
17
-
18
- <style lang="scss" module>
19
- .wrapper {
20
- padding: var(--gapBig);
21
- }
22
- </style>
1
+ <script lang="ts" setup>
2
+ import type { PreviewDataPageLink } from '@app/scripts/preview/data/pageLink';
3
+ import type { PreviewDisplayProps } from '@app/scripts/preview/display';
4
+
5
+ const { data } = defineProps<PreviewDisplayProps<PreviewDataPageLink>>();
6
+
7
+ const phrase = await usePhrases('internal_link_warn');
8
+ </script>
9
+
10
+ <template>
11
+ <PreviewDisplay :footer="data.footer">
12
+ <div :class="$style.wrapper">
13
+ {{ data.description || phrase.internal_link_warn }}
14
+ </div>
15
+ </PreviewDisplay>
16
+ </template>
17
+
18
+ <style lang="scss" module>
19
+ .wrapper {
20
+ padding: var(--gapBig);
21
+ }
22
+ </style>
@@ -1,55 +1,55 @@
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
-
9
- const bitranTranspiler = await useBitranTranspiler();
10
- const root = await bitranTranspiler.parser.parse(data.bitran.content.biCode);
11
- </script>
12
-
13
- <template>
14
- <PreviewDisplay :footer="data.footer">
15
- <div
16
- :class="[
17
- $style.bitranPreviewContent,
18
- data.productName === headingName && $style.heading,
19
- ]"
20
- >
21
- <BitranContent
22
- :content="{
23
- root,
24
- renderDataStorage: data.bitran.content.renderDataStorage,
25
- }"
26
- :context="data.bitran.context"
27
- />
28
- </div>
29
- </PreviewDisplay>
30
- </template>
31
-
32
- <style lang="scss" module>
33
- .bitranPreviewContent {
34
- position: relative;
35
- padding: var(--gap) 0;
36
- }
37
-
38
- .heading {
39
- max-height: 340px;
40
- overflow: hidden;
41
-
42
- &::after {
43
- content: '';
44
- position: absolute;
45
- top: 0;
46
- left: 0;
47
- width: 100%;
48
- height: 100%;
49
- z-index: 10;
50
- background: linear-gradient(to bottom, transparent, var(--bgAside) 95%);
51
- pointer-events: none;
52
- touch-action: none;
53
- }
54
- }
55
- </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
+
9
+ const bitranTranspiler = await useBitranTranspiler();
10
+ const root = await bitranTranspiler.parser.parse(data.bitran.content.biCode);
11
+ </script>
12
+
13
+ <template>
14
+ <PreviewDisplay :footer="data.footer">
15
+ <div
16
+ :class="[
17
+ $style.bitranPreviewContent,
18
+ data.productName === headingName && $style.heading,
19
+ ]"
20
+ >
21
+ <BitranContent
22
+ :content="{
23
+ root,
24
+ renderDataStorage: data.bitran.content.renderDataStorage,
25
+ }"
26
+ :context="data.bitran.context"
27
+ />
28
+ </div>
29
+ </PreviewDisplay>
30
+ </template>
31
+
32
+ <style lang="scss" module>
33
+ .bitranPreviewContent {
34
+ position: relative;
35
+ padding: var(--gap) 0;
36
+ }
37
+
38
+ .heading {
39
+ max-height: 340px;
40
+ overflow: hidden;
41
+
42
+ &::after {
43
+ content: '';
44
+ position: absolute;
45
+ top: 0;
46
+ left: 0;
47
+ width: 100%;
48
+ height: 100%;
49
+ z-index: 10;
50
+ background: linear-gradient(to bottom, transparent, var(--bgAside) 95%);
51
+ pointer-events: none;
52
+ touch-action: none;
53
+ }
54
+ }
55
+ </style>