diff --git a/.vitepress/config.mts b/.vitepress/config.mts index d174a90..2315a49 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -1,8 +1,8 @@ -import { defineConfig } from 'vitepress' +import { defineConfigWithTheme } from 'vitepress' import { nav, sidebar } from './data/navigations' // https://vitepress.dev/reference/site-config -export default defineConfig({ +export default defineConfigWithTheme({ title: "ALT Mobile Wiki", titleTemplate: ':title — ALT Mobile Wiki', description: "официальная библиотека знаний операционной системы ALT Mobile", @@ -37,6 +37,64 @@ export default defineConfig({ title: 'Страница не найдена', quote: 'Похоже, что вы перешли по неверной или устаревшей ссылке. Вы можете воспользоваться поиском.', linkText: 'Вернуться на главную' + }, + asideMeta: { + developer: { + label: 'Разрабочик' + }, + keywords: { + core: { + name: 'GNOME Core', + type: 'info' + }, + circle: { + name: 'GNOME Circle', + type: 'success' + }, + adaptive: { + name: 'Адаптивный', + type: 'tip' + }, + proprietary: { + name: 'Проприетарное', + type: 'danger' + }, + restrictions: { + name: 'Региональные ограничения', + type: 'danger' + }, + altmobile: { + name: 'ALT Mobile', + type: 'warning' + }, + dontthemes: { + name: 'Please don’t theme', + type: 'success-1' + } + }, + lists: { + labels: { + metadata_license: 'Лицензия', + homepage: 'Сайт проекта', + help: 'Помощь', + translate: 'Помощь в переводе', + bugtracker: 'Сообщить о проблеме' + }, + }, + links: { + sisyphus: { + anchor: 'Сизиф', + target: '_blank', + baseUrl: '//packages.altlinux.org/ru/sisyphus/srpms/', + style: '--agw-btn-bg: var(--vp-c-yellow-dimm-1); --agw-btn-color: var(--vp-c-yellow-darker); --agw-btn-hover-bg:var(--vp-c-yellow-dark); --agw-btn-hover-color: var(--vp-c-white);' + }, + flatpak: { + anchor: 'Flatpak', + target: '_blank', + baseUrl: '//flathub.org/ru/apps/', + style: '--agw-btn-bg: var(--vp-c-blue-dimm-1); --agw-btn-color: var(--vp-c-blue-darker); --agw-btn-hover-bg:var(--vp-c-blue-dark); --agw-btn-hover-color: var(--vp-c-white);' + } + } } }, }, @@ -45,8 +103,66 @@ export default defineConfig({ lang: 'en', themeConfig: { nav: nav.en, - sidebar: sidebar.en - } + sidebar: sidebar.en, + asideMeta: { + developer: { + label: 'Developer' + }, + keywords: { + core: { + name: 'GNOME Core', + type: 'info' + }, + circle: { + name: 'GNOME Circle', + type: 'success' + }, + adaptive: { + name: 'Adaptive', + type: 'tip' + }, + proprietary: { + name: 'Proprietary', + type: 'danger' + }, + restrictions: { + name: 'Regional restrictions', + type: 'danger' + }, + altmobile: { + name: 'ALT Mobile', + type: 'warning' + }, + dontthemes: { + name: 'Please don’t theme', + type: 'success-1' + } + }, + lists: { + labels: { + metadata_license: 'Licence', + homepage: 'Project Website', + help: 'Help', + translate: 'Contribute Translations', + bugtracker: 'Report an Issue' + }, + }, + links: { + sisyphus: { + anchor: 'Sisyphus', + target: '_blank', + baseUrl: '//packages.altlinux.org/en/sisyphus/srpms/', + style: '--agw-btn-bg: var(--vp-c-yellow-dimm-1); --agw-btn-color: var(--vp-c-yellow-darker); --agw-btn-hover-bg:var(--vp-c-yellow-dark); --agw-btn-hover-color: var(--vp-c-white);' + }, + flatpak: { + anchor: 'Flatpak', + target: '_blank', + baseUrl: '//flathub.org/apps/', + style: '--agw-btn-bg: var(--vp-c-blue-dimm-1); --agw-btn-color: var(--vp-c-blue-darker); --agw-btn-hover-bg:var(--vp-c-blue-dark); --agw-btn-hover-color: var(--vp-c-white);' + }, + } + } + }, } }, vite: { diff --git a/.vitepress/theme/components/AMWAsideMetaKeyword.vue b/.vitepress/theme/components/AMWAsideMetaKeyword.vue new file mode 100644 index 0000000..8d2dfd0 --- /dev/null +++ b/.vitepress/theme/components/AMWAsideMetaKeyword.vue @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/.vitepress/theme/components/AMWAsideMetaLink.vue b/.vitepress/theme/components/AMWAsideMetaLink.vue new file mode 100644 index 0000000..118e83e --- /dev/null +++ b/.vitepress/theme/components/AMWAsideMetaLink.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/.vitepress/theme/components/AMWAsideMetaList.vue b/.vitepress/theme/components/AMWAsideMetaList.vue new file mode 100644 index 0000000..a9d31ea --- /dev/null +++ b/.vitepress/theme/components/AMWAsideMetaList.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/.vitepress/theme/components/AMWDocsAsideMeta.vue b/.vitepress/theme/components/AMWDocsAsideMeta.vue new file mode 100644 index 0000000..f01ad86 --- /dev/null +++ b/.vitepress/theme/components/AMWDocsAsideMeta.vue @@ -0,0 +1,136 @@ + + + + + \ No newline at end of file diff --git a/.vitepress/theme/composables/asidemeta.ts b/.vitepress/theme/composables/asidemeta.ts new file mode 100644 index 0000000..c259b50 --- /dev/null +++ b/.vitepress/theme/composables/asidemeta.ts @@ -0,0 +1,83 @@ +import { isValidUrl } from './link' + +export const getThumb = (data: any, alt: string) => { + + if (typeof data === 'object' && data.src) { + return data + } else if (typeof data === 'string' && isValidUrl(data)) { + return { + src: data, + alt: alt + } + } else { + return {} + } +} + +export const getDeveloper = (data: any, label: string) => { + + if (!data.name || !label || typeof data !== 'object') { + return + } + + return { + ...{ label: label }, + ...data + } +} + +export const getLists = (data: any | ArrayLike, labels: any) => { + + const _data = {} + + Object.entries(data).forEach(([key, value]) => { + (value && key !== 'donation') ? + _data[key] = typeof value !== 'string' ? { + ...{ label: labels[key] }, + ...value + } : { + label: labels[key], + link: value + } : {} + }) + + return _data +} + +export const getKeywords = (data: any, config: {}) => { + + const _data = {} + + if(!data) return + + Object.values(data).forEach((value: any) => { + (value && config[value]) ? + _data[value] = config[value] + : {} + }) + + return _data + +} + +export const getLinks = (data: any, config: {}) => { + + const _data = {} + + Object.entries(data).forEach(([key, value]) => { + (value && config[key]) ? + _data[key] = Object.assign({}, { id: value }, config[key]) + : {} + }) + + return _data +} + +export const getDonation = (donation: any) => { + + return (donation?.link) ? { + donation: donation + } : { + link: donation + } +} \ No newline at end of file diff --git a/.vitepress/theme/composables/link.ts b/.vitepress/theme/composables/link.ts new file mode 100644 index 0000000..8c5438d --- /dev/null +++ b/.vitepress/theme/composables/link.ts @@ -0,0 +1,11 @@ +export const isValidUrl = (urlString: string) => { + const urlPattern = new RegExp('^(https?:\\/\\/)?'+ + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ + '((\\d{1,3}\\.){3}\\d{1,3}))'+ + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ + '(\\?[;&a-z\\d%_.~+=-]*)?'+ + '(\\#[-a-z\\d_]*)?$','i'); +return !!urlPattern.test(urlString); +} + +export const getDomainName = (url: any) => url.match(/\/\/([^/]+)\//)[1].replace('www.', ''); \ No newline at end of file diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index d74fa25..dba71b0 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -14,6 +14,8 @@ import type { Options } from '@nolebase/vitepress-plugin-enhanced-readabilities' import { InjectionKey } from '@nolebase/vitepress-plugin-enhanced-readabilities' import { options as NolebaseEnhancedReadabilitiesOptions } from './plugins/enhanced-readabilities/index' +import AMWDocsAsideMeta from './components/AMWDocsAsideMeta.vue' + import './styles/style.css' import './styles/theme.css' import '@nolebase/vitepress-plugin-enhanced-readabilities/dist/style.css' @@ -23,7 +25,8 @@ export default { Layout: () => { return h(DefaultTheme.Layout, null, { 'nav-bar-content-after': () => h(NolebaseEnhancedReadabilitiesMenu), - 'nav-screen-content-after': () => h(NolebaseEnhancedReadabilitiesScreenMenu) + 'nav-screen-content-after': () => h(NolebaseEnhancedReadabilitiesScreenMenu), + 'aside-outline-after': () => h(AMWDocsAsideMeta), }) }, enhanceApp({ app, router, siteData }) { diff --git a/.vitepress/theme/styles/style.css b/.vitepress/theme/styles/style.css index d63aee8..6924be2 100644 --- a/.vitepress/theme/styles/style.css +++ b/.vitepress/theme/styles/style.css @@ -137,3 +137,18 @@ --docsearch-primary-color: var(--vp-c-brand-1) !important; } +/** + * Component: Badge + * -------------------------------------------------------------------------- */ + +.VPBadge.success { + border-color: transparent; + color: var(--vp-c-success-1); + background-color: var(--vp-c-success-soft); +} + +.VPBadge.success-1 { + border-color: transparent; + color: var(--vp-c-white); + background-color: var(--vp-c-success-2); +} diff --git a/docs/apps/amberol/index.md b/docs/apps/amberol/index.md index 6f37ce8..48a94a6 100644 --- a/docs/apps/amberol/index.md +++ b/docs/apps/amberol/index.md @@ -1,7 +1,24 @@ --- -appstream: +aggregation: + flatpak: io.bassi.Amberol + sisyphus: amberol +appstream: id: io.bassi.Amberol name: Amberol + icon: https://dl.flathub.org/repo/appstream/x86_64/icons/128x128/io.bassi.Amberol.png + summary: Воспроизводит музыку и ничего больше + keywords: + - adaptive + - circle + - altmobile + developer: + name: GNOME + metadata_license: + name: GNU GPLv3 + link: https://choosealicense.com/licenses/gpl-3.0/ + url: + homepage: https://gitlab.gnome.org/World/amberol/ + bugtracker: https://github.com/flathub/com.anydesk.Anydesk/issues --- # Amberol diff --git a/docs/en/apps/amberol/index.md b/docs/en/apps/amberol/index.md index 33bae5f..4c2b905 100644 --- a/docs/en/apps/amberol/index.md +++ b/docs/en/apps/amberol/index.md @@ -1,7 +1,24 @@ --- -appstream: +aggregation: + flatpak: io.bassi.Amberol + sisyphus: amberol +appstream: id: io.bassi.Amberol name: Amberol + icon: https://dl.flathub.org/repo/appstream/x86_64/icons/128x128/io.bassi.Amberol.png + summary: Plays music, and nothing else + keywords: + - adaptive + - circle + - altmobile + developer: + name: GNOME + metadata_license: + name: GNU GPLv3 + link: https://choosealicense.com/licenses/gpl-3.0/ + url: + homepage: https://gitlab.gnome.org/World/amberol/ + bugtracker: https://github.com/flathub/com.anydesk.Anydesk/issues --- # Amberol