erudit 2.0.0-dev.7 → 2.0.0-dev.9
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/.nuxtrc +1 -1
- 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 +2 -2
- 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 +4 -4
- 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 +203 -202
- 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 -64
- package/app/components/bitran/RenderWrapper.vue +10 -12
- 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 -19
- package/app/components/main/utils/ContentFlag.vue +15 -15
- 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 +75 -75
- package/app/components/main/utils/ContentSection.vue +41 -41
- package/app/components/main/utils/ContentTitle.vue +36 -36
- package/app/components/main/utils/reference/ReferenceGroup.vue +40 -40
- package/app/components/main/utils/reference/ReferenceItem.vue +63 -63
- package/app/components/main/utils/reference/ReferenceSource.vue +109 -109
- 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 -14
- 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 +21 -21
- package/app/components/tree/TreeContainer.vue +11 -11
- package/app/components/tree/TreeItem.vue +89 -89
- package/app/composables/bitran.ts +98 -103
- package/app/composables/bitranContent.ts +2 -1
- package/app/composables/contentPage.ts +1 -1
- package/app/composables/phrases.ts +80 -80
- package/app/pages/_test/preview.vue +110 -110
- package/app/pages/article/[...articleId].vue +2 -2
- package/app/pages/book/[...bookId].vue +47 -47
- package/app/pages/group/[...groupId].vue +65 -64
- package/app/pages/index.vue +32 -32
- package/app/pages/members.vue +6 -6
- package/app/pages/practice/[...practice].vue +2 -2
- package/app/pages/summary/[...summaryId].vue +2 -2
- package/app/public/favicon/article.svg +9 -9
- package/app/public/favicon/default.svg +9 -9
- package/app/public/favicon/practice.svg +9 -9
- package/app/public/favicon/summary.svg +9 -9
- package/app/public/logotype.svg +16 -16
- package/app/public/user.svg +9 -9
- package/app/scripts/_immediate.js +3 -3
- package/app/scripts/flag.ts +28 -28
- package/app/scripts/og.ts +27 -27
- package/app/scripts/preview/data/unique.ts +3 -3
- package/app/scripts/preview/display.ts +5 -7
- package/app/scripts/preview/request.ts +2 -2
- package/app/styles/_immediate.css +2 -2
- package/app/styles/_util.scss +49 -49
- package/app/styles/_utils.scss +44 -44
- package/app/styles/default.scss +84 -84
- package/app/styles/partials/_darkMagic.scss +6 -6
- package/app/styles/partials/_fnav.scss +17 -17
- package/app/styles/partials/_preview.scss +6 -6
- package/globalPath.ts +21 -24
- package/globals/bitran.ts +21 -13
- 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/config.ts +34 -34
- package/module/imports.ts +46 -46
- package/module/index.ts +47 -35
- package/module/logger.ts +10 -10
- package/module/restart.ts +61 -61
- package/nuxt.config.ts +107 -96
- package/package.json +9 -6
- 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/fake/content.ts +10 -10
- 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 +55 -44
- package/server/plugin/bitran/products/include.ts +28 -27
- package/server/plugin/bitran/products/link.ts +11 -9
- package/server/plugin/bitran/setup.ts +0 -1
- package/server/plugin/bitran/toc.ts +25 -24
- package/server/plugin/bitran/transpiler.ts +46 -0
- package/server/plugin/build/close.ts +10 -10
- package/server/plugin/build/jobs/content/parse.ts +37 -27
- package/server/plugin/build/jobs/language.ts +36 -36
- 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/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/tsconfig.json +7 -7
- package/shared/bitran/context.ts +3 -2
- package/shared/bitran/default.ts +46 -0
- package/shared/bitran/{products/link/render → link}/Link.vue +7 -14
- package/shared/bitran/link/factory.ts +24 -0
- package/shared/bitran/link/languages/en.ts +7 -0
- package/shared/bitran/link/languages/ru.ts +7 -0
- package/shared/bitran/link/renderer.ts +21 -0
- package/shared/bitran/link/shared.ts +17 -0
- package/shared/bitran/{products/link → link}/target.ts +1 -1
- package/shared/bitran/link/transpiler.ts +10 -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/link.ts +25 -25
- package/shared/types/language.ts +75 -75
- package/test/bitran/{products/link → link}/target.test.ts +5 -2
- package/tsconfig.json +8 -8
- package/utils/stress.ts +9 -9
- package/server/plugin/bitran/core.ts +0 -51
- package/shared/bitran/alias.ts +0 -17
- package/shared/bitran/products/alias/core/factory.ts +0 -46
- package/shared/bitran/products/alias/core/index.ts +0 -13
- package/shared/bitran/products/alias/render/Alias.vue +0 -10
- package/shared/bitran/products/alias/render/icon.svg +0 -3
- package/shared/bitran/products/alias/render/index.ts +0 -17
- package/shared/bitran/products/alias/render/languages/en.ts +0 -5
- package/shared/bitran/products/alias/render/languages/ru.ts +0 -5
- package/shared/bitran/products/alias/shared.ts +0 -11
- package/shared/bitran/products/heading/core/factory.ts +0 -53
- package/shared/bitran/products/heading/core/index.ts +0 -19
- package/shared/bitran/products/heading/render/Heading.vue +0 -47
- package/shared/bitran/products/heading/render/icon.svg +0 -3
- package/shared/bitran/products/heading/render/index.ts +0 -17
- package/shared/bitran/products/heading/render/languages/en.ts +0 -5
- package/shared/bitran/products/heading/render/languages/ru.ts +0 -5
- package/shared/bitran/products/heading/shared.ts +0 -13
- package/shared/bitran/products/include/core/factory.ts +0 -61
- package/shared/bitran/products/include/core/index.ts +0 -13
- package/shared/bitran/products/include/render/Include.vue +0 -13
- package/shared/bitran/products/include/render/icon.svg +0 -3
- package/shared/bitran/products/include/render/index.ts +0 -18
- package/shared/bitran/products/include/render/languages/en.ts +0 -5
- package/shared/bitran/products/include/render/languages/ru.ts +0 -5
- package/shared/bitran/products/include/shared.ts +0 -15
- package/shared/bitran/products/link/core/factory.ts +0 -20
- package/shared/bitran/products/link/core/index.ts +0 -17
- package/shared/bitran/products/link/render/index.ts +0 -17
- package/shared/bitran/products/link/render/languages/en.ts +0 -5
- package/shared/bitran/products/link/render/languages/ru.ts +0 -5
- package/shared/bitran/products/link/shared.ts +0 -15
- package/test/bitran/alias.test.ts +0 -44
- package/test/bitran/products/alias.test.ts +0 -83
- package/test/bitran/products/heading.test.ts +0 -119
- package/test/bitran/products/include.test.ts +0 -77
- package/test/bitran/products/link/factory.test.ts +0 -30
- /package/shared/bitran/{products/link/render → link}/icon.svg +0 -0
package/module/logger.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createConsola } from 'consola';
|
|
2
|
-
import { brandColorTitle } from 'erudit-cog/utils/brand';
|
|
3
|
-
|
|
4
|
-
const tag = brandColorTitle + ' Module';
|
|
5
|
-
|
|
6
|
-
export const logger = createConsola({
|
|
7
|
-
defaults: {
|
|
8
|
-
tag,
|
|
9
|
-
},
|
|
10
|
-
});
|
|
1
|
+
import { createConsola } from 'consola';
|
|
2
|
+
import { brandColorTitle } from 'erudit-cog/utils/brand';
|
|
3
|
+
|
|
4
|
+
const tag = brandColorTitle + ' Module';
|
|
5
|
+
|
|
6
|
+
export const logger = createConsola({
|
|
7
|
+
defaults: {
|
|
8
|
+
tag,
|
|
9
|
+
},
|
|
10
|
+
});
|
package/module/restart.ts
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import { exit } from 'node:process';
|
|
2
|
-
import { globSync } from 'glob';
|
|
3
|
-
import chokidar, { type FSWatcher } from 'chokidar';
|
|
4
|
-
import type { Nuxt } from 'nuxt/schema';
|
|
5
|
-
|
|
6
|
-
import { eruditPath, projectPath } from '@erudit/globalPath';
|
|
7
|
-
import { logger } from '@erudit/module/logger';
|
|
8
|
-
import { stress } from '@erudit/utils/stress';
|
|
9
|
-
|
|
10
|
-
const watchTargets: string[] = [
|
|
11
|
-
// Erudit Nuxt config file
|
|
12
|
-
eruditPath('nuxt.config.ts'),
|
|
13
|
-
// Erudit Globals
|
|
14
|
-
eruditPath('globals'),
|
|
15
|
-
// Erudit Nuxt module non-runtime files
|
|
16
|
-
...globSync(eruditPath('module/**/*')),
|
|
17
|
-
// Erudit config in project root
|
|
18
|
-
...globSync(projectPath('erudit.{js,ts}')),
|
|
19
|
-
// Erudit Bitran config in project root
|
|
20
|
-
...globSync(projectPath('bitran.{js,ts}')),
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
const ignoreTargets: string[] = [
|
|
24
|
-
// Erudit Nuxt module runtime files
|
|
25
|
-
...globSync(eruditPath('module/runtime/**/*')),
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
const restartDelay = 300;
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
let watcher: FSWatcher;
|
|
35
|
-
let restartTimeout: any;
|
|
36
|
-
let nuxt: Nuxt;
|
|
37
|
-
|
|
38
|
-
export function setupRestartWatcher(_nuxt: Nuxt) {
|
|
39
|
-
nuxt = _nuxt;
|
|
40
|
-
|
|
41
|
-
if (watcher) return;
|
|
42
|
-
|
|
43
|
-
watcher = chokidar.watch(watchTargets, {
|
|
44
|
-
ignored: ignoreTargets,
|
|
45
|
-
ignoreInitial: true,
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
watcher.on('all', (event, path) => {
|
|
49
|
-
clearTimeout(restartTimeout);
|
|
50
|
-
restartTimeout = setTimeout(() => {
|
|
51
|
-
console.log('\n');
|
|
52
|
-
logger.info(
|
|
53
|
-
`Restarting due to critical file change: ${stress(path)}\n\n`,
|
|
54
|
-
);
|
|
55
|
-
// Nuxt Restart Hook won't work when unhandled Node exception is thrown!
|
|
56
|
-
// nuxt.callHook('restart', { hard: true, });
|
|
57
|
-
// So we kill the process and restart it in Erudit CLI instead.
|
|
58
|
-
exit(1337);
|
|
59
|
-
}, restartDelay);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
1
|
+
import { exit } from 'node:process';
|
|
2
|
+
import { globSync } from 'glob';
|
|
3
|
+
import chokidar, { type FSWatcher } from 'chokidar';
|
|
4
|
+
import type { Nuxt } from 'nuxt/schema';
|
|
5
|
+
|
|
6
|
+
import { eruditPath, projectPath } from '@erudit/globalPath';
|
|
7
|
+
import { logger } from '@erudit/module/logger';
|
|
8
|
+
import { stress } from '@erudit/utils/stress';
|
|
9
|
+
|
|
10
|
+
const watchTargets: string[] = [
|
|
11
|
+
// Erudit Nuxt config file
|
|
12
|
+
eruditPath('nuxt.config.ts'),
|
|
13
|
+
// Erudit Globals
|
|
14
|
+
eruditPath('globals'),
|
|
15
|
+
// Erudit Nuxt module non-runtime files
|
|
16
|
+
...globSync(eruditPath('module/**/*')),
|
|
17
|
+
// Erudit config in project root
|
|
18
|
+
...globSync(projectPath('erudit.{js,ts}')),
|
|
19
|
+
// Erudit Bitran config in project root
|
|
20
|
+
...globSync(projectPath('bitran.{js,ts}')),
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const ignoreTargets: string[] = [
|
|
24
|
+
// Erudit Nuxt module runtime files
|
|
25
|
+
...globSync(eruditPath('module/runtime/**/*')),
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const restartDelay = 300;
|
|
29
|
+
|
|
30
|
+
//
|
|
31
|
+
//
|
|
32
|
+
//
|
|
33
|
+
|
|
34
|
+
let watcher: FSWatcher;
|
|
35
|
+
let restartTimeout: any;
|
|
36
|
+
let nuxt: Nuxt;
|
|
37
|
+
|
|
38
|
+
export function setupRestartWatcher(_nuxt: Nuxt) {
|
|
39
|
+
nuxt = _nuxt;
|
|
40
|
+
|
|
41
|
+
if (watcher) return;
|
|
42
|
+
|
|
43
|
+
watcher = chokidar.watch(watchTargets, {
|
|
44
|
+
ignored: ignoreTargets,
|
|
45
|
+
ignoreInitial: true,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
watcher.on('all', (event, path) => {
|
|
49
|
+
clearTimeout(restartTimeout);
|
|
50
|
+
restartTimeout = setTimeout(() => {
|
|
51
|
+
console.log('\n');
|
|
52
|
+
logger.info(
|
|
53
|
+
`Restarting due to critical file change: ${stress(path)}\n\n`,
|
|
54
|
+
);
|
|
55
|
+
// Nuxt Restart Hook won't work when unhandled Node exception is thrown!
|
|
56
|
+
// nuxt.callHook('restart', { hard: true, });
|
|
57
|
+
// So we kill the process and restart it in Erudit CLI instead.
|
|
58
|
+
exit(1337);
|
|
59
|
+
}, restartDelay);
|
|
60
|
+
});
|
|
61
|
+
}
|
package/nuxt.config.ts
CHANGED
|
@@ -1,96 +1,107 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
{
|
|
51
|
-
baseURL: '/
|
|
52
|
-
dir:
|
|
53
|
-
maxAge: 60 * 60 * 24 * 30,
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
baseURL: '/_user-asset/
|
|
57
|
-
dir: projectPath('
|
|
58
|
-
maxAge: 60 * 60 * 24 * 30,
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
baseURL: '/_user-asset/
|
|
62
|
-
dir: projectPath('
|
|
63
|
-
maxAge: 60 * 60 * 24 * 30,
|
|
64
|
-
},
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
1
|
+
import { elementPackages } from '@erudit-js/bitran-elements';
|
|
2
|
+
|
|
3
|
+
import { eruditPath, projectPath } from './globalPath';
|
|
4
|
+
|
|
5
|
+
export default defineNuxtConfig({
|
|
6
|
+
compatibilityDate: '2025-01-01',
|
|
7
|
+
devtools: { enabled: true },
|
|
8
|
+
future: { compatibilityVersion: 4 },
|
|
9
|
+
ssr: true,
|
|
10
|
+
alias: {
|
|
11
|
+
'@erudit': eruditPath(),
|
|
12
|
+
'@module': eruditPath('module'),
|
|
13
|
+
'@server': eruditPath('server/plugin'),
|
|
14
|
+
'@shared': eruditPath('shared'),
|
|
15
|
+
'@app': eruditPath('app'),
|
|
16
|
+
$: eruditPath('app/styles'),
|
|
17
|
+
},
|
|
18
|
+
modules: [eruditPath('module'), 'nuxt-my-icons'],
|
|
19
|
+
myicons: {
|
|
20
|
+
iconsDir: eruditPath('app/assets/icons'),
|
|
21
|
+
},
|
|
22
|
+
typescript: {
|
|
23
|
+
tsConfig: {
|
|
24
|
+
include: [eruditPath('**/*'), projectPath('**/*')],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
build: {
|
|
28
|
+
transpile: ['@bitran-js/renderer-vue', '@erudit-js/bitran-elements'],
|
|
29
|
+
},
|
|
30
|
+
ignore: [
|
|
31
|
+
// Content assets
|
|
32
|
+
...[
|
|
33
|
+
'**/{book,group,topic}.{js,ts}',
|
|
34
|
+
'**/{article,summary,practice,content}.bi',
|
|
35
|
+
].map((pattern) => projectPath(`content/${pattern}`)),
|
|
36
|
+
// Contributors assets
|
|
37
|
+
...['*/contributor.{js,ts}', '*/description.bi'].map((pattern) =>
|
|
38
|
+
projectPath(`contributors/${pattern}`),
|
|
39
|
+
),
|
|
40
|
+
],
|
|
41
|
+
nitro: {
|
|
42
|
+
plugins: [eruditPath('server/plugin')],
|
|
43
|
+
prerender: {
|
|
44
|
+
failOnError: false,
|
|
45
|
+
},
|
|
46
|
+
output: {
|
|
47
|
+
publicDir: projectPath('dist'),
|
|
48
|
+
},
|
|
49
|
+
publicAssets: [
|
|
50
|
+
{
|
|
51
|
+
baseURL: '/_erudit-asset/',
|
|
52
|
+
dir: eruditPath('app/public'),
|
|
53
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
baseURL: '/_user-asset/public/',
|
|
57
|
+
dir: projectPath('public'),
|
|
58
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
baseURL: '/_user-asset/content/',
|
|
62
|
+
dir: projectPath('content'),
|
|
63
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
baseURL: '/_user-asset/contributor/',
|
|
67
|
+
dir: projectPath('contributors'),
|
|
68
|
+
maxAge: 60 * 60 * 24 * 30,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
esbuild: {
|
|
72
|
+
options: {
|
|
73
|
+
tsconfigRaw: {
|
|
74
|
+
compilerOptions: {
|
|
75
|
+
experimentalDecorators: true, // Make TypeORM work with Nuxt,
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
vite: {
|
|
82
|
+
optimizeDeps: {
|
|
83
|
+
noDiscovery: true,
|
|
84
|
+
include: [
|
|
85
|
+
'@bitran-js/core',
|
|
86
|
+
'@bitran-js/transpiler',
|
|
87
|
+
// '@bitran-js/renderer-vue',
|
|
88
|
+
// '@erudit-js/bitran-elements',
|
|
89
|
+
//
|
|
90
|
+
...elementPackages,
|
|
91
|
+
//
|
|
92
|
+
'gradient-string',
|
|
93
|
+
'@floating-ui/vue',
|
|
94
|
+
'yaml',
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
server: { fs: { strict: false } },
|
|
98
|
+
css: {
|
|
99
|
+
preprocessorOptions: {
|
|
100
|
+
scss: {
|
|
101
|
+
api: 'modern-compiler',
|
|
102
|
+
additionalData: `@use '$/utils' as *;`,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "erudit",
|
|
3
|
-
"version": "2.0.0-dev.
|
|
3
|
+
"version": "2.0.0-dev.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "🤓 CMS for perfect educational sites.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,21 +11,24 @@
|
|
|
11
11
|
"directory": "packages/erudit"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
+
"@bitran-js/core": "1.0.0-dev.7",
|
|
15
|
+
"@bitran-js/transpiler": "1.0.0-dev.7",
|
|
16
|
+
"@bitran-js/renderer-vue": "1.0.0-dev.7",
|
|
17
|
+
"@erudit-js/bitran-elements": "1.0.0-dev.5",
|
|
18
|
+
"erudit-cli": "1.0.0-dev.7",
|
|
19
|
+
"erudit-cog": "1.0.0-dev.3",
|
|
14
20
|
"@floating-ui/vue": "^1.1.6",
|
|
15
|
-
"bitran": "^3.0.0-dev.3",
|
|
16
21
|
"chalk": "^5.4.1",
|
|
17
22
|
"chokidar": "^4.0.3",
|
|
18
23
|
"consola": "^3.4.0",
|
|
19
|
-
"erudit-cli": "1.0.0-dev.6",
|
|
20
|
-
"erudit-cog": "1.0.0-dev.3",
|
|
21
24
|
"glob": "^11.0.1",
|
|
22
25
|
"image-size": "^1.2.0",
|
|
23
26
|
"nuxt": "3.15.4",
|
|
24
27
|
"nuxt-my-icons": "1.0.2",
|
|
25
|
-
"sass": "^1.
|
|
28
|
+
"sass": "^1.85.1",
|
|
26
29
|
"slugify": "^1.6.6",
|
|
27
30
|
"sqlite3": "^5.1.7",
|
|
28
|
-
"typeorm": "^0.3.
|
|
31
|
+
"typeorm": "^0.3.21",
|
|
29
32
|
"vue": "latest",
|
|
30
33
|
"vue-router": "latest"
|
|
31
34
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
-
|
|
3
|
-
export default defineEventHandler(() => {
|
|
4
|
-
return Object.keys(ERUDIT_SERVER.NAV_BOOKS || {});
|
|
5
|
-
});
|
|
1
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
+
|
|
3
|
+
export default defineEventHandler(() => {
|
|
4
|
+
return Object.keys(ERUDIT_SERVER.NAV_BOOKS || {});
|
|
5
|
+
});
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
-
import { createBookFrontNav } from '@server/repository/frontNav';
|
|
3
|
-
|
|
4
|
-
export default defineEventHandler(async (event) => {
|
|
5
|
-
const bookId = getRouterParam(event, 'bookId');
|
|
6
|
-
|
|
7
|
-
if (
|
|
8
|
-
!bookId ||
|
|
9
|
-
!ERUDIT_SERVER.NAV_BOOKS ||
|
|
10
|
-
!(bookId in ERUDIT_SERVER.NAV_BOOKS)
|
|
11
|
-
)
|
|
12
|
-
throw createError({
|
|
13
|
-
statusCode: 400,
|
|
14
|
-
statusText: `Unknown book id "${bookId}"!`,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const bookNode = ERUDIT_SERVER.NAV_BOOKS[bookId]!;
|
|
18
|
-
|
|
19
|
-
return await createBookFrontNav(bookNode);
|
|
20
|
-
});
|
|
1
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
2
|
+
import { createBookFrontNav } from '@server/repository/frontNav';
|
|
3
|
+
|
|
4
|
+
export default defineEventHandler(async (event) => {
|
|
5
|
+
const bookId = getRouterParam(event, 'bookId');
|
|
6
|
+
|
|
7
|
+
if (
|
|
8
|
+
!bookId ||
|
|
9
|
+
!ERUDIT_SERVER.NAV_BOOKS ||
|
|
10
|
+
!(bookId in ERUDIT_SERVER.NAV_BOOKS)
|
|
11
|
+
)
|
|
12
|
+
throw createError({
|
|
13
|
+
statusCode: 400,
|
|
14
|
+
statusText: `Unknown book id "${bookId}"!`,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const bookNode = ERUDIT_SERVER.NAV_BOOKS[bookId]!;
|
|
18
|
+
|
|
19
|
+
return await createBookFrontNav(bookNode);
|
|
20
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { FrontNav } from '@erudit/shared/frontNav';
|
|
2
|
-
import { ERUDIT_SERVER } from '@server/global';
|
|
3
|
-
import { createGlobalFrontNav } from '@server/repository/frontNav';
|
|
4
|
-
|
|
5
|
-
export default defineEventHandler(async () => {
|
|
6
|
-
return (await createGlobalFrontNav(ERUDIT_SERVER.NAV, false)) as FrontNav;
|
|
7
|
-
});
|
|
1
|
+
import type { FrontNav } from '@erudit/shared/frontNav';
|
|
2
|
+
import { ERUDIT_SERVER } from '@server/global';
|
|
3
|
+
import { createGlobalFrontNav } from '@server/repository/frontNav';
|
|
4
|
+
|
|
5
|
+
export default defineEventHandler(async () => {
|
|
6
|
+
return (await createGlobalFrontNav(ERUDIT_SERVER.NAV, false)) as FrontNav;
|
|
7
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { AsideMinorNews } from '@shared/aside/minor';
|
|
2
|
-
|
|
3
|
-
export default defineEventHandler(async () => {
|
|
4
|
-
return <AsideMinorNews>{
|
|
5
|
-
type: 'news',
|
|
6
|
-
};
|
|
7
|
-
});
|
|
1
|
+
import type { AsideMinorNews } from '@shared/aside/minor';
|
|
2
|
+
|
|
3
|
+
export default defineEventHandler(async () => {
|
|
4
|
+
return <AsideMinorNews>{
|
|
5
|
+
type: 'news',
|
|
6
|
+
};
|
|
7
|
+
});
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import { isTopicPart } from 'erudit-cog/schema';
|
|
2
|
-
|
|
3
|
-
import type { AsideMinorContent, AsideMinorTopic } from '@shared/aside/minor';
|
|
4
|
-
import { getBitranToc } from '@erudit/server/plugin/bitran/toc';
|
|
5
|
-
import {
|
|
6
|
-
getContentContributors,
|
|
7
|
-
getFullContentId,
|
|
8
|
-
getPreviousNext,
|
|
9
|
-
} from '@erudit/server/plugin/repository/content';
|
|
10
|
-
import { getTopicPartsLinks } from '@erudit/server/plugin/repository/topic';
|
|
11
|
-
import { locationFromPath } from '@erudit/shared/bitran/location';
|
|
12
|
-
|
|
13
|
-
export default defineEventHandler(async (event) => {
|
|
14
|
-
const query = getQuery<{ path: string }>(event);
|
|
15
|
-
|
|
16
|
-
if (!query.path)
|
|
17
|
-
throw createError({
|
|
18
|
-
statusCode: 400,
|
|
19
|
-
statusText: 'Missing "path" query parameter!',
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const path = query.path.substring(1);
|
|
23
|
-
const pathStart = path.split('/')[0];
|
|
24
|
-
|
|
25
|
-
if (isTopicPart(pathStart)) return await createTopicData(path);
|
|
26
|
-
|
|
27
|
-
if (['book', 'group'].includes(pathStart))
|
|
28
|
-
return await createContentData(pathStart, path);
|
|
29
|
-
|
|
30
|
-
return 'news';
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
async function createTopicData(path: string): Promise<AsideMinorTopic> {
|
|
34
|
-
const location = locationFromPath(path);
|
|
35
|
-
|
|
36
|
-
if (!location)
|
|
37
|
-
throw createError({
|
|
38
|
-
statusCode: 400,
|
|
39
|
-
statusText: `Provided path "${path}" is not a valid topic location!`,
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
const contentId = location.path;
|
|
43
|
-
const fullContentId = (await getFullContentId(contentId))!;
|
|
44
|
-
|
|
45
|
-
const toc = await getBitranToc(location);
|
|
46
|
-
const previousNext = await getPreviousNext(contentId);
|
|
47
|
-
const topicPartsLinks = await getTopicPartsLinks(contentId);
|
|
48
|
-
const contributors = await getContentContributors(contentId);
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
type: 'topic',
|
|
52
|
-
fullContentId,
|
|
53
|
-
location,
|
|
54
|
-
toc,
|
|
55
|
-
nav: {
|
|
56
|
-
...previousNext,
|
|
57
|
-
...topicPartsLinks,
|
|
58
|
-
},
|
|
59
|
-
contributors,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
async function createContentData(
|
|
64
|
-
type: string,
|
|
65
|
-
path: string,
|
|
66
|
-
): Promise<AsideMinorContent> {
|
|
67
|
-
const contentId = path.split('/').slice(1).join('/');
|
|
68
|
-
const fullContentId = (await getFullContentId(contentId))!;
|
|
69
|
-
const previousNext = await getPreviousNext(contentId);
|
|
70
|
-
const contributors = await getContentContributors(contentId);
|
|
71
|
-
|
|
72
|
-
return {
|
|
73
|
-
type: type as any,
|
|
74
|
-
fullContentId,
|
|
75
|
-
nav: previousNext,
|
|
76
|
-
contributors,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
1
|
+
import { isTopicPart } from 'erudit-cog/schema';
|
|
2
|
+
|
|
3
|
+
import type { AsideMinorContent, AsideMinorTopic } from '@shared/aside/minor';
|
|
4
|
+
import { getBitranToc } from '@erudit/server/plugin/bitran/toc';
|
|
5
|
+
import {
|
|
6
|
+
getContentContributors,
|
|
7
|
+
getFullContentId,
|
|
8
|
+
getPreviousNext,
|
|
9
|
+
} from '@erudit/server/plugin/repository/content';
|
|
10
|
+
import { getTopicPartsLinks } from '@erudit/server/plugin/repository/topic';
|
|
11
|
+
import { locationFromPath } from '@erudit/shared/bitran/location';
|
|
12
|
+
|
|
13
|
+
export default defineEventHandler(async (event) => {
|
|
14
|
+
const query = getQuery<{ path: string }>(event);
|
|
15
|
+
|
|
16
|
+
if (!query.path)
|
|
17
|
+
throw createError({
|
|
18
|
+
statusCode: 400,
|
|
19
|
+
statusText: 'Missing "path" query parameter!',
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const path = query.path.substring(1);
|
|
23
|
+
const pathStart = path.split('/')[0];
|
|
24
|
+
|
|
25
|
+
if (isTopicPart(pathStart)) return await createTopicData(path);
|
|
26
|
+
|
|
27
|
+
if (['book', 'group'].includes(pathStart))
|
|
28
|
+
return await createContentData(pathStart, path);
|
|
29
|
+
|
|
30
|
+
return 'news';
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
async function createTopicData(path: string): Promise<AsideMinorTopic> {
|
|
34
|
+
const location = locationFromPath(path);
|
|
35
|
+
|
|
36
|
+
if (!location)
|
|
37
|
+
throw createError({
|
|
38
|
+
statusCode: 400,
|
|
39
|
+
statusText: `Provided path "${path}" is not a valid topic location!`,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const contentId = location.path;
|
|
43
|
+
const fullContentId = (await getFullContentId(contentId))!;
|
|
44
|
+
|
|
45
|
+
const toc = await getBitranToc(location);
|
|
46
|
+
const previousNext = await getPreviousNext(contentId);
|
|
47
|
+
const topicPartsLinks = await getTopicPartsLinks(contentId);
|
|
48
|
+
const contributors = await getContentContributors(contentId);
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
type: 'topic',
|
|
52
|
+
fullContentId,
|
|
53
|
+
location,
|
|
54
|
+
toc,
|
|
55
|
+
nav: {
|
|
56
|
+
...previousNext,
|
|
57
|
+
...topicPartsLinks,
|
|
58
|
+
},
|
|
59
|
+
contributors,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async function createContentData(
|
|
64
|
+
type: string,
|
|
65
|
+
path: string,
|
|
66
|
+
): Promise<AsideMinorContent> {
|
|
67
|
+
const contentId = path.split('/').slice(1).join('/');
|
|
68
|
+
const fullContentId = (await getFullContentId(contentId))!;
|
|
69
|
+
const previousNext = await getPreviousNext(contentId);
|
|
70
|
+
const contributors = await getContentContributors(contentId);
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
type: type as any,
|
|
74
|
+
fullContentId,
|
|
75
|
+
nav: previousNext,
|
|
76
|
+
contributors,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { parseUrlLocation } from '@server/bitran/location';
|
|
2
|
-
import { getBitranContent } from '@server/bitran/content';
|
|
3
|
-
|
|
4
|
-
export default defineEventHandler(async (event) => {
|
|
5
|
-
const location = parseUrlLocation(getRouterParam(event, 'location') || '');
|
|
6
|
-
return await getBitranContent(location);
|
|
7
|
-
});
|
|
1
|
+
import { parseUrlLocation } from '@server/bitran/location';
|
|
2
|
+
import { getBitranContent } from '@server/bitran/content';
|
|
3
|
+
|
|
4
|
+
export default defineEventHandler(async (event) => {
|
|
5
|
+
const location = parseUrlLocation(getRouterParam(event, 'location') || '');
|
|
6
|
+
return await getBitranContent(location);
|
|
7
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { parseUrlLocation } from '@server/bitran/location';
|
|
2
|
-
import { getBitranToc } from '@server/bitran/toc';
|
|
3
|
-
|
|
4
|
-
export default defineEventHandler(async (event) => {
|
|
5
|
-
const location = parseUrlLocation(getRouterParam(event, 'location') || '');
|
|
6
|
-
return await getBitranToc(location);
|
|
7
|
-
});
|
|
1
|
+
import { parseUrlLocation } from '@server/bitran/location';
|
|
2
|
+
import { getBitranToc } from '@server/bitran/toc';
|
|
3
|
+
|
|
4
|
+
export default defineEventHandler(async (event) => {
|
|
5
|
+
const location = parseUrlLocation(getRouterParam(event, 'location') || '');
|
|
6
|
+
return await getBitranToc(location);
|
|
7
|
+
});
|