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,56 +1,56 @@
1
- import { detectContentBookId } from '../content/bookId';
2
-
3
- export function toAbsoluteContentPath(
4
- contentPath: string,
5
- contextPath: string,
6
- bookIds?: string[],
7
- ) {
8
- const unresolvedPath = (() => {
9
- if (contentPath.startsWith('/')) {
10
- return contentPath;
11
- }
12
-
13
- if (contentPath.startsWith('~/')) {
14
- const restPath = contentPath.substring(2);
15
- const bookId = detectContentBookId(contextPath, bookIds ?? []);
16
-
17
- if (bookId) {
18
- return bookId + '/' + restPath;
19
- }
20
-
21
- // Not in any book, convert to absolute path
22
- return '/' + restPath;
23
- }
24
-
25
- return contextPath + '/' + contentPath;
26
- })();
27
-
28
- return resolveContentPath(unresolvedPath);
29
- }
30
-
31
- export function resolveContentPath(toResolvePath: string) {
32
- const reverseParts = toResolvePath.split('/').reverse();
33
- const resolvedParts: string[] = [];
34
-
35
- let skipCounter = 0;
36
-
37
- for (let i = 0; i < reverseParts.length; i++) {
38
- const part = reverseParts[i];
39
-
40
- if (part === '..') {
41
- skipCounter++;
42
- continue;
43
- }
44
-
45
- if (skipCounter) {
46
- skipCounter--;
47
- continue;
48
- }
49
-
50
- if (part && part !== '.') {
51
- resolvedParts.unshift(part);
52
- }
53
- }
54
-
55
- return resolvedParts.join('/');
56
- }
1
+ import { detectContentBookId } from '../content/bookId';
2
+
3
+ export function toAbsoluteContentPath(
4
+ contentPath: string,
5
+ contextPath: string,
6
+ bookIds?: string[],
7
+ ) {
8
+ const unresolvedPath = (() => {
9
+ if (contentPath.startsWith('/')) {
10
+ return contentPath;
11
+ }
12
+
13
+ if (contentPath.startsWith('~/')) {
14
+ const restPath = contentPath.substring(2);
15
+ const bookId = detectContentBookId(contextPath, bookIds ?? []);
16
+
17
+ if (bookId) {
18
+ return bookId + '/' + restPath;
19
+ }
20
+
21
+ // Not in any book, convert to absolute path
22
+ return '/' + restPath;
23
+ }
24
+
25
+ return contextPath + '/' + contentPath;
26
+ })();
27
+
28
+ return resolveContentPath(unresolvedPath);
29
+ }
30
+
31
+ export function resolveContentPath(toResolvePath: string) {
32
+ const reverseParts = toResolvePath.split('/').reverse();
33
+ const resolvedParts: string[] = [];
34
+
35
+ let skipCounter = 0;
36
+
37
+ for (let i = 0; i < reverseParts.length; i++) {
38
+ const part = reverseParts[i];
39
+
40
+ if (part === '..') {
41
+ skipCounter++;
42
+ continue;
43
+ }
44
+
45
+ if (skipCounter) {
46
+ skipCounter--;
47
+ continue;
48
+ }
49
+
50
+ if (part && part !== '.') {
51
+ resolvedParts.unshift(part);
52
+ }
53
+ }
54
+
55
+ return resolvedParts.join('/');
56
+ }
@@ -1,8 +1,8 @@
1
- export interface TocItem {
2
- id: string;
3
- level: number;
4
- productName: string;
5
- title?: string;
6
- }
7
-
8
- export type Toc = TocItem[];
1
+ export interface TocItem {
2
+ id: string;
3
+ level: number;
4
+ productName: string;
5
+ title?: string;
6
+ }
7
+
8
+ export type Toc = TocItem[];
@@ -0,0 +1,7 @@
1
+ import type { MyIconName } from '#my-icons';
2
+
3
+ export interface BreadcrumbItem {
4
+ title: string;
5
+ icon: MyIconName;
6
+ link: string;
7
+ }
@@ -1,12 +1,12 @@
1
- export function detectContentBookId(contentId: string, bookIds: string[]) {
2
- let bestMatch: string | undefined = undefined;
3
- for (const bookId of bookIds) {
4
- if (contentId.startsWith(bookId)) {
5
- if (!bestMatch || bookId.length > bestMatch.length) {
6
- bestMatch = bookId;
7
- }
8
- }
9
- }
10
-
11
- return bestMatch;
12
- }
1
+ export function detectContentBookId(contentId: string, bookIds: string[]) {
2
+ let bestMatch: string | undefined = undefined;
3
+ for (const bookId of bookIds) {
4
+ if (contentId.startsWith(bookId)) {
5
+ if (!bestMatch || bookId.length > bestMatch.length) {
6
+ bestMatch = bookId;
7
+ }
8
+ }
9
+ }
10
+
11
+ return bestMatch;
12
+ }
@@ -1,9 +1,9 @@
1
- export interface ContextItem {
2
- type: string;
3
- icon: string;
4
- title: string;
5
- href: string;
6
- hidden: boolean;
7
- }
8
-
9
- export type Context = ContextItem[];
1
+ export interface ContextItem {
2
+ type: string;
3
+ icon: string;
4
+ title: string;
5
+ href: string;
6
+ hidden: boolean;
7
+ }
8
+
9
+ export type Context = ContextItem[];
@@ -1,32 +1,32 @@
1
- import type {
2
- ContentFlag,
3
- ContentReferences,
4
- ContentSeo,
5
- ContentType,
6
- TopicPart,
7
- } from '@erudit-js/cog/schema';
8
-
9
- import type { Context } from '@shared/content/context';
10
- import type { PreviousNext } from '@shared/content/previousNext';
11
- import type { ImageData } from '@shared/image';
12
-
13
- export interface ContentGenericData {
14
- contentId: string;
15
- title?: string;
16
- description?: string;
17
- decoration?: string;
18
- type: ContentType;
19
- context: Context;
20
- flags: Record<ContentFlag, boolean>;
21
- topicPart?: TopicPart;
22
- seo?: Partial<ContentSeo>;
23
- ogImage?: ImageData;
24
- previousNext: PreviousNext;
25
- dependencies?: Record<string, string>;
26
- references?: ContentReferences;
27
- }
28
-
29
- export interface ContentBaseData {
30
- type: ContentType;
31
- generic: ContentGenericData;
32
- }
1
+ import type {
2
+ ContentFlag,
3
+ ContentReferences,
4
+ ContentSeo,
5
+ ContentType,
6
+ TopicPart,
7
+ } from '@erudit-js/cog/schema';
8
+
9
+ import type { Context } from '@shared/content/context';
10
+ import type { PreviousNext } from '@shared/content/previousNext';
11
+ import type { ImageData } from '@shared/image';
12
+
13
+ export interface ContentGenericData {
14
+ contentId: string;
15
+ title?: string;
16
+ description?: string;
17
+ decoration?: string;
18
+ type: ContentType;
19
+ context: Context;
20
+ flags: Record<ContentFlag, boolean>;
21
+ topicPart?: TopicPart;
22
+ seo?: Partial<ContentSeo>;
23
+ ogImage?: ImageData;
24
+ previousNext: PreviousNext;
25
+ dependencies?: Record<string, string>;
26
+ references?: ContentReferences;
27
+ }
28
+
29
+ export interface ContentBaseData {
30
+ type: ContentType;
31
+ generic: ContentGenericData;
32
+ }
@@ -1,5 +1,5 @@
1
- import type { ContentTopicData } from './type/topic';
2
- import type { ContentGroupData } from './type/group';
3
- import type { ContentBookData } from './type/book';
4
-
5
- export type ContentData = ContentTopicData | ContentGroupData | ContentBookData;
1
+ import type { ContentTopicData } from './type/topic';
2
+ import type { ContentGroupData } from './type/group';
3
+ import type { ContentBookData } from './type/book';
4
+
5
+ export type ContentData = ContentTopicData | ContentGroupData | ContentBookData;
@@ -1,5 +1,5 @@
1
- import type { ContentBaseData } from '../base';
2
-
3
- export interface ContentBookData extends ContentBaseData {
4
- type: 'book';
5
- }
1
+ import type { ContentBaseData } from '../base';
2
+
3
+ export interface ContentBookData extends ContentBaseData {
4
+ type: 'book';
5
+ }
@@ -1,6 +1,6 @@
1
- import type { ContentBaseData } from '../base';
2
-
3
- export interface ContentGroupData extends ContentBaseData {
4
- type: 'group';
5
- bookTitle?: string;
6
- }
1
+ import type { ContentBaseData } from '../base';
2
+
3
+ export interface ContentGroupData extends ContentBaseData {
4
+ type: 'group';
5
+ bookTitle?: string;
6
+ }
@@ -1,11 +1,11 @@
1
- import type { TopicPart } from '@erudit-js/cog/schema';
2
-
3
- import type { ContentBaseData } from '../base';
4
-
5
- export type TopicPartLinks = Partial<Record<TopicPart, string>>;
6
-
7
- export interface ContentTopicData extends ContentBaseData {
8
- type: 'topic';
9
- topicPartLinks: TopicPartLinks;
10
- bookTitle?: string;
11
- }
1
+ import type { TopicPart } from '@erudit-js/cog/schema';
2
+
3
+ import type { ContentBaseData } from '../base';
4
+
5
+ export type TopicPartLinks = Partial<Record<TopicPart, string>>;
6
+
7
+ export interface ContentTopicData extends ContentBaseData {
8
+ type: 'topic';
9
+ topicPartLinks: TopicPartLinks;
10
+ bookTitle?: string;
11
+ }
@@ -1,9 +1,9 @@
1
- export interface PreviousNext {
2
- next?: PreviousNextItem;
3
- previous?: PreviousNextItem;
4
- }
5
-
6
- export interface PreviousNextItem {
7
- title: string;
8
- link: string;
9
- }
1
+ export interface PreviousNext {
2
+ next?: PreviousNextItem;
3
+ previous?: PreviousNextItem;
4
+ }
5
+
6
+ export interface PreviousNextItem {
7
+ title: string;
8
+ link: string;
9
+ }
@@ -1,5 +1,33 @@
1
- export interface ContentContributor {
2
- contributorId: string;
3
- displayName?: string;
4
- avatar?: string;
5
- }
1
+ import type { ContentType } from '@erudit-js/cog/schema';
2
+
3
+ export interface ContentContributor {
4
+ contributorId: string;
5
+ displayName?: string;
6
+ avatar?: string;
7
+ }
8
+
9
+ export interface Contribution {
10
+ bookTitle?: string;
11
+ contentType: ContentType;
12
+ contentTitle: string;
13
+ contentLink: string;
14
+ }
15
+
16
+ export interface PageContributor {
17
+ contributorId: string;
18
+ displayName?: string;
19
+ slogan?: string;
20
+ links?: Record<string, string>;
21
+ avatar?: string;
22
+ isEditor?: boolean;
23
+ hasDescription?: boolean;
24
+ contributions?: Contribution[];
25
+ }
26
+
27
+ export interface ContributorListItem {
28
+ contributorId: string;
29
+ displayName?: string;
30
+ isEditor?: boolean;
31
+ avatar?: string;
32
+ contributions: number;
33
+ }
@@ -1,41 +1,41 @@
1
- import type { ContentFlag, TopicPart } from '@erudit-js/cog/schema';
2
-
3
- export type FrontNavType = 'book' | 'topic' | 'separator' | 'folder';
4
-
5
- export interface FrontNavBase {
6
- type: FrontNavType;
7
- id: string;
8
- fullId: string;
9
- label: string;
10
- level: number;
11
- flags?: Partial<Record<ContentFlag, boolean>>;
12
- }
13
-
14
- export interface FrontNavTopic extends FrontNavBase {
15
- type: 'topic';
16
- part: TopicPart;
17
- }
18
-
19
- export interface FrontNavContainer extends FrontNavBase {
20
- children?: FrontNavItem[];
21
- }
22
-
23
- export interface FrontNavBook extends FrontNavContainer {
24
- type: 'book';
25
- }
26
-
27
- export interface FrontNavSeparator extends FrontNavContainer {
28
- type: 'separator';
29
- }
30
-
31
- export interface FrontNavFolder extends FrontNavContainer {
32
- type: 'folder';
33
- }
34
-
35
- export type FrontNavItem =
36
- | FrontNavTopic
37
- | FrontNavBook
38
- | FrontNavSeparator
39
- | FrontNavFolder;
40
-
41
- export type FrontNav = FrontNavItem[];
1
+ import type { ContentFlag, TopicPart } from '@erudit-js/cog/schema';
2
+
3
+ export type FrontNavType = 'book' | 'topic' | 'separator' | 'folder';
4
+
5
+ export interface FrontNavBase {
6
+ type: FrontNavType;
7
+ id: string;
8
+ fullId: string;
9
+ label: string;
10
+ level: number;
11
+ flags?: Partial<Record<ContentFlag, boolean>>;
12
+ }
13
+
14
+ export interface FrontNavTopic extends FrontNavBase {
15
+ type: 'topic';
16
+ part: TopicPart;
17
+ }
18
+
19
+ export interface FrontNavContainer extends FrontNavBase {
20
+ children?: FrontNavItem[];
21
+ }
22
+
23
+ export interface FrontNavBook extends FrontNavContainer {
24
+ type: 'book';
25
+ }
26
+
27
+ export interface FrontNavSeparator extends FrontNavContainer {
28
+ type: 'separator';
29
+ }
30
+
31
+ export interface FrontNavFolder extends FrontNavContainer {
32
+ type: 'folder';
33
+ }
34
+
35
+ export type FrontNavItem =
36
+ | FrontNavTopic
37
+ | FrontNavBook
38
+ | FrontNavSeparator
39
+ | FrontNavFolder;
40
+
41
+ export type FrontNav = FrontNavItem[];
package/shared/icons.ts CHANGED
@@ -1,38 +1,38 @@
1
- import {
2
- isContentType,
3
- isTopicPart,
4
- type BitranLocation,
5
- type ContentType,
6
- type TopicPart,
7
- } from '@erudit-js/cog/schema';
8
-
9
- import type { MyIconName } from '#my-icons';
10
-
11
- export const TOPIC_PART_ICON = {
12
- article: 'outline/file-lines',
13
- summary: 'file-star',
14
- practice: 'file-check',
15
- } satisfies Record<TopicPart, MyIconName>;
16
-
17
- export const CONTENT_TYPE_ICON = {
18
- book: 'outline/book',
19
- group: 'folder',
20
- topic: 'outline/file-lines',
21
- } satisfies Record<ContentType, MyIconName>;
22
-
23
- export const ICON = {
24
- contributor: 'user',
25
- } satisfies Record<string, MyIconName>;
26
-
27
- export function locationIcon(location: BitranLocation): MyIconName {
28
- if (isTopicPart(location.type)) return TOPIC_PART_ICON[location.type];
29
-
30
- if (isContentType(location.type)) return CONTENT_TYPE_ICON[location.type];
31
-
32
- switch (location.type) {
33
- case 'contributor':
34
- return ICON['contributor'];
35
- }
36
-
37
- return '__missing';
38
- }
1
+ import {
2
+ isContentType,
3
+ isTopicPart,
4
+ type BitranLocation,
5
+ type ContentType,
6
+ type TopicPart,
7
+ } from '@erudit-js/cog/schema';
8
+
9
+ import type { MyIconName } from '#my-icons';
10
+
11
+ export const TOPIC_PART_ICON = {
12
+ article: 'outline/file-lines',
13
+ summary: 'file-star',
14
+ practice: 'file-check',
15
+ } satisfies Record<TopicPart, MyIconName>;
16
+
17
+ export const CONTENT_TYPE_ICON = {
18
+ book: 'outline/book',
19
+ group: 'folder',
20
+ topic: 'outline/file-lines',
21
+ } satisfies Record<ContentType, MyIconName>;
22
+
23
+ export const ICON = {
24
+ contributor: 'user',
25
+ } satisfies Record<string, MyIconName>;
26
+
27
+ export function locationIcon(location: BitranLocation): MyIconName {
28
+ if (isTopicPart(location.type)) return TOPIC_PART_ICON[location.type];
29
+
30
+ if (isContentType(location.type)) return CONTENT_TYPE_ICON[location.type];
31
+
32
+ switch (location.type) {
33
+ case 'contributor':
34
+ return ICON['contributor'];
35
+ }
36
+
37
+ return '__missing';
38
+ }
package/shared/image.ts CHANGED
@@ -1,5 +1,5 @@
1
- export interface ImageData {
2
- src: string;
3
- width: number;
4
- height: number;
5
- }
1
+ export interface ImageData {
2
+ src: string;
3
+ width: number;
4
+ height: number;
5
+ }
package/shared/link.ts CHANGED
@@ -1,28 +1,28 @@
1
- import type {
2
- BitranLocation,
3
- ContentType,
4
- TopicPart,
5
- } from '@erudit-js/cog/schema';
6
-
7
- export function createBitranLocationLink(location: BitranLocation) {
8
- let link = `/${location.type}/${location.path}`;
9
-
10
- if (location.unique) link += `#${location.unique}`;
11
-
12
- return link;
13
- }
14
-
15
- export function createContentLink(contentType: ContentType, contentId: string) {
16
- // if (contentType === 'topic')
17
- // throw Error(`Use 'createTopicPartLink' to create links to topics!`);
18
-
19
- return `/${contentType}/${contentId}`;
20
- }
21
-
22
- export function createTopicPartLink(topicPart: TopicPart, contentId: string) {
23
- return `/${topicPart}/${contentId}`;
24
- }
25
-
26
- export function createContributorLink(contributorId: string) {
27
- return `/contributor/${contributorId}`;
28
- }
1
+ import type {
2
+ BitranLocation,
3
+ ContentType,
4
+ TopicPart,
5
+ } from '@erudit-js/cog/schema';
6
+
7
+ export function createBitranLocationLink(location: BitranLocation) {
8
+ let link = `/${location.type}/${location.path}`;
9
+
10
+ if (location.unique) link += `#${location.unique}`;
11
+
12
+ return link;
13
+ }
14
+
15
+ export function createContentLink(contentType: ContentType, contentId: string) {
16
+ // if (contentType === 'topic')
17
+ // throw Error(`Use 'createTopicPartLink' to create links to topics!`);
18
+
19
+ return `/${contentType}/${contentId}`;
20
+ }
21
+
22
+ export function createTopicPartLink(topicPart: TopicPart, contentId: string) {
23
+ return `/${topicPart}/${contentId}`;
24
+ }
25
+
26
+ export function createContributorLink(contributorId: string) {
27
+ return `/contributor/${contributorId}`;
28
+ }
package/shared/popover.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { MyIconName } from '#my-icons';
2
-
3
- export interface PopoverData {
4
- icon: MyIconName | (string & {});
5
- title: string;
6
- description: string;
7
- color: string;
8
- }
1
+ import type { MyIconName } from '#my-icons';
2
+
3
+ export interface PopoverData {
4
+ icon: MyIconName | (string & {});
5
+ title: string;
6
+ description: string;
7
+ color: string;
8
+ }