erudit 3.0.0-dev.17 → 3.0.0-dev.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/app.vue +193 -191
- package/app/components/Loading.vue +23 -23
- package/app/components/SiteAside.vue +393 -393
- package/app/components/SiteMain.vue +32 -32
- package/app/components/aside/AsideListItem.vue +74 -74
- package/app/components/aside/AsideMajor.vue +56 -56
- package/app/components/aside/AsideMinor.vue +73 -73
- package/app/components/aside/major/PaneContentScroll.vue +23 -23
- package/app/components/aside/major/PaneSwitch.vue +54 -54
- package/app/components/aside/major/PaneSwitchButton.vue +63 -63
- package/app/components/aside/major/SiteInfo.vue +85 -85
- package/app/components/aside/major/panes/Language.vue +79 -79
- package/app/components/aside/major/panes/Pages.vue +34 -34
- package/app/components/aside/major/panes/Search.vue +11 -11
- package/app/components/aside/major/panes/nav/Nav.vue +92 -92
- package/app/components/aside/major/panes/nav/NavBook.vue +95 -95
- package/app/components/aside/major/panes/nav/NavBookLoading.vue +24 -24
- package/app/components/aside/major/panes/nav/NavGlobal.vue +16 -16
- package/app/components/aside/major/panes/nav/fnav/FNav.vue +105 -105
- package/app/components/aside/major/panes/nav/fnav/FNavBook.vue +32 -32
- package/app/components/aside/major/panes/nav/fnav/FNavFlags.vue +40 -40
- package/app/components/aside/major/panes/nav/fnav/FNavFolder.vue +60 -60
- package/app/components/aside/major/panes/nav/fnav/FNavItem.vue +34 -34
- package/app/components/aside/major/panes/nav/fnav/FNavSeparator.vue +80 -80
- package/app/components/aside/major/panes/nav/fnav/FNavTopic.vue +24 -24
- package/app/components/aside/major/panes/other/ItemContent.vue +29 -29
- package/app/components/aside/major/panes/other/ItemGenerator.vue +13 -13
- package/app/components/aside/major/panes/other/ItemTheme.vue +54 -54
- package/app/components/aside/major/panes/other/Other.vue +16 -16
- package/app/components/aside/minor/AsideMinorContributor.vue +5 -5
- package/app/components/aside/minor/AsideMinorNews.vue +11 -11
- package/app/components/aside/minor/AsideMinorPane.vue +15 -15
- package/app/components/aside/minor/AsideMinorTopLink.vue +67 -67
- package/app/components/aside/minor/Contribute.vue +145 -145
- package/app/components/aside/minor/content/AsideMinorContent.vue +92 -92
- package/app/components/aside/minor/topic/AsideMinorTopic.vue +32 -32
- package/app/components/aside/minor/topic/TopicContributors.vue +177 -177
- package/app/components/aside/minor/topic/TopicNav.vue +49 -49
- package/app/components/aside/minor/topic/TopicToc.vue +214 -214
- package/app/components/aside/minor/topic/TopicTocItem.vue +32 -32
- package/app/components/aside/utils/AsideOverlayPane.vue +40 -40
- package/app/components/bitran/BitranContent.vue +91 -91
- package/app/components/bitran/RenderWrapper.vue +10 -10
- package/app/components/contributor/ContributorAvatar.vue +45 -45
- package/app/components/contributor/ContributorListItem.vue +35 -35
- package/app/components/main/topic/MainTopic.vue +88 -88
- package/app/components/main/topic/TopicPartSwitch.vue +118 -118
- package/app/components/main/utils/Breadcrumb.vue +74 -74
- package/app/components/main/utils/ContentDecoration.vue +29 -29
- package/app/components/main/utils/ContentDescription.vue +19 -19
- package/app/components/main/utils/ContentPopover.vue +188 -188
- package/app/components/main/utils/ContentPopovers.vue +111 -111
- package/app/components/main/utils/ContentReferences.vue +70 -70
- package/app/components/main/utils/ContentSection.vue +45 -45
- package/app/components/main/utils/ContentTitle.vue +63 -63
- package/app/components/main/utils/reference/ReferenceGroup.vue +38 -38
- package/app/components/main/utils/reference/ReferenceItem.vue +70 -70
- package/app/components/main/utils/reference/ReferenceSource.vue +120 -120
- package/app/components/preview/Preview.vue +186 -186
- package/app/components/preview/PreviewDisplay.vue +139 -139
- package/app/components/preview/PreviewFooterAction.vue +73 -73
- package/app/components/preview/PreviewLoading.vue +14 -14
- package/app/components/preview/PreviewScreen.vue +141 -141
- package/app/components/preview/display/Alert.vue +50 -50
- package/app/components/preview/display/Custom.vue +18 -18
- package/app/components/preview/display/GenericLink.vue +48 -48
- package/app/components/preview/display/PageLink.vue +22 -22
- package/app/components/preview/display/Unique.vue +55 -55
- package/app/components/transition/Fade.vue +19 -19
- package/app/components/tree/TreeContainer.vue +11 -11
- package/app/components/tree/TreeItem.vue +89 -89
- package/app/composables/adsAllowed.ts +11 -0
- package/app/composables/bitran.ts +108 -108
- package/app/composables/bitranContent.ts +96 -92
- package/app/composables/bitranLocation.ts +7 -7
- package/app/composables/contentData.ts +38 -38
- package/app/composables/contentPage.ts +168 -158
- package/app/composables/contentRoute.ts +45 -45
- package/app/composables/darkMagic.ts +24 -24
- package/app/composables/externalApi.ts +69 -69
- package/app/composables/favicon.ts +8 -8
- package/app/composables/formatText.ts +99 -99
- package/app/composables/majorPane.ts +60 -60
- package/app/composables/phrases.ts +65 -65
- package/app/composables/theme.ts +29 -29
- package/app/composables/url.ts +33 -33
- package/app/pages/_test/preview.vue +110 -110
- package/app/pages/article/[...articleId].vue +3 -3
- package/app/pages/book/[...bookId].vue +47 -47
- package/app/pages/group/[...groupId].vue +66 -66
- package/app/pages/index.vue +32 -32
- package/app/pages/members.vue +5 -6
- package/app/pages/practice/[...practice].vue +3 -3
- package/app/pages/summary/[...summaryId].vue +3 -3
- package/app/plugins/analytics.ts +8 -0
- package/app/plugins/prerender.server.ts +22 -22
- package/app/scripts/_immediate.js +9 -9
- package/app/scripts/aside/index.ts +59 -59
- package/app/scripts/aside/major/nav.ts +26 -26
- package/app/scripts/aside/minor/state.ts +37 -37
- package/app/scripts/aside/minor/topic.ts +3 -3
- package/app/scripts/flag.ts +28 -28
- package/app/scripts/og.ts +27 -27
- package/app/scripts/preview/build.ts +76 -76
- package/app/scripts/preview/data/alert.ts +19 -19
- package/app/scripts/preview/data/custom.ts +8 -8
- package/app/scripts/preview/data/genericLink.ts +24 -24
- package/app/scripts/preview/data/pageLink.ts +23 -23
- package/app/scripts/preview/data/unique.ts +72 -72
- package/app/scripts/preview/data.ts +24 -24
- package/app/scripts/preview/display.ts +37 -37
- package/app/scripts/preview/footer.ts +9 -9
- package/app/scripts/preview/request.ts +51 -51
- package/app/scripts/preview/state.ts +63 -63
- package/app/styles/_immediate.css +7 -7
- package/app/styles/_util.scss +43 -43
- package/app/styles/_utils.scss +44 -44
- package/app/styles/app.scss +91 -91
- package/app/styles/def/_bp.scss +27 -27
- package/app/styles/def/_size.scss +7 -7
- package/app/styles/def/_z.scss +5 -5
- package/app/styles/normalize.scss +49 -49
- package/app/styles/partials/_darkMagic.scss +5 -5
- package/app/styles/partials/_fnav.scss +15 -15
- package/app/styles/partials/_preview.scss +5 -5
- package/bin/erudit.mjs +2 -2
- package/const.ts +4 -4
- package/globalPath.ts +21 -21
- package/globals/bitran.ts +1 -1
- package/globals/content.ts +27 -27
- package/globals/contributor.ts +5 -5
- package/globals/erudit.ts +5 -5
- package/globals/register.ts +18 -18
- package/languages/en.ts +94 -94
- package/languages/ru.ts +98 -98
- package/module/bitran.ts +66 -66
- package/module/config.ts +35 -35
- package/module/imports.ts +67 -67
- package/module/index.ts +47 -47
- package/module/logger.ts +10 -10
- package/module/paths.ts +22 -22
- package/module/restart.ts +61 -61
- package/nuxt.config.ts +131 -131
- package/package.json +4 -4
- package/server/api/aside/major/nav/bookIds.ts +5 -5
- package/server/api/aside/major/nav/bookNav/[...bookId].ts +17 -20
- package/server/api/aside/major/nav/global.ts +7 -7
- package/server/api/aside/minor/news.ts +7 -7
- package/server/api/aside/minor/path.ts +82 -82
- package/server/api/bitran/content/[...location].ts +10 -10
- package/server/api/bitran/toc/[...location].ts +9 -9
- package/server/api/content/data.ts +75 -75
- package/server/api/contributor/count.ts +6 -6
- package/server/api/fake/content.ts +11 -11
- package/server/api/fake/shared/languages.ts +12 -12
- package/server/api/language/functions.ts +12 -12
- package/server/api/language/phrase/[phraseId].ts +19 -19
- package/server/api/language/phraseIds.ts +8 -8
- package/server/api/prerender.ts +19 -120
- package/server/api/preview/page/[...parts].ts +78 -78
- package/server/api/preview/unique/[...location].ts +61 -61
- package/server/plugin/bitran/content.ts +237 -190
- package/server/plugin/bitran/elements/include.ts +229 -229
- package/server/plugin/bitran/location.ts +39 -39
- package/server/plugin/bitran/toc.ts +94 -94
- package/server/plugin/bitran/transpiler.ts +18 -18
- package/server/plugin/build/close.ts +12 -12
- package/server/plugin/build/jobs/content/builderArgs.ts +8 -8
- package/server/plugin/build/jobs/content/generic.ts +191 -191
- package/server/plugin/build/jobs/content/parse.ts +113 -113
- package/server/plugin/build/jobs/content/path.ts +6 -6
- package/server/plugin/build/jobs/content/type/book.ts +9 -9
- package/server/plugin/build/jobs/content/type/group.ts +37 -37
- package/server/plugin/build/jobs/content/type/topic.ts +36 -36
- package/server/plugin/build/jobs/contributors.ts +66 -66
- package/server/plugin/build/jobs/language.ts +36 -36
- package/server/plugin/build/jobs/nav.ts +345 -345
- package/server/plugin/build/process.ts +32 -32
- package/server/plugin/build/rebuild.ts +66 -66
- package/server/plugin/build/setup.ts +19 -19
- package/server/plugin/content/context.ts +119 -119
- package/server/plugin/db/entities/Book.ts +7 -7
- package/server/plugin/db/entities/Content.ts +45 -45
- package/server/plugin/db/entities/Contribution.ts +10 -10
- package/server/plugin/db/entities/Contributor.ts +16 -16
- package/server/plugin/db/entities/File.ts +10 -10
- package/server/plugin/db/entities/Group.ts +14 -14
- package/server/plugin/db/entities/Hash.ts +15 -15
- package/server/plugin/db/entities/Topic.ts +20 -20
- package/server/plugin/db/entities/Unique.ts +21 -21
- package/server/plugin/db/reset.ts +12 -12
- package/server/plugin/db/setup.ts +49 -49
- package/server/plugin/global.ts +16 -16
- package/server/plugin/importer.ts +16 -16
- package/server/plugin/index.ts +9 -9
- package/server/plugin/logger.ts +23 -23
- package/server/plugin/nav/node.ts +27 -27
- package/server/plugin/nav/utils.ts +179 -175
- package/server/plugin/repository/book.ts +23 -21
- package/server/plugin/repository/content.ts +240 -240
- package/server/plugin/repository/contentId.ts +40 -40
- package/server/plugin/repository/contributor.ts +8 -8
- package/server/plugin/repository/file.ts +10 -10
- package/server/plugin/repository/frontNav.ts +145 -145
- package/server/plugin/repository/topic.ts +35 -35
- package/server/tsconfig.json +9 -9
- package/shared/aside/minor.ts +51 -51
- package/shared/asset.ts +22 -22
- package/shared/bitran/contentId.ts +56 -56
- package/shared/bitran/stringContent.ts +6 -6
- package/shared/bitran/toc.ts +8 -8
- package/shared/content/bookId.ts +12 -12
- package/shared/content/context.ts +9 -9
- package/shared/content/data/base.ts +32 -32
- package/shared/content/data/index.ts +5 -5
- package/shared/content/data/type/book.ts +5 -5
- package/shared/content/data/type/group.ts +6 -6
- package/shared/content/data/type/topic.ts +11 -11
- package/shared/content/previousNext.ts +9 -9
- package/shared/contributor.ts +5 -5
- package/shared/frontNav.ts +41 -41
- package/shared/icons.ts +38 -38
- package/shared/image.ts +5 -5
- package/shared/link.ts +28 -28
- package/shared/popover.ts +8 -8
- package/shared/types/language.ts +74 -74
- package/shared/utils/objectsEqual.ts +4 -4
- package/shared/utils/stringColor.ts +9 -9
- package/test/contentId.test.ts +91 -91
- package/tsconfig.json +8 -8
- package/utils/contentPath.ts +67 -67
- package/utils/slash.ts +11 -11
- package/utils/stress.ts +9 -9
package/app/composables/url.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import eruditConfig from '#erudit/config';
|
|
2
|
-
|
|
3
|
-
export function useBaseUrlPath() {
|
|
4
|
-
const runtimeConfig = useRuntimeConfig();
|
|
5
|
-
return (path: string) => {
|
|
6
|
-
const baseURL = runtimeConfig.app.baseURL;
|
|
7
|
-
if (path.startsWith(baseURL)) return path;
|
|
8
|
-
else if (path.startsWith('/')) return baseURL + path.substring(1);
|
|
9
|
-
else return path;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function useSiteUrl() {
|
|
14
|
-
const runtimeConfig = useRuntimeConfig();
|
|
15
|
-
const baseUrl = runtimeConfig.app.baseURL;
|
|
16
|
-
const url = useRequestURL();
|
|
17
|
-
|
|
18
|
-
if (!import.meta.dev && eruditConfig.site?.buildUrl)
|
|
19
|
-
return eruditConfig.site.buildUrl + baseUrl.slice(0, -1);
|
|
20
|
-
|
|
21
|
-
return url.origin;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function usePageUrl() {
|
|
25
|
-
const siteUrl = useSiteUrl();
|
|
26
|
-
const route = useRoute();
|
|
27
|
-
|
|
28
|
-
return computed(() => {
|
|
29
|
-
if (route.path === '/') return siteUrl;
|
|
30
|
-
|
|
31
|
-
return siteUrl + route.path;
|
|
32
|
-
});
|
|
33
|
-
}
|
|
1
|
+
import eruditConfig from '#erudit/config';
|
|
2
|
+
|
|
3
|
+
export function useBaseUrlPath() {
|
|
4
|
+
const runtimeConfig = useRuntimeConfig();
|
|
5
|
+
return (path: string) => {
|
|
6
|
+
const baseURL = runtimeConfig.app.baseURL;
|
|
7
|
+
if (path.startsWith(baseURL)) return path;
|
|
8
|
+
else if (path.startsWith('/')) return baseURL + path.substring(1);
|
|
9
|
+
else return path;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function useSiteUrl() {
|
|
14
|
+
const runtimeConfig = useRuntimeConfig();
|
|
15
|
+
const baseUrl = runtimeConfig.app.baseURL;
|
|
16
|
+
const url = useRequestURL();
|
|
17
|
+
|
|
18
|
+
if (!import.meta.dev && eruditConfig.site?.buildUrl)
|
|
19
|
+
return eruditConfig.site.buildUrl + baseUrl.slice(0, -1);
|
|
20
|
+
|
|
21
|
+
return url.origin;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function usePageUrl() {
|
|
25
|
+
const siteUrl = useSiteUrl();
|
|
26
|
+
const route = useRoute();
|
|
27
|
+
|
|
28
|
+
return computed(() => {
|
|
29
|
+
if (route.path === '/') return siteUrl;
|
|
30
|
+
|
|
31
|
+
return siteUrl + route.path;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { PreviewDataType } from '@app/scripts/preview/data';
|
|
3
|
-
import { createPreviewError } from '@app/scripts/preview/data/alert';
|
|
4
|
-
import { PreviewRequestType } from '@app/scripts/preview/request';
|
|
5
|
-
import {
|
|
6
|
-
PreviewThemeName,
|
|
7
|
-
showPreview,
|
|
8
|
-
togglePreview,
|
|
9
|
-
} from '@app/scripts/preview/state';
|
|
10
|
-
|
|
11
|
-
function showCustom() {
|
|
12
|
-
showPreview({
|
|
13
|
-
type: PreviewRequestType.Data,
|
|
14
|
-
data: {
|
|
15
|
-
type: PreviewDataType.Custom,
|
|
16
|
-
message: 'This is custom message for preview!',
|
|
17
|
-
footer: {
|
|
18
|
-
//iconName: 'arrow-left',
|
|
19
|
-
iconSvg:
|
|
20
|
-
'<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path fill-rule="evenodd" clip-rule="evenodd" d="M6.42436 0H9.57565L14.995 16H11.8276L10.8115 13H5.18855L4.17242 16H1.005L6.42436 0ZM6.20468 10H9.79533L8 4.69952L6.20468 10Z"></path> </g></svg>',
|
|
21
|
-
secondary: 'Secondary raw text',
|
|
22
|
-
primary: 'Primary raw text',
|
|
23
|
-
href: 'https://google.com',
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function showAlert(theme: PreviewThemeName) {
|
|
30
|
-
showPreview({
|
|
31
|
-
type: PreviewRequestType.Data,
|
|
32
|
-
data: createPreviewError({
|
|
33
|
-
theme,
|
|
34
|
-
message: 'This is message!',
|
|
35
|
-
title: 'Custom Title',
|
|
36
|
-
pre: JSON.stringify(
|
|
37
|
-
{
|
|
38
|
-
foo: 1337,
|
|
39
|
-
bar: 'Some text',
|
|
40
|
-
},
|
|
41
|
-
null,
|
|
42
|
-
4,
|
|
43
|
-
),
|
|
44
|
-
}),
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
</script>
|
|
48
|
-
|
|
49
|
-
<template>
|
|
50
|
-
<button @click="() => togglePreview()">Toggle Preview</button>
|
|
51
|
-
<div>
|
|
52
|
-
Show:
|
|
53
|
-
<br />
|
|
54
|
-
<button :class="$style.button" @click="showCustom">Custom</button>
|
|
55
|
-
<br />
|
|
56
|
-
<button
|
|
57
|
-
:class="$style.button"
|
|
58
|
-
v-for="theme in PreviewThemeName"
|
|
59
|
-
@click="() => showAlert(theme)"
|
|
60
|
-
>
|
|
61
|
-
Alert {{ theme }}
|
|
62
|
-
</button>
|
|
63
|
-
<br />
|
|
64
|
-
<button
|
|
65
|
-
:class="$style.button"
|
|
66
|
-
@click="
|
|
67
|
-
showPreview({
|
|
68
|
-
type: PreviewRequestType.MissingElement,
|
|
69
|
-
elementId: 'foo-id',
|
|
70
|
-
})
|
|
71
|
-
"
|
|
72
|
-
>
|
|
73
|
-
Missing element
|
|
74
|
-
</button>
|
|
75
|
-
<button
|
|
76
|
-
:class="$style.button"
|
|
77
|
-
@click="
|
|
78
|
-
showPreview({
|
|
79
|
-
type: PreviewRequestType.MissingElement,
|
|
80
|
-
elementId: 'foo-id',
|
|
81
|
-
hashMismatch: { current: 'bar', expected: 'baz' },
|
|
82
|
-
})
|
|
83
|
-
"
|
|
84
|
-
>
|
|
85
|
-
Missing element + hash mismatch
|
|
86
|
-
</button>
|
|
87
|
-
<br />
|
|
88
|
-
<button
|
|
89
|
-
:class="$style.button"
|
|
90
|
-
@click="
|
|
91
|
-
showPreview({
|
|
92
|
-
type: PreviewRequestType.HashMismatch,
|
|
93
|
-
currentHash: 'foo',
|
|
94
|
-
expectedHash: 'bar',
|
|
95
|
-
})
|
|
96
|
-
"
|
|
97
|
-
>
|
|
98
|
-
Hash mismatch
|
|
99
|
-
</button>
|
|
100
|
-
</div>
|
|
101
|
-
</template>
|
|
102
|
-
|
|
103
|
-
<style lang="scss" module>
|
|
104
|
-
.button {
|
|
105
|
-
border: 2px solid var(--border);
|
|
106
|
-
border-radius: 3px;
|
|
107
|
-
padding: 3px;
|
|
108
|
-
margin: 3px;
|
|
109
|
-
}
|
|
110
|
-
</style>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { PreviewDataType } from '@app/scripts/preview/data';
|
|
3
|
+
import { createPreviewError } from '@app/scripts/preview/data/alert';
|
|
4
|
+
import { PreviewRequestType } from '@app/scripts/preview/request';
|
|
5
|
+
import {
|
|
6
|
+
PreviewThemeName,
|
|
7
|
+
showPreview,
|
|
8
|
+
togglePreview,
|
|
9
|
+
} from '@app/scripts/preview/state';
|
|
10
|
+
|
|
11
|
+
function showCustom() {
|
|
12
|
+
showPreview({
|
|
13
|
+
type: PreviewRequestType.Data,
|
|
14
|
+
data: {
|
|
15
|
+
type: PreviewDataType.Custom,
|
|
16
|
+
message: 'This is custom message for preview!',
|
|
17
|
+
footer: {
|
|
18
|
+
//iconName: 'arrow-left',
|
|
19
|
+
iconSvg:
|
|
20
|
+
'<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <path fill-rule="evenodd" clip-rule="evenodd" d="M6.42436 0H9.57565L14.995 16H11.8276L10.8115 13H5.18855L4.17242 16H1.005L6.42436 0ZM6.20468 10H9.79533L8 4.69952L6.20468 10Z"></path> </g></svg>',
|
|
21
|
+
secondary: 'Secondary raw text',
|
|
22
|
+
primary: 'Primary raw text',
|
|
23
|
+
href: 'https://google.com',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function showAlert(theme: PreviewThemeName) {
|
|
30
|
+
showPreview({
|
|
31
|
+
type: PreviewRequestType.Data,
|
|
32
|
+
data: createPreviewError({
|
|
33
|
+
theme,
|
|
34
|
+
message: 'This is message!',
|
|
35
|
+
title: 'Custom Title',
|
|
36
|
+
pre: JSON.stringify(
|
|
37
|
+
{
|
|
38
|
+
foo: 1337,
|
|
39
|
+
bar: 'Some text',
|
|
40
|
+
},
|
|
41
|
+
null,
|
|
42
|
+
4,
|
|
43
|
+
),
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
</script>
|
|
48
|
+
|
|
49
|
+
<template>
|
|
50
|
+
<button @click="() => togglePreview()">Toggle Preview</button>
|
|
51
|
+
<div>
|
|
52
|
+
Show:
|
|
53
|
+
<br />
|
|
54
|
+
<button :class="$style.button" @click="showCustom">Custom</button>
|
|
55
|
+
<br />
|
|
56
|
+
<button
|
|
57
|
+
:class="$style.button"
|
|
58
|
+
v-for="theme in PreviewThemeName"
|
|
59
|
+
@click="() => showAlert(theme)"
|
|
60
|
+
>
|
|
61
|
+
Alert {{ theme }}
|
|
62
|
+
</button>
|
|
63
|
+
<br />
|
|
64
|
+
<button
|
|
65
|
+
:class="$style.button"
|
|
66
|
+
@click="
|
|
67
|
+
showPreview({
|
|
68
|
+
type: PreviewRequestType.MissingElement,
|
|
69
|
+
elementId: 'foo-id',
|
|
70
|
+
})
|
|
71
|
+
"
|
|
72
|
+
>
|
|
73
|
+
Missing element
|
|
74
|
+
</button>
|
|
75
|
+
<button
|
|
76
|
+
:class="$style.button"
|
|
77
|
+
@click="
|
|
78
|
+
showPreview({
|
|
79
|
+
type: PreviewRequestType.MissingElement,
|
|
80
|
+
elementId: 'foo-id',
|
|
81
|
+
hashMismatch: { current: 'bar', expected: 'baz' },
|
|
82
|
+
})
|
|
83
|
+
"
|
|
84
|
+
>
|
|
85
|
+
Missing element + hash mismatch
|
|
86
|
+
</button>
|
|
87
|
+
<br />
|
|
88
|
+
<button
|
|
89
|
+
:class="$style.button"
|
|
90
|
+
@click="
|
|
91
|
+
showPreview({
|
|
92
|
+
type: PreviewRequestType.HashMismatch,
|
|
93
|
+
currentHash: 'foo',
|
|
94
|
+
expectedHash: 'bar',
|
|
95
|
+
})
|
|
96
|
+
"
|
|
97
|
+
>
|
|
98
|
+
Hash mismatch
|
|
99
|
+
</button>
|
|
100
|
+
</div>
|
|
101
|
+
</template>
|
|
102
|
+
|
|
103
|
+
<style lang="scss" module>
|
|
104
|
+
.button {
|
|
105
|
+
border: 2px solid var(--border);
|
|
106
|
+
border-radius: 3px;
|
|
107
|
+
padding: 3px;
|
|
108
|
+
margin: 3px;
|
|
109
|
+
}
|
|
110
|
+
</style>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<MainTopic />
|
|
3
|
-
</template>
|
|
1
|
+
<template>
|
|
2
|
+
<MainTopic />
|
|
3
|
+
</template>
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import type { ContentBookData } from '@erudit/shared/content/data/type/book';
|
|
3
|
-
import type { MyIconName } from '#my-icons';
|
|
4
|
-
|
|
5
|
-
import ContentDecoration from '@app/components/main/utils/ContentDecoration.vue';
|
|
6
|
-
import Breadcrumb from '@app/components/main/utils/Breadcrumb.vue';
|
|
7
|
-
import ContentTitle from '@app/components/main/utils/ContentTitle.vue';
|
|
8
|
-
import ContentDescription from '@app/components/main/utils/ContentDescription.vue';
|
|
9
|
-
import ContentPopovers from '@app/components/main/utils/ContentPopovers.vue';
|
|
10
|
-
|
|
11
|
-
const bookData = await useContentData<ContentBookData>();
|
|
12
|
-
await useContentPage(bookData);
|
|
13
|
-
|
|
14
|
-
const phrase = await usePhrases('book');
|
|
15
|
-
</script>
|
|
16
|
-
|
|
17
|
-
<template>
|
|
18
|
-
<ContentDecoration
|
|
19
|
-
v-if="bookData.generic.decoration"
|
|
20
|
-
:decoration="bookData.generic.decoration"
|
|
21
|
-
/>
|
|
22
|
-
|
|
23
|
-
<Breadcrumb
|
|
24
|
-
v-if="bookData.generic.context?.length > 1"
|
|
25
|
-
:context="bookData.generic.context"
|
|
26
|
-
/>
|
|
27
|
-
|
|
28
|
-
<ContentTitle
|
|
29
|
-
:title="
|
|
30
|
-
bookData.generic?.title ||
|
|
31
|
-
bookData.generic.contentId.split('/').pop()!
|
|
32
|
-
"
|
|
33
|
-
:icon="<MyIconName>'outline/book'"
|
|
34
|
-
:hint="phrase.book"
|
|
35
|
-
/>
|
|
36
|
-
|
|
37
|
-
<ContentDescription
|
|
38
|
-
v-if="bookData.generic?.description"
|
|
39
|
-
:description="bookData.generic?.description"
|
|
40
|
-
/>
|
|
41
|
-
|
|
42
|
-
<ContentPopovers :generic="bookData.generic" />
|
|
43
|
-
|
|
44
|
-
<!-- Counters, fancy "GO LEARN" button and etc. -->
|
|
45
|
-
|
|
46
|
-
<div style="clear: both"></div>
|
|
47
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import type { ContentBookData } from '@erudit/shared/content/data/type/book';
|
|
3
|
+
import type { MyIconName } from '#my-icons';
|
|
4
|
+
|
|
5
|
+
import ContentDecoration from '@app/components/main/utils/ContentDecoration.vue';
|
|
6
|
+
import Breadcrumb from '@app/components/main/utils/Breadcrumb.vue';
|
|
7
|
+
import ContentTitle from '@app/components/main/utils/ContentTitle.vue';
|
|
8
|
+
import ContentDescription from '@app/components/main/utils/ContentDescription.vue';
|
|
9
|
+
import ContentPopovers from '@app/components/main/utils/ContentPopovers.vue';
|
|
10
|
+
|
|
11
|
+
const bookData = await useContentData<ContentBookData>();
|
|
12
|
+
await useContentPage(bookData);
|
|
13
|
+
|
|
14
|
+
const phrase = await usePhrases('book');
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<ContentDecoration
|
|
19
|
+
v-if="bookData.generic.decoration"
|
|
20
|
+
:decoration="bookData.generic.decoration"
|
|
21
|
+
/>
|
|
22
|
+
|
|
23
|
+
<Breadcrumb
|
|
24
|
+
v-if="bookData.generic.context?.length > 1"
|
|
25
|
+
:context="bookData.generic.context"
|
|
26
|
+
/>
|
|
27
|
+
|
|
28
|
+
<ContentTitle
|
|
29
|
+
:title="
|
|
30
|
+
bookData.generic?.title ||
|
|
31
|
+
bookData.generic.contentId.split('/').pop()!
|
|
32
|
+
"
|
|
33
|
+
:icon="<MyIconName>'outline/book'"
|
|
34
|
+
:hint="phrase.book"
|
|
35
|
+
/>
|
|
36
|
+
|
|
37
|
+
<ContentDescription
|
|
38
|
+
v-if="bookData.generic?.description"
|
|
39
|
+
:description="bookData.generic?.description"
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
<ContentPopovers :generic="bookData.generic" />
|
|
43
|
+
|
|
44
|
+
<!-- Counters, fancy "GO LEARN" button and etc. -->
|
|
45
|
+
|
|
46
|
+
<div style="clear: both"></div>
|
|
47
|
+
</template>
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { NO_ALIASES } from '@erudit-js/cog/schema';
|
|
3
|
-
import eruditConfig from '#erudit/config';
|
|
4
|
-
|
|
5
|
-
import { type ContentGroupData } from '@shared/content/data/type/group';
|
|
6
|
-
import { locationIcon } from '@erudit/shared/icons';
|
|
7
|
-
import ContentDecoration from '@app/components/main/utils/ContentDecoration.vue';
|
|
8
|
-
import Breadcrumb from '@app/components/main/utils/Breadcrumb.vue';
|
|
9
|
-
import ContentTitle from '@app/components/main/utils/ContentTitle.vue';
|
|
10
|
-
import ContentDescription from '@app/components/main/utils/ContentDescription.vue';
|
|
11
|
-
import ContentPopovers from '@app/components/main/utils/ContentPopovers.vue';
|
|
12
|
-
import ContentSection from '@app/components/main/utils/ContentSection.vue';
|
|
13
|
-
|
|
14
|
-
const location = useBitranLocation();
|
|
15
|
-
|
|
16
|
-
const groupData = await useContentData<ContentGroupData>();
|
|
17
|
-
await useContentPage(groupData);
|
|
18
|
-
|
|
19
|
-
const content = await useBitranContent(location);
|
|
20
|
-
const phrase = await usePhrases('group');
|
|
21
|
-
</script>
|
|
22
|
-
|
|
23
|
-
<template>
|
|
24
|
-
<ContentDecoration
|
|
25
|
-
v-if="groupData.generic.decoration"
|
|
26
|
-
:decoration="groupData.generic.decoration"
|
|
27
|
-
/>
|
|
28
|
-
|
|
29
|
-
<Breadcrumb
|
|
30
|
-
v-if="groupData.generic.context?.length > 1"
|
|
31
|
-
:context="groupData.generic.context"
|
|
32
|
-
/>
|
|
33
|
-
|
|
34
|
-
<ContentTitle
|
|
35
|
-
:title="
|
|
36
|
-
groupData.generic?.title ||
|
|
37
|
-
groupData.generic.contentId.split('/').pop()!
|
|
38
|
-
"
|
|
39
|
-
:icon="locationIcon(location!)"
|
|
40
|
-
:hint="phrase.group"
|
|
41
|
-
/>
|
|
42
|
-
|
|
43
|
-
<ContentDescription
|
|
44
|
-
v-if="groupData.generic?.description"
|
|
45
|
-
:description="groupData.generic?.description"
|
|
46
|
-
/>
|
|
47
|
-
|
|
48
|
-
<ContentPopovers :generic="groupData.generic" />
|
|
49
|
-
|
|
50
|
-
<!-- TODO: List of materials in group -->
|
|
51
|
-
|
|
52
|
-
<div style="clear: both"></div>
|
|
53
|
-
|
|
54
|
-
<hr style="display: none" />
|
|
55
|
-
|
|
56
|
-
<ContentSection>
|
|
57
|
-
<BitranContent
|
|
58
|
-
:content
|
|
59
|
-
:context="{ location, aliases: NO_ALIASES() }"
|
|
60
|
-
/>
|
|
61
|
-
</ContentSection>
|
|
62
|
-
|
|
63
|
-
<ContentSection v-if="eruditConfig.ads?.bottom">
|
|
64
|
-
<AdsBannerBottom />
|
|
65
|
-
</ContentSection>
|
|
66
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { NO_ALIASES } from '@erudit-js/cog/schema';
|
|
3
|
+
import eruditConfig from '#erudit/config';
|
|
4
|
+
|
|
5
|
+
import { type ContentGroupData } from '@shared/content/data/type/group';
|
|
6
|
+
import { locationIcon } from '@erudit/shared/icons';
|
|
7
|
+
import ContentDecoration from '@app/components/main/utils/ContentDecoration.vue';
|
|
8
|
+
import Breadcrumb from '@app/components/main/utils/Breadcrumb.vue';
|
|
9
|
+
import ContentTitle from '@app/components/main/utils/ContentTitle.vue';
|
|
10
|
+
import ContentDescription from '@app/components/main/utils/ContentDescription.vue';
|
|
11
|
+
import ContentPopovers from '@app/components/main/utils/ContentPopovers.vue';
|
|
12
|
+
import ContentSection from '@app/components/main/utils/ContentSection.vue';
|
|
13
|
+
|
|
14
|
+
const location = useBitranLocation();
|
|
15
|
+
|
|
16
|
+
const groupData = await useContentData<ContentGroupData>();
|
|
17
|
+
await useContentPage(groupData);
|
|
18
|
+
|
|
19
|
+
const content = await useBitranContent(location);
|
|
20
|
+
const phrase = await usePhrases('group');
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<ContentDecoration
|
|
25
|
+
v-if="groupData.generic.decoration"
|
|
26
|
+
:decoration="groupData.generic.decoration"
|
|
27
|
+
/>
|
|
28
|
+
|
|
29
|
+
<Breadcrumb
|
|
30
|
+
v-if="groupData.generic.context?.length > 1"
|
|
31
|
+
:context="groupData.generic.context"
|
|
32
|
+
/>
|
|
33
|
+
|
|
34
|
+
<ContentTitle
|
|
35
|
+
:title="
|
|
36
|
+
groupData.generic?.title ||
|
|
37
|
+
groupData.generic.contentId.split('/').pop()!
|
|
38
|
+
"
|
|
39
|
+
:icon="locationIcon(location!)"
|
|
40
|
+
:hint="phrase.group"
|
|
41
|
+
/>
|
|
42
|
+
|
|
43
|
+
<ContentDescription
|
|
44
|
+
v-if="groupData.generic?.description"
|
|
45
|
+
:description="groupData.generic?.description"
|
|
46
|
+
/>
|
|
47
|
+
|
|
48
|
+
<ContentPopovers :generic="groupData.generic" />
|
|
49
|
+
|
|
50
|
+
<!-- TODO: List of materials in group -->
|
|
51
|
+
|
|
52
|
+
<div style="clear: both"></div>
|
|
53
|
+
|
|
54
|
+
<hr style="display: none" />
|
|
55
|
+
|
|
56
|
+
<ContentSection>
|
|
57
|
+
<BitranContent
|
|
58
|
+
:content
|
|
59
|
+
:context="{ location, aliases: NO_ALIASES() }"
|
|
60
|
+
/>
|
|
61
|
+
</ContentSection>
|
|
62
|
+
|
|
63
|
+
<ContentSection v-if="adsAllowed() && eruditConfig.ads?.bottom">
|
|
64
|
+
<AdsBannerBottom />
|
|
65
|
+
</ContentSection>
|
|
66
|
+
</template>
|
package/app/pages/index.vue
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import eruditConfig from '#erudit/config';
|
|
3
|
-
|
|
4
|
-
const phrase = await usePhrases('seo_index_title', 'seo_index_description');
|
|
5
|
-
|
|
6
|
-
const seoTitle =
|
|
7
|
-
eruditConfig.seo?.indexTitle ||
|
|
8
|
-
eruditConfig.seo?.title ||
|
|
9
|
-
phrase.seo_index_title;
|
|
10
|
-
const seoDescription =
|
|
11
|
-
eruditConfig.seo?.indexDescription || phrase.seo_index_description;
|
|
12
|
-
|
|
13
|
-
useSeoMeta({
|
|
14
|
-
title: seoTitle,
|
|
15
|
-
ogTitle: seoTitle,
|
|
16
|
-
description: seoDescription,
|
|
17
|
-
ogDescription: seoDescription,
|
|
18
|
-
});
|
|
19
|
-
</script>
|
|
20
|
-
|
|
21
|
-
<template>
|
|
22
|
-
<div style="padding: var(--_pMainY) var(--_pMainX)">
|
|
23
|
-
<h1>
|
|
24
|
-
{{
|
|
25
|
-
eruditConfig.seo?.title ||
|
|
26
|
-
eruditConfig.site?.title ||
|
|
27
|
-
phrase.seo_index_title
|
|
28
|
-
}}
|
|
29
|
-
</h1>
|
|
30
|
-
<p>TODO</p>
|
|
31
|
-
</div>
|
|
32
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import eruditConfig from '#erudit/config';
|
|
3
|
+
|
|
4
|
+
const phrase = await usePhrases('seo_index_title', 'seo_index_description');
|
|
5
|
+
|
|
6
|
+
const seoTitle =
|
|
7
|
+
eruditConfig.seo?.indexTitle ||
|
|
8
|
+
eruditConfig.seo?.title ||
|
|
9
|
+
phrase.seo_index_title;
|
|
10
|
+
const seoDescription =
|
|
11
|
+
eruditConfig.seo?.indexDescription || phrase.seo_index_description;
|
|
12
|
+
|
|
13
|
+
useSeoMeta({
|
|
14
|
+
title: seoTitle,
|
|
15
|
+
ogTitle: seoTitle,
|
|
16
|
+
description: seoDescription,
|
|
17
|
+
ogDescription: seoDescription,
|
|
18
|
+
});
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<div style="padding: var(--_pMainY) var(--_pMainX)">
|
|
23
|
+
<h1>
|
|
24
|
+
{{
|
|
25
|
+
eruditConfig.seo?.title ||
|
|
26
|
+
eruditConfig.site?.title ||
|
|
27
|
+
phrase.seo_index_title
|
|
28
|
+
}}
|
|
29
|
+
</h1>
|
|
30
|
+
<p>TODO</p>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
package/app/pages/members.vue
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
<script lang="ts" setup></script>
|
|
2
|
-
|
|
3
|
-
<template>
|
|
4
|
-
<p>Members</p>
|
|
5
|
-
|
|
6
|
-
</template>
|
|
1
|
+
<script lang="ts" setup></script>
|
|
2
|
+
|
|
3
|
+
<template>
|
|
4
|
+
<p>Members</p>
|
|
5
|
+
</template>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<MainTopic />
|
|
3
|
-
</template>
|
|
1
|
+
<template>
|
|
2
|
+
<MainTopic />
|
|
3
|
+
</template>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<MainTopic />
|
|
3
|
-
</template>
|
|
1
|
+
<template>
|
|
2
|
+
<MainTopic />
|
|
3
|
+
</template>
|
package/app/plugins/analytics.ts
CHANGED
|
@@ -8,6 +8,14 @@ export default defineNuxtPlugin({
|
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
if (typeof eruditConfig?.debug?.analytics === 'undefined') {
|
|
12
|
+
if (import.meta.dev) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
} else if (!Boolean(eruditConfig?.debug?.analytics)) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
11
19
|
if (eruditConfig.analytics.yandex) {
|
|
12
20
|
const yandex = eruditConfig.analytics.yandex;
|
|
13
21
|
|