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.
Files changed (361) hide show
  1. package/app/app.vue +34 -34
  2. package/app/assets/icons/array-check.svg +2 -2
  3. package/app/assets/icons/array-lines.svg +2 -2
  4. package/app/assets/icons/array-star.svg +2 -2
  5. package/app/assets/icons/arrow/from-circle.svg +2 -2
  6. package/app/assets/icons/arrow/left.svg +2 -2
  7. package/app/assets/icons/arrow/outward.svg +2 -2
  8. package/app/assets/icons/arrow/to-circle.svg +2 -2
  9. package/app/assets/icons/arrow/up-to-right.svg +2 -2
  10. package/app/assets/icons/aside-open.svg +2 -2
  11. package/app/assets/icons/asterisk.svg +2 -2
  12. package/app/assets/icons/book-question.svg +2 -2
  13. package/app/assets/icons/construction.svg +2 -2
  14. package/app/assets/icons/draw.svg +2 -2
  15. package/app/assets/icons/erudit.svg +2 -2
  16. package/app/assets/icons/file-lines.svg +2 -2
  17. package/app/assets/icons/files.svg +2 -2
  18. package/app/assets/icons/folder-open.svg +2 -2
  19. package/app/assets/icons/folder.svg +2 -2
  20. package/app/assets/icons/graduation.svg +2 -2
  21. package/app/assets/icons/handshake.svg +2 -2
  22. package/app/assets/icons/lines.svg +2 -2
  23. package/app/assets/icons/plus-circle.svg +2 -2
  24. package/app/assets/icons/puzzle.svg +2 -2
  25. package/app/assets/icons/rocket.svg +2 -2
  26. package/app/assets/icons/search/check.svg +2 -2
  27. package/app/assets/icons/search/dead.svg +2 -2
  28. package/app/assets/icons/search/glass.svg +2 -2
  29. package/app/assets/icons/search/wtf.svg +2 -2
  30. package/app/assets/icons/sun-moon.svg +2 -2
  31. package/app/assets/icons/translate.svg +2 -2
  32. package/app/assets/icons/warning.svg +2 -2
  33. package/app/components/EruditLink.ts +9 -9
  34. package/app/components/FancyBold.vue +16 -16
  35. package/app/components/FancyCard.vue +52 -52
  36. package/app/components/FancyCardTag.vue +16 -16
  37. package/app/components/Loading.vue +7 -7
  38. package/app/components/Prose.vue +55 -55
  39. package/app/components/ScrollHolder.vue +20 -20
  40. package/app/components/SmartMedia.vue +107 -107
  41. package/app/components/ads/Ads.vue +39 -39
  42. package/app/components/ads/AdsBannerAside.vue +45 -45
  43. package/app/components/ads/AdsBannerBottom.vue +17 -17
  44. package/app/components/ads/AdsReplacer.vue +26 -26
  45. package/app/components/ads/provider/Custom.vue +19 -19
  46. package/app/components/ads/provider/Yandex.vue +84 -84
  47. package/app/components/aside/AsideListItem.vue +61 -61
  48. package/app/components/aside/AsideMajor.vue +8 -8
  49. package/app/components/aside/AsideMinor.vue +68 -68
  50. package/app/components/aside/AsidePlainMessage.vue +9 -9
  51. package/app/components/aside/AsideSwitch.vue +76 -76
  52. package/app/components/aside/major/PaneHolder.vue +106 -106
  53. package/app/components/aside/major/PaneSwitcher.vue +68 -68
  54. package/app/components/aside/major/PaneSwitcherButton.vue +38 -38
  55. package/app/components/aside/major/PaneTemplate.vue +5 -5
  56. package/app/components/aside/major/SiteInfo.vue +66 -66
  57. package/app/components/aside/major/contentNav/PaneBookNav.vue +107 -107
  58. package/app/components/aside/major/contentNav/PaneGlobalNav.vue +19 -19
  59. package/app/components/aside/major/contentNav/items/ContentNavBook.vue +21 -21
  60. package/app/components/aside/major/contentNav/items/ContentNavFolder.vue +91 -91
  61. package/app/components/aside/major/contentNav/items/ContentNavItem.vue +33 -33
  62. package/app/components/aside/major/contentNav/items/ContentNavPage.vue +14 -14
  63. package/app/components/aside/major/contentNav/items/ContentNavSeparator.vue +61 -61
  64. package/app/components/aside/major/contentNav/items/ContentNavTopic.vue +18 -18
  65. package/app/components/aside/major/contentNav/items/Flags.vue +50 -50
  66. package/app/components/aside/major/contentNav/items/ItemTemplate.vue +27 -27
  67. package/app/components/aside/major/languages/PaneLanguages.vue +55 -55
  68. package/app/components/aside/major/pages/PanePages.vue +60 -60
  69. package/app/components/aside/major/search/PaneSearch.vue +156 -156
  70. package/app/components/aside/major/search/SearchInput.vue +103 -103
  71. package/app/components/aside/major/search/SearchResult.vue +154 -154
  72. package/app/components/aside/major/search/SearchStatus.vue +48 -48
  73. package/app/components/aside/major/search/search.worker.ts +164 -164
  74. package/app/components/aside/major/settings/BuildTime.vue +25 -25
  75. package/app/components/aside/major/settings/EngineVersion.vue +14 -14
  76. package/app/components/aside/major/settings/PaneSettings.vue +17 -17
  77. package/app/components/aside/major/settings/ThemeSwitcher.vue +55 -55
  78. package/app/components/aside/major/settings/repository/Repository.vue +33 -33
  79. package/app/components/aside/major/settings/repository/SecondaryGitHub.vue +71 -71
  80. package/app/components/aside/minor/AsideMinorPane.vue +5 -5
  81. package/app/components/aside/minor/AsideMinorPlainHeader.vue +20 -20
  82. package/app/components/aside/minor/content/AsideMinorContentContributions.vue +47 -47
  83. package/app/components/aside/minor/content/AsideMinorContentPage.vue +37 -37
  84. package/app/components/aside/minor/content/AsideMinorContentTopic.vue +61 -61
  85. package/app/components/aside/minor/content/ButtonPaneContributions.vue +101 -101
  86. package/app/components/aside/minor/content/ButtonPaneImprove.vue +112 -112
  87. package/app/components/aside/minor/content/Contribution.vue +36 -36
  88. package/app/components/aside/minor/content/Toc.vue +163 -163
  89. package/app/components/aside/minor/content/TocItem.vue +91 -91
  90. package/app/components/aside/minor/content/TopicPartButton.vue +35 -35
  91. package/app/components/aside/minor/contributor/AsideMinorContributor.vue +36 -36
  92. package/app/components/aside/minor/contributor/ItemBook.vue +33 -33
  93. package/app/components/aside/minor/contributor/ItemContent.vue +17 -17
  94. package/app/components/aside/minor/news/AsideMinorNews.vue +132 -132
  95. package/app/components/aside/minor/news/NewsItem.vue +69 -69
  96. package/app/components/aside/minor/news/RenderNewsElement.vue +42 -42
  97. package/app/components/aside/minor/news/elements/Mix.vue +11 -11
  98. package/app/components/aside/minor/news/elements/P.vue +14 -14
  99. package/app/components/aside/minor/news/elements/Ref.vue +59 -59
  100. package/app/components/aside/minor/news/elements/Text.vue +18 -18
  101. package/app/components/indexPage/IndexPagePersons.vue +116 -116
  102. package/app/components/main/MainAction.vue +26 -26
  103. package/app/components/main/MainBreadcrumbs.vue +28 -28
  104. package/app/components/main/MainContentChild.vue +44 -44
  105. package/app/components/main/MainContentChildren.vue +13 -13
  106. package/app/components/main/MainDecoration.vue +15 -15
  107. package/app/components/main/MainDescription.vue +13 -13
  108. package/app/components/main/MainFlag.vue +129 -129
  109. package/app/components/main/MainFlags.vue +17 -17
  110. package/app/components/main/MainGlow.vue +12 -12
  111. package/app/components/main/MainQuickLink.vue +90 -90
  112. package/app/components/main/MainQuickLinks.vue +40 -40
  113. package/app/components/main/MainQuote.vue +149 -149
  114. package/app/components/main/MainQuoteLoader.vue +86 -86
  115. package/app/components/main/MainSection.vue +44 -44
  116. package/app/components/main/MainSectionPreamble.vue +5 -5
  117. package/app/components/main/MainSubTitle.vue +11 -11
  118. package/app/components/main/MainTitle.vue +32 -32
  119. package/app/components/main/MainTopicPartPage.vue +88 -88
  120. package/app/components/main/MainTopicPartSwitch.vue +67 -67
  121. package/app/components/main/connections/Deps.vue +30 -30
  122. package/app/components/main/connections/Externals.vue +80 -80
  123. package/app/components/main/connections/MainConnections.vue +90 -90
  124. package/app/components/main/connections/MainConnectionsButton.vue +81 -81
  125. package/app/components/main/connections/ScrollPane.vue +10 -10
  126. package/app/components/main/contentStats/Item.vue +28 -28
  127. package/app/components/main/contentStats/ItemElement.vue +19 -19
  128. package/app/components/main/contentStats/ItemMaterials.vue +11 -11
  129. package/app/components/main/contentStats/MainContentStats.vue +50 -50
  130. package/app/components/preview/Preview.vue +161 -161
  131. package/app/components/preview/PreviewError.vue +10 -10
  132. package/app/components/preview/PreviewLoading.vue +5 -5
  133. package/app/components/preview/PreviewScreen.vue +64 -64
  134. package/app/components/preview/PreviewScreenButton.vue +39 -39
  135. package/app/components/preview/screen/ContentPage.vue +47 -47
  136. package/app/components/preview/screen/DirectLink.vue +23 -23
  137. package/app/components/preview/screen/Unique.vue +53 -53
  138. package/app/components/site/SiteAside.vue +67 -67
  139. package/app/components/site/SiteAsideOverlay.vue +21 -21
  140. package/app/components/site/SiteMain.vue +13 -13
  141. package/app/components/transition/Fade.vue +30 -30
  142. package/app/components/transition/Slide.vue +47 -47
  143. package/app/components/tree/TreeContainer.vue +5 -5
  144. package/app/components/tree/TreeItem.vue +36 -36
  145. package/app/composables/ads.ts +23 -23
  146. package/app/composables/analytics.ts +102 -102
  147. package/app/composables/appElements.ts +40 -40
  148. package/app/composables/aside.ts +28 -28
  149. package/app/composables/asideMajorPane.ts +135 -135
  150. package/app/composables/asideMinor.ts +109 -109
  151. package/app/composables/contentNav.ts +7 -7
  152. package/app/composables/favicon.ts +103 -103
  153. package/app/composables/file.ts +4 -4
  154. package/app/composables/formatText.ts +100 -100
  155. package/app/composables/loading.ts +26 -26
  156. package/app/composables/mainContent.ts +31 -31
  157. package/app/composables/og.ts +184 -184
  158. package/app/composables/phrases.ts +126 -126
  159. package/app/composables/preview.ts +53 -53
  160. package/app/composables/route.ts +6 -6
  161. package/app/composables/theme.ts +67 -67
  162. package/app/composables/url.ts +30 -30
  163. package/app/formatters/ru.ts +14 -14
  164. package/app/pages/article/[...articleId].vue +12 -12
  165. package/app/pages/book/[...bookId].vue +56 -56
  166. package/app/pages/contributor/[contributorId].vue +144 -144
  167. package/app/pages/contributors.vue +95 -95
  168. package/app/pages/group/[...groupId].vue +58 -58
  169. package/app/pages/index.vue +113 -113
  170. package/app/pages/page/[...pageId].vue +60 -60
  171. package/app/pages/practice/[...practiceId].vue +12 -12
  172. package/app/pages/sponsors.vue +88 -88
  173. package/app/pages/summary/[...summaryId].vue +12 -12
  174. package/app/plugins/appSetup/client/htmlBranding.ts +6 -6
  175. package/app/plugins/appSetup/client/welcome.ts +37 -37
  176. package/app/plugins/appSetup/config.ts +6 -6
  177. package/app/plugins/appSetup/global.ts +3 -3
  178. package/app/plugins/appSetup/index.ts +27 -27
  179. package/app/plugins/prerender.server.ts +40 -40
  180. package/app/router.options.ts +5 -5
  181. package/app/scripts/theme.js +30 -30
  182. package/app/styles/main.css +176 -176
  183. package/bin/erudit.js +12 -12
  184. package/modules/erudit/env.ts +8 -8
  185. package/modules/erudit/globals/content.ts +4 -4
  186. package/modules/erudit/globals/contributor.ts +1 -1
  187. package/modules/erudit/globals/eruditConfig.ts +5 -5
  188. package/modules/erudit/globals/problem.ts +1 -1
  189. package/modules/erudit/globals/prose.ts +5 -1
  190. package/modules/erudit/globals/public.ts +18 -18
  191. package/modules/erudit/index.ts +50 -50
  192. package/modules/erudit/logger.ts +10 -10
  193. package/modules/erudit/setup/elements/appTemplate.ts +44 -44
  194. package/modules/erudit/setup/elements/globalTemplate.ts +82 -82
  195. package/modules/erudit/setup/elements/globalTypes.ts +259 -259
  196. package/modules/erudit/setup/elements/setup.ts +163 -163
  197. package/modules/erudit/setup/elements/shared.ts +10 -10
  198. package/modules/erudit/setup/elements/tagsTable.ts +28 -28
  199. package/modules/erudit/setup/fullRestart.ts +61 -61
  200. package/modules/erudit/setup/globals.ts +210 -206
  201. package/modules/erudit/setup/publicAssets.ts +43 -43
  202. package/modules/erudit/setup/runtimeConfig.ts +106 -106
  203. package/modules/erudit/watcher.ts +20 -20
  204. package/nuxt.config.ts +102 -102
  205. package/package.json +5 -5
  206. package/proxy/prose.app.ts +1 -1
  207. package/proxy/prose.ts +1 -1
  208. package/server/api/aside/major/frontNav/book/[...shortId].ts +10 -10
  209. package/server/api/aside/major/frontNav/global.ts +5 -5
  210. package/server/api/aside/major/pages.ts +6 -6
  211. package/server/api/contributor/list.ts +60 -60
  212. package/server/api/contributor/page/[contributorId].ts +68 -68
  213. package/server/api/indexPage.ts +81 -81
  214. package/server/api/language/functions.ts +11 -11
  215. package/server/api/language/phrase/[phraseKey].ts +35 -35
  216. package/server/api/main/content/[...contentTypePath].ts +149 -149
  217. package/server/api/news/batch/[batchIndex].ts +5 -5
  218. package/server/api/pageSponsors.ts +56 -56
  219. package/server/api/prerender/content.ts +79 -79
  220. package/server/api/prerender/default.ts +35 -35
  221. package/server/api/prerender/files.ts +10 -10
  222. package/server/api/prerender/frontNav.ts +13 -13
  223. package/server/api/prerender/language.ts +7 -7
  224. package/server/api/prerender/news.ts +8 -8
  225. package/server/api/prerender/quotes.ts +15 -15
  226. package/server/api/preview/contentPage/[...contentTypePath].ts +63 -63
  227. package/server/api/preview/contentUnique/[...contentTypePathUnique].ts +73 -73
  228. package/server/api/problemScript/[...problemScriptPath].ts +88 -88
  229. package/server/api/quote/data/[quoteId].ts +84 -84
  230. package/server/api/quote/ids.ts +3 -3
  231. package/server/erudit/build.ts +132 -132
  232. package/server/erudit/cameos/build.ts +161 -161
  233. package/server/erudit/config.ts +13 -13
  234. package/server/erudit/content/global/build.ts +300 -300
  235. package/server/erudit/content/global/singleton.ts +5 -5
  236. package/server/erudit/content/nav/build.ts +459 -459
  237. package/server/erudit/content/nav/front.ts +125 -125
  238. package/server/erudit/content/nav/repository/books.ts +37 -37
  239. package/server/erudit/content/nav/repository/get.ts +33 -33
  240. package/server/erudit/content/nav/repository/hasChildren.ts +5 -5
  241. package/server/erudit/content/nav/repository/hasNav.ts +3 -3
  242. package/server/erudit/content/nav/repository/hasParent.ts +5 -5
  243. package/server/erudit/content/nav/repository/id.ts +9 -9
  244. package/server/erudit/content/nav/repository/index.ts +9 -9
  245. package/server/erudit/content/nav/repository/order.ts +14 -14
  246. package/server/erudit/content/nav/repository/previousNext.ts +35 -35
  247. package/server/erudit/content/nav/repository/walk.ts +127 -127
  248. package/server/erudit/content/nav/setup.ts +13 -13
  249. package/server/erudit/content/nav/types.ts +24 -24
  250. package/server/erudit/content/repository/breadcrumbs.ts +24 -24
  251. package/server/erudit/content/repository/children.ts +47 -47
  252. package/server/erudit/content/repository/connections.ts +35 -35
  253. package/server/erudit/content/repository/contentLink.ts +16 -16
  254. package/server/erudit/content/repository/decoration.ts +23 -23
  255. package/server/erudit/content/repository/deps.ts +121 -121
  256. package/server/erudit/content/repository/description.ts +11 -11
  257. package/server/erudit/content/repository/elementSnippets.ts +105 -105
  258. package/server/erudit/content/repository/externals.ts +50 -50
  259. package/server/erudit/content/repository/flags.ts +33 -33
  260. package/server/erudit/content/repository/seo.ts +12 -12
  261. package/server/erudit/content/repository/stats.ts +97 -97
  262. package/server/erudit/content/repository/title.ts +27 -27
  263. package/server/erudit/content/repository/topicParts.ts +39 -39
  264. package/server/erudit/content/repository/unique.ts +76 -76
  265. package/server/erudit/content/resolve/book.ts +29 -29
  266. package/server/erudit/content/resolve/group.ts +34 -34
  267. package/server/erudit/content/resolve/index.ts +272 -272
  268. package/server/erudit/content/resolve/page.ts +80 -80
  269. package/server/erudit/content/resolve/topic.ts +220 -220
  270. package/server/erudit/content/resolve/utils/contentError.ts +10 -10
  271. package/server/erudit/content/resolve/utils/insertContentItem.ts +113 -113
  272. package/server/erudit/content/resolve/utils/insertContentResolved.ts +126 -126
  273. package/server/erudit/content/search.ts +146 -146
  274. package/server/erudit/contributors/build.ts +158 -158
  275. package/server/erudit/contributors/global.ts +3 -3
  276. package/server/erudit/contributors/repository/avatarUrl.ts +10 -10
  277. package/server/erudit/contributors/repository/contributions.ts +171 -171
  278. package/server/erudit/contributors/repository/count.ts +3 -3
  279. package/server/erudit/contributors/search.ts +34 -34
  280. package/server/erudit/db/repository/pushFile.ts +23 -23
  281. package/server/erudit/db/repository/pushProblemScript.ts +19 -19
  282. package/server/erudit/db/repository/pushProseLink.ts +40 -40
  283. package/server/erudit/db/schema/cameos.ts +7 -7
  284. package/server/erudit/db/schema/content.ts +18 -18
  285. package/server/erudit/db/schema/contentContributions.ts +15 -15
  286. package/server/erudit/db/schema/contentDeps.ts +21 -21
  287. package/server/erudit/db/schema/contentElementStats.ts +20 -20
  288. package/server/erudit/db/schema/contentProseLinks.ts +23 -23
  289. package/server/erudit/db/schema/contentSnippets.ts +15 -15
  290. package/server/erudit/db/schema/contentToc.ts +16 -16
  291. package/server/erudit/db/schema/contentUniques.ts +19 -19
  292. package/server/erudit/db/schema/contributors.ts +12 -12
  293. package/server/erudit/db/schema/files.ts +11 -11
  294. package/server/erudit/db/schema/groups.ts +6 -6
  295. package/server/erudit/db/schema/index.ts +17 -17
  296. package/server/erudit/db/schema/news.ts +7 -7
  297. package/server/erudit/db/schema/pages.ts +7 -7
  298. package/server/erudit/db/schema/problemScripts.ts +14 -14
  299. package/server/erudit/db/schema/sponsors.ts +9 -9
  300. package/server/erudit/db/schema/topics.ts +9 -9
  301. package/server/erudit/db/setup.ts +62 -62
  302. package/server/erudit/db/types.ts +10 -10
  303. package/server/erudit/global.ts +38 -38
  304. package/server/erudit/importer.ts +94 -94
  305. package/server/erudit/index.ts +96 -96
  306. package/server/erudit/language/list/en.ts +116 -116
  307. package/server/erudit/language/list/ru.ts +120 -120
  308. package/server/erudit/language/list.ts +6 -6
  309. package/server/erudit/language/setup.ts +36 -36
  310. package/server/erudit/language/types.ts +16 -16
  311. package/server/erudit/logger.ts +73 -73
  312. package/server/erudit/news/build.ts +112 -112
  313. package/server/erudit/news/repository/batch.ts +61 -61
  314. package/server/erudit/path.ts +19 -19
  315. package/server/erudit/prose/repository/finalize.ts +68 -68
  316. package/server/erudit/prose/repository/get.ts +54 -54
  317. package/server/erudit/prose/repository/resolve.ts +17 -17
  318. package/server/erudit/prose/storage/callout.ts +16 -16
  319. package/server/erudit/prose/storage/image.ts +22 -22
  320. package/server/erudit/prose/storage/link.ts +222 -222
  321. package/server/erudit/prose/storage/problemScript.ts +23 -23
  322. package/server/erudit/prose/storage/video.ts +16 -16
  323. package/server/erudit/prose/transform/bundleProblemScript.ts +6 -6
  324. package/server/erudit/prose/transform/extensions.ts +15 -15
  325. package/server/erudit/quote/repository/ids.ts +31 -31
  326. package/server/erudit/repository.ts +96 -96
  327. package/server/erudit/sponsors/build.ts +161 -161
  328. package/server/erudit/sponsors/repository/avatarUrl.ts +10 -10
  329. package/server/erudit/sponsors/repository/count.ts +4 -4
  330. package/server/erudit/staticFile.ts +28 -28
  331. package/server/plugins/augmentCss.ts +17 -17
  332. package/server/plugins/lang.ts +5 -5
  333. package/server/plugins/metaViewport.ts +15 -15
  334. package/server/plugins/theme.ts +13 -13
  335. package/server/routes/file/[...path].ts +18 -18
  336. package/server/routes/robots.txt.ts +9 -9
  337. package/server/routes/search.json.gz.ts +76 -76
  338. package/server/routes/sitemap.xml.ts +83 -83
  339. package/shared/search/encoders.ts +20 -20
  340. package/shared/types/asideMajorPages.ts +4 -4
  341. package/shared/types/breadcrumbs.ts +9 -9
  342. package/shared/types/contentChildren.ts +10 -10
  343. package/shared/types/contentConnections.ts +27 -27
  344. package/shared/types/contentStats.ts +6 -6
  345. package/shared/types/elementSnippet.ts +14 -14
  346. package/shared/types/frontContentNav.ts +38 -38
  347. package/shared/types/indexPage.ts +20 -20
  348. package/shared/types/language.ts +191 -191
  349. package/shared/types/mainContent.ts +69 -69
  350. package/shared/types/news.ts +13 -13
  351. package/shared/types/preview.ts +28 -28
  352. package/shared/types/runtimeConfig.ts +46 -46
  353. package/shared/types/search.ts +79 -79
  354. package/shared/utils/contentTypePath.ts +63 -63
  355. package/shared/utils/icons.ts +11 -11
  356. package/shared/utils/pages.ts +23 -23
  357. package/shared/utils/stringColor.ts +13 -13
  358. package/shared/utils/toStringEqual.ts +21 -21
  359. package/shared/utils/zip.ts +64 -64
  360. package/test/shared/utils/zip.test.ts +8 -8
  361. 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>