erudit 3.0.0-dev.2 → 3.0.0-dev.21
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 +195 -172
- package/app/assets/icons/cameo-add.svg +3 -0
- package/app/assets/icons/diamond.svg +3 -0
- package/app/assets/icons/graduation.svg +3 -0
- package/app/components/Avatar.vue +118 -0
- package/app/components/EruditLink.vue +17 -0
- package/app/components/Loading.vue +23 -23
- package/app/components/SiteAside.vue +393 -382
- package/app/components/SiteMain.vue +32 -35
- package/app/components/ads/Ads.vue +33 -0
- package/app/components/ads/AdsBannerAside.vue +61 -0
- package/app/components/ads/AdsBannerBottom.vue +22 -0
- package/app/components/ads/AdsProviderCustom.vue +35 -0
- package/app/components/ads/AdsProviderYandex.vue +91 -0
- package/app/components/ads/AdsReplacer.vue +73 -0
- package/app/components/aside/AsideListItem.vue +91 -74
- package/app/components/aside/AsideMajor.vue +56 -56
- package/app/components/aside/AsideMinor.vue +97 -71
- 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 +50 -34
- package/app/components/aside/major/panes/Search.vue +11 -11
- package/app/components/aside/major/panes/nav/Nav.vue +92 -91
- package/app/components/aside/major/panes/nav/NavBook.vue +95 -86
- 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 -15
- 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/{Contribute.vue → AsideMinorContribute.vue} +175 -145
- 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 +66 -67
- package/app/components/aside/minor/content/AsideMinorContent.vue +89 -92
- package/app/components/aside/minor/contributor/AsideMinorContributor.vue +78 -0
- package/app/components/aside/minor/contributor/BookContribution.vue +64 -0
- package/app/components/aside/minor/topic/AsideMinorTopic.vue +31 -32
- package/app/components/aside/minor/topic/TopicContributors.vue +183 -177
- package/app/components/aside/minor/topic/TopicNav.vue +49 -49
- package/app/components/aside/minor/topic/TopicToc.vue +212 -203
- package/app/components/aside/minor/topic/TopicTocItem.vue +19 -31
- package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
- package/app/components/bitran/BitranContent.vue +90 -63
- package/app/components/bitran/RenderWrapper.vue +10 -10
- package/app/components/contributor/ContributorListItem.vue +43 -35
- package/app/components/main/MainActionButton.vue +51 -0
- package/app/components/main/MainBitranContent.vue +55 -0
- package/app/components/main/{utils/Breadcrumb.vue → MainBreadcrumb.vue} +63 -75
- package/app/components/main/MainDescription.vue +24 -0
- package/app/components/main/MainSection.vue +58 -0
- package/app/components/main/MainTitle.vue +76 -0
- package/app/components/main/cameo/MainCameo.vue +135 -0
- package/app/components/main/cameo/MainCameoData.vue +232 -0
- package/app/components/main/content/ContentBreadcrumb.vue +28 -0
- package/app/components/main/{utils → content}/ContentDecoration.vue +29 -29
- package/app/components/main/{utils → content}/ContentPopover.vue +188 -176
- package/app/components/main/{utils → content}/ContentPopovers.vue +111 -105
- package/app/components/main/{utils → content}/ContentReferences.vue +70 -70
- package/app/components/main/{utils → content}/reference/ReferenceGroup.vue +38 -38
- package/app/components/main/{utils → content}/reference/ReferenceItem.vue +70 -68
- package/app/components/main/{utils → content}/reference/ReferenceSource.vue +120 -116
- package/app/components/main/topic/MainTopic.vue +76 -79
- package/app/components/main/topic/TopicPartSwitch.vue +119 -118
- package/app/components/preview/Preview.vue +186 -177
- 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 -99
- 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 -20
- package/app/components/preview/display/Unique.vue +46 -49
- package/app/components/sponsor/SponsorTier1.vue +89 -0
- package/app/components/sponsor/SponsorTier2.vue +109 -0
- package/app/components/transition/Fade.vue +19 -19
- package/app/components/tree/TreeContainer.vue +11 -11
- package/app/components/tree/TreeItem.vue +93 -89
- package/app/composables/adsAllowed.ts +11 -0
- package/app/composables/asset.ts +12 -0
- package/app/composables/bitran.ts +108 -127
- package/app/composables/bitranLocation.ts +7 -7
- package/app/composables/contentData.ts +38 -36
- package/app/composables/contentPage.ts +168 -156
- package/app/composables/contentRoute.ts +45 -45
- package/app/composables/darkMagic.ts +24 -24
- package/app/composables/externalApi.ts +69 -63
- package/app/composables/favicon.ts +8 -8
- package/app/composables/formatText.ts +99 -86
- package/app/composables/head.ts +24 -0
- package/app/composables/majorPane.ts +62 -60
- package/app/composables/phrases.ts +77 -80
- package/app/composables/theme.ts +29 -29
- package/app/composables/url.ts +43 -33
- package/app/pages/_test/preview.vue +110 -110
- package/app/pages/article/[...articleId].vue +3 -3
- package/app/pages/book/[...bookId].vue +42 -47
- package/app/pages/contributor/[contributorId].vue +227 -0
- package/app/pages/contributors.vue +184 -0
- package/app/pages/group/[...groupId].vue +53 -65
- package/app/pages/index.vue +32 -32
- package/app/pages/practice/[...practice].vue +3 -3
- package/app/pages/sponsors.vue +95 -0
- package/app/pages/summary/[...summaryId].vue +3 -3
- package/app/plugins/analytics.ts +95 -0
- package/app/plugins/prerender.server.ts +34 -0
- package/app/public/favicon/article.svg +5 -5
- package/app/public/favicon/default.svg +3 -3
- package/app/public/favicon/practice.svg +3 -3
- package/app/public/favicon/summary.svg +4 -4
- package/app/public/logotype.svg +2 -2
- 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/flag.ts +28 -28
- package/app/scripts/og.ts +28 -27
- package/app/scripts/preview/build.ts +76 -73
- 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 -20
- package/app/scripts/preview/data/unique.ts +69 -70
- 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 -63
- 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 -0
- package/const.ts +3 -0
- package/globalPath.ts +21 -21
- package/globals/bitran.ts +1 -47
- package/globals/cameo.ts +5 -0
- package/globals/content.ts +27 -22
- package/globals/contributor.ts +5 -5
- package/globals/erudit.ts +5 -5
- package/globals/register.ts +23 -18
- package/globals/sponsor.ts +17 -0
- package/languages/en.ts +108 -95
- package/languages/ru.ts +112 -99
- package/module/bitran.ts +66 -34
- package/module/config.ts +35 -34
- package/module/imports.ts +74 -46
- 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 +126 -112
- package/package.json +22 -15
- 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/book/[...bookId].ts +18 -0
- package/server/api/aside/minor/contributor/[contributorId].ts +18 -0
- package/server/api/aside/minor/group/[...groupId].ts +18 -0
- package/server/api/aside/minor/news.ts +7 -7
- package/server/api/aside/minor/topic.ts +36 -0
- package/server/api/bitran/content/[...location].ts +13 -0
- package/server/api/bitran/toc/[...location].ts +9 -0
- package/server/api/cameo/data/[cameoId].ts +42 -0
- package/server/api/cameo/ids.ts +5 -0
- package/server/api/content/data.ts +75 -72
- package/server/api/contributor/count.ts +6 -6
- package/server/api/contributor/list.ts +44 -0
- package/server/api/contributor/page/[contributorId].ts +14 -0
- 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/assets/cameo.ts +14 -0
- package/server/api/prerender/assets/contributor.ts +12 -0
- package/server/api/prerender/assets/sponsor.ts +13 -0
- package/server/api/prerender/cameos.ts +12 -0
- package/server/api/prerender/language.ts +9 -0
- package/server/api/preview/page/[...parts].ts +78 -51
- package/server/api/preview/unique/{[location].ts → [...location].ts} +48 -55
- package/server/api/problem/generator/[...path].ts +26 -0
- package/server/api/sponsor/cameo/data/[sponsorId].ts +51 -0
- package/server/api/sponsor/cameo/ids.ts +5 -0
- package/server/api/sponsor/count.ts +5 -0
- package/server/api/sponsor/list.ts +36 -0
- package/server/plugin/bitran/content.ts +252 -187
- package/server/plugin/bitran/{products → elements}/include.ts +229 -230
- package/server/plugin/bitran/location.ts +43 -25
- package/server/plugin/bitran/toc.ts +94 -83
- package/server/plugin/bitran/transpiler.ts +18 -46
- package/server/plugin/build/close.ts +12 -10
- package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
- package/server/plugin/build/jobs/content/generic.ts +191 -176
- package/server/plugin/build/jobs/content/parse.ts +113 -100
- 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 +69 -66
- package/server/plugin/build/jobs/language.ts +36 -36
- package/server/plugin/build/jobs/nav.ts +345 -210
- package/server/plugin/build/process.ts +34 -25
- package/server/plugin/build/rebuild.ts +68 -55
- package/server/plugin/build/setup.ts +19 -21
- package/server/plugin/content/context.ts +119 -112
- package/server/plugin/db/entities/Book.ts +7 -7
- package/server/plugin/db/entities/Content.ts +45 -49
- package/server/plugin/db/entities/Contribution.ts +10 -10
- package/server/plugin/db/entities/Contributor.ts +25 -16
- package/server/plugin/db/entities/File.ts +10 -0
- 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 -0
- package/server/plugin/db/setup.ts +49 -34
- package/server/plugin/global.ts +18 -18
- package/server/plugin/importer.ts +16 -12
- package/server/plugin/index.ts +9 -9
- package/server/plugin/logger.ts +23 -23
- package/server/plugin/nav/node.ts +27 -26
- package/server/plugin/nav/utils.ts +179 -129
- package/server/plugin/repository/asideMinor.ts +51 -0
- package/server/plugin/repository/book.ts +39 -21
- package/server/plugin/repository/cameo.ts +16 -0
- package/server/plugin/repository/content.ts +240 -238
- package/server/plugin/repository/contentId.ts +40 -0
- package/server/plugin/repository/contributor.ts +129 -8
- package/server/plugin/repository/file.ts +10 -0
- package/server/plugin/repository/frontNav.ts +145 -148
- package/server/plugin/repository/topic.ts +35 -32
- package/server/plugin/sponsor/build.ts +82 -0
- package/server/plugin/sponsor/index.ts +5 -0
- package/server/plugin/sponsor/repository.ts +56 -0
- package/server/routes/asset/[...assetPath].ts +34 -0
- package/server/routes/robots.txt.ts +9 -0
- package/server/routes/sitemap.xml.ts +103 -0
- package/server/tsconfig.json +9 -9
- package/shared/aside/minor.ts +55 -50
- package/shared/asset.ts +17 -15
- package/shared/bitran/content.ts +9 -0
- package/shared/bitran/contentId.ts +56 -0
- package/shared/bitran/toc.ts +8 -8
- package/shared/breadcrumb.ts +7 -0
- package/shared/content/bookId.ts +12 -0
- 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 +34 -5
- package/shared/frontNav.ts +41 -41
- package/shared/icons.ts +38 -38
- package/shared/image.ts +5 -5
- package/shared/link.ts +28 -25
- package/shared/popover.ts +8 -0
- package/shared/types/language.ts +84 -75
- package/shared/utils/objectsEqual.ts +4 -4
- package/shared/utils/stringColor.ts +9 -9
- package/test/contentId.test.ts +91 -0
- package/test/utils/url.test.ts +99 -0
- package/tsconfig.json +8 -8
- package/utils/contentPath.ts +67 -0
- package/utils/ext.ts +41 -0
- package/utils/stress.ts +9 -9
- package/utils/url.ts +23 -0
- package/app/components/ads/BannerTemplate.vue +0 -51
- package/app/components/ads/BottomBanner.vue +0 -45
- package/app/components/ads/LeftBanner.vue +0 -50
- package/app/components/aside/minor/AsideMinorContributor.vue +0 -5
- package/app/components/contributor/ContributorAvatar.vue +0 -43
- package/app/components/main/utils/ContentDescription.vue +0 -19
- package/app/components/main/utils/ContentFlag.vue +0 -15
- package/app/components/main/utils/ContentSection.vue +0 -45
- package/app/components/main/utils/ContentTitle.vue +0 -39
- package/app/composables/bitranContent.ts +0 -37
- package/app/pages/members.vue +0 -6
- package/app/public/user.svg +0 -10
- package/app/scripts/aside/minor/topic.ts +0 -3
- package/app/styles/default.scss +0 -83
- package/server/api/aside/minor/path.ts +0 -78
- package/server/api/bitran/content/[location].ts +0 -7
- package/server/api/bitran/toc/[location].ts +0 -7
- package/server/plugin/bitran/products/link.ts +0 -116
- package/server/plugin/bitran/setup.ts +0 -9
- package/server/plugin/content/absoluteId.ts +0 -94
- package/shared/bitran/context.ts +0 -8
- package/shared/bitran/default.ts +0 -46
- package/shared/bitran/link/Link.vue +0 -167
- package/shared/bitran/link/factory.ts +0 -24
- package/shared/bitran/link/icon.svg +0 -3
- package/shared/bitran/link/languages/en.ts +0 -7
- package/shared/bitran/link/languages/ru.ts +0 -7
- package/shared/bitran/link/renderer.ts +0 -21
- package/shared/bitran/link/shared.ts +0 -17
- package/shared/bitran/link/target.ts +0 -134
- package/shared/bitran/link/transpiler.ts +0 -10
- package/shared/bitran/location.ts +0 -166
- package/test/bitran/link/target.test.ts +0 -141
- package/test/bitran/location.test.ts +0 -143
package/server/tsconfig.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../../playground/.erudit/nuxt/.nuxt/tsconfig.server.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"verbatimModuleSyntax": true,
|
|
5
|
-
"experimentalDecorators": true,
|
|
6
|
-
"emitDecoratorMetadata": true
|
|
7
|
-
},
|
|
8
|
-
"exclude": ["../module/**/*", "../globalPath.ts"]
|
|
9
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../../playground/.erudit/nuxt/.nuxt/tsconfig.server.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"verbatimModuleSyntax": true,
|
|
5
|
+
"experimentalDecorators": true,
|
|
6
|
+
"emitDecoratorMetadata": true
|
|
7
|
+
},
|
|
8
|
+
"exclude": ["../module/**/*", "../globalPath.ts"]
|
|
9
|
+
}
|
package/shared/aside/minor.ts
CHANGED
|
@@ -1,50 +1,55 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
1
|
+
import type { ContentType, TopicPart } from '@erudit-js/cog/schema';
|
|
2
|
+
|
|
3
|
+
import type { Toc } from '@shared/bitran/toc';
|
|
4
|
+
import type { PreviousNext } from '@shared/content/previousNext';
|
|
5
|
+
import type { ContentContributor, Contribution } from '@shared/contributor';
|
|
6
|
+
|
|
7
|
+
export type AsideMinorType = ContentType | 'contributor' | 'news';
|
|
8
|
+
|
|
9
|
+
interface AsideMinorBase {
|
|
10
|
+
type: AsideMinorType;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface AsideMinorContentBase extends AsideMinorBase {
|
|
14
|
+
type: ContentType;
|
|
15
|
+
fullContentId: string;
|
|
16
|
+
shortContentId: string;
|
|
17
|
+
fsContentDirectory: string;
|
|
18
|
+
previousNext: PreviousNext;
|
|
19
|
+
contributors?: ContentContributor[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface AsideMinorBook extends AsideMinorContentBase {
|
|
23
|
+
type: 'book';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface AsideMinorGroup extends AsideMinorContentBase {
|
|
27
|
+
type: 'group';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface AsideMinorTopic extends AsideMinorContentBase {
|
|
31
|
+
type: 'topic';
|
|
32
|
+
toc: Toc;
|
|
33
|
+
part: TopicPart;
|
|
34
|
+
partLinks: Partial<{
|
|
35
|
+
article: string;
|
|
36
|
+
summary: string;
|
|
37
|
+
practice: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface AsideMinorContributor extends AsideMinorBase {
|
|
42
|
+
type: 'contributor';
|
|
43
|
+
contributions: Contribution[];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface AsideMinorNews extends AsideMinorBase {
|
|
47
|
+
type: 'news';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type AsideMinorData =
|
|
51
|
+
| AsideMinorBook
|
|
52
|
+
| AsideMinorGroup
|
|
53
|
+
| AsideMinorTopic
|
|
54
|
+
| AsideMinorContributor
|
|
55
|
+
| AsideMinorNews;
|
package/shared/asset.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import {
|
|
2
|
+
PUBLIC_CONTENT_ASSET,
|
|
3
|
+
PUBLIC_ERUDIT_ASSET,
|
|
4
|
+
PUBLIC_USER_ASSET,
|
|
5
|
+
} from '@erudit/const';
|
|
6
|
+
|
|
7
|
+
export function eruditAsset(path: string) {
|
|
8
|
+
return PUBLIC_ERUDIT_ASSET + path;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function contentAsset(path: string) {
|
|
12
|
+
return PUBLIC_CONTENT_ASSET + path;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function publicAsset(path: string) {
|
|
16
|
+
return PUBLIC_USER_ASSET + path;
|
|
17
|
+
}
|
|
@@ -0,0 +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
|
+
}
|
package/shared/bitran/toc.ts
CHANGED
|
@@ -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,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-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-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,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
+
bookId?: string;
|
|
11
|
+
bookTitle?: string;
|
|
12
|
+
contentType: ContentType;
|
|
13
|
+
contentTitle: string;
|
|
14
|
+
contentLink: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface PageContributor {
|
|
18
|
+
contributorId: string;
|
|
19
|
+
displayName?: string;
|
|
20
|
+
slogan?: string;
|
|
21
|
+
links?: Record<string, string>;
|
|
22
|
+
avatar?: string;
|
|
23
|
+
isEditor?: boolean;
|
|
24
|
+
hasDescription?: boolean;
|
|
25
|
+
contributions?: Contribution[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface ContributorListItem {
|
|
29
|
+
contributorId: string;
|
|
30
|
+
displayName?: string;
|
|
31
|
+
isEditor?: boolean;
|
|
32
|
+
avatar?: string;
|
|
33
|
+
contributions: number;
|
|
34
|
+
}
|
package/shared/frontNav.ts
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
import type { ContentFlag, TopicPart } from 'erudit-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?: 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
|
|
5
|
-
type
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import type {
|
|
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
|
+
}
|