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.
- package/app/app.vue +193 -191
- package/app/components/Loading.vue +23 -23
- package/app/components/SiteAside.vue +393 -393
- package/app/components/SiteMain.vue +32 -32
- package/app/components/ads/AdsProviderYandex.vue +2 -2
- package/app/components/aside/AsideListItem.vue +74 -74
- package/app/components/aside/AsideMajor.vue +56 -56
- package/app/components/aside/AsideMinor.vue +73 -73
- package/app/components/aside/major/PaneContentScroll.vue +23 -23
- package/app/components/aside/major/PaneSwitch.vue +54 -54
- package/app/components/aside/major/PaneSwitchButton.vue +63 -63
- package/app/components/aside/major/SiteInfo.vue +85 -85
- package/app/components/aside/major/panes/Language.vue +79 -79
- package/app/components/aside/major/panes/Pages.vue +34 -34
- package/app/components/aside/major/panes/Search.vue +11 -11
- package/app/components/aside/major/panes/nav/Nav.vue +92 -92
- package/app/components/aside/major/panes/nav/NavBook.vue +95 -95
- package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
- package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
- package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
- package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
- package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
- package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
- package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
- package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
- package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
- package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
- package/app/components/aside/major/panes/other/ItemGenerator.vue +13 -13
- package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
- package/app/components/aside/major/panes/other/Other.vue +16 -16
- package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
- package/app/components/aside/minor/AsideMinorNews.vue +11 -11
- package/app/components/aside/minor/AsideMinorPane.vue +15 -15
- package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
- package/app/components/aside/minor/Contribute.vue +145 -145
- package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
- package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
- package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
- package/app/components/aside/minor/topic/TopicNav.vue +49 -49
- package/app/components/aside/minor/topic/TopicToc.vue +214 -214
- package/app/components/aside/minor/topic/TopicTocItem.vue +32 -32
- package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
- package/app/components/bitran/BitranContent.vue +91 -91
- package/app/components/bitran/RenderWrapper.vue +10 -10
- package/app/components/contributor/ContributorAvatar.vue +45 -45
- package/app/components/contributor/ContributorListItem.vue +35 -35
- package/app/components/main/topic/MainTopic.vue +88 -88
- package/app/components/main/topic/TopicPartSwitch.vue +118 -118
- package/app/components/main/utils/Breadcrumb.vue +74 -74
- package/app/components/main/utils/ContentDecoration.vue +29 -29
- package/app/components/main/utils/ContentDescription.vue +19 -19
- package/app/components/main/utils/ContentPopover.vue +188 -188
- package/app/components/main/utils/ContentPopovers.vue +111 -111
- package/app/components/main/utils/ContentReferences.vue +70 -70
- package/app/components/main/utils/ContentSection.vue +45 -45
- package/app/components/main/utils/ContentTitle.vue +63 -63
- package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
- package/app/components/main/utils/reference/ReferenceItem.vue +70 -70
- package/app/components/main/utils/reference/ReferenceSource.vue +120 -120
- package/app/components/preview/Preview.vue +186 -186
- package/app/components/preview/PreviewDisplay.vue +139 -139
- package/app/components/preview/PreviewFooterAction.vue +73 -73
- package/app/components/preview/PreviewLoading.vue +14 -14
- package/app/components/preview/PreviewScreen.vue +141 -141
- package/app/components/preview/display/Alert.vue +50 -50
- package/app/components/preview/display/Custom.vue +18 -18
- package/app/components/preview/display/GenericLink.vue +48 -48
- package/app/components/preview/display/PageLink.vue +22 -22
- package/app/components/preview/display/Unique.vue +55 -55
- package/app/components/transition/Fade.vue +19 -19
- package/app/components/tree/TreeContainer.vue +11 -11
- package/app/components/tree/TreeItem.vue +89 -89
- package/app/composables/adsAllowed.ts +11 -0
- package/app/composables/bitran.ts +108 -108
- package/app/composables/bitranContent.ts +96 -92
- package/app/composables/bitranLocation.ts +7 -7
- package/app/composables/contentData.ts +38 -38
- package/app/composables/contentPage.ts +168 -158
- package/app/composables/contentRoute.ts +45 -45
- package/app/composables/darkMagic.ts +24 -24
- package/app/composables/externalApi.ts +69 -69
- package/app/composables/favicon.ts +8 -8
- package/app/composables/formatText.ts +99 -99
- package/app/composables/majorPane.ts +60 -60
- package/app/composables/phrases.ts +65 -65
- package/app/composables/theme.ts +29 -29
- package/app/composables/url.ts +33 -33
- package/app/pages/_test/preview.vue +110 -110
- package/app/pages/article/[...articleId].vue +3 -3
- package/app/pages/book/[...bookId].vue +47 -47
- package/app/pages/group/[...groupId].vue +66 -66
- package/app/pages/index.vue +32 -32
- package/app/pages/members.vue +5 -6
- package/app/pages/practice/[...practice].vue +3 -3
- package/app/pages/summary/[...summaryId].vue +3 -3
- package/app/plugins/analytics.ts +8 -0
- package/app/plugins/prerender.server.ts +22 -22
- package/app/scripts/_immediate.js +9 -9
- package/app/scripts/aside/index.ts +59 -59
- package/app/scripts/aside/major/nav.ts +26 -26
- package/app/scripts/aside/minor/state.ts +37 -37
- package/app/scripts/aside/minor/topic.ts +3 -3
- package/app/scripts/flag.ts +28 -28
- package/app/scripts/og.ts +27 -27
- package/app/scripts/preview/build.ts +76 -76
- package/app/scripts/preview/data/alert.ts +19 -19
- package/app/scripts/preview/data/custom.ts +8 -8
- package/app/scripts/preview/data/genericLink.ts +24 -24
- package/app/scripts/preview/data/pageLink.ts +23 -23
- package/app/scripts/preview/data/unique.ts +72 -72
- package/app/scripts/preview/data.ts +24 -24
- package/app/scripts/preview/display.ts +37 -37
- package/app/scripts/preview/footer.ts +9 -9
- package/app/scripts/preview/request.ts +51 -51
- package/app/scripts/preview/state.ts +63 -63
- package/app/styles/_immediate.css +7 -7
- package/app/styles/_util.scss +43 -43
- package/app/styles/_utils.scss +44 -44
- package/app/styles/app.scss +91 -91
- package/app/styles/def/_bp.scss +27 -27
- package/app/styles/def/_size.scss +7 -7
- package/app/styles/def/_z.scss +5 -5
- package/app/styles/normalize.scss +49 -49
- package/app/styles/partials/_darkMagic.scss +5 -5
- package/app/styles/partials/_fnav.scss +15 -15
- package/app/styles/partials/_preview.scss +5 -5
- package/bin/erudit.mjs +2 -2
- package/const.ts +4 -4
- package/globalPath.ts +21 -21
- package/globals/bitran.ts +1 -1
- package/globals/content.ts +27 -27
- package/globals/contributor.ts +5 -5
- package/globals/erudit.ts +5 -5
- package/globals/register.ts +18 -18
- package/languages/en.ts +94 -94
- package/languages/ru.ts +98 -98
- package/module/bitran.ts +66 -66
- package/module/config.ts +35 -35
- package/module/imports.ts +67 -67
- package/module/index.ts +47 -47
- package/module/logger.ts +10 -10
- package/module/paths.ts +22 -22
- package/module/restart.ts +61 -61
- package/nuxt.config.ts +131 -131
- package/package.json +4 -4
- package/server/api/aside/major/nav/bookIds.ts +5 -5
- package/server/api/aside/major/nav/bookNav/[...bookId].ts +17 -20
- package/server/api/aside/major/nav/global.ts +7 -7
- package/server/api/aside/minor/news.ts +7 -7
- package/server/api/aside/minor/path.ts +82 -82
- package/server/api/bitran/content/[...location].ts +10 -10
- package/server/api/bitran/toc/[...location].ts +9 -9
- package/server/api/content/data.ts +75 -75
- package/server/api/contributor/count.ts +6 -6
- package/server/api/fake/content.ts +11 -11
- package/server/api/fake/shared/languages.ts +12 -12
- package/server/api/language/functions.ts +12 -12
- package/server/api/language/phrase/[phraseId].ts +19 -19
- package/server/api/language/phraseIds.ts +8 -8
- package/server/api/prerender.ts +19 -120
- package/server/api/preview/page/[...parts].ts +78 -78
- package/server/api/preview/unique/[...location].ts +61 -61
- package/server/plugin/bitran/content.ts +237 -190
- package/server/plugin/bitran/elements/include.ts +229 -229
- package/server/plugin/bitran/location.ts +39 -39
- package/server/plugin/bitran/toc.ts +94 -94
- package/server/plugin/bitran/transpiler.ts +18 -18
- package/server/plugin/build/close.ts +12 -12
- package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
- package/server/plugin/build/jobs/content/generic.ts +191 -191
- package/server/plugin/build/jobs/content/parse.ts +113 -113
- package/server/plugin/build/jobs/content/path.ts +6 -6
- package/server/plugin/build/jobs/content/type/book.ts +9 -9
- package/server/plugin/build/jobs/content/type/group.ts +37 -37
- package/server/plugin/build/jobs/content/type/topic.ts +36 -36
- package/server/plugin/build/jobs/contributors.ts +66 -66
- package/server/plugin/build/jobs/language.ts +36 -36
- package/server/plugin/build/jobs/nav.ts +345 -345
- package/server/plugin/build/process.ts +32 -32
- package/server/plugin/build/rebuild.ts +66 -66
- package/server/plugin/build/setup.ts +19 -19
- package/server/plugin/content/context.ts +119 -119
- package/server/plugin/db/entities/Book.ts +7 -7
- package/server/plugin/db/entities/Content.ts +45 -45
- package/server/plugin/db/entities/Contribution.ts +10 -10
- package/server/plugin/db/entities/Contributor.ts +16 -16
- package/server/plugin/db/entities/File.ts +10 -10
- package/server/plugin/db/entities/Group.ts +14 -14
- package/server/plugin/db/entities/Hash.ts +15 -15
- package/server/plugin/db/entities/Topic.ts +20 -20
- package/server/plugin/db/entities/Unique.ts +21 -21
- package/server/plugin/db/reset.ts +12 -12
- package/server/plugin/db/setup.ts +49 -49
- package/server/plugin/global.ts +16 -16
- package/server/plugin/importer.ts +16 -16
- package/server/plugin/index.ts +9 -9
- package/server/plugin/logger.ts +23 -23
- package/server/plugin/nav/node.ts +27 -27
- package/server/plugin/nav/utils.ts +179 -175
- package/server/plugin/repository/book.ts +23 -21
- package/server/plugin/repository/content.ts +240 -240
- package/server/plugin/repository/contentId.ts +40 -40
- package/server/plugin/repository/contributor.ts +8 -8
- package/server/plugin/repository/file.ts +10 -10
- package/server/plugin/repository/frontNav.ts +145 -145
- package/server/plugin/repository/topic.ts +35 -35
- package/server/tsconfig.json +9 -9
- package/shared/aside/minor.ts +51 -51
- package/shared/asset.ts +22 -22
- package/shared/bitran/contentId.ts +56 -56
- package/shared/bitran/stringContent.ts +6 -6
- package/shared/bitran/toc.ts +8 -8
- package/shared/content/bookId.ts +12 -12
- package/shared/content/context.ts +9 -9
- package/shared/content/data/base.ts +32 -32
- package/shared/content/data/index.ts +5 -5
- package/shared/content/data/type/book.ts +5 -5
- package/shared/content/data/type/group.ts +6 -6
- package/shared/content/data/type/topic.ts +11 -11
- package/shared/content/previousNext.ts +9 -9
- package/shared/contributor.ts +5 -5
- package/shared/frontNav.ts +41 -41
- package/shared/icons.ts +38 -38
- package/shared/image.ts +5 -5
- package/shared/link.ts +28 -28
- package/shared/popover.ts +8 -8
- package/shared/types/language.ts +74 -74
- package/shared/utils/objectsEqual.ts +4 -4
- package/shared/utils/stringColor.ts +9 -9
- package/test/contentId.test.ts +91 -91
- package/tsconfig.json +8 -8
- package/utils/contentPath.ts +67 -67
- package/utils/slash.ts +11 -11
- package/utils/stress.ts +9 -9
package/shared/content/bookId.ts
CHANGED
|
@@ -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
|
+
}
|
package/shared/contributor.ts
CHANGED
|
@@ -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
|
+
}
|
package/shared/frontNav.ts
CHANGED
|
@@ -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
|
+
}
|
package/shared/types/language.ts
CHANGED
|
@@ -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
|
+
}
|