erudit 4.0.0-dev.5 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/app.vue +34 -34
- package/app/assets/icons/array-check.svg +2 -2
- package/app/assets/icons/array-lines.svg +2 -2
- package/app/assets/icons/array-star.svg +2 -2
- package/app/assets/icons/arrow/from-circle.svg +2 -2
- package/app/assets/icons/arrow/left.svg +2 -2
- package/app/assets/icons/arrow/outward.svg +2 -2
- package/app/assets/icons/arrow/to-circle.svg +2 -2
- package/app/assets/icons/arrow/up-to-right.svg +2 -2
- package/app/assets/icons/aside-open.svg +2 -2
- package/app/assets/icons/asterisk.svg +2 -2
- package/app/assets/icons/book-question.svg +2 -2
- package/app/assets/icons/construction.svg +2 -2
- package/app/assets/icons/draw.svg +2 -2
- package/app/assets/icons/erudit.svg +2 -2
- package/app/assets/icons/file-lines.svg +2 -2
- package/app/assets/icons/files.svg +2 -2
- package/app/assets/icons/folder-open.svg +2 -2
- package/app/assets/icons/folder.svg +2 -2
- package/app/assets/icons/graduation.svg +2 -2
- package/app/assets/icons/handshake.svg +2 -2
- package/app/assets/icons/lines.svg +2 -2
- package/app/assets/icons/plus-circle.svg +2 -2
- package/app/assets/icons/puzzle.svg +2 -2
- package/app/assets/icons/rocket.svg +2 -2
- package/app/assets/icons/search/check.svg +2 -2
- package/app/assets/icons/search/dead.svg +2 -2
- package/app/assets/icons/search/glass.svg +2 -2
- package/app/assets/icons/search/wtf.svg +2 -2
- package/app/assets/icons/sun-moon.svg +2 -2
- package/app/assets/icons/translate.svg +2 -2
- package/app/assets/icons/warning.svg +2 -2
- package/app/components/EruditLink.ts +9 -9
- package/app/components/FancyBold.vue +16 -16
- package/app/components/FancyCard.vue +52 -52
- package/app/components/FancyCardTag.vue +16 -16
- package/app/components/Loading.vue +7 -7
- package/app/components/Prose.vue +55 -55
- package/app/components/ScrollHolder.vue +20 -20
- package/app/components/SmartMedia.vue +107 -107
- package/app/components/ads/Ads.vue +39 -39
- package/app/components/ads/AdsBannerAside.vue +45 -45
- package/app/components/ads/AdsBannerBottom.vue +17 -17
- package/app/components/ads/AdsReplacer.vue +26 -26
- package/app/components/ads/provider/Custom.vue +19 -19
- package/app/components/ads/provider/Yandex.vue +84 -84
- package/app/components/aside/AsideListItem.vue +61 -61
- package/app/components/aside/AsideMajor.vue +8 -8
- package/app/components/aside/AsideMinor.vue +68 -68
- package/app/components/aside/AsidePlainMessage.vue +9 -9
- package/app/components/aside/AsideSwitch.vue +76 -76
- package/app/components/aside/major/PaneHolder.vue +106 -106
- package/app/components/aside/major/PaneSwitcher.vue +68 -68
- package/app/components/aside/major/PaneSwitcherButton.vue +38 -38
- package/app/components/aside/major/PaneTemplate.vue +5 -5
- package/app/components/aside/major/SiteInfo.vue +66 -66
- package/app/components/aside/major/contentNav/PaneBookNav.vue +107 -107
- package/app/components/aside/major/contentNav/PaneGlobalNav.vue +19 -19
- package/app/components/aside/major/contentNav/items/ContentNavBook.vue +21 -21
- package/app/components/aside/major/contentNav/items/ContentNavFolder.vue +91 -91
- package/app/components/aside/major/contentNav/items/ContentNavItem.vue +33 -33
- package/app/components/aside/major/contentNav/items/ContentNavPage.vue +14 -14
- package/app/components/aside/major/contentNav/items/ContentNavSeparator.vue +61 -61
- package/app/components/aside/major/contentNav/items/ContentNavTopic.vue +18 -18
- package/app/components/aside/major/contentNav/items/Flags.vue +50 -50
- package/app/components/aside/major/contentNav/items/ItemTemplate.vue +27 -27
- package/app/components/aside/major/languages/PaneLanguages.vue +55 -55
- package/app/components/aside/major/pages/PanePages.vue +60 -60
- package/app/components/aside/major/search/PaneSearch.vue +156 -156
- package/app/components/aside/major/search/SearchInput.vue +103 -103
- package/app/components/aside/major/search/SearchResult.vue +154 -154
- package/app/components/aside/major/search/SearchStatus.vue +48 -48
- package/app/components/aside/major/search/search.worker.ts +164 -164
- package/app/components/aside/major/settings/BuildTime.vue +25 -25
- package/app/components/aside/major/settings/EngineVersion.vue +14 -14
- package/app/components/aside/major/settings/PaneSettings.vue +17 -17
- package/app/components/aside/major/settings/ThemeSwitcher.vue +55 -55
- package/app/components/aside/major/settings/repository/Repository.vue +33 -33
- package/app/components/aside/major/settings/repository/SecondaryGitHub.vue +71 -71
- package/app/components/aside/minor/AsideMinorPane.vue +5 -5
- package/app/components/aside/minor/AsideMinorPlainHeader.vue +20 -20
- package/app/components/aside/minor/content/AsideMinorContentContributions.vue +47 -47
- package/app/components/aside/minor/content/AsideMinorContentPage.vue +37 -37
- package/app/components/aside/minor/content/AsideMinorContentTopic.vue +61 -61
- package/app/components/aside/minor/content/ButtonPaneContributions.vue +101 -101
- package/app/components/aside/minor/content/ButtonPaneImprove.vue +112 -112
- package/app/components/aside/minor/content/Contribution.vue +36 -36
- package/app/components/aside/minor/content/Toc.vue +163 -163
- package/app/components/aside/minor/content/TocItem.vue +91 -91
- package/app/components/aside/minor/content/TopicPartButton.vue +35 -35
- package/app/components/aside/minor/contributor/AsideMinorContributor.vue +36 -36
- package/app/components/aside/minor/contributor/ItemBook.vue +33 -33
- package/app/components/aside/minor/contributor/ItemContent.vue +17 -17
- package/app/components/aside/minor/news/AsideMinorNews.vue +132 -132
- package/app/components/aside/minor/news/NewsItem.vue +69 -69
- package/app/components/aside/minor/news/RenderNewsElement.vue +42 -42
- package/app/components/aside/minor/news/elements/Mix.vue +11 -11
- package/app/components/aside/minor/news/elements/P.vue +14 -14
- package/app/components/aside/minor/news/elements/Ref.vue +59 -59
- package/app/components/aside/minor/news/elements/Text.vue +18 -18
- package/app/components/indexPage/IndexPagePersons.vue +116 -116
- package/app/components/main/MainAction.vue +26 -26
- package/app/components/main/MainBreadcrumbs.vue +28 -28
- package/app/components/main/MainContentChild.vue +44 -44
- package/app/components/main/MainContentChildren.vue +13 -13
- package/app/components/main/MainDecoration.vue +15 -15
- package/app/components/main/MainDescription.vue +13 -13
- package/app/components/main/MainFlag.vue +129 -129
- package/app/components/main/MainFlags.vue +17 -17
- package/app/components/main/MainGlow.vue +12 -12
- package/app/components/main/MainQuickLink.vue +90 -90
- package/app/components/main/MainQuickLinks.vue +40 -40
- package/app/components/main/MainQuote.vue +149 -149
- package/app/components/main/MainQuoteLoader.vue +86 -86
- package/app/components/main/MainSection.vue +44 -44
- package/app/components/main/MainSectionPreamble.vue +5 -5
- package/app/components/main/MainSubTitle.vue +11 -11
- package/app/components/main/MainTitle.vue +32 -32
- package/app/components/main/MainTopicPartPage.vue +88 -88
- package/app/components/main/MainTopicPartSwitch.vue +67 -67
- package/app/components/main/connections/Deps.vue +30 -30
- package/app/components/main/connections/Externals.vue +80 -80
- package/app/components/main/connections/MainConnections.vue +90 -90
- package/app/components/main/connections/MainConnectionsButton.vue +81 -81
- package/app/components/main/connections/ScrollPane.vue +10 -10
- package/app/components/main/contentStats/Item.vue +28 -28
- package/app/components/main/contentStats/ItemElement.vue +19 -19
- package/app/components/main/contentStats/ItemMaterials.vue +11 -11
- package/app/components/main/contentStats/MainContentStats.vue +50 -50
- package/app/components/preview/Preview.vue +161 -161
- package/app/components/preview/PreviewError.vue +10 -10
- package/app/components/preview/PreviewLoading.vue +5 -5
- package/app/components/preview/PreviewScreen.vue +64 -64
- package/app/components/preview/PreviewScreenButton.vue +39 -39
- package/app/components/preview/screen/ContentPage.vue +47 -47
- package/app/components/preview/screen/DirectLink.vue +23 -23
- package/app/components/preview/screen/Unique.vue +53 -53
- package/app/components/site/SiteAside.vue +67 -67
- package/app/components/site/SiteAsideOverlay.vue +21 -21
- package/app/components/site/SiteMain.vue +13 -13
- package/app/components/transition/Fade.vue +30 -30
- package/app/components/transition/Slide.vue +47 -47
- package/app/components/tree/TreeContainer.vue +5 -5
- package/app/components/tree/TreeItem.vue +36 -36
- package/app/composables/ads.ts +23 -23
- package/app/composables/analytics.ts +102 -102
- package/app/composables/appElements.ts +40 -40
- package/app/composables/aside.ts +28 -28
- package/app/composables/asideMajorPane.ts +135 -135
- package/app/composables/asideMinor.ts +109 -109
- package/app/composables/contentNav.ts +7 -7
- package/app/composables/favicon.ts +103 -103
- package/app/composables/file.ts +4 -4
- package/app/composables/formatText.ts +100 -100
- package/app/composables/loading.ts +26 -26
- package/app/composables/mainContent.ts +31 -31
- package/app/composables/og.ts +184 -184
- package/app/composables/phrases.ts +126 -126
- package/app/composables/preview.ts +53 -53
- package/app/composables/route.ts +6 -6
- package/app/composables/theme.ts +67 -67
- package/app/composables/url.ts +30 -30
- package/app/formatters/ru.ts +14 -14
- package/app/pages/article/[...articleId].vue +12 -12
- package/app/pages/book/[...bookId].vue +56 -56
- package/app/pages/contributor/[contributorId].vue +144 -144
- package/app/pages/contributors.vue +95 -95
- package/app/pages/group/[...groupId].vue +58 -58
- package/app/pages/index.vue +113 -113
- package/app/pages/page/[...pageId].vue +60 -60
- package/app/pages/practice/[...practiceId].vue +12 -12
- package/app/pages/sponsors.vue +88 -88
- package/app/pages/summary/[...summaryId].vue +12 -12
- package/app/plugins/appSetup/client/htmlBranding.ts +6 -6
- package/app/plugins/appSetup/client/welcome.ts +37 -37
- package/app/plugins/appSetup/config.ts +6 -6
- package/app/plugins/appSetup/global.ts +3 -3
- package/app/plugins/appSetup/index.ts +27 -27
- package/app/plugins/prerender.server.ts +40 -40
- package/app/router.options.ts +5 -5
- package/app/scripts/theme.js +30 -30
- package/app/styles/main.css +176 -176
- package/bin/erudit.js +12 -12
- package/modules/erudit/env.ts +8 -8
- package/modules/erudit/globals/content.ts +4 -4
- package/modules/erudit/globals/contributor.ts +1 -1
- package/modules/erudit/globals/eruditConfig.ts +5 -5
- package/modules/erudit/globals/problem.ts +1 -1
- package/modules/erudit/globals/prose.ts +5 -1
- package/modules/erudit/globals/public.ts +18 -18
- package/modules/erudit/index.ts +50 -50
- package/modules/erudit/logger.ts +10 -10
- package/modules/erudit/setup/elements/appTemplate.ts +44 -44
- package/modules/erudit/setup/elements/globalTemplate.ts +82 -82
- package/modules/erudit/setup/elements/globalTypes.ts +259 -259
- package/modules/erudit/setup/elements/setup.ts +163 -163
- package/modules/erudit/setup/elements/shared.ts +10 -10
- package/modules/erudit/setup/elements/tagsTable.ts +28 -28
- package/modules/erudit/setup/fullRestart.ts +61 -61
- package/modules/erudit/setup/globals.ts +210 -206
- package/modules/erudit/setup/publicAssets.ts +43 -43
- package/modules/erudit/setup/runtimeConfig.ts +106 -106
- package/modules/erudit/watcher.ts +20 -20
- package/nuxt.config.ts +102 -102
- package/package.json +5 -5
- package/proxy/prose.app.ts +1 -1
- package/proxy/prose.ts +1 -1
- package/server/api/aside/major/frontNav/book/[...shortId].ts +10 -10
- package/server/api/aside/major/frontNav/global.ts +5 -5
- package/server/api/aside/major/pages.ts +6 -6
- package/server/api/contributor/list.ts +60 -60
- package/server/api/contributor/page/[contributorId].ts +68 -68
- package/server/api/indexPage.ts +81 -81
- package/server/api/language/functions.ts +11 -11
- package/server/api/language/phrase/[phraseKey].ts +35 -35
- package/server/api/main/content/[...contentTypePath].ts +149 -149
- package/server/api/news/batch/[batchIndex].ts +5 -5
- package/server/api/pageSponsors.ts +56 -56
- package/server/api/prerender/content.ts +79 -79
- package/server/api/prerender/default.ts +35 -35
- package/server/api/prerender/files.ts +10 -10
- package/server/api/prerender/frontNav.ts +13 -13
- package/server/api/prerender/language.ts +7 -7
- package/server/api/prerender/news.ts +8 -8
- package/server/api/prerender/quotes.ts +15 -15
- package/server/api/preview/contentPage/[...contentTypePath].ts +63 -63
- package/server/api/preview/contentUnique/[...contentTypePathUnique].ts +73 -73
- package/server/api/problemScript/[...problemScriptPath].ts +88 -88
- package/server/api/quote/data/[quoteId].ts +84 -84
- package/server/api/quote/ids.ts +3 -3
- package/server/erudit/build.ts +132 -132
- package/server/erudit/cameos/build.ts +161 -161
- package/server/erudit/config.ts +13 -13
- package/server/erudit/content/global/build.ts +300 -300
- package/server/erudit/content/global/singleton.ts +5 -5
- package/server/erudit/content/nav/build.ts +459 -459
- package/server/erudit/content/nav/front.ts +125 -125
- package/server/erudit/content/nav/repository/books.ts +37 -37
- package/server/erudit/content/nav/repository/get.ts +33 -33
- package/server/erudit/content/nav/repository/hasChildren.ts +5 -5
- package/server/erudit/content/nav/repository/hasNav.ts +3 -3
- package/server/erudit/content/nav/repository/hasParent.ts +5 -5
- package/server/erudit/content/nav/repository/id.ts +9 -9
- package/server/erudit/content/nav/repository/index.ts +9 -9
- package/server/erudit/content/nav/repository/order.ts +14 -14
- package/server/erudit/content/nav/repository/previousNext.ts +35 -35
- package/server/erudit/content/nav/repository/walk.ts +127 -127
- package/server/erudit/content/nav/setup.ts +13 -13
- package/server/erudit/content/nav/types.ts +24 -24
- package/server/erudit/content/repository/breadcrumbs.ts +24 -24
- package/server/erudit/content/repository/children.ts +47 -47
- package/server/erudit/content/repository/connections.ts +35 -35
- package/server/erudit/content/repository/contentLink.ts +16 -16
- package/server/erudit/content/repository/decoration.ts +23 -23
- package/server/erudit/content/repository/deps.ts +121 -121
- package/server/erudit/content/repository/description.ts +11 -11
- package/server/erudit/content/repository/elementSnippets.ts +105 -105
- package/server/erudit/content/repository/externals.ts +50 -50
- package/server/erudit/content/repository/flags.ts +33 -33
- package/server/erudit/content/repository/seo.ts +12 -12
- package/server/erudit/content/repository/stats.ts +97 -97
- package/server/erudit/content/repository/title.ts +27 -27
- package/server/erudit/content/repository/topicParts.ts +39 -39
- package/server/erudit/content/repository/unique.ts +76 -76
- package/server/erudit/content/resolve/book.ts +29 -29
- package/server/erudit/content/resolve/group.ts +34 -34
- package/server/erudit/content/resolve/index.ts +272 -272
- package/server/erudit/content/resolve/page.ts +80 -80
- package/server/erudit/content/resolve/topic.ts +220 -220
- package/server/erudit/content/resolve/utils/contentError.ts +10 -10
- package/server/erudit/content/resolve/utils/insertContentItem.ts +113 -113
- package/server/erudit/content/resolve/utils/insertContentResolved.ts +126 -126
- package/server/erudit/content/search.ts +146 -146
- package/server/erudit/contributors/build.ts +158 -158
- package/server/erudit/contributors/global.ts +3 -3
- package/server/erudit/contributors/repository/avatarUrl.ts +10 -10
- package/server/erudit/contributors/repository/contributions.ts +171 -171
- package/server/erudit/contributors/repository/count.ts +3 -3
- package/server/erudit/contributors/search.ts +34 -34
- package/server/erudit/db/repository/pushFile.ts +23 -23
- package/server/erudit/db/repository/pushProblemScript.ts +19 -19
- package/server/erudit/db/repository/pushProseLink.ts +40 -40
- package/server/erudit/db/schema/cameos.ts +7 -7
- package/server/erudit/db/schema/content.ts +18 -18
- package/server/erudit/db/schema/contentContributions.ts +15 -15
- package/server/erudit/db/schema/contentDeps.ts +21 -21
- package/server/erudit/db/schema/contentElementStats.ts +20 -20
- package/server/erudit/db/schema/contentProseLinks.ts +23 -23
- package/server/erudit/db/schema/contentSnippets.ts +15 -15
- package/server/erudit/db/schema/contentToc.ts +16 -16
- package/server/erudit/db/schema/contentUniques.ts +19 -19
- package/server/erudit/db/schema/contributors.ts +12 -12
- package/server/erudit/db/schema/files.ts +11 -11
- package/server/erudit/db/schema/groups.ts +6 -6
- package/server/erudit/db/schema/index.ts +17 -17
- package/server/erudit/db/schema/news.ts +7 -7
- package/server/erudit/db/schema/pages.ts +7 -7
- package/server/erudit/db/schema/problemScripts.ts +14 -14
- package/server/erudit/db/schema/sponsors.ts +9 -9
- package/server/erudit/db/schema/topics.ts +9 -9
- package/server/erudit/db/setup.ts +62 -62
- package/server/erudit/db/types.ts +10 -10
- package/server/erudit/global.ts +38 -38
- package/server/erudit/importer.ts +94 -94
- package/server/erudit/index.ts +96 -96
- package/server/erudit/language/list/en.ts +116 -116
- package/server/erudit/language/list/ru.ts +120 -120
- package/server/erudit/language/list.ts +6 -6
- package/server/erudit/language/setup.ts +36 -36
- package/server/erudit/language/types.ts +16 -16
- package/server/erudit/logger.ts +73 -73
- package/server/erudit/news/build.ts +112 -112
- package/server/erudit/news/repository/batch.ts +61 -61
- package/server/erudit/path.ts +19 -19
- package/server/erudit/prose/repository/finalize.ts +68 -68
- package/server/erudit/prose/repository/get.ts +54 -54
- package/server/erudit/prose/repository/resolve.ts +17 -17
- package/server/erudit/prose/storage/callout.ts +16 -16
- package/server/erudit/prose/storage/image.ts +22 -22
- package/server/erudit/prose/storage/link.ts +222 -222
- package/server/erudit/prose/storage/problemScript.ts +23 -23
- package/server/erudit/prose/storage/video.ts +16 -16
- package/server/erudit/prose/transform/bundleProblemScript.ts +6 -6
- package/server/erudit/prose/transform/extensions.ts +15 -15
- package/server/erudit/quote/repository/ids.ts +31 -31
- package/server/erudit/repository.ts +96 -96
- package/server/erudit/sponsors/build.ts +161 -161
- package/server/erudit/sponsors/repository/avatarUrl.ts +10 -10
- package/server/erudit/sponsors/repository/count.ts +4 -4
- package/server/erudit/staticFile.ts +28 -28
- package/server/plugins/augmentCss.ts +17 -17
- package/server/plugins/lang.ts +5 -5
- package/server/plugins/metaViewport.ts +15 -15
- package/server/plugins/theme.ts +13 -13
- package/server/routes/file/[...path].ts +18 -18
- package/server/routes/robots.txt.ts +9 -9
- package/server/routes/search.json.gz.ts +76 -76
- package/server/routes/sitemap.xml.ts +83 -83
- package/shared/search/encoders.ts +20 -20
- package/shared/types/asideMajorPages.ts +4 -4
- package/shared/types/breadcrumbs.ts +9 -9
- package/shared/types/contentChildren.ts +10 -10
- package/shared/types/contentConnections.ts +27 -27
- package/shared/types/contentStats.ts +6 -6
- package/shared/types/elementSnippet.ts +14 -14
- package/shared/types/frontContentNav.ts +38 -38
- package/shared/types/indexPage.ts +20 -20
- package/shared/types/language.ts +191 -191
- package/shared/types/mainContent.ts +69 -69
- package/shared/types/news.ts +13 -13
- package/shared/types/preview.ts +28 -28
- package/shared/types/runtimeConfig.ts +46 -46
- package/shared/types/search.ts +79 -79
- package/shared/utils/contentTypePath.ts +63 -63
- package/shared/utils/icons.ts +11 -11
- package/shared/utils/pages.ts +23 -23
- package/shared/utils/stringColor.ts +13 -13
- package/shared/utils/toStringEqual.ts +21 -21
- package/shared/utils/zip.ts +64 -64
- package/test/shared/utils/zip.test.ts +8 -8
- package/tsconfig.json +17 -17
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
GoogleAnalytics,
|
|
3
|
-
YandexAnalytics,
|
|
4
|
-
} from '@erudit-js/core/eruditConfig/analytics';
|
|
5
|
-
|
|
6
|
-
export function initAnalytics() {
|
|
7
|
-
const analytics = ERUDIT.config.analytics;
|
|
8
|
-
|
|
9
|
-
const analyticsEnabled = (() => {
|
|
10
|
-
const debugValue = ERUDIT.config.debug.analytics;
|
|
11
|
-
|
|
12
|
-
if (typeof debugValue === 'boolean') {
|
|
13
|
-
return debugValue;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return ERUDIT.config.mode === 'static' ? true : false;
|
|
17
|
-
})();
|
|
18
|
-
|
|
19
|
-
if (!analytics || !analyticsEnabled) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if (analytics.google) {
|
|
24
|
-
googleAnalytics(analytics.google);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (analytics.yandex) {
|
|
28
|
-
yandexAnalytics(analytics.yandex);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function googleAnalytics(analytics: GoogleAnalytics) {
|
|
33
|
-
if (analytics.gtag) {
|
|
34
|
-
useHead({
|
|
35
|
-
script: [
|
|
36
|
-
{
|
|
37
|
-
key: 'google-analytics-script',
|
|
38
|
-
src: `https://www.googletagmanager.com/gtag/js?id=${analytics.gtag}`,
|
|
39
|
-
async: true,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
key: 'google-analytics-inline-script',
|
|
43
|
-
innerHTML: `
|
|
44
|
-
window.dataLayer = window.dataLayer || [];
|
|
45
|
-
function gtag(){dataLayer.push(arguments);}
|
|
46
|
-
gtag('js', new Date());
|
|
47
|
-
gtag('config', '${analytics.gtag}');
|
|
48
|
-
`.trim(),
|
|
49
|
-
},
|
|
50
|
-
],
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (analytics.verification) {
|
|
55
|
-
useHead({
|
|
56
|
-
meta: [
|
|
57
|
-
{
|
|
58
|
-
name: 'google-site-verification',
|
|
59
|
-
content: analytics.verification,
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function yandexAnalytics(analytics: YandexAnalytics) {
|
|
67
|
-
if (analytics.metricsId) {
|
|
68
|
-
useHead({
|
|
69
|
-
script: [
|
|
70
|
-
{
|
|
71
|
-
key: 'yandex-metrica-script',
|
|
72
|
-
innerHTML: `
|
|
73
|
-
(function(m,e,t,r,i,k,a){
|
|
74
|
-
m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
|
|
75
|
-
m[i].l=1*new Date();
|
|
76
|
-
k=e.createElement(t),a=e.getElementsByTagName(t)[0],
|
|
77
|
-
k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
|
|
78
|
-
})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
|
|
79
|
-
|
|
80
|
-
ym(${analytics.metricsId}, "init", {
|
|
81
|
-
clickmap:true,
|
|
82
|
-
trackLinks:true,
|
|
83
|
-
accurateTrackBounce:true,
|
|
84
|
-
webvisor:true
|
|
85
|
-
});
|
|
86
|
-
`.trim(),
|
|
87
|
-
},
|
|
88
|
-
],
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
if (analytics.verification) {
|
|
93
|
-
useHead({
|
|
94
|
-
meta: [
|
|
95
|
-
{
|
|
96
|
-
name: 'yandex-verification',
|
|
97
|
-
content: analytics.verification,
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
1
|
+
import type {
|
|
2
|
+
GoogleAnalytics,
|
|
3
|
+
YandexAnalytics,
|
|
4
|
+
} from '@erudit-js/core/eruditConfig/analytics';
|
|
5
|
+
|
|
6
|
+
export function initAnalytics() {
|
|
7
|
+
const analytics = ERUDIT.config.analytics;
|
|
8
|
+
|
|
9
|
+
const analyticsEnabled = (() => {
|
|
10
|
+
const debugValue = ERUDIT.config.debug.analytics;
|
|
11
|
+
|
|
12
|
+
if (typeof debugValue === 'boolean') {
|
|
13
|
+
return debugValue;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return ERUDIT.config.mode === 'static' ? true : false;
|
|
17
|
+
})();
|
|
18
|
+
|
|
19
|
+
if (!analytics || !analyticsEnabled) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (analytics.google) {
|
|
24
|
+
googleAnalytics(analytics.google);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (analytics.yandex) {
|
|
28
|
+
yandexAnalytics(analytics.yandex);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function googleAnalytics(analytics: GoogleAnalytics) {
|
|
33
|
+
if (analytics.gtag) {
|
|
34
|
+
useHead({
|
|
35
|
+
script: [
|
|
36
|
+
{
|
|
37
|
+
key: 'google-analytics-script',
|
|
38
|
+
src: `https://www.googletagmanager.com/gtag/js?id=${analytics.gtag}`,
|
|
39
|
+
async: true,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
key: 'google-analytics-inline-script',
|
|
43
|
+
innerHTML: `
|
|
44
|
+
window.dataLayer = window.dataLayer || [];
|
|
45
|
+
function gtag(){dataLayer.push(arguments);}
|
|
46
|
+
gtag('js', new Date());
|
|
47
|
+
gtag('config', '${analytics.gtag}');
|
|
48
|
+
`.trim(),
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (analytics.verification) {
|
|
55
|
+
useHead({
|
|
56
|
+
meta: [
|
|
57
|
+
{
|
|
58
|
+
name: 'google-site-verification',
|
|
59
|
+
content: analytics.verification,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function yandexAnalytics(analytics: YandexAnalytics) {
|
|
67
|
+
if (analytics.metricsId) {
|
|
68
|
+
useHead({
|
|
69
|
+
script: [
|
|
70
|
+
{
|
|
71
|
+
key: 'yandex-metrica-script',
|
|
72
|
+
innerHTML: `
|
|
73
|
+
(function(m,e,t,r,i,k,a){
|
|
74
|
+
m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
|
|
75
|
+
m[i].l=1*new Date();
|
|
76
|
+
k=e.createElement(t),a=e.getElementsByTagName(t)[0],
|
|
77
|
+
k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
|
|
78
|
+
})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
|
|
79
|
+
|
|
80
|
+
ym(${analytics.metricsId}, "init", {
|
|
81
|
+
clickmap:true,
|
|
82
|
+
trackLinks:true,
|
|
83
|
+
accurateTrackBounce:true,
|
|
84
|
+
webvisor:true
|
|
85
|
+
});
|
|
86
|
+
`.trim(),
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (analytics.verification) {
|
|
93
|
+
useHead({
|
|
94
|
+
meta: [
|
|
95
|
+
{
|
|
96
|
+
name: 'yandex-verification',
|
|
97
|
+
content: analytics.verification,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import type { AppElement } from '@erudit-js/prose/app';
|
|
2
|
-
import { appElements as _appElements } from '#erudit/prose/app';
|
|
3
|
-
|
|
4
|
-
export const appElements: Record<string, AppElement> = { ..._appElements };
|
|
5
|
-
|
|
6
|
-
export async function initAppElements() {
|
|
7
|
-
for (const [name, element] of Object.entries(appElements)) {
|
|
8
|
-
const languageCode = ERUDIT.config.language.current;
|
|
9
|
-
if (!element.languages[languageCode]) {
|
|
10
|
-
throw createError({
|
|
11
|
-
statusCode: 500,
|
|
12
|
-
statusMessage: `App element "${name}" does not support the current project language "${languageCode}"!`,
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export async function getElementIcon(elementName: string) {
|
|
19
|
-
const appElement = getAppElement(elementName);
|
|
20
|
-
return await appElement.icon();
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export async function getElementPhrase(elementName: string) {
|
|
24
|
-
const appElement = getAppElement(elementName);
|
|
25
|
-
const languageCode = ERUDIT.config.language.current;
|
|
26
|
-
return await appElement.languages[languageCode]!();
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function getAppElement(elementName: string) {
|
|
30
|
-
const appElement = appElements[elementName];
|
|
31
|
-
|
|
32
|
-
if (!appElement) {
|
|
33
|
-
throw createError({
|
|
34
|
-
statusCode: 500,
|
|
35
|
-
statusMessage: `App element "${elementName}" not found! Make sure it is installed and configured correctly!`,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return appElement;
|
|
40
|
-
}
|
|
1
|
+
import type { AppElement } from '@erudit-js/prose/app';
|
|
2
|
+
import { appElements as _appElements } from '#erudit/prose/app';
|
|
3
|
+
|
|
4
|
+
export const appElements: Record<string, AppElement> = { ..._appElements };
|
|
5
|
+
|
|
6
|
+
export async function initAppElements() {
|
|
7
|
+
for (const [name, element] of Object.entries(appElements)) {
|
|
8
|
+
const languageCode = ERUDIT.config.language.current;
|
|
9
|
+
if (!element.languages[languageCode]) {
|
|
10
|
+
throw createError({
|
|
11
|
+
statusCode: 500,
|
|
12
|
+
statusMessage: `App element "${name}" does not support the current project language "${languageCode}"!`,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export async function getElementIcon(elementName: string) {
|
|
19
|
+
const appElement = getAppElement(elementName);
|
|
20
|
+
return await appElement.icon();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function getElementPhrase(elementName: string) {
|
|
24
|
+
const appElement = getAppElement(elementName);
|
|
25
|
+
const languageCode = ERUDIT.config.language.current;
|
|
26
|
+
return await appElement.languages[languageCode]!();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getAppElement(elementName: string) {
|
|
30
|
+
const appElement = appElements[elementName];
|
|
31
|
+
|
|
32
|
+
if (!appElement) {
|
|
33
|
+
throw createError({
|
|
34
|
+
statusCode: 500,
|
|
35
|
+
statusMessage: `App element "${elementName}" not found! Make sure it is installed and configured correctly!`,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return appElement;
|
|
40
|
+
}
|
package/app/composables/aside.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
export enum AsideType {
|
|
2
|
-
Major = 'major',
|
|
3
|
-
Minor = 'minor',
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface AsideState {
|
|
7
|
-
opened: AsideType | undefined;
|
|
8
|
-
scrolledUp: boolean;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export const asideTypeSymbol = Symbol() as InjectionKey<AsideType>;
|
|
12
|
-
|
|
13
|
-
export const useAsideState = () => {
|
|
14
|
-
return useState<AsideState>('aside-state', () => ({
|
|
15
|
-
opened: undefined,
|
|
16
|
-
scrolledUp: true,
|
|
17
|
-
}));
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const useCanShowAsideSwitches = () => {
|
|
21
|
-
const asideState = useAsideState();
|
|
22
|
-
const { previewState } = usePreview();
|
|
23
|
-
return computed(() => {
|
|
24
|
-
const noOpenedAsides = !asideState.value.opened;
|
|
25
|
-
const scrolledUp = asideState.value.scrolledUp;
|
|
26
|
-
return noOpenedAsides && scrolledUp && !previewState.value.opened;
|
|
27
|
-
});
|
|
28
|
-
};
|
|
1
|
+
export enum AsideType {
|
|
2
|
+
Major = 'major',
|
|
3
|
+
Minor = 'minor',
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface AsideState {
|
|
7
|
+
opened: AsideType | undefined;
|
|
8
|
+
scrolledUp: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const asideTypeSymbol = Symbol() as InjectionKey<AsideType>;
|
|
12
|
+
|
|
13
|
+
export const useAsideState = () => {
|
|
14
|
+
return useState<AsideState>('aside-state', () => ({
|
|
15
|
+
opened: undefined,
|
|
16
|
+
scrolledUp: true,
|
|
17
|
+
}));
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export const useCanShowAsideSwitches = () => {
|
|
21
|
+
const asideState = useAsideState();
|
|
22
|
+
const { previewState } = usePreview();
|
|
23
|
+
return computed(() => {
|
|
24
|
+
const noOpenedAsides = !asideState.value.opened;
|
|
25
|
+
const scrolledUp = asideState.value.scrolledUp;
|
|
26
|
+
return noOpenedAsides && scrolledUp && !previewState.value.opened;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
import { isTopicPart } from '@erudit-js/core/content/topic';
|
|
2
|
-
import { isContentType } from '@erudit-js/core/content/type';
|
|
3
|
-
|
|
4
|
-
export enum AsideMajorPane {
|
|
5
|
-
GlobalNav = 'global-nav',
|
|
6
|
-
BookNav = 'book-nav',
|
|
7
|
-
Pages = 'pages',
|
|
8
|
-
Search = 'search',
|
|
9
|
-
Settings = 'settings',
|
|
10
|
-
Languages = 'languages',
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export const asideMajorPanes = Object.values(AsideMajorPane);
|
|
14
|
-
|
|
15
|
-
export const useAsideMajorPane = () => {
|
|
16
|
-
return useState<AsideMajorPane>('aside-major-pane');
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export const initAsideMajorPaneWatcher = () => {
|
|
20
|
-
const asideMajorPane = useAsideMajorPane();
|
|
21
|
-
const routePath = useRoutePath();
|
|
22
|
-
const { shortBookId } = useContentId();
|
|
23
|
-
|
|
24
|
-
asideMajorPane.value = getActivePane(
|
|
25
|
-
asideMajorPane.value,
|
|
26
|
-
routePath.value,
|
|
27
|
-
shortBookId.value,
|
|
28
|
-
);
|
|
29
|
-
|
|
30
|
-
watch([routePath, shortBookId], () => {
|
|
31
|
-
asideMajorPane.value = getActivePane(
|
|
32
|
-
asideMajorPane.value,
|
|
33
|
-
routePath.value,
|
|
34
|
-
shortBookId.value,
|
|
35
|
-
);
|
|
36
|
-
});
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
function getActivePane(
|
|
40
|
-
currentPane: AsideMajorPane,
|
|
41
|
-
path: string,
|
|
42
|
-
bookId: string | undefined,
|
|
43
|
-
) {
|
|
44
|
-
if (currentPane === AsideMajorPane.Search) {
|
|
45
|
-
// The user might be clicking on search result so keep him in search pane!
|
|
46
|
-
return AsideMajorPane.Search;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (bookId) {
|
|
50
|
-
return AsideMajorPane.BookNav;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (path === PAGES.contributors) {
|
|
54
|
-
return AsideMajorPane.Pages;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
if (path.startsWith(PAGES.contributor())) {
|
|
58
|
-
return AsideMajorPane.Pages;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if (path === PAGES.sponsors) {
|
|
62
|
-
return AsideMajorPane.Pages;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Fallback to global nav
|
|
66
|
-
return AsideMajorPane.GlobalNav;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
//
|
|
70
|
-
// Content Nav
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
export let globalContentNav: FrontGlobalContentNav;
|
|
74
|
-
|
|
75
|
-
export async function initGlobalContentNav() {
|
|
76
|
-
const nuxtApp = useNuxtApp();
|
|
77
|
-
const payloadKey = 'global-content-nav';
|
|
78
|
-
const payloadValue: FrontGlobalContentNav =
|
|
79
|
-
(nuxtApp.static.data[payloadKey] ||=
|
|
80
|
-
nuxtApp.payload.data[payloadKey] ||=
|
|
81
|
-
await $fetch('/api/aside/major/frontNav/global', {
|
|
82
|
-
responseType: 'json',
|
|
83
|
-
}));
|
|
84
|
-
|
|
85
|
-
globalContentNav = payloadValue;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export function useContentId() {
|
|
89
|
-
const routePath = useRoutePath();
|
|
90
|
-
|
|
91
|
-
const shortContentId = computed(() => {
|
|
92
|
-
const path = routePath.value;
|
|
93
|
-
|
|
94
|
-
const parts = path.split('/');
|
|
95
|
-
parts.pop(); // Remove trailing slash part
|
|
96
|
-
parts.shift(); // Remove leading slash part
|
|
97
|
-
|
|
98
|
-
const type = parts.shift();
|
|
99
|
-
if (isContentType(type) || isTopicPart(type)) {
|
|
100
|
-
return parts.join('/');
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return undefined;
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
const shortBookId = computed(() => {
|
|
107
|
-
const shortId = shortContentId.value;
|
|
108
|
-
|
|
109
|
-
if (!shortId) {
|
|
110
|
-
return undefined;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
let longestMatch = '';
|
|
114
|
-
for (const bookShortId of globalContentNav.bookShortIds) {
|
|
115
|
-
if (shortId.startsWith(bookShortId)) {
|
|
116
|
-
if (bookShortId.length > longestMatch.length) {
|
|
117
|
-
longestMatch = bookShortId;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return longestMatch || undefined;
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
shortContentId,
|
|
127
|
-
shortBookId,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
// Pages
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
export const asideMajorPagesKey = 'aside-major-pages';
|
|
1
|
+
import { isTopicPart } from '@erudit-js/core/content/topic';
|
|
2
|
+
import { isContentType } from '@erudit-js/core/content/type';
|
|
3
|
+
|
|
4
|
+
export enum AsideMajorPane {
|
|
5
|
+
GlobalNav = 'global-nav',
|
|
6
|
+
BookNav = 'book-nav',
|
|
7
|
+
Pages = 'pages',
|
|
8
|
+
Search = 'search',
|
|
9
|
+
Settings = 'settings',
|
|
10
|
+
Languages = 'languages',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const asideMajorPanes = Object.values(AsideMajorPane);
|
|
14
|
+
|
|
15
|
+
export const useAsideMajorPane = () => {
|
|
16
|
+
return useState<AsideMajorPane>('aside-major-pane');
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const initAsideMajorPaneWatcher = () => {
|
|
20
|
+
const asideMajorPane = useAsideMajorPane();
|
|
21
|
+
const routePath = useRoutePath();
|
|
22
|
+
const { shortBookId } = useContentId();
|
|
23
|
+
|
|
24
|
+
asideMajorPane.value = getActivePane(
|
|
25
|
+
asideMajorPane.value,
|
|
26
|
+
routePath.value,
|
|
27
|
+
shortBookId.value,
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
watch([routePath, shortBookId], () => {
|
|
31
|
+
asideMajorPane.value = getActivePane(
|
|
32
|
+
asideMajorPane.value,
|
|
33
|
+
routePath.value,
|
|
34
|
+
shortBookId.value,
|
|
35
|
+
);
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
function getActivePane(
|
|
40
|
+
currentPane: AsideMajorPane,
|
|
41
|
+
path: string,
|
|
42
|
+
bookId: string | undefined,
|
|
43
|
+
) {
|
|
44
|
+
if (currentPane === AsideMajorPane.Search) {
|
|
45
|
+
// The user might be clicking on search result so keep him in search pane!
|
|
46
|
+
return AsideMajorPane.Search;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (bookId) {
|
|
50
|
+
return AsideMajorPane.BookNav;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (path === PAGES.contributors) {
|
|
54
|
+
return AsideMajorPane.Pages;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (path.startsWith(PAGES.contributor())) {
|
|
58
|
+
return AsideMajorPane.Pages;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (path === PAGES.sponsors) {
|
|
62
|
+
return AsideMajorPane.Pages;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Fallback to global nav
|
|
66
|
+
return AsideMajorPane.GlobalNav;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//
|
|
70
|
+
// Content Nav
|
|
71
|
+
//
|
|
72
|
+
|
|
73
|
+
export let globalContentNav: FrontGlobalContentNav;
|
|
74
|
+
|
|
75
|
+
export async function initGlobalContentNav() {
|
|
76
|
+
const nuxtApp = useNuxtApp();
|
|
77
|
+
const payloadKey = 'global-content-nav';
|
|
78
|
+
const payloadValue: FrontGlobalContentNav =
|
|
79
|
+
(nuxtApp.static.data[payloadKey] ||=
|
|
80
|
+
nuxtApp.payload.data[payloadKey] ||=
|
|
81
|
+
await $fetch('/api/aside/major/frontNav/global', {
|
|
82
|
+
responseType: 'json',
|
|
83
|
+
}));
|
|
84
|
+
|
|
85
|
+
globalContentNav = payloadValue;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function useContentId() {
|
|
89
|
+
const routePath = useRoutePath();
|
|
90
|
+
|
|
91
|
+
const shortContentId = computed(() => {
|
|
92
|
+
const path = routePath.value;
|
|
93
|
+
|
|
94
|
+
const parts = path.split('/');
|
|
95
|
+
parts.pop(); // Remove trailing slash part
|
|
96
|
+
parts.shift(); // Remove leading slash part
|
|
97
|
+
|
|
98
|
+
const type = parts.shift();
|
|
99
|
+
if (isContentType(type) || isTopicPart(type)) {
|
|
100
|
+
return parts.join('/');
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return undefined;
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const shortBookId = computed(() => {
|
|
107
|
+
const shortId = shortContentId.value;
|
|
108
|
+
|
|
109
|
+
if (!shortId) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
let longestMatch = '';
|
|
114
|
+
for (const bookShortId of globalContentNav.bookShortIds) {
|
|
115
|
+
if (shortId.startsWith(bookShortId)) {
|
|
116
|
+
if (bookShortId.length > longestMatch.length) {
|
|
117
|
+
longestMatch = bookShortId;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return longestMatch || undefined;
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
shortContentId,
|
|
127
|
+
shortBookId,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
//
|
|
132
|
+
// Pages
|
|
133
|
+
//
|
|
134
|
+
|
|
135
|
+
export const asideMajorPagesKey = 'aside-major-pages';
|