erudit 2.0.0-dev.9 → 3.0.0-dev.1
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 +172 -172
- package/app/components/Loading.vue +23 -23
- package/app/components/SiteAside.vue +382 -382
- package/app/components/SiteMain.vue +35 -35
- package/app/components/ads/BannerTemplate.vue +51 -51
- package/app/components/ads/BottomBanner.vue +45 -45
- package/app/components/ads/LeftBanner.vue +50 -50
- package/app/components/aside/AsideListItem.vue +74 -74
- package/app/components/aside/AsideMajor.vue +56 -56
- package/app/components/aside/AsideMinor.vue +71 -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 +34 -34
- package/app/components/aside/major/panes/Search.vue +11 -3
- package/app/components/aside/major/panes/nav/Nav.vue +91 -91
- package/app/components/aside/major/panes/nav/NavBook.vue +86 -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 +15 -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/AsideMinorContributor.vue +5 -5
- package/app/components/aside/minor/AsideMinorNews.vue +11 -11
- package/app/components/aside/minor/AsideMinorPane.vue +15 -16
- 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 +203 -203
- package/app/components/aside/minor/topic/TopicTocItem.vue +31 -31
- package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
- package/app/components/bitran/BitranContent.vue +63 -63
- package/app/components/bitran/RenderWrapper.vue +10 -10
- package/app/components/contributor/ContributorAvatar.vue +43 -43
- package/app/components/contributor/ContributorListItem.vue +35 -35
- package/app/components/main/topic/MainTopic.vue +79 -79
- package/app/components/main/topic/TopicPartSwitch.vue +118 -118
- package/app/components/main/utils/Breadcrumb.vue +75 -75
- package/app/components/main/utils/ContentDecoration.vue +29 -29
- package/app/components/main/utils/ContentDescription.vue +19 -20
- package/app/components/main/utils/ContentFlag.vue +15 -16
- package/app/components/main/utils/ContentPopover.vue +176 -176
- package/app/components/main/utils/ContentPopovers.vue +105 -105
- package/app/components/main/utils/ContentReferences.vue +70 -76
- package/app/components/main/utils/ContentSection.vue +45 -42
- package/app/components/main/utils/ContentTitle.vue +39 -37
- package/app/components/main/utils/reference/ReferenceGroup.vue +38 -41
- package/app/components/main/utils/reference/ReferenceItem.vue +68 -64
- package/app/components/main/utils/reference/ReferenceSource.vue +116 -110
- package/app/components/preview/Preview.vue +177 -177
- package/app/components/preview/PreviewDisplay.vue +139 -139
- package/app/components/preview/PreviewFooterAction.vue +73 -73
- package/app/components/preview/PreviewLoading.vue +14 -15
- package/app/components/preview/PreviewScreen.vue +99 -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 +20 -20
- package/app/components/preview/display/Unique.vue +49 -49
- package/app/components/transition/Fade.vue +19 -22
- package/app/components/tree/TreeContainer.vue +11 -12
- package/app/components/tree/TreeItem.vue +89 -89
- package/app/composables/bitran.ts +127 -127
- package/app/composables/bitranContent.ts +37 -37
- package/app/composables/bitranLocation.ts +7 -7
- package/app/composables/contentData.ts +36 -36
- package/app/composables/contentPage.ts +156 -156
- package/app/composables/contentRoute.ts +45 -45
- package/app/composables/darkMagic.ts +24 -24
- package/app/composables/externalApi.ts +63 -63
- package/app/composables/favicon.ts +8 -8
- package/app/composables/formatText.ts +86 -86
- package/app/composables/majorPane.ts +60 -60
- package/app/composables/phrases.ts +80 -80
- 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 +65 -65
- package/app/pages/index.vue +32 -32
- package/app/pages/members.vue +6 -7
- package/app/pages/practice/[...practice].vue +3 -3
- package/app/pages/summary/[...summaryId].vue +3 -3
- package/app/scripts/_immediate.js +9 -4
- 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 +73 -84
- 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 +20 -20
- package/app/scripts/preview/data/unique.ts +70 -70
- package/app/scripts/preview/data.ts +24 -26
- 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 -3
- package/app/styles/_util.scss +43 -50
- package/app/styles/_utils.scss +44 -44
- package/app/styles/app.scss +91 -91
- package/app/styles/def/_bp.scss +27 -24
- package/app/styles/def/_size.scss +7 -7
- package/app/styles/def/_z.scss +5 -5
- package/app/styles/default.scss +83 -85
- package/app/styles/normalize.scss +63 -63
- package/app/styles/partials/_darkMagic.scss +5 -7
- package/app/styles/partials/_fnav.scss +15 -18
- package/app/styles/partials/_preview.scss +5 -7
- package/globalPath.ts +21 -21
- package/globals/bitran.ts +47 -47
- package/globals/content.ts +22 -22
- package/globals/contributor.ts +5 -5
- package/globals/erudit.ts +5 -5
- package/globals/register.ts +18 -18
- package/languages/en.ts +95 -95
- package/languages/ru.ts +99 -99
- package/module/bitran.ts +34 -34
- package/module/config.ts +34 -34
- package/module/imports.ts +46 -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 +111 -107
- package/package.json +3 -3
- package/server/api/aside/major/nav/bookIds.ts +5 -5
- package/server/api/aside/major/nav/bookNav/[...bookId].ts +20 -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 +78 -78
- package/server/api/bitran/content/[location].ts +7 -7
- package/server/api/bitran/toc/[location].ts +7 -7
- package/server/api/content/data.ts +72 -72
- 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/preview/page/[...parts].ts +51 -51
- package/server/api/preview/unique/[location].ts +55 -55
- package/server/plugin/bitran/content.ts +187 -187
- package/server/plugin/bitran/location.ts +25 -25
- package/server/plugin/bitran/products/include.ts +230 -230
- package/server/plugin/bitran/products/link.ts +116 -116
- package/server/plugin/bitran/setup.ts +9 -9
- package/server/plugin/bitran/toc.ts +83 -83
- package/server/plugin/bitran/transpiler.ts +46 -46
- package/server/plugin/build/close.ts +10 -10
- package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
- package/server/plugin/build/jobs/content/generic.ts +176 -176
- package/server/plugin/build/jobs/content/parse.ts +100 -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 +66 -66
- package/server/plugin/build/jobs/language.ts +36 -36
- package/server/plugin/build/jobs/nav.ts +209 -209
- package/server/plugin/build/process.ts +25 -25
- package/server/plugin/build/rebuild.ts +55 -55
- package/server/plugin/build/setup.ts +21 -21
- package/server/plugin/content/absoluteId.ts +94 -94
- package/server/plugin/content/context.ts +112 -112
- package/server/plugin/db/entities/Book.ts +7 -7
- package/server/plugin/db/entities/Content.ts +49 -49
- package/server/plugin/db/entities/Contribution.ts +10 -10
- package/server/plugin/db/entities/Contributor.ts +16 -16
- 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/setup.ts +34 -34
- package/server/plugin/global.ts +18 -18
- package/server/plugin/importer.ts +12 -12
- package/server/plugin/index.ts +9 -9
- package/server/plugin/logger.ts +23 -23
- package/server/plugin/nav/node.ts +26 -26
- package/server/plugin/nav/utils.ts +129 -129
- package/server/plugin/repository/book.ts +21 -21
- package/server/plugin/repository/content.ts +238 -238
- package/server/plugin/repository/contributor.ts +8 -8
- package/server/plugin/repository/frontNav.ts +148 -148
- package/server/plugin/repository/topic.ts +32 -32
- package/server/tsconfig.json +7 -7
- package/shared/aside/minor.ts +50 -50
- package/shared/asset.ts +15 -15
- package/shared/bitran/context.ts +8 -8
- package/shared/bitran/default.ts +46 -46
- package/shared/bitran/link/Link.vue +167 -167
- package/shared/bitran/link/factory.ts +24 -24
- package/shared/bitran/link/languages/en.ts +7 -7
- package/shared/bitran/link/languages/ru.ts +7 -7
- package/shared/bitran/link/renderer.ts +21 -21
- package/shared/bitran/link/shared.ts +17 -17
- package/shared/bitran/link/target.ts +134 -134
- package/shared/bitran/link/transpiler.ts +10 -10
- package/shared/bitran/location.ts +166 -166
- package/shared/bitran/toc.ts +8 -8
- 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 +25 -25
- package/shared/types/language.ts +75 -75
- package/shared/utils/objectsEqual.ts +4 -4
- package/shared/utils/stringColor.ts +9 -9
- package/test/bitran/link/target.test.ts +141 -141
- package/test/bitran/location.test.ts +143 -143
- package/tsconfig.json +8 -8
- package/utils/stress.ts +9 -9
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
import { isTopicPart } from 'erudit-cog/schema';
|
|
2
|
-
|
|
3
|
-
import { DbUnique } from '@server/db/entities/Unique';
|
|
4
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
5
|
-
import { DbContent } from '@server/db/entities/Content';
|
|
6
|
-
import { DbContributor } from '@server/db/entities/Contributor';
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
createLinkTarget,
|
|
10
|
-
type LinkTarget,
|
|
11
|
-
} from '@erudit/shared/bitran/link/target';
|
|
12
|
-
import {
|
|
13
|
-
toAbsoluteContentId,
|
|
14
|
-
toAbsoluteContentLocation,
|
|
15
|
-
} from '@server/content/absoluteId';
|
|
16
|
-
import type { BitranContext } from '@erudit/shared/bitran/context';
|
|
17
|
-
import {
|
|
18
|
-
parseBitranLocation,
|
|
19
|
-
stringifyBitranLocation,
|
|
20
|
-
} from '@erudit/shared/bitran/location';
|
|
21
|
-
import {
|
|
22
|
-
createBitranLocationLink,
|
|
23
|
-
createContentLink,
|
|
24
|
-
createContributorLink,
|
|
25
|
-
createTopicPartLink,
|
|
26
|
-
} from '@erudit/shared/link';
|
|
27
|
-
import type { LinkParseData } from '@erudit/shared/bitran/link/shared';
|
|
28
|
-
|
|
29
|
-
export async function resolveLinkTarget(
|
|
30
|
-
linkData: LinkParseData,
|
|
31
|
-
context: BitranContext,
|
|
32
|
-
): Promise<LinkTarget> {
|
|
33
|
-
const linkTarget = createLinkTarget(linkData.target, context);
|
|
34
|
-
|
|
35
|
-
if (linkTarget.type === 'unique') {
|
|
36
|
-
const absoluteLocation = toAbsoluteContentLocation(
|
|
37
|
-
linkTarget.strlocation,
|
|
38
|
-
context.location?.path!,
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
const dbUnique = await ERUDIT_SERVER.DB.manager.findOne(DbUnique, {
|
|
42
|
-
select: ['location', 'productName'],
|
|
43
|
-
where: { location: absoluteLocation },
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
if (!dbUnique)
|
|
47
|
-
throw new Error(
|
|
48
|
-
`Unique "${linkTarget.strlocation}" does not exist!`,
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
const targetLocation = parseBitranLocation(dbUnique.location);
|
|
52
|
-
|
|
53
|
-
linkTarget._productName = dbUnique.productName;
|
|
54
|
-
linkTarget._href = createBitranLocationLink(targetLocation);
|
|
55
|
-
linkTarget._absoluteStrLocation =
|
|
56
|
-
stringifyBitranLocation(targetLocation);
|
|
57
|
-
} else if (linkTarget.type === 'page') {
|
|
58
|
-
const absoluteContentId = toAbsoluteContentId(
|
|
59
|
-
linkTarget.path!,
|
|
60
|
-
context.location?.path,
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
switch (linkTarget.pageType) {
|
|
64
|
-
case 'article':
|
|
65
|
-
case 'summary':
|
|
66
|
-
case 'practice':
|
|
67
|
-
case 'group':
|
|
68
|
-
case 'book':
|
|
69
|
-
{
|
|
70
|
-
const dbContent = await ERUDIT_SERVER.DB.manager.findOne(
|
|
71
|
-
DbContent,
|
|
72
|
-
{
|
|
73
|
-
where: { contentId: absoluteContentId },
|
|
74
|
-
},
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
if (!dbContent)
|
|
78
|
-
throw new Error(
|
|
79
|
-
`Page "${linkTarget.pageType}|${absoluteContentId}" does not exist!`,
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
linkTarget._href = isTopicPart(linkTarget.pageType)
|
|
83
|
-
? createTopicPartLink(
|
|
84
|
-
linkTarget.pageType,
|
|
85
|
-
absoluteContentId,
|
|
86
|
-
)
|
|
87
|
-
: createContentLink(
|
|
88
|
-
linkTarget.pageType,
|
|
89
|
-
absoluteContentId,
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
break;
|
|
93
|
-
|
|
94
|
-
case 'contributor':
|
|
95
|
-
{
|
|
96
|
-
const dbContributor =
|
|
97
|
-
await ERUDIT_SERVER.DB.manager.findOne(DbContributor, {
|
|
98
|
-
select: ['contributorId'],
|
|
99
|
-
where: { contributorId: absoluteContentId },
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
if (!dbContributor)
|
|
103
|
-
throw new Error(
|
|
104
|
-
`Contributor "${absoluteContentId}" does not exist!`,
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
linkTarget._href = createContributorLink(
|
|
108
|
-
dbContributor.contributorId,
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return linkTarget;
|
|
116
|
-
}
|
|
1
|
+
import { isTopicPart } from 'erudit-cog/schema';
|
|
2
|
+
|
|
3
|
+
import { DbUnique } from '@server/db/entities/Unique';
|
|
4
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
5
|
+
import { DbContent } from '@server/db/entities/Content';
|
|
6
|
+
import { DbContributor } from '@server/db/entities/Contributor';
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
createLinkTarget,
|
|
10
|
+
type LinkTarget,
|
|
11
|
+
} from '@erudit/shared/bitran/link/target';
|
|
12
|
+
import {
|
|
13
|
+
toAbsoluteContentId,
|
|
14
|
+
toAbsoluteContentLocation,
|
|
15
|
+
} from '@server/content/absoluteId';
|
|
16
|
+
import type { BitranContext } from '@erudit/shared/bitran/context';
|
|
17
|
+
import {
|
|
18
|
+
parseBitranLocation,
|
|
19
|
+
stringifyBitranLocation,
|
|
20
|
+
} from '@erudit/shared/bitran/location';
|
|
21
|
+
import {
|
|
22
|
+
createBitranLocationLink,
|
|
23
|
+
createContentLink,
|
|
24
|
+
createContributorLink,
|
|
25
|
+
createTopicPartLink,
|
|
26
|
+
} from '@erudit/shared/link';
|
|
27
|
+
import type { LinkParseData } from '@erudit/shared/bitran/link/shared';
|
|
28
|
+
|
|
29
|
+
export async function resolveLinkTarget(
|
|
30
|
+
linkData: LinkParseData,
|
|
31
|
+
context: BitranContext,
|
|
32
|
+
): Promise<LinkTarget> {
|
|
33
|
+
const linkTarget = createLinkTarget(linkData.target, context);
|
|
34
|
+
|
|
35
|
+
if (linkTarget.type === 'unique') {
|
|
36
|
+
const absoluteLocation = toAbsoluteContentLocation(
|
|
37
|
+
linkTarget.strlocation,
|
|
38
|
+
context.location?.path!,
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const dbUnique = await ERUDIT_SERVER.DB.manager.findOne(DbUnique, {
|
|
42
|
+
select: ['location', 'productName'],
|
|
43
|
+
where: { location: absoluteLocation },
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
if (!dbUnique)
|
|
47
|
+
throw new Error(
|
|
48
|
+
`Unique "${linkTarget.strlocation}" does not exist!`,
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const targetLocation = parseBitranLocation(dbUnique.location);
|
|
52
|
+
|
|
53
|
+
linkTarget._productName = dbUnique.productName;
|
|
54
|
+
linkTarget._href = createBitranLocationLink(targetLocation);
|
|
55
|
+
linkTarget._absoluteStrLocation =
|
|
56
|
+
stringifyBitranLocation(targetLocation);
|
|
57
|
+
} else if (linkTarget.type === 'page') {
|
|
58
|
+
const absoluteContentId = toAbsoluteContentId(
|
|
59
|
+
linkTarget.path!,
|
|
60
|
+
context.location?.path,
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
switch (linkTarget.pageType) {
|
|
64
|
+
case 'article':
|
|
65
|
+
case 'summary':
|
|
66
|
+
case 'practice':
|
|
67
|
+
case 'group':
|
|
68
|
+
case 'book':
|
|
69
|
+
{
|
|
70
|
+
const dbContent = await ERUDIT_SERVER.DB.manager.findOne(
|
|
71
|
+
DbContent,
|
|
72
|
+
{
|
|
73
|
+
where: { contentId: absoluteContentId },
|
|
74
|
+
},
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
if (!dbContent)
|
|
78
|
+
throw new Error(
|
|
79
|
+
`Page "${linkTarget.pageType}|${absoluteContentId}" does not exist!`,
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
linkTarget._href = isTopicPart(linkTarget.pageType)
|
|
83
|
+
? createTopicPartLink(
|
|
84
|
+
linkTarget.pageType,
|
|
85
|
+
absoluteContentId,
|
|
86
|
+
)
|
|
87
|
+
: createContentLink(
|
|
88
|
+
linkTarget.pageType,
|
|
89
|
+
absoluteContentId,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
|
|
94
|
+
case 'contributor':
|
|
95
|
+
{
|
|
96
|
+
const dbContributor =
|
|
97
|
+
await ERUDIT_SERVER.DB.manager.findOne(DbContributor, {
|
|
98
|
+
select: ['contributorId'],
|
|
99
|
+
where: { contributorId: absoluteContentId },
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
if (!dbContributor)
|
|
103
|
+
throw new Error(
|
|
104
|
+
`Contributor "${absoluteContentId}" does not exist!`,
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
linkTarget._href = createContributorLink(
|
|
108
|
+
dbContributor.contributorId,
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return linkTarget;
|
|
116
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { PROJECT_DIR } from '#erudit/globalPaths';
|
|
2
|
-
import { IMPORT } from '@server/importer';
|
|
3
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
4
|
-
|
|
5
|
-
export async function setupBitranConfig() {
|
|
6
|
-
try {
|
|
7
|
-
ERUDIT_SERVER.BITRAN_CONFIG = await IMPORT(PROJECT_DIR + '/bitran.ts');
|
|
8
|
-
} catch {}
|
|
9
|
-
}
|
|
1
|
+
import { PROJECT_DIR } from '#erudit/globalPaths';
|
|
2
|
+
import { IMPORT } from '@server/importer';
|
|
3
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
4
|
+
|
|
5
|
+
export async function setupBitranConfig() {
|
|
6
|
+
try {
|
|
7
|
+
ERUDIT_SERVER.BITRAN_CONFIG = await IMPORT(PROJECT_DIR + '/bitran.ts');
|
|
8
|
+
} catch {}
|
|
9
|
+
}
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
import { BlockErrorNode, type ElementNode } from '@bitran-js/core';
|
|
2
|
-
import { IncludeNode } from '@erudit-js/bitran-elements/include/shared';
|
|
3
|
-
import {
|
|
4
|
-
headingName,
|
|
5
|
-
HeadingNode,
|
|
6
|
-
} from '@erudit-js/bitran-elements/heading/shared';
|
|
7
|
-
|
|
8
|
-
import type { BitranLocation } from '@erudit/shared/bitran/location';
|
|
9
|
-
import type { Toc } from '@erudit/shared/bitran/toc';
|
|
10
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
11
|
-
import { getRawBitranContent } from './content';
|
|
12
|
-
import { createBitranTranspiler } from './transpiler';
|
|
13
|
-
import { traverseInclude } from './products/include';
|
|
14
|
-
|
|
15
|
-
export async function getBitranToc(location: BitranLocation) {
|
|
16
|
-
const rawContent = await getRawBitranContent(location);
|
|
17
|
-
const bitranCore = await createBitranTranspiler();
|
|
18
|
-
|
|
19
|
-
const toc: Toc = [];
|
|
20
|
-
|
|
21
|
-
await bitranCore.parser.parse(rawContent.biCode, {
|
|
22
|
-
async step(node) {
|
|
23
|
-
if (node instanceof IncludeNode) {
|
|
24
|
-
await traverseInclude(node, rawContent.context, {
|
|
25
|
-
step: async ({ _node }) => tryAddToToc(_node),
|
|
26
|
-
});
|
|
27
|
-
} else tryAddToToc(node);
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
return toc;
|
|
32
|
-
|
|
33
|
-
function tryAddToToc(node: ElementNode) {
|
|
34
|
-
const tocItemBase = {
|
|
35
|
-
id: node.id,
|
|
36
|
-
productName: node.name,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
// Check if node is manually excluded from TOC
|
|
40
|
-
if (typeof node.meta?.toc === 'boolean' && !node.meta?.toc) return;
|
|
41
|
-
|
|
42
|
-
if (node instanceof HeadingNode) {
|
|
43
|
-
toc.push({
|
|
44
|
-
...tocItemBase,
|
|
45
|
-
level: node.parseData.level,
|
|
46
|
-
title: node.parseData.title,
|
|
47
|
-
});
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const notHeadingLevel = () => {
|
|
52
|
-
// Toc items without heading are at top level
|
|
53
|
-
if (toc.length === 0) return 0;
|
|
54
|
-
|
|
55
|
-
const lastTocItem = toc.at(-1)!;
|
|
56
|
-
|
|
57
|
-
// Going one level deep if previous item was a heading and copy deep level if not
|
|
58
|
-
return lastTocItem.productName === headingName
|
|
59
|
-
? lastTocItem.level + 1
|
|
60
|
-
: lastTocItem.level;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
if (ERUDIT_SERVER.BITRAN_CONFIG?.toc?.includes(node.name)) {
|
|
64
|
-
// Erudit Config says to add these products to TOC
|
|
65
|
-
toc.push({
|
|
66
|
-
...tocItemBase,
|
|
67
|
-
level: notHeadingLevel(),
|
|
68
|
-
title: node.meta?.title || node.parseData?.title,
|
|
69
|
-
});
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (node.meta?.toc) {
|
|
74
|
-
// Show in Toc any product with truthy `toc` meta property
|
|
75
|
-
toc.push({
|
|
76
|
-
...tocItemBase,
|
|
77
|
-
level: notHeadingLevel(),
|
|
78
|
-
title: node.meta?.title || node.parseData?.title,
|
|
79
|
-
});
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
1
|
+
import { BlockErrorNode, type ElementNode } from '@bitran-js/core';
|
|
2
|
+
import { IncludeNode } from '@erudit-js/bitran-elements/include/shared';
|
|
3
|
+
import {
|
|
4
|
+
headingName,
|
|
5
|
+
HeadingNode,
|
|
6
|
+
} from '@erudit-js/bitran-elements/heading/shared';
|
|
7
|
+
|
|
8
|
+
import type { BitranLocation } from '@erudit/shared/bitran/location';
|
|
9
|
+
import type { Toc } from '@erudit/shared/bitran/toc';
|
|
10
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
11
|
+
import { getRawBitranContent } from './content';
|
|
12
|
+
import { createBitranTranspiler } from './transpiler';
|
|
13
|
+
import { traverseInclude } from './products/include';
|
|
14
|
+
|
|
15
|
+
export async function getBitranToc(location: BitranLocation) {
|
|
16
|
+
const rawContent = await getRawBitranContent(location);
|
|
17
|
+
const bitranCore = await createBitranTranspiler();
|
|
18
|
+
|
|
19
|
+
const toc: Toc = [];
|
|
20
|
+
|
|
21
|
+
await bitranCore.parser.parse(rawContent.biCode, {
|
|
22
|
+
async step(node) {
|
|
23
|
+
if (node instanceof IncludeNode) {
|
|
24
|
+
await traverseInclude(node, rawContent.context, {
|
|
25
|
+
step: async ({ _node }) => tryAddToToc(_node),
|
|
26
|
+
});
|
|
27
|
+
} else tryAddToToc(node);
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
return toc;
|
|
32
|
+
|
|
33
|
+
function tryAddToToc(node: ElementNode) {
|
|
34
|
+
const tocItemBase = {
|
|
35
|
+
id: node.id,
|
|
36
|
+
productName: node.name,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Check if node is manually excluded from TOC
|
|
40
|
+
if (typeof node.meta?.toc === 'boolean' && !node.meta?.toc) return;
|
|
41
|
+
|
|
42
|
+
if (node instanceof HeadingNode) {
|
|
43
|
+
toc.push({
|
|
44
|
+
...tocItemBase,
|
|
45
|
+
level: node.parseData.level,
|
|
46
|
+
title: node.parseData.title,
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const notHeadingLevel = () => {
|
|
52
|
+
// Toc items without heading are at top level
|
|
53
|
+
if (toc.length === 0) return 0;
|
|
54
|
+
|
|
55
|
+
const lastTocItem = toc.at(-1)!;
|
|
56
|
+
|
|
57
|
+
// Going one level deep if previous item was a heading and copy deep level if not
|
|
58
|
+
return lastTocItem.productName === headingName
|
|
59
|
+
? lastTocItem.level + 1
|
|
60
|
+
: lastTocItem.level;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
if (ERUDIT_SERVER.BITRAN_CONFIG?.toc?.includes(node.name)) {
|
|
64
|
+
// Erudit Config says to add these products to TOC
|
|
65
|
+
toc.push({
|
|
66
|
+
...tocItemBase,
|
|
67
|
+
level: notHeadingLevel(),
|
|
68
|
+
title: node.meta?.title || node.parseData?.title,
|
|
69
|
+
});
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (node.meta?.toc) {
|
|
74
|
+
// Show in Toc any product with truthy `toc` meta property
|
|
75
|
+
toc.push({
|
|
76
|
+
...tocItemBase,
|
|
77
|
+
level: notHeadingLevel(),
|
|
78
|
+
title: node.meta?.title || node.parseData?.title,
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
import {
|
|
2
|
-
defineBitranTranspiler,
|
|
3
|
-
type ElementTranspilers,
|
|
4
|
-
} from '@bitran-js/transpiler';
|
|
5
|
-
|
|
6
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
7
|
-
|
|
8
|
-
// Default Elements
|
|
9
|
-
import { aliasesName } from '@erudit-js/bitran-elements/aliases/shared';
|
|
10
|
-
import { aliasesTranspiler } from '@erudit-js/bitran-elements/aliases/transpiler';
|
|
11
|
-
import { headingName } from '@erudit-js/bitran-elements/heading/shared';
|
|
12
|
-
import { headingTranspiler } from '@erudit-js/bitran-elements/heading/transpiler';
|
|
13
|
-
import { includeName } from '@erudit-js/bitran-elements/include/shared';
|
|
14
|
-
import { includeTranspiler } from '@erudit-js/bitran-elements/include/transpiler';
|
|
15
|
-
import { linkName } from '@erudit/shared/bitran/link/shared';
|
|
16
|
-
import { linkTranspiler } from '@erudit/shared/bitran/link/transpiler';
|
|
17
|
-
|
|
18
|
-
export async function createBitranTranspiler() {
|
|
19
|
-
const projectTranspilers = await getProjectTranspilers();
|
|
20
|
-
|
|
21
|
-
const defaultTranspilers = {
|
|
22
|
-
[aliasesName]: aliasesTranspiler,
|
|
23
|
-
[includeName]: includeTranspiler,
|
|
24
|
-
[headingName]: headingTranspiler,
|
|
25
|
-
[linkName]: linkTranspiler,
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const bitranTranspiler = defineBitranTranspiler({
|
|
29
|
-
...projectTranspilers,
|
|
30
|
-
...defaultTranspilers,
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
return bitranTranspiler;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async function getProjectTranspilers(): Promise<ElementTranspilers> {
|
|
37
|
-
const bitranElements = ERUDIT_SERVER?.BITRAN_CONFIG?.elements;
|
|
38
|
-
|
|
39
|
-
if (!bitranElements) return {};
|
|
40
|
-
|
|
41
|
-
const projectTranspilers: ElementTranspilers = {};
|
|
42
|
-
for (const [name, bitranElement] of Object.entries(bitranElements))
|
|
43
|
-
projectTranspilers[name] = await bitranElement.transpiler();
|
|
44
|
-
|
|
45
|
-
return projectTranspilers;
|
|
46
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
defineBitranTranspiler,
|
|
3
|
+
type ElementTranspilers,
|
|
4
|
+
} from '@bitran-js/transpiler';
|
|
5
|
+
|
|
6
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
7
|
+
|
|
8
|
+
// Default Elements
|
|
9
|
+
import { aliasesName } from '@erudit-js/bitran-elements/aliases/shared';
|
|
10
|
+
import { aliasesTranspiler } from '@erudit-js/bitran-elements/aliases/transpiler';
|
|
11
|
+
import { headingName } from '@erudit-js/bitran-elements/heading/shared';
|
|
12
|
+
import { headingTranspiler } from '@erudit-js/bitran-elements/heading/transpiler';
|
|
13
|
+
import { includeName } from '@erudit-js/bitran-elements/include/shared';
|
|
14
|
+
import { includeTranspiler } from '@erudit-js/bitran-elements/include/transpiler';
|
|
15
|
+
import { linkName } from '@erudit/shared/bitran/link/shared';
|
|
16
|
+
import { linkTranspiler } from '@erudit/shared/bitran/link/transpiler';
|
|
17
|
+
|
|
18
|
+
export async function createBitranTranspiler() {
|
|
19
|
+
const projectTranspilers = await getProjectTranspilers();
|
|
20
|
+
|
|
21
|
+
const defaultTranspilers = {
|
|
22
|
+
[aliasesName]: aliasesTranspiler,
|
|
23
|
+
[includeName]: includeTranspiler,
|
|
24
|
+
[headingName]: headingTranspiler,
|
|
25
|
+
[linkName]: linkTranspiler,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const bitranTranspiler = defineBitranTranspiler({
|
|
29
|
+
...projectTranspilers,
|
|
30
|
+
...defaultTranspilers,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return bitranTranspiler;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function getProjectTranspilers(): Promise<ElementTranspilers> {
|
|
37
|
+
const bitranElements = ERUDIT_SERVER?.BITRAN_CONFIG?.elements;
|
|
38
|
+
|
|
39
|
+
if (!bitranElements) return {};
|
|
40
|
+
|
|
41
|
+
const projectTranspilers: ElementTranspilers = {};
|
|
42
|
+
for (const [name, bitranElement] of Object.entries(bitranElements))
|
|
43
|
+
projectTranspilers[name] = await bitranElement.transpiler();
|
|
44
|
+
|
|
45
|
+
return projectTranspilers;
|
|
46
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { debug, logger } from '@server/logger';
|
|
2
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
3
|
-
|
|
4
|
-
export async function close() {
|
|
5
|
-
debug.start('Shutting down server...');
|
|
6
|
-
|
|
7
|
-
await ERUDIT_SERVER.DB?.destroy();
|
|
8
|
-
|
|
9
|
-
logger.success('Server shut down gracefully!');
|
|
10
|
-
}
|
|
1
|
+
import { debug, logger } from '@server/logger';
|
|
2
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
3
|
+
|
|
4
|
+
export async function close() {
|
|
5
|
+
debug.start('Shutting down server...');
|
|
6
|
+
|
|
7
|
+
await ERUDIT_SERVER.DB?.destroy();
|
|
8
|
+
|
|
9
|
+
logger.success('Server shut down gracefully!');
|
|
10
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { DbContent } from '@server/db/entities/Content';
|
|
2
|
-
import type { NavNode } from '@server/nav/node';
|
|
3
|
-
|
|
4
|
-
export interface BuilderFunctionArgs<T = any> {
|
|
5
|
-
navNode: NavNode;
|
|
6
|
-
dbContent: DbContent;
|
|
7
|
-
config?: Partial<T>;
|
|
8
|
-
}
|
|
1
|
+
import type { DbContent } from '@server/db/entities/Content';
|
|
2
|
+
import type { NavNode } from '@server/nav/node';
|
|
3
|
+
|
|
4
|
+
export interface BuilderFunctionArgs<T = any> {
|
|
5
|
+
navNode: NavNode;
|
|
6
|
+
dbContent: DbContent;
|
|
7
|
+
config?: Partial<T>;
|
|
8
|
+
}
|