erudit 3.0.0-dev.16 → 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 (234) 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/ads/AdsProviderYandex.vue +2 -2
  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 +73 -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 +34 -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/AsideMinorContributor.vue +5 -5
  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/Contribute.vue +145 -145
  36. package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
  37. package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
  38. package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
  39. package/app/components/aside/minor/topic/TopicNav.vue +49 -49
  40. package/app/components/aside/minor/topic/TopicToc.vue +214 -214
  41. package/app/components/aside/minor/topic/TopicTocItem.vue +32 -32
  42. package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
  43. package/app/components/bitran/BitranContent.vue +91 -91
  44. package/app/components/bitran/RenderWrapper.vue +10 -10
  45. package/app/components/contributor/ContributorAvatar.vue +45 -45
  46. package/app/components/contributor/ContributorListItem.vue +35 -35
  47. package/app/components/main/topic/MainTopic.vue +88 -88
  48. package/app/components/main/topic/TopicPartSwitch.vue +118 -118
  49. package/app/components/main/utils/Breadcrumb.vue +74 -74
  50. package/app/components/main/utils/ContentDecoration.vue +29 -29
  51. package/app/components/main/utils/ContentDescription.vue +19 -19
  52. package/app/components/main/utils/ContentPopover.vue +188 -188
  53. package/app/components/main/utils/ContentPopovers.vue +111 -111
  54. package/app/components/main/utils/ContentReferences.vue +70 -70
  55. package/app/components/main/utils/ContentSection.vue +45 -45
  56. package/app/components/main/utils/ContentTitle.vue +63 -63
  57. package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
  58. package/app/components/main/utils/reference/ReferenceItem.vue +70 -70
  59. package/app/components/main/utils/reference/ReferenceSource.vue +120 -120
  60. package/app/components/preview/Preview.vue +186 -186
  61. package/app/components/preview/PreviewDisplay.vue +139 -139
  62. package/app/components/preview/PreviewFooterAction.vue +73 -73
  63. package/app/components/preview/PreviewLoading.vue +14 -14
  64. package/app/components/preview/PreviewScreen.vue +141 -141
  65. package/app/components/preview/display/Alert.vue +50 -50
  66. package/app/components/preview/display/Custom.vue +18 -18
  67. package/app/components/preview/display/GenericLink.vue +48 -48
  68. package/app/components/preview/display/PageLink.vue +22 -22
  69. package/app/components/preview/display/Unique.vue +55 -55
  70. package/app/components/transition/Fade.vue +19 -19
  71. package/app/components/tree/TreeContainer.vue +11 -11
  72. package/app/components/tree/TreeItem.vue +89 -89
  73. package/app/composables/adsAllowed.ts +11 -0
  74. package/app/composables/bitran.ts +108 -108
  75. package/app/composables/bitranContent.ts +96 -92
  76. package/app/composables/bitranLocation.ts +7 -7
  77. package/app/composables/contentData.ts +38 -38
  78. package/app/composables/contentPage.ts +168 -158
  79. package/app/composables/contentRoute.ts +45 -45
  80. package/app/composables/darkMagic.ts +24 -24
  81. package/app/composables/externalApi.ts +69 -69
  82. package/app/composables/favicon.ts +8 -8
  83. package/app/composables/formatText.ts +99 -99
  84. package/app/composables/majorPane.ts +60 -60
  85. package/app/composables/phrases.ts +65 -65
  86. package/app/composables/theme.ts +29 -29
  87. package/app/composables/url.ts +33 -33
  88. package/app/pages/_test/preview.vue +110 -110
  89. package/app/pages/article/[...articleId].vue +3 -3
  90. package/app/pages/book/[...bookId].vue +47 -47
  91. package/app/pages/group/[...groupId].vue +66 -66
  92. package/app/pages/index.vue +32 -32
  93. package/app/pages/members.vue +5 -6
  94. package/app/pages/practice/[...practice].vue +3 -3
  95. package/app/pages/summary/[...summaryId].vue +3 -3
  96. package/app/plugins/analytics.ts +8 -0
  97. package/app/plugins/prerender.server.ts +22 -22
  98. package/app/scripts/_immediate.js +9 -9
  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 +76 -76
  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 +23 -23
  110. package/app/scripts/preview/data/unique.ts +72 -72
  111. package/app/scripts/preview/data.ts +24 -24
  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 -7
  117. package/app/styles/_util.scss +43 -43
  118. package/app/styles/_utils.scss +44 -44
  119. package/app/styles/app.scss +91 -91
  120. package/app/styles/def/_bp.scss +27 -27
  121. package/app/styles/def/_size.scss +7 -7
  122. package/app/styles/def/_z.scss +5 -5
  123. package/app/styles/normalize.scss +49 -49
  124. package/app/styles/partials/_darkMagic.scss +5 -5
  125. package/app/styles/partials/_fnav.scss +15 -15
  126. package/app/styles/partials/_preview.scss +5 -5
  127. package/bin/erudit.mjs +2 -2
  128. package/const.ts +4 -4
  129. package/globalPath.ts +21 -21
  130. package/globals/bitran.ts +1 -1
  131. package/globals/content.ts +27 -27
  132. package/globals/contributor.ts +5 -5
  133. package/globals/erudit.ts +5 -5
  134. package/globals/register.ts +18 -18
  135. package/languages/en.ts +94 -94
  136. package/languages/ru.ts +98 -98
  137. package/module/bitran.ts +66 -66
  138. package/module/config.ts +35 -35
  139. package/module/imports.ts +67 -67
  140. package/module/index.ts +47 -47
  141. package/module/logger.ts +10 -10
  142. package/module/paths.ts +22 -22
  143. package/module/restart.ts +61 -61
  144. package/nuxt.config.ts +131 -131
  145. package/package.json +4 -4
  146. package/server/api/aside/major/nav/bookIds.ts +5 -5
  147. package/server/api/aside/major/nav/bookNav/[...bookId].ts +17 -20
  148. package/server/api/aside/major/nav/global.ts +7 -7
  149. package/server/api/aside/minor/news.ts +7 -7
  150. package/server/api/aside/minor/path.ts +82 -82
  151. package/server/api/bitran/content/[...location].ts +10 -10
  152. package/server/api/bitran/toc/[...location].ts +9 -9
  153. package/server/api/content/data.ts +75 -75
  154. package/server/api/contributor/count.ts +6 -6
  155. package/server/api/fake/content.ts +11 -11
  156. package/server/api/fake/shared/languages.ts +12 -12
  157. package/server/api/language/functions.ts +12 -12
  158. package/server/api/language/phrase/[phraseId].ts +19 -19
  159. package/server/api/language/phraseIds.ts +8 -8
  160. package/server/api/prerender.ts +19 -120
  161. package/server/api/preview/page/[...parts].ts +78 -78
  162. package/server/api/preview/unique/[...location].ts +61 -61
  163. package/server/plugin/bitran/content.ts +237 -190
  164. package/server/plugin/bitran/elements/include.ts +229 -229
  165. package/server/plugin/bitran/location.ts +39 -39
  166. package/server/plugin/bitran/toc.ts +94 -94
  167. package/server/plugin/bitran/transpiler.ts +18 -18
  168. package/server/plugin/build/close.ts +12 -12
  169. package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
  170. package/server/plugin/build/jobs/content/generic.ts +191 -191
  171. package/server/plugin/build/jobs/content/parse.ts +113 -113
  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 +345 -345
  179. package/server/plugin/build/process.ts +32 -32
  180. package/server/plugin/build/rebuild.ts +66 -66
  181. package/server/plugin/build/setup.ts +19 -19
  182. package/server/plugin/content/context.ts +119 -119
  183. package/server/plugin/db/entities/Book.ts +7 -7
  184. package/server/plugin/db/entities/Content.ts +45 -45
  185. package/server/plugin/db/entities/Contribution.ts +10 -10
  186. package/server/plugin/db/entities/Contributor.ts +16 -16
  187. package/server/plugin/db/entities/File.ts +10 -10
  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/reset.ts +12 -12
  193. package/server/plugin/db/setup.ts +49 -49
  194. package/server/plugin/global.ts +16 -16
  195. package/server/plugin/importer.ts +16 -16
  196. package/server/plugin/index.ts +9 -9
  197. package/server/plugin/logger.ts +23 -23
  198. package/server/plugin/nav/node.ts +27 -27
  199. package/server/plugin/nav/utils.ts +179 -175
  200. package/server/plugin/repository/book.ts +23 -21
  201. package/server/plugin/repository/content.ts +240 -240
  202. package/server/plugin/repository/contentId.ts +40 -40
  203. package/server/plugin/repository/contributor.ts +8 -8
  204. package/server/plugin/repository/file.ts +10 -10
  205. package/server/plugin/repository/frontNav.ts +145 -145
  206. package/server/plugin/repository/topic.ts +35 -35
  207. package/server/tsconfig.json +9 -9
  208. package/shared/aside/minor.ts +51 -51
  209. package/shared/asset.ts +22 -22
  210. package/shared/bitran/contentId.ts +56 -56
  211. package/shared/bitran/stringContent.ts +6 -6
  212. package/shared/bitran/toc.ts +8 -8
  213. package/shared/content/bookId.ts +12 -12
  214. package/shared/content/context.ts +9 -9
  215. package/shared/content/data/base.ts +32 -32
  216. package/shared/content/data/index.ts +5 -5
  217. package/shared/content/data/type/book.ts +5 -5
  218. package/shared/content/data/type/group.ts +6 -6
  219. package/shared/content/data/type/topic.ts +11 -11
  220. package/shared/content/previousNext.ts +9 -9
  221. package/shared/contributor.ts +5 -5
  222. package/shared/frontNav.ts +41 -41
  223. package/shared/icons.ts +38 -38
  224. package/shared/image.ts +5 -5
  225. package/shared/link.ts +28 -28
  226. package/shared/popover.ts +8 -8
  227. package/shared/types/language.ts +74 -74
  228. package/shared/utils/objectsEqual.ts +4 -4
  229. package/shared/utils/stringColor.ts +9 -9
  230. package/test/contentId.test.ts +91 -91
  231. package/tsconfig.json +8 -8
  232. package/utils/contentPath.ts +67 -67
  233. package/utils/slash.ts +11 -11
  234. package/utils/stress.ts +9 -9
@@ -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,5 @@
1
- export interface ContentContributor {
2
- contributorId: string;
3
- displayName?: string;
4
- avatar?: string;
5
- }
1
+ export interface ContentContributor {
2
+ contributorId: string;
3
+ displayName?: string;
4
+ avatar?: string;
5
+ }
@@ -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
+ }
@@ -1,74 +1,74 @@
1
- export interface EruditPhrases {
2
- _language_title: string;
3
- _language_code: string;
4
-
5
- site_info_title: string;
6
- site_info_slogan: string;
7
- seo_index_title: string;
8
- seo_index_description: string;
9
- seo_article_description: (contentTitle: string) => string;
10
- seo_summary_description: (contentTitle: string) => string;
11
- seo_practice_description: (contentTitle: string) => string;
12
- index: string;
13
- pages: string;
14
- search: string;
15
- language: string;
16
- other: string;
17
- ads_replacer: string;
18
- theme: string;
19
- theme_system: string;
20
- theme_light: string;
21
- theme_dark: string;
22
- content: string;
23
- main_page: string;
24
- members: string;
25
- add_translation: string;
26
- empty_nav: string;
27
- flag_dev: string;
28
- flag_dev_description: string;
29
- flag_advanced: string;
30
- flag_advanced_description: string;
31
- flag_secondary: string;
32
- flag_secondary_description: string;
33
- popover_dependencies: string;
34
- popover_dependencies_description: string;
35
- to_index: string;
36
- about_book: string;
37
- close: string;
38
- back: string;
39
- goto: string;
40
- error: string;
41
- external_link: string;
42
- external_link_warn: string;
43
- internal_link: string;
44
- internal_link_warn: string;
45
- book: string;
46
- group: string;
47
- topic: string;
48
- article: string;
49
- summary: string;
50
- practice: string;
51
- contributor: string;
52
- element_id: string;
53
- preview_missing_title: string;
54
- preview_missing_explain: string;
55
- preview_missing_explain_mismatch: string;
56
- preview_hash_mismatch_title: string;
57
- preview_hash_mismatch_explain: string;
58
- current_page_hash: string;
59
- expected_page_hash: string;
60
- empty_toc: string;
61
- contributors: string;
62
- no_contributors: string;
63
- make_contribution: string;
64
- material_improvement: string;
65
- how_to_improve: string;
66
- edit_page: string;
67
- report_problem: string;
68
- references: string;
69
- reference_source_featured: string;
70
- references_description: string;
71
- }
72
-
73
- export type EruditPhraseId = keyof Partial<EruditPhrases>;
74
- export type EruditPhrase = EruditPhrases[keyof EruditPhrases];
1
+ export interface EruditPhrases {
2
+ _language_title: string;
3
+ _language_code: string;
4
+
5
+ site_info_title: string;
6
+ site_info_slogan: string;
7
+ seo_index_title: string;
8
+ seo_index_description: string;
9
+ seo_article_description: (contentTitle: string) => string;
10
+ seo_summary_description: (contentTitle: string) => string;
11
+ seo_practice_description: (contentTitle: string) => string;
12
+ index: string;
13
+ pages: string;
14
+ search: string;
15
+ language: string;
16
+ other: string;
17
+ ads_replacer: string;
18
+ theme: string;
19
+ theme_system: string;
20
+ theme_light: string;
21
+ theme_dark: string;
22
+ content: string;
23
+ main_page: string;
24
+ members: string;
25
+ add_translation: string;
26
+ empty_nav: string;
27
+ flag_dev: string;
28
+ flag_dev_description: string;
29
+ flag_advanced: string;
30
+ flag_advanced_description: string;
31
+ flag_secondary: string;
32
+ flag_secondary_description: string;
33
+ popover_dependencies: string;
34
+ popover_dependencies_description: string;
35
+ to_index: string;
36
+ about_book: string;
37
+ close: string;
38
+ back: string;
39
+ goto: string;
40
+ error: string;
41
+ external_link: string;
42
+ external_link_warn: string;
43
+ internal_link: string;
44
+ internal_link_warn: string;
45
+ book: string;
46
+ group: string;
47
+ topic: string;
48
+ article: string;
49
+ summary: string;
50
+ practice: string;
51
+ contributor: string;
52
+ element_id: string;
53
+ preview_missing_title: string;
54
+ preview_missing_explain: string;
55
+ preview_missing_explain_mismatch: string;
56
+ preview_hash_mismatch_title: string;
57
+ preview_hash_mismatch_explain: string;
58
+ current_page_hash: string;
59
+ expected_page_hash: string;
60
+ empty_toc: string;
61
+ contributors: string;
62
+ no_contributors: string;
63
+ make_contribution: string;
64
+ material_improvement: string;
65
+ how_to_improve: string;
66
+ edit_page: string;
67
+ report_problem: string;
68
+ references: string;
69
+ reference_source_featured: string;
70
+ references_description: string;
71
+ }
72
+
73
+ export type EruditPhraseId = keyof Partial<EruditPhrases>;
74
+ export type EruditPhrase = EruditPhrases[keyof EruditPhrases];
@@ -1,4 +1,4 @@
1
- export function objectsEqual(a: any, b: any) {
2
- const str = (obj: any) => JSON.stringify(obj)?.split('').sort().join('');
3
- return str(a) === str(b);
4
- }
1
+ export function objectsEqual(a: any, b: any) {
2
+ const str = (obj: any) => JSON.stringify(obj)?.split('').sort().join('');
3
+ return str(a) === str(b);
4
+ }
@@ -1,9 +1,9 @@
1
- export function stringColor(text: string) {
2
- let hash = 0;
3
-
4
- for (let i = 0; i < text.length; i++) {
5
- hash = text.charCodeAt(i) + ((hash << 5) - hash);
6
- }
7
-
8
- return `hsl(${hash % 360}, 85%, 35%)`;
9
- }
1
+ export function stringColor(text: string) {
2
+ let hash = 0;
3
+
4
+ for (let i = 0; i < text.length; i++) {
5
+ hash = text.charCodeAt(i) + ((hash << 5) - hash);
6
+ }
7
+
8
+ return `hsl(${hash % 360}, 85%, 35%)`;
9
+ }