erudit 2.0.0-dev.9 → 3.0.0-dev.2
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 +112 -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 +210 -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 +9 -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,20 +1,20 @@
|
|
|
1
|
-
import { PreviewDataType, type PreviewDataBase } from '../data';
|
|
2
|
-
import { PreviewRequestType, type PreviewRequest } from '../request';
|
|
3
|
-
import type { PreviewFooter } from '../footer';
|
|
4
|
-
|
|
5
|
-
export interface PreviewDataPageLink extends PreviewDataBase {
|
|
6
|
-
type: PreviewDataType.PageLink;
|
|
7
|
-
footer: PreviewFooter;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export async function buildPageLink(
|
|
11
|
-
request: PreviewRequest,
|
|
12
|
-
): Promise<PreviewDataPageLink> {
|
|
13
|
-
if (request.type !== PreviewRequestType.Link) return;
|
|
14
|
-
|
|
15
|
-
const { linkTarget } = request;
|
|
16
|
-
|
|
17
|
-
if (linkTarget.type !== 'page') return;
|
|
18
|
-
|
|
19
|
-
return await $fetch(`/api/preview/page${linkTarget._href}`);
|
|
20
|
-
}
|
|
1
|
+
import { PreviewDataType, type PreviewDataBase } from '../data';
|
|
2
|
+
import { PreviewRequestType, type PreviewRequest } from '../request';
|
|
3
|
+
import type { PreviewFooter } from '../footer';
|
|
4
|
+
|
|
5
|
+
export interface PreviewDataPageLink extends PreviewDataBase {
|
|
6
|
+
type: PreviewDataType.PageLink;
|
|
7
|
+
footer: PreviewFooter;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export async function buildPageLink(
|
|
11
|
+
request: PreviewRequest,
|
|
12
|
+
): Promise<PreviewDataPageLink> {
|
|
13
|
+
if (request.type !== PreviewRequestType.Link) return;
|
|
14
|
+
|
|
15
|
+
const { linkTarget } = request;
|
|
16
|
+
|
|
17
|
+
if (linkTarget.type !== 'page') return;
|
|
18
|
+
|
|
19
|
+
return await $fetch(`/api/preview/page${linkTarget._href}`);
|
|
20
|
+
}
|
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
import type { BitranContent } from 'bitran';
|
|
2
|
-
|
|
3
|
-
import type { BitranContext } from '@erudit/shared/bitran/context';
|
|
4
|
-
|
|
5
|
-
import { PreviewDataType, type PreviewDataBase } from '../data';
|
|
6
|
-
import type { PreviewFooter } from '../footer';
|
|
7
|
-
import { PreviewRequestType, type PreviewRequest } from '../request';
|
|
8
|
-
import { encodeBitranLocation } from '@erudit/shared/bitran/location';
|
|
9
|
-
|
|
10
|
-
export interface PreviewDataUnique extends PreviewDataBase {
|
|
11
|
-
type: PreviewDataType.Unique;
|
|
12
|
-
productName: string;
|
|
13
|
-
bitran: {
|
|
14
|
-
context: BitranContext;
|
|
15
|
-
content: BitranContent;
|
|
16
|
-
};
|
|
17
|
-
footer: PreviewFooter;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export async function buildUnique(
|
|
21
|
-
request: PreviewRequest,
|
|
22
|
-
): Promise<PreviewDataUnique> {
|
|
23
|
-
if (request.type !== PreviewRequestType.Link) return;
|
|
24
|
-
|
|
25
|
-
const { linkTarget } = request;
|
|
26
|
-
|
|
27
|
-
if (linkTarget.type !== 'unique') return;
|
|
28
|
-
|
|
29
|
-
const serverData = (await $fetch(
|
|
30
|
-
`/api/preview/unique/${encodeBitranLocation(linkTarget._absoluteStrLocation!)}`,
|
|
31
|
-
)) as any;
|
|
32
|
-
const productName = serverData.bitran.productName;
|
|
33
|
-
const customTitle = serverData.productTitle;
|
|
34
|
-
|
|
35
|
-
const icon = await useBitranElementIcon(productName);
|
|
36
|
-
|
|
37
|
-
const productPhraseName = await (async () => {
|
|
38
|
-
const elementPhrase = await useBitranElementLanguage(productName);
|
|
39
|
-
try {
|
|
40
|
-
return elementPhrase('_element_title');
|
|
41
|
-
} catch {
|
|
42
|
-
return productName;
|
|
43
|
-
}
|
|
44
|
-
})();
|
|
45
|
-
|
|
46
|
-
let secondary = serverData.context
|
|
47
|
-
.filter((i) => !i.hidden)
|
|
48
|
-
.map((i) => i.title)
|
|
49
|
-
.join(' / ');
|
|
50
|
-
secondary += customTitle
|
|
51
|
-
? (secondary ? ' • ' : '') + productPhraseName
|
|
52
|
-
: '';
|
|
53
|
-
|
|
54
|
-
const primary = customTitle || productPhraseName || productName;
|
|
55
|
-
|
|
56
|
-
return {
|
|
57
|
-
type: PreviewDataType.Unique,
|
|
58
|
-
productName,
|
|
59
|
-
bitran: {
|
|
60
|
-
context: serverData.bitran.context,
|
|
61
|
-
content: serverData.bitran.content as any,
|
|
62
|
-
},
|
|
63
|
-
footer: {
|
|
64
|
-
iconSvg: icon,
|
|
65
|
-
primary,
|
|
66
|
-
secondary,
|
|
67
|
-
href: linkTarget._href,
|
|
68
|
-
},
|
|
69
|
-
};
|
|
70
|
-
}
|
|
1
|
+
import type { BitranContent } from 'bitran';
|
|
2
|
+
|
|
3
|
+
import type { BitranContext } from '@erudit/shared/bitran/context';
|
|
4
|
+
|
|
5
|
+
import { PreviewDataType, type PreviewDataBase } from '../data';
|
|
6
|
+
import type { PreviewFooter } from '../footer';
|
|
7
|
+
import { PreviewRequestType, type PreviewRequest } from '../request';
|
|
8
|
+
import { encodeBitranLocation } from '@erudit/shared/bitran/location';
|
|
9
|
+
|
|
10
|
+
export interface PreviewDataUnique extends PreviewDataBase {
|
|
11
|
+
type: PreviewDataType.Unique;
|
|
12
|
+
productName: string;
|
|
13
|
+
bitran: {
|
|
14
|
+
context: BitranContext;
|
|
15
|
+
content: BitranContent;
|
|
16
|
+
};
|
|
17
|
+
footer: PreviewFooter;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export async function buildUnique(
|
|
21
|
+
request: PreviewRequest,
|
|
22
|
+
): Promise<PreviewDataUnique> {
|
|
23
|
+
if (request.type !== PreviewRequestType.Link) return;
|
|
24
|
+
|
|
25
|
+
const { linkTarget } = request;
|
|
26
|
+
|
|
27
|
+
if (linkTarget.type !== 'unique') return;
|
|
28
|
+
|
|
29
|
+
const serverData = (await $fetch(
|
|
30
|
+
`/api/preview/unique/${encodeBitranLocation(linkTarget._absoluteStrLocation!)}`,
|
|
31
|
+
)) as any;
|
|
32
|
+
const productName = serverData.bitran.productName;
|
|
33
|
+
const customTitle = serverData.productTitle;
|
|
34
|
+
|
|
35
|
+
const icon = await useBitranElementIcon(productName);
|
|
36
|
+
|
|
37
|
+
const productPhraseName = await (async () => {
|
|
38
|
+
const elementPhrase = await useBitranElementLanguage(productName);
|
|
39
|
+
try {
|
|
40
|
+
return elementPhrase('_element_title');
|
|
41
|
+
} catch {
|
|
42
|
+
return productName;
|
|
43
|
+
}
|
|
44
|
+
})();
|
|
45
|
+
|
|
46
|
+
let secondary = serverData.context
|
|
47
|
+
.filter((i) => !i.hidden)
|
|
48
|
+
.map((i) => i.title)
|
|
49
|
+
.join(' / ');
|
|
50
|
+
secondary += customTitle
|
|
51
|
+
? (secondary ? ' • ' : '') + productPhraseName
|
|
52
|
+
: '';
|
|
53
|
+
|
|
54
|
+
const primary = customTitle || productPhraseName || productName;
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
type: PreviewDataType.Unique,
|
|
58
|
+
productName,
|
|
59
|
+
bitran: {
|
|
60
|
+
context: serverData.bitran.context,
|
|
61
|
+
content: serverData.bitran.content as any,
|
|
62
|
+
},
|
|
63
|
+
footer: {
|
|
64
|
+
iconSvg: icon,
|
|
65
|
+
primary,
|
|
66
|
+
secondary,
|
|
67
|
+
href: linkTarget._href,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
import type { PreviewDataAlert } from './data/alert';
|
|
2
|
-
import type { PreviewDataCustom } from './data/custom';
|
|
3
|
-
import type { PreviewDataGenericLink } from './data/genericLink';
|
|
4
|
-
import type { PreviewDataPageLink } from './data/pageLink';
|
|
5
|
-
import type { PreviewDataUnique } from './data/unique';
|
|
6
|
-
|
|
7
|
-
export enum PreviewDataType
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
PreviewDataPageLink |
|
|
26
|
-
PreviewDataUnique;
|
|
1
|
+
import type { PreviewDataAlert } from './data/alert';
|
|
2
|
+
import type { PreviewDataCustom } from './data/custom';
|
|
3
|
+
import type { PreviewDataGenericLink } from './data/genericLink';
|
|
4
|
+
import type { PreviewDataPageLink } from './data/pageLink';
|
|
5
|
+
import type { PreviewDataUnique } from './data/unique';
|
|
6
|
+
|
|
7
|
+
export enum PreviewDataType {
|
|
8
|
+
Alert = 'alert',
|
|
9
|
+
Custom = 'custom',
|
|
10
|
+
GenericLink = 'generic-link',
|
|
11
|
+
PageLink = 'page-link',
|
|
12
|
+
Unique = 'unique',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface PreviewDataBase {
|
|
16
|
+
type: `${PreviewDataType}`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type PreviewData =
|
|
20
|
+
| PreviewDataAlert
|
|
21
|
+
| PreviewDataCustom
|
|
22
|
+
| PreviewDataGenericLink
|
|
23
|
+
| PreviewDataPageLink
|
|
24
|
+
| PreviewDataUnique;
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import type { Component } from 'vue';
|
|
2
|
-
|
|
3
|
-
import { PreviewDataType, type PreviewData } from './data';
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
LazyPreviewDisplayAlert,
|
|
7
|
-
LazyPreviewDisplayCustom,
|
|
8
|
-
LazyPreviewDisplayGenericLink,
|
|
9
|
-
LazyPreviewDisplayPageLink,
|
|
10
|
-
LazyPreviewDisplayUnique,
|
|
11
|
-
} from '#components';
|
|
12
|
-
|
|
13
|
-
import { createPreviewError } from './data/alert';
|
|
14
|
-
|
|
15
|
-
export interface PreviewDisplayProps<T extends PreviewData> {
|
|
16
|
-
data: T;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function getPreviewDisplayComponent(data: PreviewData): Component {
|
|
20
|
-
switch (data.type) {
|
|
21
|
-
case PreviewDataType.Alert:
|
|
22
|
-
return LazyPreviewDisplayAlert;
|
|
23
|
-
case PreviewDataType.Custom:
|
|
24
|
-
return LazyPreviewDisplayCustom;
|
|
25
|
-
case PreviewDataType.GenericLink:
|
|
26
|
-
return LazyPreviewDisplayGenericLink;
|
|
27
|
-
case PreviewDataType.PageLink:
|
|
28
|
-
return LazyPreviewDisplayPageLink;
|
|
29
|
-
case PreviewDataType.Unique:
|
|
30
|
-
return LazyPreviewDisplayUnique;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
throw createPreviewError({
|
|
34
|
-
message: `Unable to build preview data for request!`,
|
|
35
|
-
pre: JSON.stringify(data, null, 4),
|
|
36
|
-
});
|
|
37
|
-
}
|
|
1
|
+
import type { Component } from 'vue';
|
|
2
|
+
|
|
3
|
+
import { PreviewDataType, type PreviewData } from './data';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
LazyPreviewDisplayAlert,
|
|
7
|
+
LazyPreviewDisplayCustom,
|
|
8
|
+
LazyPreviewDisplayGenericLink,
|
|
9
|
+
LazyPreviewDisplayPageLink,
|
|
10
|
+
LazyPreviewDisplayUnique,
|
|
11
|
+
} from '#components';
|
|
12
|
+
|
|
13
|
+
import { createPreviewError } from './data/alert';
|
|
14
|
+
|
|
15
|
+
export interface PreviewDisplayProps<T extends PreviewData> {
|
|
16
|
+
data: T;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getPreviewDisplayComponent(data: PreviewData): Component {
|
|
20
|
+
switch (data.type) {
|
|
21
|
+
case PreviewDataType.Alert:
|
|
22
|
+
return LazyPreviewDisplayAlert;
|
|
23
|
+
case PreviewDataType.Custom:
|
|
24
|
+
return LazyPreviewDisplayCustom;
|
|
25
|
+
case PreviewDataType.GenericLink:
|
|
26
|
+
return LazyPreviewDisplayGenericLink;
|
|
27
|
+
case PreviewDataType.PageLink:
|
|
28
|
+
return LazyPreviewDisplayPageLink;
|
|
29
|
+
case PreviewDataType.Unique:
|
|
30
|
+
return LazyPreviewDisplayUnique;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
throw createPreviewError({
|
|
34
|
+
message: `Unable to build preview data for request!`,
|
|
35
|
+
pre: JSON.stringify(data, null, 4),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { MyIconName } from '#my-icons';
|
|
2
|
-
|
|
3
|
-
export type PreviewFooter = Partial<{
|
|
4
|
-
iconName:
|
|
5
|
-
iconSvg:
|
|
6
|
-
secondary:
|
|
7
|
-
primary:
|
|
8
|
-
href:
|
|
9
|
-
}>;
|
|
1
|
+
import type { MyIconName } from '#my-icons';
|
|
2
|
+
|
|
3
|
+
export type PreviewFooter = Partial<{
|
|
4
|
+
iconName: MyIconName;
|
|
5
|
+
iconSvg: string;
|
|
6
|
+
secondary: string;
|
|
7
|
+
primary: string;
|
|
8
|
+
href: string;
|
|
9
|
+
}>;
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import type { LinkData } from '@erudit/shared/bitran/link/shared';
|
|
2
|
-
import type { LinkTarget } from '@erudit/shared/bitran/link/target';
|
|
3
|
-
|
|
4
|
-
import type { PreviewData } from './data';
|
|
5
|
-
|
|
6
|
-
export enum PreviewRequestType {
|
|
7
|
-
Link = 'link',
|
|
8
|
-
Data = 'data',
|
|
9
|
-
MissingElement = 'missing-element',
|
|
10
|
-
HashMismatch = 'hash-mismatch',
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface PreviewRequestData extends PreviewRequestBase {
|
|
14
|
-
type: PreviewRequestType.Data;
|
|
15
|
-
data: PreviewData;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface PreviewRequestLink extends PreviewRequestBase {
|
|
19
|
-
type: PreviewRequestType.Link;
|
|
20
|
-
linkData: LinkData;
|
|
21
|
-
linkTarget: LinkTarget;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface PreviewRequestMissingElement extends PreviewRequestBase {
|
|
25
|
-
type: PreviewRequestType.MissingElement;
|
|
26
|
-
elementId: string;
|
|
27
|
-
hashMismatch?: {
|
|
28
|
-
current: string;
|
|
29
|
-
expected: string;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface PreviewRequestHashMismatch extends PreviewRequestBase {
|
|
34
|
-
type: PreviewRequestType.HashMismatch;
|
|
35
|
-
currentHash: string;
|
|
36
|
-
expectedHash: string;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export type PreviewRequest =
|
|
40
|
-
| PreviewRequestData
|
|
41
|
-
| PreviewRequestLink
|
|
42
|
-
| PreviewRequestMissingElement
|
|
43
|
-
| PreviewRequestHashMismatch;
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
interface PreviewRequestBase {
|
|
50
|
-
type: `${PreviewRequestType}`;
|
|
51
|
-
}
|
|
1
|
+
import type { LinkData } from '@erudit/shared/bitran/link/shared';
|
|
2
|
+
import type { LinkTarget } from '@erudit/shared/bitran/link/target';
|
|
3
|
+
|
|
4
|
+
import type { PreviewData } from './data';
|
|
5
|
+
|
|
6
|
+
export enum PreviewRequestType {
|
|
7
|
+
Link = 'link',
|
|
8
|
+
Data = 'data',
|
|
9
|
+
MissingElement = 'missing-element',
|
|
10
|
+
HashMismatch = 'hash-mismatch',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface PreviewRequestData extends PreviewRequestBase {
|
|
14
|
+
type: PreviewRequestType.Data;
|
|
15
|
+
data: PreviewData;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface PreviewRequestLink extends PreviewRequestBase {
|
|
19
|
+
type: PreviewRequestType.Link;
|
|
20
|
+
linkData: LinkData;
|
|
21
|
+
linkTarget: LinkTarget;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface PreviewRequestMissingElement extends PreviewRequestBase {
|
|
25
|
+
type: PreviewRequestType.MissingElement;
|
|
26
|
+
elementId: string;
|
|
27
|
+
hashMismatch?: {
|
|
28
|
+
current: string;
|
|
29
|
+
expected: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface PreviewRequestHashMismatch extends PreviewRequestBase {
|
|
34
|
+
type: PreviewRequestType.HashMismatch;
|
|
35
|
+
currentHash: string;
|
|
36
|
+
expectedHash: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type PreviewRequest =
|
|
40
|
+
| PreviewRequestData
|
|
41
|
+
| PreviewRequestLink
|
|
42
|
+
| PreviewRequestMissingElement
|
|
43
|
+
| PreviewRequestHashMismatch;
|
|
44
|
+
|
|
45
|
+
//
|
|
46
|
+
//
|
|
47
|
+
//
|
|
48
|
+
|
|
49
|
+
interface PreviewRequestBase {
|
|
50
|
+
type: `${PreviewRequestType}`;
|
|
51
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import { objectsEqual } from '@shared/utils/objectsEqual';
|
|
2
|
-
import { PreviewRequestType, type PreviewRequest } from './request';
|
|
3
|
-
|
|
4
|
-
export enum PreviewThemeName {
|
|
5
|
-
Error = 'error',
|
|
6
|
-
Warn = 'warn',
|
|
7
|
-
Success = 'success',
|
|
8
|
-
Brand = 'brand',
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
const _request = ref<PreviewRequest>();
|
|
14
|
-
const _visible = ref(false);
|
|
15
|
-
const _history = ref<PreviewRequest[]>([]);
|
|
16
|
-
const _theme = ref<PreviewThemeName>();
|
|
17
|
-
const _blinki = ref(0);
|
|
18
|
-
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
export const previewRequest = readonly(_request);
|
|
22
|
-
export const previewVisible = readonly(_visible);
|
|
23
|
-
export const previewTheme = readonly(_theme);
|
|
24
|
-
export const previewBlinkTrigger = readonly(_blinki);
|
|
25
|
-
|
|
26
|
-
export const hasPreviewHistory = computed(() => _history.value.length > 0);
|
|
27
|
-
|
|
28
|
-
export function showPreviousPreview() {
|
|
29
|
-
if (!hasPreviewHistory.value) return;
|
|
30
|
-
|
|
31
|
-
_request.value = _history.value.pop();
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export function showPreview(request: PreviewRequest) {
|
|
35
|
-
if (objectsEqual(_request.value, request)) {
|
|
36
|
-
if (_visible.value) _blinki.value++;
|
|
37
|
-
else _visible.value = true;
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (_request.value) _history.value.push(_request.value);
|
|
42
|
-
|
|
43
|
-
_request.value = request;
|
|
44
|
-
_visible.value = true;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export function closePreview() {
|
|
48
|
-
_visible.value = false;
|
|
49
|
-
_request.value = undefined;
|
|
50
|
-
_history.value.length = 0;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export function togglePreview(visible?: boolean) {
|
|
54
|
-
_visible.value = visible === undefined ? !_visible.value : visible;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function setPreviewTheme(newTheme: PreviewThemeName) {
|
|
58
|
-
_theme.value = newTheme;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export function unsetPreviewTheme() {
|
|
62
|
-
_theme.value = undefined;
|
|
63
|
-
}
|
|
1
|
+
import { objectsEqual } from '@shared/utils/objectsEqual';
|
|
2
|
+
import { PreviewRequestType, type PreviewRequest } from './request';
|
|
3
|
+
|
|
4
|
+
export enum PreviewThemeName {
|
|
5
|
+
Error = 'error',
|
|
6
|
+
Warn = 'warn',
|
|
7
|
+
Success = 'success',
|
|
8
|
+
Brand = 'brand',
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//
|
|
12
|
+
|
|
13
|
+
const _request = ref<PreviewRequest>();
|
|
14
|
+
const _visible = ref(false);
|
|
15
|
+
const _history = ref<PreviewRequest[]>([]);
|
|
16
|
+
const _theme = ref<PreviewThemeName>();
|
|
17
|
+
const _blinki = ref(0);
|
|
18
|
+
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
export const previewRequest = readonly(_request);
|
|
22
|
+
export const previewVisible = readonly(_visible);
|
|
23
|
+
export const previewTheme = readonly(_theme);
|
|
24
|
+
export const previewBlinkTrigger = readonly(_blinki);
|
|
25
|
+
|
|
26
|
+
export const hasPreviewHistory = computed(() => _history.value.length > 0);
|
|
27
|
+
|
|
28
|
+
export function showPreviousPreview() {
|
|
29
|
+
if (!hasPreviewHistory.value) return;
|
|
30
|
+
|
|
31
|
+
_request.value = _history.value.pop();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function showPreview(request: PreviewRequest) {
|
|
35
|
+
if (objectsEqual(_request.value, request)) {
|
|
36
|
+
if (_visible.value) _blinki.value++;
|
|
37
|
+
else _visible.value = true;
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (_request.value) _history.value.push(_request.value);
|
|
42
|
+
|
|
43
|
+
_request.value = request;
|
|
44
|
+
_visible.value = true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function closePreview() {
|
|
48
|
+
_visible.value = false;
|
|
49
|
+
_request.value = undefined;
|
|
50
|
+
_history.value.length = 0;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function togglePreview(visible?: boolean) {
|
|
54
|
+
_visible.value = visible === undefined ? !_visible.value : visible;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function setPreviewTheme(newTheme: PreviewThemeName) {
|
|
58
|
+
_theme.value = newTheme;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function unsetPreviewTheme() {
|
|
62
|
+
_theme.value = undefined;
|
|
63
|
+
}
|
package/app/styles/_util.scss
CHANGED
|
@@ -1,50 +1,43 @@
|
|
|
1
|
-
@mixin transition($properties...)
|
|
2
|
-
|
|
3
|
-
transition:
|
|
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
|
-
&::-webkit-scrollbar
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
&::-webkit-scrollbar-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
&::-webkit-scrollbar-corner
|
|
47
|
-
{
|
|
48
|
-
background: var(--border);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
@mixin transition($properties...) {
|
|
2
|
+
transition: all var(--transitionSpeed) var(--transitionFunction);
|
|
3
|
+
transition-property: $properties;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
@mixin dark {
|
|
7
|
+
:root[data-theme='dark'] & {
|
|
8
|
+
@content;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@mixin hoverLink {
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
color: inherit;
|
|
15
|
+
text-decoration: underline;
|
|
16
|
+
text-decoration-color: transparent;
|
|
17
|
+
@include transition(text-decoration-color);
|
|
18
|
+
|
|
19
|
+
&:hover {
|
|
20
|
+
text-decoration: underline;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@mixin scroll {
|
|
25
|
+
-webkit-overflow-scrolling: auto;
|
|
26
|
+
|
|
27
|
+
&::-webkit-scrollbar {
|
|
28
|
+
-webkit-appearance: none;
|
|
29
|
+
height: 5px;
|
|
30
|
+
width: 5px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&::-webkit-scrollbar-thumb {
|
|
34
|
+
background: var(--scrollbar);
|
|
35
|
+
&:hover {
|
|
36
|
+
background: color-mix(in srgb, var(--scrollbar), var(--invert) 15%);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&::-webkit-scrollbar-corner {
|
|
41
|
+
background: var(--border);
|
|
42
|
+
}
|
|
43
|
+
}
|