kopia lustrzana https://github.com/elk-zone/elk
Porównaj commity
17 Commity
33824a5303
...
09af81abf8
Autor | SHA1 | Data |
---|---|---|
Joaquín Sánchez | 09af81abf8 | |
TAKAHASHI Shuuji | 09cae9f924 | |
TAKAHASHI Shuuji | bd8cfc7b57 | |
Joaquín Sánchez | 77f0e2c2f8 | |
lazzzis | 57ff04853b | |
Joaquín Sánchez | 1eaaa6ce9a | |
patak-dev | 1526847a18 | |
Duy | cc1d149ac8 | |
Duy | 569604646d | |
Dohány Tamás | 6f47d1aeff | |
Francesco | 9d62edf295 | |
Xabi | 7f4d8c04c6 | |
Emanuel Pina | 79c6714bac | |
lazzzis | ecd7a6f8cb | |
userquin | c0915afdb7 | |
userquin | 0b12a67339 | |
userquin | ec741923f7 |
|
@ -56,7 +56,7 @@ async function removeUserNote() {
|
|||
|
||||
<template>
|
||||
<CommonDropdown :eager-mount="command">
|
||||
<button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group aria-label="More actions">
|
||||
<button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group :aria-label="t('actions.more')">
|
||||
<div rounded-5 p2 elk-group-hover="bg-purple/10">
|
||||
<div i-ri:more-2-fill />
|
||||
</div>
|
||||
|
|
|
@ -8,7 +8,7 @@ const vAutoFocus = (el: HTMLElement) => el.focus()
|
|||
|
||||
<template>
|
||||
<div my-8 px-3 sm:px-8 md:max-w-200 flex="~ col gap-4" relative>
|
||||
<button v-auto-focus type="button" btn-action-icon absolute top--8 right-0 m1 aria-label="Close" @click="emit('close')">
|
||||
<button v-auto-focus type="button" btn-action-icon absolute top--8 right-0 m1 :aria-label="$t('action.close')" @click="emit('close')">
|
||||
<span i-ri:close-line />
|
||||
</button>
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ async function edit(listId: string) {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<CommonPaginator :end-message="false" :paginator="paginator">
|
||||
<CommonPaginator :paginator="paginator">
|
||||
<template #default="{ item }">
|
||||
<div p4 hover:bg-active block w="100%" flex justify-between items-center gap-4>
|
||||
<p>{{ item.title }}</p>
|
||||
|
@ -49,5 +49,13 @@ async function edit(listId: string) {
|
|||
</CommonTooltip>
|
||||
</div>
|
||||
</template>
|
||||
<template #done>
|
||||
<NuxtLink
|
||||
p4 hover:bg-active block w="100%" flex justify-between items-center gap-4
|
||||
to="/lists"
|
||||
>
|
||||
<p>{{ $t('list.manage') }}</p>
|
||||
</NuxtLink>
|
||||
</template>
|
||||
</CommonPaginator>
|
||||
</template>
|
||||
|
|
|
@ -6,6 +6,8 @@ defineProps<{
|
|||
back?: boolean
|
||||
/** Do not applying overflow hidden to let use floatable components in title */
|
||||
noOverflowHidden?: boolean
|
||||
/** Add the skip content link: it is the translation key */
|
||||
skipContent?: string
|
||||
}>()
|
||||
|
||||
const container = ref()
|
||||
|
@ -26,6 +28,9 @@ const containerClass = computed(() => {
|
|||
|
||||
<template>
|
||||
<div ref="container" :class="containerClass">
|
||||
<SkipContentLink v-if="skipContent">
|
||||
{{ $t(skipContent) }}
|
||||
</SkipContentLink>
|
||||
<div
|
||||
sticky top-0 z10
|
||||
pt="[env(safe-area-inset-top,0)]"
|
||||
|
|
|
@ -63,7 +63,7 @@ function handleFavouritedBoostedByClose() {
|
|||
</ModalDialog>
|
||||
<ModalDialog
|
||||
v-model="isPublishDialogOpen"
|
||||
max-w-180 flex
|
||||
max-w-180 flex flex-col
|
||||
@close="handlePublishClose"
|
||||
>
|
||||
<!-- This `w-0` style is used to avoid overflow problems in flex layouts,so don't remove it unless you know what you're doing -->
|
||||
|
|
|
@ -39,14 +39,14 @@ onUnmounted(() => locked.value = false)
|
|||
<template>
|
||||
<div relative h-full w-full flex pt-12 @click="onClick">
|
||||
<button
|
||||
v-if="hasNext" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.previous')"
|
||||
v-if="hasNext" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.next')"
|
||||
hover:bg="black/40" dark:bg="white/30" dark-hover:bg="white/20" absolute top="1/2" right-1 z5
|
||||
:title="$t('action.next')" @click="next"
|
||||
>
|
||||
<div i-ri:arrow-right-s-line text-white />
|
||||
</button>
|
||||
<button
|
||||
v-if="hasPrev" pointer-events-auto btn-action-icon bg="black/20" aria-label="action.next"
|
||||
v-if="hasPrev" pointer-events-auto btn-action-icon bg="black/20" :aria-label="$t('action.prev')"
|
||||
hover:bg="black/40" dark:bg="white/30" dark:hover-bg="white/20" absolute top="1/2" left-1 z5
|
||||
:title="$t('action.prev')" @click="prev"
|
||||
>
|
||||
|
@ -71,7 +71,7 @@ onUnmounted(() => locked.value = false)
|
|||
|
||||
<div absolute top-0 w-full flex justify-end>
|
||||
<button
|
||||
btn-action-icon bg="black/30" aria-label="action.close" hover:bg="black/40" dark:bg="white/30"
|
||||
btn-action-icon bg="black/30" :aria-label="$t('action.close')" hover:bg="black/40" dark:bg="white/30"
|
||||
dark:hover-bg="white/20" pointer-events-auto shrink-0 @click="emit('close')"
|
||||
>
|
||||
<div i-ri:close-line text-white />
|
||||
|
|
|
@ -10,7 +10,7 @@ defineModel<boolean>()
|
|||
<button
|
||||
flex items-center place-content-center h-full flex-1 class="select-none"
|
||||
:class="show ? '!text-primary' : ''"
|
||||
aria-label="More menu"
|
||||
:aria-label="$t('nav.more_menu')"
|
||||
@click="toggleVisible"
|
||||
>
|
||||
<span :class="show ? 'i-ri:close-fill' : 'i-ri:more-fill'" />
|
||||
|
|
|
@ -97,7 +97,7 @@ function resetModal() {
|
|||
<b text-primary>@{{ account.acct }}</b>
|
||||
</i18n-t>
|
||||
</h2>
|
||||
<button ref="dismissButton" btn-action-icon absolute top--8 right-0 m1 aria-label="Close" @click="emit('close')">
|
||||
<button ref="dismissButton" btn-action-icon absolute top--8 right-0 m1 :aria-label="$t('action.close')" @click="emit('close')">
|
||||
<div i-ri:close-line />
|
||||
</button>
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// @unocss-include
|
||||
import { accessKeys } from '~/constants/access-keys'
|
||||
|
||||
export default defineComponent({
|
||||
setup() {
|
||||
const { t } = useI18n()
|
||||
return () => h('a', {
|
||||
id: 'skip-navigation',
|
||||
class: 'sr-only',
|
||||
href: '#skip-content',
|
||||
accesskey: accessKeys.SkipContent,
|
||||
}, t(`a11y.skip_navigation`))
|
||||
},
|
||||
})
|
|
@ -0,0 +1,5 @@
|
|||
<template>
|
||||
<NuxtLink id="skip-content" sr-only>
|
||||
<slot />
|
||||
</NuxtLink>
|
||||
</template>
|
|
@ -211,7 +211,7 @@ watch(shouldLoadAttachment, () => {
|
|||
rounded-lg
|
||||
h-full
|
||||
w-full
|
||||
aria-label="Open image preview dialog"
|
||||
:aria-label="$t('action.open_image_preview_dialog')"
|
||||
relative
|
||||
@click="!shouldLoadAttachment ? loadAttachment() : openMediaPreview(attachments ? attachments : [attachment], attachments?.indexOf(attachment) || 0)"
|
||||
>
|
||||
|
|
|
@ -44,7 +44,9 @@ const allowEmbeddedMedia = computed(() => status.card?.html && embeddedMediaPref
|
|||
<StatusBody v-if="(!isFiltered && isSensitiveNonSpoiler) || hideAllMedia" :status="status" :newer="newer" :with-action="!isDetails" :class="isDetails ? 'text-xl' : ''" />
|
||||
<StatusSpoiler :enabled="hasSpoilerOrSensitiveMedia || isFiltered" :filter="isFiltered" :sensitive-non-spoiler="isSensitiveNonSpoiler || hideAllMedia" :is-d-m="isDM">
|
||||
<template v-if="spoilerTextPresent" #spoiler>
|
||||
<p>{{ status.spoilerText }}</p>
|
||||
<p>
|
||||
<ContentRich :content="status.spoilerText" :emojis="status.emojis" :markdown="false" />
|
||||
</p>
|
||||
</template>
|
||||
<template v-else-if="filterPhrase" #spoiler>
|
||||
<p>{{ `${$t('status.filter_hidden_phrase')}: ${filterPhrase}` }}</p>
|
||||
|
|
|
@ -20,7 +20,7 @@ function clickUser(user: UserLogin) {
|
|||
<button
|
||||
flex rounded
|
||||
cursor-pointer
|
||||
aria-label="Switch user"
|
||||
:aria-label="$t('action.switch_account')"
|
||||
:class="user.account.acct === currentUser?.account.acct ? '' : 'op25 grayscale'"
|
||||
hover="filter-none op100"
|
||||
@click="clickUser(user)"
|
||||
|
|
|
@ -36,7 +36,7 @@ function processSignIn() {
|
|||
<button
|
||||
flex rounded px4 py3 text-left
|
||||
hover:bg-active cursor-pointer transition-100
|
||||
aria-label="Switch user"
|
||||
:aria-label="$t('action.switch_account')"
|
||||
@click="clickUser(user)"
|
||||
>
|
||||
<AccountInfo :account="user.account" :hover-card="false" square />
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
export const accessKeys = {
|
||||
Home: 'S',
|
||||
SkipContent: '1',
|
||||
Search: '2',
|
||||
Shortcuts: '3',
|
||||
} as const
|
|
@ -16,6 +16,7 @@ const isGrayscale = usePreferences('grayscaleMode')
|
|||
|
||||
<template>
|
||||
<div h-full :data-mode="isHydrated && isGrayscale ? 'grayscale' : ''" data-tauri-drag-region>
|
||||
<SkipContent />
|
||||
<main flex w-full mxa lg:max-w-80rem class="native:grid native:sm:grid-cols-[auto_1fr] native:lg:grid-cols-[auto_minmax(600px,2fr)_1fr]">
|
||||
<aside class="native:w-auto w-1/8 md:w-1/6 lg:w-1/5 xl:w-1/4 zen-hide" hidden sm:flex justify-end xl:me-4 native:me-0 relative>
|
||||
<div sticky top-0 w-20 xl:w-100 h-100dvh flex="~ col" lt-xl-items-center>
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"loading_titled_page": "Loading {0} page, please wait",
|
||||
"locale_changed": "Language changed to {0}",
|
||||
"locale_changing": "Changing language, please wait",
|
||||
"route_loaded": "Page {0} loaded"
|
||||
"route_loaded": "Page {0} loaded",
|
||||
"skip_navigation": "Skip navigation"
|
||||
},
|
||||
"account": {
|
||||
"authorize": "Authorize to follow",
|
||||
|
@ -73,6 +74,7 @@
|
|||
"favourited": "Favorited",
|
||||
"more": "More",
|
||||
"next": "Next",
|
||||
"open_image_preview_dialog": "Open image preview dialog",
|
||||
"prev": "Prev",
|
||||
"publish": "Publish",
|
||||
"publish_thread": "Publish thread",
|
||||
|
@ -222,6 +224,7 @@
|
|||
"error": "There was an error while creating the list",
|
||||
"error_prefix": "Error: ",
|
||||
"list_title_placeholder": "List title",
|
||||
"manage": "Manage lists",
|
||||
"modify_account": "Modify lists with account",
|
||||
"remove_account": "Remove account from list",
|
||||
"save": "Save changes"
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"loading_titled_page": "Cargando página {0}, espera por favor",
|
||||
"locale_changed": "Idioma cambiado a {0}",
|
||||
"locale_changing": "Cambiando idioma, espera por favor",
|
||||
"route_loaded": "Página {0} cargada"
|
||||
"route_loaded": "Página {0} cargada",
|
||||
"skip_navigation": "Saltar navegación"
|
||||
},
|
||||
"account": {
|
||||
"authorize": "Autorizar seguimiento",
|
||||
|
@ -217,11 +218,12 @@
|
|||
"create": "Crear",
|
||||
"delete": "Eliminar esta lista",
|
||||
"delete_error": "Se produjo un error eliminando la lista",
|
||||
"edit": "Ediar esta lista",
|
||||
"edit": "Editar esta lista",
|
||||
"edit_error": "Se produjo un error modificando la lista",
|
||||
"error": "Se produjo un error creando la lista",
|
||||
"error_prefix": "Error: ",
|
||||
"list_title_placeholder": "Título de la lista",
|
||||
"manage": "Administrar listas",
|
||||
"modify_account": "Modificar listas con cuenta",
|
||||
"remove_account": "Eliminar cuenta de la lista",
|
||||
"save": "Guardar"
|
||||
|
|
|
@ -222,6 +222,7 @@
|
|||
"error": "Errorea gertatu da zerrenda sortzerakoan",
|
||||
"error_prefix": "Errorea: ",
|
||||
"list_title_placeholder": "Zerrendaren izena",
|
||||
"manage": "Kudeatu zerrendak",
|
||||
"modify_account": "Aldatu honako kontua duten zerrendak:",
|
||||
"remove_account": "Kendu kontua zerrendatik",
|
||||
"save": "Gorde aldaketak"
|
||||
|
|
|
@ -222,6 +222,7 @@
|
|||
"error": "Hiba történt a lista létrehozása közben",
|
||||
"error_prefix": "Hiba: ",
|
||||
"list_title_placeholder": "Lista címe",
|
||||
"manage": "Listák kezelése",
|
||||
"modify_account": "Listák módosítása fiókkal",
|
||||
"remove_account": "Fiók eltávolítása a listáról",
|
||||
"save": "Változtatások mentése"
|
||||
|
|
|
@ -222,6 +222,7 @@
|
|||
"error": "C'è stato un errore nella creazione della lista",
|
||||
"error_prefix": "Errore: ",
|
||||
"list_title_placeholder": "Titolo lista",
|
||||
"manage": "Gestisci liste",
|
||||
"modify_account": "Modifica liste con account",
|
||||
"remove_account": "Rimuovi account dalla lista",
|
||||
"save": "Salva modifiche"
|
||||
|
@ -660,7 +661,7 @@
|
|||
"report": "Segnalazione",
|
||||
"sign_up": "Iscrizione"
|
||||
},
|
||||
"notifications_all": "Tutti",
|
||||
"notifications_all": "Tutte",
|
||||
"notifications_favourite": "Apprezzamento",
|
||||
"notifications_follow": "Nuovo seguace",
|
||||
"notifications_follow_request": "Richiesta di seguire",
|
||||
|
|
|
@ -222,6 +222,7 @@
|
|||
"error": "Ocorreu um erro ao criar a lista",
|
||||
"error_prefix": "Erro: ",
|
||||
"list_title_placeholder": "Título da lista",
|
||||
"manage": "Gerir listas",
|
||||
"modify_account": "Modificar listas com a conta",
|
||||
"remove_account": "Remover conta da lista",
|
||||
"save": "Salvar alterações"
|
||||
|
|
|
@ -58,6 +58,7 @@
|
|||
"boost": "Đăng lại",
|
||||
"boost_count": "{0}",
|
||||
"boosted": "Đã đăng lại",
|
||||
"clear": "Xóa",
|
||||
"clear_publish_failed": "Xóa lỗi khi đăng tút",
|
||||
"clear_save_failed": "Xóa lỗi khi lưu tút",
|
||||
"clear_upload_failed": "Xóa lỗi khi xóa file",
|
||||
|
@ -196,7 +197,7 @@
|
|||
"desc3": "Đừng đăng nhập bằng tài khoản chính.",
|
||||
"title": "Bản dựng"
|
||||
},
|
||||
"desc_highlight": "Sẽ có một số lỗi và tính năng bị thiếu ở đây.",
|
||||
"desc_highlight": "Sẽ có lỗi và một số tính năng bị thiếu.",
|
||||
"desc_para1": "Elk là một ứng dụng web Mastodon nhanh nhẹn. Sử dụng để đăng nhập Mastodon và tương tác với Fediverse.",
|
||||
"desc_para2": "Elk là Mã Nguồn Mở và chúng tôi cải tiến nó như một dự án cộng đồng. Hãy tham gia và cùng xây dựng!",
|
||||
"desc_para3": "Để thúc đẩy sự phát triển, bạn có thể tài trợ cho Nhóm thông qua GitHub Sponsors. Chúng tôi hy vọng bạn thích Elk!",
|
||||
|
@ -221,6 +222,7 @@
|
|||
"error": "Xảy ra lỗi khi tạo danh sách",
|
||||
"error_prefix": "Lỗi: ",
|
||||
"list_title_placeholder": "Tên danh sách",
|
||||
"manage": "Quản lý danh sách",
|
||||
"modify_account": "Sửa danh sách có người này",
|
||||
"remove_account": "Xóa người ra khỏi danh sách",
|
||||
"save": "Lưu thay đổi"
|
||||
|
@ -316,6 +318,7 @@
|
|||
"list": "Danh sách",
|
||||
"lists": "Danh sách",
|
||||
"local": "Máy chủ",
|
||||
"more_menu": "Thêm",
|
||||
"muted_users": "Người đã ẩn",
|
||||
"notifications": "Thông báo",
|
||||
"privacy": "Bảo mật",
|
||||
|
@ -450,6 +453,8 @@
|
|||
"label": "Cài đặt tài khoản"
|
||||
},
|
||||
"interface": {
|
||||
"bottom_nav": "Menu dưới màn hình",
|
||||
"bottom_nav_instructions": "Chọn tối đa năm nút điều hướng yêu thích của bạn. Bao gồm nút \"Thêm\" ",
|
||||
"color_mode": "Chủ đề",
|
||||
"dark_mode": "Tối",
|
||||
"default": " (mặc định)",
|
||||
|
@ -488,14 +493,14 @@
|
|||
"title": "Bạn muốn nhận những kiểu thông báo nào?"
|
||||
},
|
||||
"description": "Nhận thông báo kể cả khi bạn không sử dụng Elk.",
|
||||
"instructions": "Đừng quên lưu các thay đổi của bạn bằng cách @:settings.notifications.push_notifications.save_settings button!",
|
||||
"instructions": "Nhớ lưu các thay đổi của bạn bằng cách nhấn @:settings.notifications.push_notifications.save_settings !",
|
||||
"label": "Cài đặt thông báo đẩy",
|
||||
"policy": {
|
||||
"all": "Từ bất kỳ ai",
|
||||
"followed": "Từ người tôi theo dõi",
|
||||
"follower": "Từ người theo dõi tôi",
|
||||
"followed": "Từ người bạn theo dõi",
|
||||
"follower": "Từ người theo dõi bạn",
|
||||
"none": "Không ai cả",
|
||||
"title": "Tôi sẽ nhận thông báo từ ai?"
|
||||
"title": "Bạn muốn nhận thông báo từ ai?"
|
||||
},
|
||||
"save_settings": "Lưu cài đặt",
|
||||
"subscription_error": {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "@elk-zone/elk",
|
||||
"type": "module",
|
||||
"version": "0.13.2",
|
||||
"version": "0.14.0",
|
||||
"packageManager": "pnpm@8.15.5",
|
||||
"license": "MIT",
|
||||
"homepage": "https://elk.zone/",
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back>
|
||||
<MainContent back skip-content="nav.blocked_users">
|
||||
<template #title>
|
||||
<span timeline-title-style>{{ $t('nav.blocked_users') }}</span>
|
||||
</template>
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent>
|
||||
<MainContent skip-content="nav.bookmarks">
|
||||
<template #title>
|
||||
<NuxtLink to="/bookmarks" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:bookmark-line />
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent>
|
||||
<MainContent skip-content="nav.conversations">
|
||||
<template #title>
|
||||
<NuxtLink to="/conversations" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:at-line />
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back>
|
||||
<MainContent back skip-content="nav.blocked_domains">
|
||||
<template #title>
|
||||
<span timeline-title-style>{{ $t('nav.blocked_domains') }}</span>
|
||||
</template>
|
||||
|
|
|
@ -12,7 +12,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent>
|
||||
<MainContent skip-content="nav.favourites">
|
||||
<template #title>
|
||||
<NuxtLink to="/favourites" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div :class="useStarFavoriteIcon ? 'i-ri:star-line' : 'i-ri:heart-3-line'" />
|
||||
|
|
|
@ -16,7 +16,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent>
|
||||
<MainContent skip-content="nav.hashtags">
|
||||
<template #title>
|
||||
<NuxtLink to="/hashtags" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div class="i-ri:hashtag" />
|
||||
|
|
|
@ -16,7 +16,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent>
|
||||
<MainContent skip-content="nav.home">
|
||||
<template #title>
|
||||
<NuxtLink to="/home" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:home-5-line />
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back>
|
||||
<MainContent back skip-content="nav.muted_users">
|
||||
<template #title>
|
||||
<span timeline-title-style>{{ $t('nav.muted_users') }}</span>
|
||||
</template>
|
||||
|
|
|
@ -65,10 +65,14 @@ const moreOptions = computed<CommonRouteTabMoreOption>(() => ({
|
|||
tooltip: filterText.value,
|
||||
match: !!filter.value,
|
||||
}))
|
||||
const skipContent = computed(() => {
|
||||
const name = route.params.filter
|
||||
return name ? `tab.notifications_${name}` : 'tab.notifications_all'
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent>
|
||||
<MainContent :skip-content="skipContent">
|
||||
<template #title>
|
||||
<NuxtLink to="/notifications" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:notification-4-line />
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent>
|
||||
<MainContent skip-content="account.pinned">
|
||||
<template #title>
|
||||
<NuxtLink to="/public/pinned" timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:pushpin-line />
|
||||
|
|
|
@ -18,7 +18,7 @@ const isRootPath = computed(() => route.name === 'settings')
|
|||
<div>
|
||||
<div min-h-screen flex>
|
||||
<div border="e base" :class="isRootPath ? 'block lg:flex-none flex-1' : 'hidden lg:block'">
|
||||
<MainContent>
|
||||
<MainContent :skip-content="isRootPath ? 'nav.settings' : undefined">
|
||||
<template #title>
|
||||
<div timeline-title-style flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:settings-3-line />
|
||||
|
|
|
@ -17,7 +17,7 @@ function handleShowCommit() {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back-on-small-screen>
|
||||
<MainContent back-on-small-screen skip-content="settings.about.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.about.label') }}</span>
|
||||
|
|
|
@ -7,7 +7,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back-on-small-screen>
|
||||
<MainContent back-on-small-screen skip-content="settings.interface.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.interface.label') }}</span>
|
||||
|
|
|
@ -15,7 +15,7 @@ const status = computed(() => {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back-on-small-screen>
|
||||
<MainContent back-on-small-screen skip-content="settings.language.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.language.label') }}</span>
|
||||
|
|
|
@ -12,7 +12,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back-on-small-screen>
|
||||
<MainContent back-on-small-screen skip-content="settings.notifications.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.notifications.label') }}</span>
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back>
|
||||
<MainContent back skip-content="settings.notifications.notifications.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:test-tube-line />
|
||||
|
|
|
@ -14,7 +14,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back>
|
||||
<MainContent back skip-content="settings.notifications.push_notifications.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.notifications.push_notifications.label') }}</span>
|
||||
|
|
|
@ -9,168 +9,178 @@ const userSettings = useUserSettings()
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back-on-small-screen>
|
||||
<MainContent back-on-small-screen skip-content="settings.preferences.label">
|
||||
<template #title>
|
||||
<h1 text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
{{ $t('settings.preferences.label') }}
|
||||
</h1>
|
||||
</template>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideAltIndicatorOnPosts')"
|
||||
@click="togglePreferences('hideAltIndicatorOnPosts')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_alt_indi_on_posts') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideGifIndicatorOnPosts')"
|
||||
@click="togglePreferences('hideGifIndicatorOnPosts')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_gif_indi_on_posts') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideAccountHoverCard')"
|
||||
@click="togglePreferences('hideAccountHoverCard')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_account_hover_card') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideTagHoverCard')"
|
||||
@click="togglePreferences('hideTagHoverCard')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_tag_hover_card') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'enableAutoplay')"
|
||||
:disabled="getPreferences(userSettings, 'enableDataSaving')"
|
||||
@click="togglePreferences('enableAutoplay')"
|
||||
>
|
||||
{{ $t('settings.preferences.enable_autoplay') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'optimizeForLowPerformanceDevice')"
|
||||
@click="togglePreferences('optimizeForLowPerformanceDevice')"
|
||||
>
|
||||
{{ $t('settings.preferences.optimize_for_low_performance_device') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'enableDataSaving')"
|
||||
@click="togglePreferences('enableDataSaving')"
|
||||
>
|
||||
{{ $t("settings.preferences.enable_data_saving") }}
|
||||
<template #description>
|
||||
{{ $t("settings.preferences.enable_data_saving_description") }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'enablePinchToZoom')"
|
||||
@click="togglePreferences('enablePinchToZoom')"
|
||||
>
|
||||
{{ $t('settings.preferences.enable_pinch_to_zoom') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'useStarFavoriteIcon')"
|
||||
@click="togglePreferences('useStarFavoriteIcon')"
|
||||
>
|
||||
{{ $t('settings.preferences.use_star_favorite_icon') }}
|
||||
</SettingsToggleItem>
|
||||
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
||||
<div i-ri-hearts-line />
|
||||
{{ $t('settings.preferences.wellbeing') }}
|
||||
</h2>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'grayscaleMode')"
|
||||
@click="togglePreferences('grayscaleMode')"
|
||||
>
|
||||
{{ $t('settings.preferences.grayscale_mode') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideBoostCount')"
|
||||
@click="togglePreferences('hideBoostCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_boost_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideFavoriteCount')"
|
||||
@click="togglePreferences('hideFavoriteCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_favorite_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideReplyCount')"
|
||||
@click="togglePreferences('hideReplyCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_reply_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideFollowerCount')"
|
||||
@click="togglePreferences('hideFollowerCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_follower_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideUsernameEmojis')"
|
||||
@click="togglePreferences('hideUsernameEmojis')"
|
||||
>
|
||||
{{ $t("settings.preferences.hide_username_emojis") }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.hide_username_emojis_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideNews')"
|
||||
@click="togglePreferences('hideNews')"
|
||||
>
|
||||
{{ $t("settings.preferences.hide_news") }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'zenMode')"
|
||||
@click="togglePreferences('zenMode')"
|
||||
>
|
||||
{{ $t("settings.preferences.zen_mode") }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.zen_mode_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
||||
<div i-ri-flask-line />
|
||||
{{ $t('settings.preferences.title') }}
|
||||
</h2>
|
||||
<!-- Embedded Media -->
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalEmbeddedMedia')"
|
||||
@click="togglePreferences('experimentalEmbeddedMedia')"
|
||||
>
|
||||
{{ $t('settings.preferences.embedded_media') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.embedded_media_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalVirtualScroller')"
|
||||
@click="togglePreferences('experimentalVirtualScroller')"
|
||||
>
|
||||
{{ $t('settings.preferences.virtual_scroll') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.virtual_scroll_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalGitHubCards')"
|
||||
@click="togglePreferences('experimentalGitHubCards')"
|
||||
>
|
||||
{{ $t('settings.preferences.github_cards') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.github_cards_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalUserPicker')"
|
||||
@click="togglePreferences('experimentalUserPicker')"
|
||||
>
|
||||
{{ $t('settings.preferences.user_picker') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.user_picker_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<section>
|
||||
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center sr-only>
|
||||
<span aria-hidden="true" block i-ri-equalizer-line />
|
||||
{{ $t('settings.preferences.label') }}
|
||||
</h2>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideAltIndicatorOnPosts')"
|
||||
@click="togglePreferences('hideAltIndicatorOnPosts')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_alt_indi_on_posts') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideGifIndicatorOnPosts')"
|
||||
@click="togglePreferences('hideGifIndicatorOnPosts')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_gif_indi_on_posts') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideAccountHoverCard')"
|
||||
@click="togglePreferences('hideAccountHoverCard')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_account_hover_card') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideTagHoverCard')"
|
||||
@click="togglePreferences('hideTagHoverCard')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_tag_hover_card') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'enableAutoplay')"
|
||||
:disabled="getPreferences(userSettings, 'enableDataSaving')"
|
||||
@click="togglePreferences('enableAutoplay')"
|
||||
>
|
||||
{{ $t('settings.preferences.enable_autoplay') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'optimizeForLowPerformanceDevice')"
|
||||
@click="togglePreferences('optimizeForLowPerformanceDevice')"
|
||||
>
|
||||
{{ $t('settings.preferences.optimize_for_low_performance_device') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'enableDataSaving')"
|
||||
@click="togglePreferences('enableDataSaving')"
|
||||
>
|
||||
{{ $t("settings.preferences.enable_data_saving") }}
|
||||
<template #description>
|
||||
{{ $t("settings.preferences.enable_data_saving_description") }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'enablePinchToZoom')"
|
||||
@click="togglePreferences('enablePinchToZoom')"
|
||||
>
|
||||
{{ $t('settings.preferences.enable_pinch_to_zoom') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'useStarFavoriteIcon')"
|
||||
@click="togglePreferences('useStarFavoriteIcon')"
|
||||
>
|
||||
{{ $t('settings.preferences.use_star_favorite_icon') }}
|
||||
</SettingsToggleItem>
|
||||
</section>
|
||||
<section>
|
||||
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
||||
<span aria-hidden="true" block i-ri-hearts-line />
|
||||
{{ $t('settings.preferences.wellbeing') }}
|
||||
</h2>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'grayscaleMode')"
|
||||
@click="togglePreferences('grayscaleMode')"
|
||||
>
|
||||
{{ $t('settings.preferences.grayscale_mode') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideBoostCount')"
|
||||
@click="togglePreferences('hideBoostCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_boost_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideFavoriteCount')"
|
||||
@click="togglePreferences('hideFavoriteCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_favorite_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideReplyCount')"
|
||||
@click="togglePreferences('hideReplyCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_reply_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideFollowerCount')"
|
||||
@click="togglePreferences('hideFollowerCount')"
|
||||
>
|
||||
{{ $t('settings.preferences.hide_follower_count') }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideUsernameEmojis')"
|
||||
@click="togglePreferences('hideUsernameEmojis')"
|
||||
>
|
||||
{{ $t("settings.preferences.hide_username_emojis") }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.hide_username_emojis_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'hideNews')"
|
||||
@click="togglePreferences('hideNews')"
|
||||
>
|
||||
{{ $t("settings.preferences.hide_news") }}
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'zenMode')"
|
||||
@click="togglePreferences('zenMode')"
|
||||
>
|
||||
{{ $t("settings.preferences.zen_mode") }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.zen_mode_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
</section>
|
||||
<section>
|
||||
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
||||
<span aria-hidden="true" block i-ri-flask-line />
|
||||
{{ $t('settings.preferences.title') }}
|
||||
</h2>
|
||||
<!-- Embedded Media -->
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalEmbeddedMedia')"
|
||||
@click="togglePreferences('experimentalEmbeddedMedia')"
|
||||
>
|
||||
{{ $t('settings.preferences.embedded_media') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.embedded_media_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalVirtualScroller')"
|
||||
@click="togglePreferences('experimentalVirtualScroller')"
|
||||
>
|
||||
{{ $t('settings.preferences.virtual_scroll') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.virtual_scroll_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalGitHubCards')"
|
||||
@click="togglePreferences('experimentalGitHubCards')"
|
||||
>
|
||||
{{ $t('settings.preferences.github_cards') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.github_cards_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
<SettingsToggleItem
|
||||
:checked="getPreferences(userSettings, 'experimentalUserPicker')"
|
||||
@click="togglePreferences('experimentalUserPicker')"
|
||||
>
|
||||
{{ $t('settings.preferences.user_picker') }}
|
||||
<template #description>
|
||||
{{ $t('settings.preferences.user_picker_description') }}
|
||||
</template>
|
||||
</SettingsToggleItem>
|
||||
</section>
|
||||
</MainContent>
|
||||
</template>
|
||||
|
|
|
@ -103,7 +103,7 @@ onReactivated(refreshInfo)
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back>
|
||||
<MainContent back skip-content="settings.profile.appearance.title">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.profile.appearance.title') }}</span>
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back>
|
||||
<MainContent back skip-content="settings.profile.featured_tags.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<div i-ri:test-tube-line />
|
||||
|
|
|
@ -11,7 +11,7 @@ useHydratedHead({
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back-on-small-screen>
|
||||
<MainContent back-on-small-screen skip-content="settings.profile.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.profile.label') }}</span>
|
||||
|
|
|
@ -66,7 +66,7 @@ async function importTokens() {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<MainContent back-on-small-screen>
|
||||
<MainContent back-on-small-screen skip-content="settings.users.label">
|
||||
<template #title>
|
||||
<div text-lg font-bold flex items-center gap-2 @click="$scrollToTop">
|
||||
<span>{{ $t('settings.users.label') }}</span>
|
||||
|
|
Ładowanie…
Reference in New Issue