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,71 +1,71 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
const githubIcon =
|
|
3
|
-
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M16,.39C7.16.39,0,7.55,0,16.39c0,7.07,4.59,13.07,10.94,15.2.8.13,1.06-.37,1.06-.8v-2.7c-4.43.96-5.38-2.14-5.38-2.14-.74-1.86-1.78-2.35-1.78-2.35-1.46-.99.11-.96.11-.96,1.6.11,2.45,1.65,2.45,1.65,1.39,2.43,3.74,1.71,4.66,1.33.14-1.04.56-1.74,1.01-2.14-3.55-.4-7.28-1.78-7.28-7.87,0-1.78.61-3.2,1.65-4.34-.16-.4-.72-2.06.16-4.22,0,0,1.34-.43,4.4,1.63,1.26-.35,2.64-.53,4-.53s2.74.18,4,.53c3.06-2.06,4.4-1.63,4.4-1.63.88,2.16.32,3.82.16,4.22,1.04,1.14,1.65,2.56,1.65,4.34,0,6.11-3.74,7.46-7.31,7.86.58.5,1.1,1.47,1.1,2.96v4.38c0,.43.26.94,1.07.8,6.35-2.14,10.93-8.13,10.93-15.2C32,7.55,24.84.39,16,.39"/></svg>';
|
|
4
|
-
const starIcon =
|
|
5
|
-
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M10.12,25.46l5.87-3.54,5.87,3.59-1.54-6.71,5.18-4.48-6.81-.61-2.7-6.34-2.7,6.29-6.81.61,5.18,4.52-1.54,6.67ZM16,26.3l-7.74,4.66c-.34.22-.7.31-1.07.28s-.7-.16-.98-.37c-.28-.22-.5-.49-.65-.81-.16-.33-.19-.69-.09-1.1l2.05-8.81L.66,14.23c-.31-.28-.5-.6-.58-.96-.08-.36-.05-.71.07-1.05s.31-.62.56-.84c.25-.22.59-.36,1.03-.42l9.04-.79L14.27,1.87c.16-.37.4-.65.72-.84.33-.19.66-.28,1-.28s.67.09,1,.28c.33.19.57.47.72.84l3.5,8.3,9.04.79c.44.06.78.2,1.03.42.25.22.44.5.56.84.12.34.15.69.07,1.05s-.27.68-.58.95l-6.85,5.92,2.05,8.81c.09.4.06.77-.09,1.1-.16.33-.37.6-.65.81s-.61.34-.98.37c-.37.03-.73-.06-1.07-.28l-7.74-4.66Z"/></svg>';
|
|
6
|
-
|
|
7
|
-
const pending = ref(true);
|
|
8
|
-
const stars = ref<number | null>(null);
|
|
9
|
-
|
|
10
|
-
const starsFormatted = computed(() => {
|
|
11
|
-
if (stars.value === null) return '';
|
|
12
|
-
const value = stars.value;
|
|
13
|
-
if (value >= 1000) {
|
|
14
|
-
const formatted =
|
|
15
|
-
value >= 10000
|
|
16
|
-
? Math.floor(value / 1000).toString()
|
|
17
|
-
: (value / 1000).toFixed(1).replace(/\.0$/, '');
|
|
18
|
-
return formatted + 'K';
|
|
19
|
-
}
|
|
20
|
-
return value.toString();
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
onMounted(async () => {
|
|
24
|
-
try {
|
|
25
|
-
const useFakeApi = ERUDIT.config.debug.fakeApi.repository;
|
|
26
|
-
|
|
27
|
-
if (useFakeApi) {
|
|
28
|
-
stars.value = 1337;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const repository = ERUDIT.config?.repository;
|
|
33
|
-
|
|
34
|
-
if (!repository || repository.type !== 'github') {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const parts = repository.name.split('/');
|
|
39
|
-
if (parts.length !== 2) return;
|
|
40
|
-
|
|
41
|
-
const [owner, repo] = parts;
|
|
42
|
-
const url = `https://api.github.com/repos/${owner}/${repo}`;
|
|
43
|
-
|
|
44
|
-
const ghData = await $fetch<any>(url, {
|
|
45
|
-
responseType: 'json',
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
if (typeof ghData.stargazers_count === 'number') {
|
|
49
|
-
stars.value = ghData.stargazers_count;
|
|
50
|
-
}
|
|
51
|
-
} finally {
|
|
52
|
-
pending.value = false;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
</script>
|
|
56
|
-
|
|
57
|
-
<template>
|
|
58
|
-
<div class="gap-small flex items-center">
|
|
59
|
-
<MyRuntimeIcon :svg="githubIcon" class="size-[16px]" />
|
|
60
|
-
<span>GitHub</span>
|
|
61
|
-
<TransitionFade>
|
|
62
|
-
<span
|
|
63
|
-
v-if="!pending && stars !== null"
|
|
64
|
-
class="gap-small flex items-center"
|
|
65
|
-
>
|
|
66
|
-
<MyRuntimeIcon :svg="starIcon" class="size-[16px]" />
|
|
67
|
-
<span>{{ starsFormatted }}</span>
|
|
68
|
-
</span>
|
|
69
|
-
</TransitionFade>
|
|
70
|
-
</div>
|
|
71
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
const githubIcon =
|
|
3
|
+
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M16,.39C7.16.39,0,7.55,0,16.39c0,7.07,4.59,13.07,10.94,15.2.8.13,1.06-.37,1.06-.8v-2.7c-4.43.96-5.38-2.14-5.38-2.14-.74-1.86-1.78-2.35-1.78-2.35-1.46-.99.11-.96.11-.96,1.6.11,2.45,1.65,2.45,1.65,1.39,2.43,3.74,1.71,4.66,1.33.14-1.04.56-1.74,1.01-2.14-3.55-.4-7.28-1.78-7.28-7.87,0-1.78.61-3.2,1.65-4.34-.16-.4-.72-2.06.16-4.22,0,0,1.34-.43,4.4,1.63,1.26-.35,2.64-.53,4-.53s2.74.18,4,.53c3.06-2.06,4.4-1.63,4.4-1.63.88,2.16.32,3.82.16,4.22,1.04,1.14,1.65,2.56,1.65,4.34,0,6.11-3.74,7.46-7.31,7.86.58.5,1.1,1.47,1.1,2.96v4.38c0,.43.26.94,1.07.8,6.35-2.14,10.93-8.13,10.93-15.2C32,7.55,24.84.39,16,.39"/></svg>';
|
|
4
|
+
const starIcon =
|
|
5
|
+
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M10.12,25.46l5.87-3.54,5.87,3.59-1.54-6.71,5.18-4.48-6.81-.61-2.7-6.34-2.7,6.29-6.81.61,5.18,4.52-1.54,6.67ZM16,26.3l-7.74,4.66c-.34.22-.7.31-1.07.28s-.7-.16-.98-.37c-.28-.22-.5-.49-.65-.81-.16-.33-.19-.69-.09-1.1l2.05-8.81L.66,14.23c-.31-.28-.5-.6-.58-.96-.08-.36-.05-.71.07-1.05s.31-.62.56-.84c.25-.22.59-.36,1.03-.42l9.04-.79L14.27,1.87c.16-.37.4-.65.72-.84.33-.19.66-.28,1-.28s.67.09,1,.28c.33.19.57.47.72.84l3.5,8.3,9.04.79c.44.06.78.2,1.03.42.25.22.44.5.56.84.12.34.15.69.07,1.05s-.27.68-.58.95l-6.85,5.92,2.05,8.81c.09.4.06.77-.09,1.1-.16.33-.37.6-.65.81s-.61.34-.98.37c-.37.03-.73-.06-1.07-.28l-7.74-4.66Z"/></svg>';
|
|
6
|
+
|
|
7
|
+
const pending = ref(true);
|
|
8
|
+
const stars = ref<number | null>(null);
|
|
9
|
+
|
|
10
|
+
const starsFormatted = computed(() => {
|
|
11
|
+
if (stars.value === null) return '';
|
|
12
|
+
const value = stars.value;
|
|
13
|
+
if (value >= 1000) {
|
|
14
|
+
const formatted =
|
|
15
|
+
value >= 10000
|
|
16
|
+
? Math.floor(value / 1000).toString()
|
|
17
|
+
: (value / 1000).toFixed(1).replace(/\.0$/, '');
|
|
18
|
+
return formatted + 'K';
|
|
19
|
+
}
|
|
20
|
+
return value.toString();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
onMounted(async () => {
|
|
24
|
+
try {
|
|
25
|
+
const useFakeApi = ERUDIT.config.debug.fakeApi.repository;
|
|
26
|
+
|
|
27
|
+
if (useFakeApi) {
|
|
28
|
+
stars.value = 1337;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const repository = ERUDIT.config?.repository;
|
|
33
|
+
|
|
34
|
+
if (!repository || repository.type !== 'github') {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const parts = repository.name.split('/');
|
|
39
|
+
if (parts.length !== 2) return;
|
|
40
|
+
|
|
41
|
+
const [owner, repo] = parts;
|
|
42
|
+
const url = `https://api.github.com/repos/${owner}/${repo}`;
|
|
43
|
+
|
|
44
|
+
const ghData = await $fetch<any>(url, {
|
|
45
|
+
responseType: 'json',
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
if (typeof ghData.stargazers_count === 'number') {
|
|
49
|
+
stars.value = ghData.stargazers_count;
|
|
50
|
+
}
|
|
51
|
+
} finally {
|
|
52
|
+
pending.value = false;
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<template>
|
|
58
|
+
<div class="gap-small flex items-center">
|
|
59
|
+
<MyRuntimeIcon :svg="githubIcon" class="size-[16px]" />
|
|
60
|
+
<span>GitHub</span>
|
|
61
|
+
<TransitionFade>
|
|
62
|
+
<span
|
|
63
|
+
v-if="!pending && stars !== null"
|
|
64
|
+
class="gap-small flex items-center"
|
|
65
|
+
>
|
|
66
|
+
<MyRuntimeIcon :svg="starIcon" class="size-[16px]" />
|
|
67
|
+
<span>{{ starsFormatted }}</span>
|
|
68
|
+
</span>
|
|
69
|
+
</TransitionFade>
|
|
70
|
+
</div>
|
|
71
|
+
</template>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="absolute top-0 left-0 h-full w-full">
|
|
3
|
-
<slot></slot>
|
|
4
|
-
</div>
|
|
5
|
-
</template>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="absolute top-0 left-0 h-full w-full">
|
|
3
|
+
<slot></slot>
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import type { MyIconName } from '#my-icons';
|
|
3
|
-
defineProps<{ icon: MyIconName; title: string; count?: number }>();
|
|
4
|
-
</script>
|
|
5
|
-
|
|
6
|
-
<template>
|
|
7
|
-
<section
|
|
8
|
-
class="gap-normal p-normal border-border bg-bg-aside flex items-center
|
|
9
|
-
justify-center border-b"
|
|
10
|
-
>
|
|
11
|
-
<MyIcon :name="icon" class="text-text-muted text-[1.3em]" />
|
|
12
|
-
<span class="font-semibold">{{ formatText(title) }}</span>
|
|
13
|
-
<span
|
|
14
|
-
v-if="count"
|
|
15
|
-
class="text-invert rounded-full bg-neutral-600 px-[8px] py-[2.5px] text-xs
|
|
16
|
-
font-semibold dark:bg-neutral-300"
|
|
17
|
-
>{{ count }}</span
|
|
18
|
-
>
|
|
19
|
-
</section>
|
|
20
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import type { MyIconName } from '#my-icons';
|
|
3
|
+
defineProps<{ icon: MyIconName; title: string; count?: number }>();
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<section
|
|
8
|
+
class="gap-normal p-normal border-border bg-bg-aside flex items-center
|
|
9
|
+
justify-center border-b"
|
|
10
|
+
>
|
|
11
|
+
<MyIcon :name="icon" class="text-text-muted text-[1.3em]" />
|
|
12
|
+
<span class="font-semibold">{{ formatText(title) }}</span>
|
|
13
|
+
<span
|
|
14
|
+
v-if="count"
|
|
15
|
+
class="text-invert rounded-full bg-neutral-600 px-[8px] py-[2.5px] text-xs
|
|
16
|
+
font-semibold dark:bg-neutral-300"
|
|
17
|
+
>{{ count }}</span
|
|
18
|
+
>
|
|
19
|
+
</section>
|
|
20
|
+
</template>
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import Contribution from './Contribution.vue';
|
|
3
|
-
import ButtonPaneImprove from './ButtonPaneImprove.vue';
|
|
4
|
-
|
|
5
|
-
const { asideMinorState } = useAsideMinor();
|
|
6
|
-
|
|
7
|
-
const contentType = computed(() => {
|
|
8
|
-
return (asideMinorState.value as AsideMinorContentContributions).contentType;
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
const topicPart = computed(() => {
|
|
12
|
-
return (asideMinorState.value as AsideMinorContentContributions).topicPart;
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
const contributions = computed(() => {
|
|
16
|
-
const state = asideMinorState.value as AsideMinorContentContributions;
|
|
17
|
-
return state.contributions
|
|
18
|
-
?.slice()
|
|
19
|
-
.sort((a, b) => a.contributorId.localeCompare(b.contributorId));
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const contentRelativePath = computed(() => {
|
|
23
|
-
return (asideMinorState.value as AsideMinorContentContributions)
|
|
24
|
-
.contentRelativePath;
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
const phrase = await usePhrases('contribution', 'no_contribution');
|
|
28
|
-
</script>
|
|
29
|
-
|
|
30
|
-
<template>
|
|
31
|
-
<AsideMinorPane>
|
|
32
|
-
<div class="flex h-full w-full flex-col">
|
|
33
|
-
<AsideMinorPlainHeader
|
|
34
|
-
icon="users"
|
|
35
|
-
:title="phrase.contribution"
|
|
36
|
-
:count="contributions?.length"
|
|
37
|
-
/>
|
|
38
|
-
<ScrollHolder class="flex-1">
|
|
39
|
-
<div v-if="contributions" class="*:border-border *:border-b">
|
|
40
|
-
<Contribution v-for="contribution of contributions" :contribution />
|
|
41
|
-
</div>
|
|
42
|
-
<AsidePlainMessage v-else :text="phrase.no_contribution" />
|
|
43
|
-
</ScrollHolder>
|
|
44
|
-
<ButtonPaneImprove :contentRelativePath :contentType :topicPart />
|
|
45
|
-
</div>
|
|
46
|
-
</AsideMinorPane>
|
|
47
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import Contribution from './Contribution.vue';
|
|
3
|
+
import ButtonPaneImprove from './ButtonPaneImprove.vue';
|
|
4
|
+
|
|
5
|
+
const { asideMinorState } = useAsideMinor();
|
|
6
|
+
|
|
7
|
+
const contentType = computed(() => {
|
|
8
|
+
return (asideMinorState.value as AsideMinorContentContributions).contentType;
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const topicPart = computed(() => {
|
|
12
|
+
return (asideMinorState.value as AsideMinorContentContributions).topicPart;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const contributions = computed(() => {
|
|
16
|
+
const state = asideMinorState.value as AsideMinorContentContributions;
|
|
17
|
+
return state.contributions
|
|
18
|
+
?.slice()
|
|
19
|
+
.sort((a, b) => a.contributorId.localeCompare(b.contributorId));
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const contentRelativePath = computed(() => {
|
|
23
|
+
return (asideMinorState.value as AsideMinorContentContributions)
|
|
24
|
+
.contentRelativePath;
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const phrase = await usePhrases('contribution', 'no_contribution');
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<AsideMinorPane>
|
|
32
|
+
<div class="flex h-full w-full flex-col">
|
|
33
|
+
<AsideMinorPlainHeader
|
|
34
|
+
icon="users"
|
|
35
|
+
:title="phrase.contribution"
|
|
36
|
+
:count="contributions?.length"
|
|
37
|
+
/>
|
|
38
|
+
<ScrollHolder class="flex-1">
|
|
39
|
+
<div v-if="contributions" class="*:border-border *:border-b">
|
|
40
|
+
<Contribution v-for="contribution of contributions" :contribution />
|
|
41
|
+
</div>
|
|
42
|
+
<AsidePlainMessage v-else :text="phrase.no_contribution" />
|
|
43
|
+
</ScrollHolder>
|
|
44
|
+
<ButtonPaneImprove :contentRelativePath :contentType :topicPart />
|
|
45
|
+
</div>
|
|
46
|
+
</AsideMinorPane>
|
|
47
|
+
</template>
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import ButtonPaneContributions from './ButtonPaneContributions.vue';
|
|
3
|
-
import ButtonPaneImprove from './ButtonPaneImprove.vue';
|
|
4
|
-
import Toc from './Toc.vue';
|
|
5
|
-
|
|
6
|
-
const { asideMinorState } = useAsideMinor();
|
|
7
|
-
|
|
8
|
-
const contributions = computed(() => {
|
|
9
|
-
const state = asideMinorState.value as AsideMinorContentContributions;
|
|
10
|
-
return state.contributions?.sort((a, b) =>
|
|
11
|
-
a.contributorId.localeCompare(b.contributorId),
|
|
12
|
-
);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
const toc = computed(() => {
|
|
16
|
-
return (asideMinorState.value as AsideMinorContentPage).toc;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const contentRelativePath = computed(() => {
|
|
20
|
-
return (asideMinorState.value as AsideMinorContentPage).contentRelativePath;
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
const phrase = await usePhrases('page');
|
|
24
|
-
</script>
|
|
25
|
-
|
|
26
|
-
<template>
|
|
27
|
-
<AsideMinorPane>
|
|
28
|
-
<div class="flex h-full w-full flex-col">
|
|
29
|
-
<AsideMinorPlainHeader :icon="ICONS.page" :title="phrase.page" />
|
|
30
|
-
<ScrollHolder class="flex-1">
|
|
31
|
-
<Toc :toc :key="contentRelativePath" />
|
|
32
|
-
</ScrollHolder>
|
|
33
|
-
<ButtonPaneContributions :contributions />
|
|
34
|
-
<ButtonPaneImprove :contentRelativePath contentType="page" />
|
|
35
|
-
</div>
|
|
36
|
-
</AsideMinorPane>
|
|
37
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import ButtonPaneContributions from './ButtonPaneContributions.vue';
|
|
3
|
+
import ButtonPaneImprove from './ButtonPaneImprove.vue';
|
|
4
|
+
import Toc from './Toc.vue';
|
|
5
|
+
|
|
6
|
+
const { asideMinorState } = useAsideMinor();
|
|
7
|
+
|
|
8
|
+
const contributions = computed(() => {
|
|
9
|
+
const state = asideMinorState.value as AsideMinorContentContributions;
|
|
10
|
+
return state.contributions?.sort((a, b) =>
|
|
11
|
+
a.contributorId.localeCompare(b.contributorId),
|
|
12
|
+
);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const toc = computed(() => {
|
|
16
|
+
return (asideMinorState.value as AsideMinorContentPage).toc;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const contentRelativePath = computed(() => {
|
|
20
|
+
return (asideMinorState.value as AsideMinorContentPage).contentRelativePath;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const phrase = await usePhrases('page');
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<template>
|
|
27
|
+
<AsideMinorPane>
|
|
28
|
+
<div class="flex h-full w-full flex-col">
|
|
29
|
+
<AsideMinorPlainHeader :icon="ICONS.page" :title="phrase.page" />
|
|
30
|
+
<ScrollHolder class="flex-1">
|
|
31
|
+
<Toc :toc :key="contentRelativePath" />
|
|
32
|
+
</ScrollHolder>
|
|
33
|
+
<ButtonPaneContributions :contributions />
|
|
34
|
+
<ButtonPaneImprove :contentRelativePath contentType="page" />
|
|
35
|
+
</div>
|
|
36
|
+
</AsideMinorPane>
|
|
37
|
+
</template>
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import { topicParts } from '@erudit-js/core/content/topic';
|
|
3
|
-
import ButtonPaneContributions from './ButtonPaneContributions.vue';
|
|
4
|
-
import ButtonPaneImprove from './ButtonPaneImprove.vue';
|
|
5
|
-
import Toc from './Toc.vue';
|
|
6
|
-
import TopicPartButton from './TopicPartButton.vue';
|
|
7
|
-
|
|
8
|
-
const { asideMinorState } = useAsideMinor();
|
|
9
|
-
|
|
10
|
-
const topicPart = computed(() => {
|
|
11
|
-
return (asideMinorState.value as AsideMinorContentTopic).topicPart;
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
const availableTopicParts = computed(() => {
|
|
15
|
-
const state = asideMinorState.value as AsideMinorContentTopic;
|
|
16
|
-
return state.parts;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
const shortContentId = computed(() => {
|
|
20
|
-
return (asideMinorState.value as AsideMinorContentTopic).shortContentId;
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
const contributions = computed(() => {
|
|
24
|
-
const state = asideMinorState.value as AsideMinorContentContributions;
|
|
25
|
-
return state.contributions
|
|
26
|
-
?.slice()
|
|
27
|
-
.sort((a, b) => a.contributorId.localeCompare(b.contributorId));
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
const toc = computed(() => {
|
|
31
|
-
return (asideMinorState.value as AsideMinorContentTopic).toc;
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const contentRelativePath = computed(() => {
|
|
35
|
-
return (asideMinorState.value as AsideMinorContentTopic).contentRelativePath;
|
|
36
|
-
});
|
|
37
|
-
</script>
|
|
38
|
-
|
|
39
|
-
<template>
|
|
40
|
-
<AsideMinorPane>
|
|
41
|
-
<div class="flex h-full w-full flex-col">
|
|
42
|
-
<div class="border-border gap-normal flex justify-center border-b">
|
|
43
|
-
<TopicPartButton
|
|
44
|
-
v-for="part of topicParts"
|
|
45
|
-
:part
|
|
46
|
-
:active="part === topicPart"
|
|
47
|
-
:link="
|
|
48
|
-
availableTopicParts.includes(part)
|
|
49
|
-
? PAGES.topic(part, shortContentId)
|
|
50
|
-
: undefined
|
|
51
|
-
"
|
|
52
|
-
/>
|
|
53
|
-
</div>
|
|
54
|
-
<ScrollHolder class="flex-1">
|
|
55
|
-
<Toc :toc :key="contentRelativePath + '/' + topicPart" />
|
|
56
|
-
</ScrollHolder>
|
|
57
|
-
<ButtonPaneContributions :contributions />
|
|
58
|
-
<ButtonPaneImprove :contentRelativePath contentType="topic" :topicPart />
|
|
59
|
-
</div>
|
|
60
|
-
</AsideMinorPane>
|
|
61
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { topicParts } from '@erudit-js/core/content/topic';
|
|
3
|
+
import ButtonPaneContributions from './ButtonPaneContributions.vue';
|
|
4
|
+
import ButtonPaneImprove from './ButtonPaneImprove.vue';
|
|
5
|
+
import Toc from './Toc.vue';
|
|
6
|
+
import TopicPartButton from './TopicPartButton.vue';
|
|
7
|
+
|
|
8
|
+
const { asideMinorState } = useAsideMinor();
|
|
9
|
+
|
|
10
|
+
const topicPart = computed(() => {
|
|
11
|
+
return (asideMinorState.value as AsideMinorContentTopic).topicPart;
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const availableTopicParts = computed(() => {
|
|
15
|
+
const state = asideMinorState.value as AsideMinorContentTopic;
|
|
16
|
+
return state.parts;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const shortContentId = computed(() => {
|
|
20
|
+
return (asideMinorState.value as AsideMinorContentTopic).shortContentId;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const contributions = computed(() => {
|
|
24
|
+
const state = asideMinorState.value as AsideMinorContentContributions;
|
|
25
|
+
return state.contributions
|
|
26
|
+
?.slice()
|
|
27
|
+
.sort((a, b) => a.contributorId.localeCompare(b.contributorId));
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const toc = computed(() => {
|
|
31
|
+
return (asideMinorState.value as AsideMinorContentTopic).toc;
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const contentRelativePath = computed(() => {
|
|
35
|
+
return (asideMinorState.value as AsideMinorContentTopic).contentRelativePath;
|
|
36
|
+
});
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<template>
|
|
40
|
+
<AsideMinorPane>
|
|
41
|
+
<div class="flex h-full w-full flex-col">
|
|
42
|
+
<div class="border-border gap-normal flex justify-center border-b">
|
|
43
|
+
<TopicPartButton
|
|
44
|
+
v-for="part of topicParts"
|
|
45
|
+
:part
|
|
46
|
+
:active="part === topicPart"
|
|
47
|
+
:link="
|
|
48
|
+
availableTopicParts.includes(part)
|
|
49
|
+
? PAGES.topic(part, shortContentId)
|
|
50
|
+
: undefined
|
|
51
|
+
"
|
|
52
|
+
/>
|
|
53
|
+
</div>
|
|
54
|
+
<ScrollHolder class="flex-1">
|
|
55
|
+
<Toc :toc :key="contentRelativePath + '/' + topicPart" />
|
|
56
|
+
</ScrollHolder>
|
|
57
|
+
<ButtonPaneContributions :contributions />
|
|
58
|
+
<ButtonPaneImprove :contentRelativePath contentType="topic" :topicPart />
|
|
59
|
+
</div>
|
|
60
|
+
</AsideMinorPane>
|
|
61
|
+
</template>
|