kopia lustrzana https://github.com/elk-zone/elk
Porównaj commity
16 Commity
f378fc29ba
...
841755d1f2
Autor | SHA1 | Data |
---|---|---|
TAKAHASHI Shuuji | 841755d1f2 | |
TAKAHASHI Shuuji | 09cae9f924 | |
TAKAHASHI Shuuji | bd8cfc7b57 | |
Joaquín Sánchez | 77f0e2c2f8 | |
lazzzis | 57ff04853b | |
TAKAHASHI Shuuji | 5e1a8183c3 | |
TAKAHASHI Shuuji | c874b3d6c5 | |
TAKAHASHI Shuuji | 06e906f95e | |
Joaquín Sánchez | 1eaaa6ce9a | |
patak-dev | 1526847a18 | |
Duy | cc1d149ac8 | |
Duy | 569604646d | |
Dohány Tamás | 6f47d1aeff | |
Francesco | 9d62edf295 | |
Xabi | 7f4d8c04c6 | |
Emanuel Pina | 79c6714bac |
|
@ -56,7 +56,7 @@ async function removeUserNote() {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<CommonDropdown :eager-mount="command">
|
<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 rounded-5 p2 elk-group-hover="bg-purple/10">
|
||||||
<div i-ri:more-2-fill />
|
<div i-ri:more-2-fill />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -8,7 +8,7 @@ const vAutoFocus = (el: HTMLElement) => el.focus()
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div my-8 px-3 sm:px-8 md:max-w-200 flex="~ col gap-4" relative>
|
<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 />
|
<span i-ri:close-line />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ function handleFavouritedBoostedByClose() {
|
||||||
</ModalDialog>
|
</ModalDialog>
|
||||||
<ModalDialog
|
<ModalDialog
|
||||||
v-model="isPublishDialogOpen"
|
v-model="isPublishDialogOpen"
|
||||||
max-w-180 flex
|
max-w-180 flex flex-col
|
||||||
@close="handlePublishClose"
|
@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 -->
|
<!-- 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>
|
<template>
|
||||||
<div relative h-full w-full flex pt-12 @click="onClick">
|
<div relative h-full w-full flex pt-12 @click="onClick">
|
||||||
<button
|
<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
|
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"
|
:title="$t('action.next')" @click="next"
|
||||||
>
|
>
|
||||||
<div i-ri:arrow-right-s-line text-white />
|
<div i-ri:arrow-right-s-line text-white />
|
||||||
</button>
|
</button>
|
||||||
<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
|
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"
|
:title="$t('action.prev')" @click="prev"
|
||||||
>
|
>
|
||||||
|
@ -71,7 +71,7 @@ onUnmounted(() => locked.value = false)
|
||||||
|
|
||||||
<div absolute top-0 w-full flex justify-end>
|
<div absolute top-0 w-full flex justify-end>
|
||||||
<button
|
<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')"
|
dark:hover-bg="white/20" pointer-events-auto shrink-0 @click="emit('close')"
|
||||||
>
|
>
|
||||||
<div i-ri:close-line text-white />
|
<div i-ri:close-line text-white />
|
||||||
|
|
|
@ -10,7 +10,7 @@ defineModel<boolean>()
|
||||||
<button
|
<button
|
||||||
flex items-center place-content-center h-full flex-1 class="select-none"
|
flex items-center place-content-center h-full flex-1 class="select-none"
|
||||||
:class="show ? '!text-primary' : ''"
|
:class="show ? '!text-primary' : ''"
|
||||||
aria-label="More menu"
|
:aria-label="$t('nav.more_menu')"
|
||||||
@click="toggleVisible"
|
@click="toggleVisible"
|
||||||
>
|
>
|
||||||
<span :class="show ? 'i-ri:close-fill' : 'i-ri:more-fill'" />
|
<span :class="show ? 'i-ri:close-fill' : 'i-ri:more-fill'" />
|
||||||
|
|
|
@ -97,7 +97,7 @@ function resetModal() {
|
||||||
<b text-primary>@{{ account.acct }}</b>
|
<b text-primary>@{{ account.acct }}</b>
|
||||||
</i18n-t>
|
</i18n-t>
|
||||||
</h2>
|
</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 />
|
<div i-ri:close-line />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|
|
@ -211,7 +211,7 @@ watch(shouldLoadAttachment, () => {
|
||||||
rounded-lg
|
rounded-lg
|
||||||
h-full
|
h-full
|
||||||
w-full
|
w-full
|
||||||
aria-label="Open image preview dialog"
|
:aria-label="$t('action.open_image_preview_dialog')"
|
||||||
relative
|
relative
|
||||||
@click="!shouldLoadAttachment ? loadAttachment() : openMediaPreview(attachments ? attachments : [attachment], attachments?.indexOf(attachment) || 0)"
|
@click="!shouldLoadAttachment ? loadAttachment() : openMediaPreview(attachments ? attachments : [attachment], attachments?.indexOf(attachment) || 0)"
|
||||||
>
|
>
|
||||||
|
|
|
@ -62,6 +62,7 @@ const timeago = useTimeAgo(() => status.value.createdAt, timeAgoOptions)
|
||||||
const isSelfReply = computed(() => status.value.inReplyToAccountId === status.value.account.id)
|
const isSelfReply = computed(() => status.value.inReplyToAccountId === status.value.account.id)
|
||||||
const collapseRebloggedBy = computed(() => rebloggedBy.value?.id === status.value.account.id)
|
const collapseRebloggedBy = computed(() => rebloggedBy.value?.id === status.value.account.id)
|
||||||
const isDM = computed(() => status.value.visibility === 'direct')
|
const isDM = computed(() => status.value.visibility === 'direct')
|
||||||
|
const isPinned = computed(() => status.value.pinned)
|
||||||
|
|
||||||
const showUpperBorder = computed(() => props.newer && !directReply.value)
|
const showUpperBorder = computed(() => props.newer && !directReply.value)
|
||||||
const showReplyTo = computed(() => !replyToMain.value && !directReply.value)
|
const showReplyTo = computed(() => !replyToMain.value && !directReply.value)
|
||||||
|
@ -75,6 +76,19 @@ const forceShow = ref(false)
|
||||||
<div :h="showUpperBorder ? '1px' : '0'" w-auto bg-border mb-1 />
|
<div :h="showUpperBorder ? '1px' : '0'" w-auto bg-border mb-1 />
|
||||||
|
|
||||||
<slot name="meta">
|
<slot name="meta">
|
||||||
|
<!-- Pinned status -->
|
||||||
|
<div flex="~ col" justify-between>
|
||||||
|
<div
|
||||||
|
v-if="isPinned"
|
||||||
|
flex="~ gap2" items-center h-auto text-sm text-orange
|
||||||
|
m="is-5" p="t-1 is-5"
|
||||||
|
relative text-secondary ws-nowrap
|
||||||
|
>
|
||||||
|
<div i-ri:pushpin-line />
|
||||||
|
<span>{{ $t('status.pinned') }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Line connecting to previous status -->
|
<!-- Line connecting to previous status -->
|
||||||
<template v-if="status.inReplyToAccountId">
|
<template v-if="status.inReplyToAccountId">
|
||||||
<StatusReplyingTo
|
<StatusReplyingTo
|
||||||
|
|
|
@ -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' : ''" />
|
<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">
|
<StatusSpoiler :enabled="hasSpoilerOrSensitiveMedia || isFiltered" :filter="isFiltered" :sensitive-non-spoiler="isSensitiveNonSpoiler || hideAllMedia" :is-d-m="isDM">
|
||||||
<template v-if="spoilerTextPresent" #spoiler>
|
<template v-if="spoilerTextPresent" #spoiler>
|
||||||
<p>{{ status.spoilerText }}</p>
|
<p>
|
||||||
|
<ContentRich :content="status.spoilerText" :emojis="status.emojis" :markdown="false" />
|
||||||
|
</p>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="filterPhrase" #spoiler>
|
<template v-else-if="filterPhrase" #spoiler>
|
||||||
<p>{{ `${$t('status.filter_hidden_phrase')}: ${filterPhrase}` }}</p>
|
<p>{{ `${$t('status.filter_hidden_phrase')}: ${filterPhrase}` }}</p>
|
||||||
|
|
|
@ -20,7 +20,7 @@ function clickUser(user: UserLogin) {
|
||||||
<button
|
<button
|
||||||
flex rounded
|
flex rounded
|
||||||
cursor-pointer
|
cursor-pointer
|
||||||
aria-label="Switch user"
|
:aria-label="$t('action.switch_account')"
|
||||||
:class="user.account.acct === currentUser?.account.acct ? '' : 'op25 grayscale'"
|
:class="user.account.acct === currentUser?.account.acct ? '' : 'op25 grayscale'"
|
||||||
hover="filter-none op100"
|
hover="filter-none op100"
|
||||||
@click="clickUser(user)"
|
@click="clickUser(user)"
|
||||||
|
|
|
@ -36,7 +36,7 @@ function processSignIn() {
|
||||||
<button
|
<button
|
||||||
flex rounded px4 py3 text-left
|
flex rounded px4 py3 text-left
|
||||||
hover:bg-active cursor-pointer transition-100
|
hover:bg-active cursor-pointer transition-100
|
||||||
aria-label="Switch user"
|
:aria-label="$t('action.switch_account')"
|
||||||
@click="clickUser(user)"
|
@click="clickUser(user)"
|
||||||
>
|
>
|
||||||
<AccountInfo :account="user.account" :hover-card="false" square />
|
<AccountInfo :account="user.account" :hover-card="false" square />
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
"favourited": "Favorited",
|
"favourited": "Favorited",
|
||||||
"more": "More",
|
"more": "More",
|
||||||
"next": "Next",
|
"next": "Next",
|
||||||
|
"open_image_preview_dialog": "Open image preview dialog",
|
||||||
"prev": "Prev",
|
"prev": "Prev",
|
||||||
"publish": "Publish",
|
"publish": "Publish",
|
||||||
"publish_thread": "Publish thread",
|
"publish_thread": "Publish thread",
|
||||||
|
@ -632,6 +633,7 @@
|
||||||
"dismiss": "Dismiss",
|
"dismiss": "Dismiss",
|
||||||
"read": "Read {0} description"
|
"read": "Read {0} description"
|
||||||
},
|
},
|
||||||
|
"pinned": "Pinned post",
|
||||||
"poll": {
|
"poll": {
|
||||||
"count": "{0} votes|{0} vote|{0} votes",
|
"count": "{0} votes|{0} vote|{0} votes",
|
||||||
"ends": "ends {0}",
|
"ends": "ends {0}",
|
||||||
|
|
|
@ -217,11 +217,12 @@
|
||||||
"create": "Crear",
|
"create": "Crear",
|
||||||
"delete": "Eliminar esta lista",
|
"delete": "Eliminar esta lista",
|
||||||
"delete_error": "Se produjo un error eliminando la 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",
|
"edit_error": "Se produjo un error modificando la lista",
|
||||||
"error": "Se produjo un error creando la lista",
|
"error": "Se produjo un error creando la lista",
|
||||||
"error_prefix": "Error: ",
|
"error_prefix": "Error: ",
|
||||||
"list_title_placeholder": "Título de la lista",
|
"list_title_placeholder": "Título de la lista",
|
||||||
|
"manage": "Administrar listas",
|
||||||
"modify_account": "Modificar listas con cuenta",
|
"modify_account": "Modificar listas con cuenta",
|
||||||
"remove_account": "Eliminar cuenta de la lista",
|
"remove_account": "Eliminar cuenta de la lista",
|
||||||
"save": "Guardar"
|
"save": "Guardar"
|
||||||
|
|
|
@ -222,6 +222,7 @@
|
||||||
"error": "Errorea gertatu da zerrenda sortzerakoan",
|
"error": "Errorea gertatu da zerrenda sortzerakoan",
|
||||||
"error_prefix": "Errorea: ",
|
"error_prefix": "Errorea: ",
|
||||||
"list_title_placeholder": "Zerrendaren izena",
|
"list_title_placeholder": "Zerrendaren izena",
|
||||||
|
"manage": "Kudeatu zerrendak",
|
||||||
"modify_account": "Aldatu honako kontua duten zerrendak:",
|
"modify_account": "Aldatu honako kontua duten zerrendak:",
|
||||||
"remove_account": "Kendu kontua zerrendatik",
|
"remove_account": "Kendu kontua zerrendatik",
|
||||||
"save": "Gorde aldaketak"
|
"save": "Gorde aldaketak"
|
||||||
|
|
|
@ -222,6 +222,7 @@
|
||||||
"error": "Hiba történt a lista létrehozása közben",
|
"error": "Hiba történt a lista létrehozása közben",
|
||||||
"error_prefix": "Hiba: ",
|
"error_prefix": "Hiba: ",
|
||||||
"list_title_placeholder": "Lista címe",
|
"list_title_placeholder": "Lista címe",
|
||||||
|
"manage": "Listák kezelése",
|
||||||
"modify_account": "Listák módosítása fiókkal",
|
"modify_account": "Listák módosítása fiókkal",
|
||||||
"remove_account": "Fiók eltávolítása a listáról",
|
"remove_account": "Fiók eltávolítása a listáról",
|
||||||
"save": "Változtatások mentése"
|
"save": "Változtatások mentése"
|
||||||
|
|
|
@ -222,6 +222,7 @@
|
||||||
"error": "C'è stato un errore nella creazione della lista",
|
"error": "C'è stato un errore nella creazione della lista",
|
||||||
"error_prefix": "Errore: ",
|
"error_prefix": "Errore: ",
|
||||||
"list_title_placeholder": "Titolo lista",
|
"list_title_placeholder": "Titolo lista",
|
||||||
|
"manage": "Gestisci liste",
|
||||||
"modify_account": "Modifica liste con account",
|
"modify_account": "Modifica liste con account",
|
||||||
"remove_account": "Rimuovi account dalla lista",
|
"remove_account": "Rimuovi account dalla lista",
|
||||||
"save": "Salva modifiche"
|
"save": "Salva modifiche"
|
||||||
|
@ -660,7 +661,7 @@
|
||||||
"report": "Segnalazione",
|
"report": "Segnalazione",
|
||||||
"sign_up": "Iscrizione"
|
"sign_up": "Iscrizione"
|
||||||
},
|
},
|
||||||
"notifications_all": "Tutti",
|
"notifications_all": "Tutte",
|
||||||
"notifications_favourite": "Apprezzamento",
|
"notifications_favourite": "Apprezzamento",
|
||||||
"notifications_follow": "Nuovo seguace",
|
"notifications_follow": "Nuovo seguace",
|
||||||
"notifications_follow_request": "Richiesta di seguire",
|
"notifications_follow_request": "Richiesta di seguire",
|
||||||
|
|
|
@ -222,6 +222,7 @@
|
||||||
"error": "Ocorreu um erro ao criar a lista",
|
"error": "Ocorreu um erro ao criar a lista",
|
||||||
"error_prefix": "Erro: ",
|
"error_prefix": "Erro: ",
|
||||||
"list_title_placeholder": "Título da lista",
|
"list_title_placeholder": "Título da lista",
|
||||||
|
"manage": "Gerir listas",
|
||||||
"modify_account": "Modificar listas com a conta",
|
"modify_account": "Modificar listas com a conta",
|
||||||
"remove_account": "Remover conta da lista",
|
"remove_account": "Remover conta da lista",
|
||||||
"save": "Salvar alterações"
|
"save": "Salvar alterações"
|
||||||
|
|
|
@ -58,6 +58,7 @@
|
||||||
"boost": "Đăng lại",
|
"boost": "Đăng lại",
|
||||||
"boost_count": "{0}",
|
"boost_count": "{0}",
|
||||||
"boosted": "Đã đăng lại",
|
"boosted": "Đã đăng lại",
|
||||||
|
"clear": "Xóa",
|
||||||
"clear_publish_failed": "Xóa lỗi khi đăng tút",
|
"clear_publish_failed": "Xóa lỗi khi đăng tút",
|
||||||
"clear_save_failed": "Xóa lỗi khi lưu 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",
|
"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.",
|
"desc3": "Đừng đăng nhập bằng tài khoản chính.",
|
||||||
"title": "Bản dựng"
|
"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_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_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!",
|
"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": "Xảy ra lỗi khi tạo danh sách",
|
||||||
"error_prefix": "Lỗi: ",
|
"error_prefix": "Lỗi: ",
|
||||||
"list_title_placeholder": "Tên danh sách",
|
"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",
|
"modify_account": "Sửa danh sách có người này",
|
||||||
"remove_account": "Xóa người ra khỏi danh sách",
|
"remove_account": "Xóa người ra khỏi danh sách",
|
||||||
"save": "Lưu thay đổi"
|
"save": "Lưu thay đổi"
|
||||||
|
@ -316,6 +318,7 @@
|
||||||
"list": "Danh sách",
|
"list": "Danh sách",
|
||||||
"lists": "Danh sách",
|
"lists": "Danh sách",
|
||||||
"local": "Máy chủ",
|
"local": "Máy chủ",
|
||||||
|
"more_menu": "Thêm",
|
||||||
"muted_users": "Người đã ẩn",
|
"muted_users": "Người đã ẩn",
|
||||||
"notifications": "Thông báo",
|
"notifications": "Thông báo",
|
||||||
"privacy": "Bảo mật",
|
"privacy": "Bảo mật",
|
||||||
|
@ -450,6 +453,8 @@
|
||||||
"label": "Cài đặt tài khoản"
|
"label": "Cài đặt tài khoản"
|
||||||
},
|
},
|
||||||
"interface": {
|
"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ủ đề",
|
"color_mode": "Chủ đề",
|
||||||
"dark_mode": "Tối",
|
"dark_mode": "Tối",
|
||||||
"default": " (mặc định)",
|
"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?"
|
"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.",
|
"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",
|
"label": "Cài đặt thông báo đẩy",
|
||||||
"policy": {
|
"policy": {
|
||||||
"all": "Từ bất kỳ ai",
|
"all": "Từ bất kỳ ai",
|
||||||
"followed": "Từ người tôi theo dõi",
|
"followed": "Từ người bạn theo dõi",
|
||||||
"follower": "Từ người theo dõi tôi",
|
"follower": "Từ người theo dõi bạn",
|
||||||
"none": "Không ai cả",
|
"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",
|
"save_settings": "Lưu cài đặt",
|
||||||
"subscription_error": {
|
"subscription_error": {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "@elk-zone/elk",
|
"name": "@elk-zone/elk",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "0.13.2",
|
"version": "0.14.0",
|
||||||
"packageManager": "pnpm@8.15.5",
|
"packageManager": "pnpm@8.15.5",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"homepage": "https://elk.zone/",
|
"homepage": "https://elk.zone/",
|
||||||
|
|
|
@ -10,11 +10,21 @@ const { t } = useI18n()
|
||||||
|
|
||||||
const account = await fetchAccountByHandle(handle.value)
|
const account = await fetchAccountByHandle(handle.value)
|
||||||
|
|
||||||
|
// we need to ensure `pinned === true` on status
|
||||||
|
// because this prop is appeared only on current account's posts
|
||||||
|
function applyPinned(statuses: mastodon.v1.Status[]) {
|
||||||
|
return statuses.map((status) => {
|
||||||
|
status.pinned = true
|
||||||
|
return status
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function reorderAndFilter(items: mastodon.v1.Status[]) {
|
function reorderAndFilter(items: mastodon.v1.Status[]) {
|
||||||
return reorderedTimeline(items, 'account')
|
return reorderedTimeline(items, 'account')
|
||||||
}
|
}
|
||||||
|
|
||||||
const paginator = useMastoClient().v1.accounts.$select(account.id).statuses.list({ limit: 30, excludeReplies: true })
|
const pinnedPaginator = useMastoClient().v1.accounts.$select(account.id).statuses.list({ pinned: true })
|
||||||
|
const accountPaginator = useMastoClient().v1.accounts.$select(account.id).statuses.list({ limit: 30, excludeReplies: true })
|
||||||
|
|
||||||
if (account) {
|
if (account) {
|
||||||
useHydratedHead({
|
useHydratedHead({
|
||||||
|
@ -26,6 +36,9 @@ if (account) {
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<AccountTabs />
|
<AccountTabs />
|
||||||
<TimelinePaginator :paginator="paginator" :preprocess="reorderAndFilter" context="account" :account="account" />
|
<TimelinePaginator :paginator="pinnedPaginator" :preprocess="applyPinned" context="account" :account="account" :end-message="false" />
|
||||||
|
<!-- Upper border -->
|
||||||
|
<div h="1px" w-auto bg-border mb-1 />
|
||||||
|
<TimelinePaginator :paginator="accountPaginator" :preprocess="reorderAndFilter" context="account" :account="account" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -15,162 +15,172 @@ const userSettings = useUserSettings()
|
||||||
{{ $t('settings.preferences.label') }}
|
{{ $t('settings.preferences.label') }}
|
||||||
</h1>
|
</h1>
|
||||||
</template>
|
</template>
|
||||||
<SettingsToggleItem
|
<section>
|
||||||
:checked="getPreferences(userSettings, 'hideAltIndicatorOnPosts')"
|
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center sr-only>
|
||||||
@click="togglePreferences('hideAltIndicatorOnPosts')"
|
<span aria-hidden="true" block i-ri-equalizer-line />
|
||||||
>
|
{{ $t('settings.preferences.label') }}
|
||||||
{{ $t('settings.preferences.hide_alt_indi_on_posts') }}
|
</h2>
|
||||||
</SettingsToggleItem>
|
<SettingsToggleItem
|
||||||
<SettingsToggleItem
|
:checked="getPreferences(userSettings, 'hideAltIndicatorOnPosts')"
|
||||||
:checked="getPreferences(userSettings, 'hideGifIndicatorOnPosts')"
|
@click="togglePreferences('hideAltIndicatorOnPosts')"
|
||||||
@click="togglePreferences('hideGifIndicatorOnPosts')"
|
>
|
||||||
>
|
{{ $t('settings.preferences.hide_alt_indi_on_posts') }}
|
||||||
{{ $t('settings.preferences.hide_gif_indi_on_posts') }}
|
</SettingsToggleItem>
|
||||||
</SettingsToggleItem>
|
<SettingsToggleItem
|
||||||
<SettingsToggleItem
|
:checked="getPreferences(userSettings, 'hideGifIndicatorOnPosts')"
|
||||||
:checked="getPreferences(userSettings, 'hideAccountHoverCard')"
|
@click="togglePreferences('hideGifIndicatorOnPosts')"
|
||||||
@click="togglePreferences('hideAccountHoverCard')"
|
>
|
||||||
>
|
{{ $t('settings.preferences.hide_gif_indi_on_posts') }}
|
||||||
{{ $t('settings.preferences.hide_account_hover_card') }}
|
</SettingsToggleItem>
|
||||||
</SettingsToggleItem>
|
<SettingsToggleItem
|
||||||
<SettingsToggleItem
|
:checked="getPreferences(userSettings, 'hideAccountHoverCard')"
|
||||||
:checked="getPreferences(userSettings, 'hideTagHoverCard')"
|
@click="togglePreferences('hideAccountHoverCard')"
|
||||||
@click="togglePreferences('hideTagHoverCard')"
|
>
|
||||||
>
|
{{ $t('settings.preferences.hide_account_hover_card') }}
|
||||||
{{ $t('settings.preferences.hide_tag_hover_card') }}
|
</SettingsToggleItem>
|
||||||
</SettingsToggleItem>
|
<SettingsToggleItem
|
||||||
<SettingsToggleItem
|
:checked="getPreferences(userSettings, 'hideTagHoverCard')"
|
||||||
:checked="getPreferences(userSettings, 'enableAutoplay')"
|
@click="togglePreferences('hideTagHoverCard')"
|
||||||
:disabled="getPreferences(userSettings, 'enableDataSaving')"
|
>
|
||||||
@click="togglePreferences('enableAutoplay')"
|
{{ $t('settings.preferences.hide_tag_hover_card') }}
|
||||||
>
|
</SettingsToggleItem>
|
||||||
{{ $t('settings.preferences.enable_autoplay') }}
|
<SettingsToggleItem
|
||||||
</SettingsToggleItem>
|
:checked="getPreferences(userSettings, 'enableAutoplay')"
|
||||||
<SettingsToggleItem
|
:disabled="getPreferences(userSettings, 'enableDataSaving')"
|
||||||
:checked="getPreferences(userSettings, 'optimizeForLowPerformanceDevice')"
|
@click="togglePreferences('enableAutoplay')"
|
||||||
@click="togglePreferences('optimizeForLowPerformanceDevice')"
|
>
|
||||||
>
|
{{ $t('settings.preferences.enable_autoplay') }}
|
||||||
{{ $t('settings.preferences.optimize_for_low_performance_device') }}
|
</SettingsToggleItem>
|
||||||
</SettingsToggleItem>
|
<SettingsToggleItem
|
||||||
<SettingsToggleItem
|
:checked="getPreferences(userSettings, 'optimizeForLowPerformanceDevice')"
|
||||||
:checked="getPreferences(userSettings, 'enableDataSaving')"
|
@click="togglePreferences('optimizeForLowPerformanceDevice')"
|
||||||
@click="togglePreferences('enableDataSaving')"
|
>
|
||||||
>
|
{{ $t('settings.preferences.optimize_for_low_performance_device') }}
|
||||||
{{ $t("settings.preferences.enable_data_saving") }}
|
</SettingsToggleItem>
|
||||||
<template #description>
|
<SettingsToggleItem
|
||||||
{{ $t("settings.preferences.enable_data_saving_description") }}
|
:checked="getPreferences(userSettings, 'enableDataSaving')"
|
||||||
</template>
|
@click="togglePreferences('enableDataSaving')"
|
||||||
</SettingsToggleItem>
|
>
|
||||||
<SettingsToggleItem
|
{{ $t("settings.preferences.enable_data_saving") }}
|
||||||
:checked="getPreferences(userSettings, 'enablePinchToZoom')"
|
<template #description>
|
||||||
@click="togglePreferences('enablePinchToZoom')"
|
{{ $t("settings.preferences.enable_data_saving_description") }}
|
||||||
>
|
</template>
|
||||||
{{ $t('settings.preferences.enable_pinch_to_zoom') }}
|
</SettingsToggleItem>
|
||||||
</SettingsToggleItem>
|
<SettingsToggleItem
|
||||||
<SettingsToggleItem
|
:checked="getPreferences(userSettings, 'enablePinchToZoom')"
|
||||||
:checked="getPreferences(userSettings, 'useStarFavoriteIcon')"
|
@click="togglePreferences('enablePinchToZoom')"
|
||||||
@click="togglePreferences('useStarFavoriteIcon')"
|
>
|
||||||
>
|
{{ $t('settings.preferences.enable_pinch_to_zoom') }}
|
||||||
{{ $t('settings.preferences.use_star_favorite_icon') }}
|
</SettingsToggleItem>
|
||||||
</SettingsToggleItem>
|
<SettingsToggleItem
|
||||||
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
:checked="getPreferences(userSettings, 'useStarFavoriteIcon')"
|
||||||
<div i-ri-hearts-line />
|
@click="togglePreferences('useStarFavoriteIcon')"
|
||||||
{{ $t('settings.preferences.wellbeing') }}
|
>
|
||||||
</h2>
|
{{ $t('settings.preferences.use_star_favorite_icon') }}
|
||||||
<SettingsToggleItem
|
</SettingsToggleItem>
|
||||||
:checked="getPreferences(userSettings, 'grayscaleMode')"
|
</section>
|
||||||
@click="togglePreferences('grayscaleMode')"
|
<section>
|
||||||
>
|
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
||||||
{{ $t('settings.preferences.grayscale_mode') }}
|
<span aria-hidden="true" block i-ri-hearts-line />
|
||||||
</SettingsToggleItem>
|
{{ $t('settings.preferences.wellbeing') }}
|
||||||
<SettingsToggleItem
|
</h2>
|
||||||
:checked="getPreferences(userSettings, 'hideBoostCount')"
|
<SettingsToggleItem
|
||||||
@click="togglePreferences('hideBoostCount')"
|
:checked="getPreferences(userSettings, 'grayscaleMode')"
|
||||||
>
|
@click="togglePreferences('grayscaleMode')"
|
||||||
{{ $t('settings.preferences.hide_boost_count') }}
|
>
|
||||||
</SettingsToggleItem>
|
{{ $t('settings.preferences.grayscale_mode') }}
|
||||||
<SettingsToggleItem
|
</SettingsToggleItem>
|
||||||
:checked="getPreferences(userSettings, 'hideFavoriteCount')"
|
<SettingsToggleItem
|
||||||
@click="togglePreferences('hideFavoriteCount')"
|
:checked="getPreferences(userSettings, 'hideBoostCount')"
|
||||||
>
|
@click="togglePreferences('hideBoostCount')"
|
||||||
{{ $t('settings.preferences.hide_favorite_count') }}
|
>
|
||||||
</SettingsToggleItem>
|
{{ $t('settings.preferences.hide_boost_count') }}
|
||||||
<SettingsToggleItem
|
</SettingsToggleItem>
|
||||||
:checked="getPreferences(userSettings, 'hideReplyCount')"
|
<SettingsToggleItem
|
||||||
@click="togglePreferences('hideReplyCount')"
|
:checked="getPreferences(userSettings, 'hideFavoriteCount')"
|
||||||
>
|
@click="togglePreferences('hideFavoriteCount')"
|
||||||
{{ $t('settings.preferences.hide_reply_count') }}
|
>
|
||||||
</SettingsToggleItem>
|
{{ $t('settings.preferences.hide_favorite_count') }}
|
||||||
<SettingsToggleItem
|
</SettingsToggleItem>
|
||||||
:checked="getPreferences(userSettings, 'hideFollowerCount')"
|
<SettingsToggleItem
|
||||||
@click="togglePreferences('hideFollowerCount')"
|
:checked="getPreferences(userSettings, 'hideReplyCount')"
|
||||||
>
|
@click="togglePreferences('hideReplyCount')"
|
||||||
{{ $t('settings.preferences.hide_follower_count') }}
|
>
|
||||||
</SettingsToggleItem>
|
{{ $t('settings.preferences.hide_reply_count') }}
|
||||||
<SettingsToggleItem
|
</SettingsToggleItem>
|
||||||
:checked="getPreferences(userSettings, 'hideUsernameEmojis')"
|
<SettingsToggleItem
|
||||||
@click="togglePreferences('hideUsernameEmojis')"
|
:checked="getPreferences(userSettings, 'hideFollowerCount')"
|
||||||
>
|
@click="togglePreferences('hideFollowerCount')"
|
||||||
{{ $t("settings.preferences.hide_username_emojis") }}
|
>
|
||||||
<template #description>
|
{{ $t('settings.preferences.hide_follower_count') }}
|
||||||
{{ $t('settings.preferences.hide_username_emojis_description') }}
|
</SettingsToggleItem>
|
||||||
</template>
|
<SettingsToggleItem
|
||||||
</SettingsToggleItem>
|
:checked="getPreferences(userSettings, 'hideUsernameEmojis')"
|
||||||
<SettingsToggleItem
|
@click="togglePreferences('hideUsernameEmojis')"
|
||||||
:checked="getPreferences(userSettings, 'hideNews')"
|
>
|
||||||
@click="togglePreferences('hideNews')"
|
{{ $t("settings.preferences.hide_username_emojis") }}
|
||||||
>
|
<template #description>
|
||||||
{{ $t("settings.preferences.hide_news") }}
|
{{ $t('settings.preferences.hide_username_emojis_description') }}
|
||||||
</SettingsToggleItem>
|
</template>
|
||||||
<SettingsToggleItem
|
</SettingsToggleItem>
|
||||||
:checked="getPreferences(userSettings, 'zenMode')"
|
<SettingsToggleItem
|
||||||
@click="togglePreferences('zenMode')"
|
:checked="getPreferences(userSettings, 'hideNews')"
|
||||||
>
|
@click="togglePreferences('hideNews')"
|
||||||
{{ $t("settings.preferences.zen_mode") }}
|
>
|
||||||
<template #description>
|
{{ $t("settings.preferences.hide_news") }}
|
||||||
{{ $t('settings.preferences.zen_mode_description') }}
|
</SettingsToggleItem>
|
||||||
</template>
|
<SettingsToggleItem
|
||||||
</SettingsToggleItem>
|
:checked="getPreferences(userSettings, 'zenMode')"
|
||||||
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
@click="togglePreferences('zenMode')"
|
||||||
<div i-ri-flask-line />
|
>
|
||||||
{{ $t('settings.preferences.title') }}
|
{{ $t("settings.preferences.zen_mode") }}
|
||||||
</h2>
|
<template #description>
|
||||||
<!-- Embedded Media -->
|
{{ $t('settings.preferences.zen_mode_description') }}
|
||||||
<SettingsToggleItem
|
</template>
|
||||||
:checked="getPreferences(userSettings, 'experimentalEmbeddedMedia')"
|
</SettingsToggleItem>
|
||||||
@click="togglePreferences('experimentalEmbeddedMedia')"
|
</section>
|
||||||
>
|
<section>
|
||||||
{{ $t('settings.preferences.embedded_media') }}
|
<h2 px6 py4 mt2 font-bold text-xl flex="~ gap-1" items-center>
|
||||||
<template #description>
|
<span aria-hidden="true" block i-ri-flask-line />
|
||||||
{{ $t('settings.preferences.embedded_media_description') }}
|
{{ $t('settings.preferences.title') }}
|
||||||
</template>
|
</h2>
|
||||||
</SettingsToggleItem>
|
<!-- Embedded Media -->
|
||||||
<SettingsToggleItem
|
<SettingsToggleItem
|
||||||
:checked="getPreferences(userSettings, 'experimentalVirtualScroller')"
|
:checked="getPreferences(userSettings, 'experimentalEmbeddedMedia')"
|
||||||
@click="togglePreferences('experimentalVirtualScroller')"
|
@click="togglePreferences('experimentalEmbeddedMedia')"
|
||||||
>
|
>
|
||||||
{{ $t('settings.preferences.virtual_scroll') }}
|
{{ $t('settings.preferences.embedded_media') }}
|
||||||
<template #description>
|
<template #description>
|
||||||
{{ $t('settings.preferences.virtual_scroll_description') }}
|
{{ $t('settings.preferences.embedded_media_description') }}
|
||||||
</template>
|
</template>
|
||||||
</SettingsToggleItem>
|
</SettingsToggleItem>
|
||||||
<SettingsToggleItem
|
<SettingsToggleItem
|
||||||
:checked="getPreferences(userSettings, 'experimentalGitHubCards')"
|
:checked="getPreferences(userSettings, 'experimentalVirtualScroller')"
|
||||||
@click="togglePreferences('experimentalGitHubCards')"
|
@click="togglePreferences('experimentalVirtualScroller')"
|
||||||
>
|
>
|
||||||
{{ $t('settings.preferences.github_cards') }}
|
{{ $t('settings.preferences.virtual_scroll') }}
|
||||||
<template #description>
|
<template #description>
|
||||||
{{ $t('settings.preferences.github_cards_description') }}
|
{{ $t('settings.preferences.virtual_scroll_description') }}
|
||||||
</template>
|
</template>
|
||||||
</SettingsToggleItem>
|
</SettingsToggleItem>
|
||||||
<SettingsToggleItem
|
<SettingsToggleItem
|
||||||
:checked="getPreferences(userSettings, 'experimentalUserPicker')"
|
:checked="getPreferences(userSettings, 'experimentalGitHubCards')"
|
||||||
@click="togglePreferences('experimentalUserPicker')"
|
@click="togglePreferences('experimentalGitHubCards')"
|
||||||
>
|
>
|
||||||
{{ $t('settings.preferences.user_picker') }}
|
{{ $t('settings.preferences.github_cards') }}
|
||||||
<template #description>
|
<template #description>
|
||||||
{{ $t('settings.preferences.user_picker_description') }}
|
{{ $t('settings.preferences.github_cards_description') }}
|
||||||
</template>
|
</template>
|
||||||
</SettingsToggleItem>
|
</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>
|
</MainContent>
|
||||||
</template>
|
</template>
|
||||||
|
|
Ładowanie…
Reference in New Issue