Merge branch 'develop' of codeberg.org:calckey/calckey into develop

This commit is contained in:
ThatOneCalculator 2023-05-22 08:22:31 -07:00
commit afd244351b
No known key found for this signature in database
GPG Key ID: 8703CACD01000000
8 changed files with 111 additions and 96 deletions

View File

@ -1704,7 +1704,9 @@ oneWeek: Una setmana
reflectMayTakeTime: Pot trigar una mica a reflectir-se. reflectMayTakeTime: Pot trigar una mica a reflectir-se.
thereIsUnresolvedAbuseReportWarning: Hi ha informes sense resoldre. thereIsUnresolvedAbuseReportWarning: Hi ha informes sense resoldre.
driveCapOverrideLabel: Canvieu la capacitat del disc per a aquest usuari driveCapOverrideLabel: Canvieu la capacitat del disc per a aquest usuari
isSystemAccount: Un compte creat i operat automàticament pel sistema. isSystemAccount: Aquest compte és creat i operat automàticament pel sistema. Si us
plau, no modereu, editeu, suprimiu o modifiqueu aquest compte de cap forma, o podria
trencar el vostre servidor.
typeToConfirm: Introduïu {x} per confirmar typeToConfirm: Introduïu {x} per confirmar
deleteAccount: Suprimeix el compte deleteAccount: Suprimeix el compte
document: Documentació document: Documentació
@ -2056,3 +2058,4 @@ newer: Més nou
older: Més antic older: Més antic
silencedWarning: S'està mostrant aquesta pàgina per què aquest usuari és d'un servidor silencedWarning: S'està mostrant aquesta pàgina per què aquest usuari és d'un servidor
que l'administrador a silenciat, així que pot ser spam. que l'administrador a silenciat, així que pot ser spam.
jumpToPrevious: Vés a l'anterior

View File

@ -69,6 +69,7 @@ followRequestAccepted: "Follow request accepted"
mention: "Mention" mention: "Mention"
mentions: "Mentions" mentions: "Mentions"
directNotes: "Direct messages" directNotes: "Direct messages"
cw: "Content warning"
importAndExport: "Import/Export Data" importAndExport: "Import/Export Data"
import: "Import" import: "Import"
export: "Export" export: "Export"

View File

@ -47,8 +47,8 @@ copyContent: "Kopiëren inhoud"
copyLink: "Kopiëren link" copyLink: "Kopiëren link"
delete: "Verwijderen" delete: "Verwijderen"
deleteAndEdit: "Verwijderen en bewerken" deleteAndEdit: "Verwijderen en bewerken"
deleteAndEditConfirm: "Weet je zeker dat je deze notitie wilt verwijderen en dan bewerken? deleteAndEditConfirm: "Weet je zeker dat je deze post wilt verwijderen en dan bewerken?
Je verliest alle reacties, herdelingen en antwoorden erop." Je verliest alle reacties, boosts en antwoorden erop."
addToList: "Aan lijst toevoegen" addToList: "Aan lijst toevoegen"
sendMessage: "Verstuur bericht" sendMessage: "Verstuur bericht"
copyUsername: "Kopiëren gebruikersnaam " copyUsername: "Kopiëren gebruikersnaam "
@ -68,7 +68,7 @@ export: "Export"
files: "Bestanden" files: "Bestanden"
download: "Downloaden" download: "Downloaden"
driveFileDeleteConfirm: "Weet je zeker dat je het bestand \"{name}\" wilt verwijderen? driveFileDeleteConfirm: "Weet je zeker dat je het bestand \"{name}\" wilt verwijderen?
Notities met dit bestand als bijlage worden ook verwijderd." Posts met dit bestand als bijlage worden ook verwijderd."
unfollowConfirm: "Weet je zeker dat je {name} wilt ontvolgen?" unfollowConfirm: "Weet je zeker dat je {name} wilt ontvolgen?"
exportRequested: "Je hebt een export aangevraagd. Dit kan een tijdje duren. Het wordt exportRequested: "Je hebt een export aangevraagd. Dit kan een tijdje duren. Het wordt
toegevoegd aan je Drive zodra het is voltooid." toegevoegd aan je Drive zodra het is voltooid."
@ -101,13 +101,13 @@ followRequests: "Volgverzoeken"
unfollow: "Ontvolgen" unfollow: "Ontvolgen"
followRequestPending: "Wachten op goedkeuring volgverzoek" followRequestPending: "Wachten op goedkeuring volgverzoek"
enterEmoji: "Voer een emoji in" enterEmoji: "Voer een emoji in"
renote: "Herdelen" renote: "Boost"
unrenote: "Stop herdelen" unrenote: "Stop herdelen"
renoted: "Herdeeld" renoted: "Boosted."
cantRenote: "Dit bericht kan niet worden herdeeld" cantRenote: "Dit bericht kan niet worden geboost."
cantReRenote: "Een herdeling kan niet worden herdeeld" cantReRenote: "Een boost kan niet worden geboost."
quote: "Quote" quote: "Quote"
pinnedNote: "Vastgemaakte notitie" pinnedNote: "Vastgemaakte post"
pinned: "Vastmaken aan profielpagina" pinned: "Vastmaken aan profielpagina"
you: "Jij" you: "Jij"
clickToShow: "Klik om te bekijken" clickToShow: "Klik om te bekijken"
@ -116,7 +116,7 @@ add: "Toevoegen"
reaction: "Reacties" reaction: "Reacties"
reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen, reactionSettingDescription2: "Sleep om opnieuw te ordenen, Klik om te verwijderen,
Druk op \"+\" om toe te voegen" Druk op \"+\" om toe te voegen"
rememberNoteVisibility: "Vergeet niet de notitie zichtbaarheidsinstellingen" rememberNoteVisibility: "Onthoud post zichtbaarheidsinstellingen"
attachCancel: "Verwijder bijlage" attachCancel: "Verwijder bijlage"
markAsSensitive: "Markeren als NSFW" markAsSensitive: "Markeren als NSFW"
unmarkAsSensitive: "Geen NSFW" unmarkAsSensitive: "Geen NSFW"
@ -139,8 +139,8 @@ flagAsCat: "Markeer dit account als een kat."
flagAsCatDescription: "Zet deze vlag aan als je wilt aangeven dat dit account een flagAsCatDescription: "Zet deze vlag aan als je wilt aangeven dat dit account een
kat is." kat is."
flagShowTimelineReplies: "Toon antwoorden op de tijdlijn" flagShowTimelineReplies: "Toon antwoorden op de tijdlijn"
flagShowTimelineRepliesDescription: "Als je dit vlag aanzet, toont de tijdlijn ook flagShowTimelineRepliesDescription: "Als je deze vlag aanzet, toont de tijdlijn ook
antwoorden op andere en niet alleen jouw eigen notities." antwoorden op andere en niet alleen jouw eigen post."
autoAcceptFollowed: "Accepteer verzoeken om jezelf te volgen vanzelf als je de verzoeker autoAcceptFollowed: "Accepteer verzoeken om jezelf te volgen vanzelf als je de verzoeker
al volgt" al volgt"
addAccount: "Account toevoegen" addAccount: "Account toevoegen"
@ -203,8 +203,8 @@ mutedUsers: "Gedempte gebruikers"
blockedUsers: "Geblokkeerde gebruikers" blockedUsers: "Geblokkeerde gebruikers"
noUsers: "Er zijn geen gebruikers." noUsers: "Er zijn geen gebruikers."
editProfile: "Bewerk Profiel" editProfile: "Bewerk Profiel"
noteDeleteConfirm: "Ben je zeker dat je dit bericht wil verwijderen?" noteDeleteConfirm: "Ben je zeker dat je deze post wil verwijderen?"
pinLimitExceeded: "Je kunt geen berichten meer vastprikken" pinLimitExceeded: "Je kunt geen posts meer vastprikken"
intro: "Installatie van Calckey geëindigd! Maak nu een beheerder aan." intro: "Installatie van Calckey geëindigd! Maak nu een beheerder aan."
done: "Klaar" done: "Klaar"
processing: "Bezig met verwerken" processing: "Bezig met verwerken"
@ -499,3 +499,21 @@ manageGroups: Beheer groepen
subscribePushNotification: Pushmeldingen inschakelen subscribePushNotification: Pushmeldingen inschakelen
unsubscribePushNotification: Pushmeldingen uitschakelen unsubscribePushNotification: Pushmeldingen uitschakelen
pushNotificationAlreadySubscribed: Pushmeldingen zijn al ingeschakeld pushNotificationAlreadySubscribed: Pushmeldingen zijn al ingeschakeld
antennaSource: Antenne bron
antennaKeywords: Trefwoorden om naar te luisteren
antennaExcludeKeywords: Trefwoorden om te negeren
driveCapacityPerRemoteAccount: Schijfruimte per externe gebruiker
backgroundImageUrl: Achtergrondafbeelding URL
basicInfo: Basis informatie
pinnedUsers: Vastgezette gebruikers
pinnedPages: Vastgezette Pagina's
driveCapacityPerLocalAccount: Schijfruimte per lokale gebruiker
iconUrl: Icoon URL
bannerUrl: Banner afbeelding URL
manageAntennas: Beheer Antennes
name: Naam
notifyAntenna: Meld nieuwe posts
withFileAntenna: Alleen posts met bestanden
enableServiceworker: Schakel pushmeldingen voor je browser in
renoteUnmute: Ontdemp boosts
jumpToPrevious: Spring naar vorige

View File

@ -1,19 +1,8 @@
<template> <template>
<div <div :aria-label="accessibleLabel" v-if="!muted.muted" v-show="!isDeleted" ref="el" v-hotkey="keymap"
v-if="!muted.muted" v-size="{ max: [500, 450, 350, 300] }" class="tkcbzcuz note-container" :tabindex="!isDeleted ? '-1' : null"
v-show="!isDeleted" :class="{ renote: isRenote }">
ref="el" <MkNoteSub v-if="appearNote.reply && !detailedView" :note="appearNote.reply" class="reply-to" />
v-hotkey="keymap"
v-size="{ max: [500, 450, 350, 300] }"
class="tkcbzcuz note-container"
:tabindex="!isDeleted ? '-1' : null"
:class="{ renote: isRenote }"
>
<MkNoteSub
v-if="appearNote.reply && !detailedView"
:note="appearNote.reply"
class="reply-to"
/>
<div v-if="!detailedView" class="note-context" @click="noteClick"> <div v-if="!detailedView" class="note-context" @click="noteClick">
<div class="line"></div> <div class="line"></div>
<div v-if="appearNote._prId_" class="info"> <div v-if="appearNote._prId_" class="info">
@ -29,79 +18,47 @@
{{ i18n.ts.featured }} {{ i18n.ts.featured }}
</div> </div>
<div v-if="pinned" class="info"> <div v-if="pinned" class="info">
<i class="ph-push-pin ph-bold ph-lg"></i <i class="ph-push-pin ph-bold ph-lg"></i>{{ i18n.ts.pinnedNote }}
>{{ i18n.ts.pinnedNote }}
</div> </div>
<div v-if="isRenote" class="renote"> <div v-if="isRenote" class="renote">
<i class="ph-repeat ph-bold ph-lg"></i> <i class="ph-repeat ph-bold ph-lg"></i>
<I18n :src="i18n.ts.renotedBy" tag="span"> <I18n :src="i18n.ts.renotedBy" tag="span">
<template #user> <template #user>
<MkA <MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)" @click.stop>
v-user-preview="note.userId"
class="name"
:to="userPage(note.user)"
@click.stop
>
<MkUserName :user="note.user" /> <MkUserName :user="note.user" />
</MkA> </MkA>
</template> </template>
</I18n> </I18n>
<div class="info"> <div class="info">
<button <button ref="renoteTime" class="_button time" @click.stop="showRenoteMenu()">
ref="renoteTime" <i v-if="isMyRenote" class="ph-dots-three-outline ph-bold ph-lg dropdownIcon"></i>
class="_button time"
@click.stop="showRenoteMenu()"
>
<i
v-if="isMyRenote"
class="ph-dots-three-outline ph-bold ph-lg dropdownIcon"
></i>
<MkTime :time="note.createdAt" /> <MkTime :time="note.createdAt" />
</button> </button>
<MkVisibility :note="note" /> <MkVisibility :note="note" />
</div> </div>
</div> </div>
</div> </div>
<article <article class="article" @contextmenu.stop="onContextmenu" @click="noteClick">
class="article"
@contextmenu.stop="onContextmenu"
@click="noteClick"
>
<div class="main"> <div class="main">
<div class="header-container"> <div class="header-container">
<MkAvatar class="avatar" :user="appearNote.user" /> <MkAvatar class="avatar" :user="appearNote.user" />
<XNoteHeader <XNoteHeader class="header" :note="appearNote" :mini="true" />
class="header"
:note="appearNote"
:mini="true"
/>
</div> </div>
<div class="body"> <div class="body">
<MkSubNoteContent <MkSubNoteContent class="text" :note="appearNote" :detailed="true" :detailedView="detailedView"
class="text" :parentId="appearNote.parentId" @push="(e) => router.push(notePage(e))"
:note="appearNote" @focusfooter="footerEl.focus()" @expanded="(e) => setPostExpanded(e)"></MkSubNoteContent>
:detailed="true"
:detailedView="detailedView"
:parentId="appearNote.parentId"
@push="(e) => router.push(notePage(e))"
@focusfooter="footerEl.focus()"
></MkSubNoteContent>
<div v-if="translating || translation" class="translation"> <div v-if="translating || translation" class="translation">
<MkLoading v-if="translating" mini /> <MkLoading v-if="translating" mini />
<div v-else class="translated"> <div v-else class="translated">
<b <b>{{
>{{
i18n.t("translatedFrom", { i18n.t("translatedFrom", {
x: translation.sourceLang, x: translation.sourceLang,
}) })
}}: }}:
</b> </b>
<Mfm <Mfm :text="translation.text" :author="appearNote.user" :i="$i"
:text="translation.text" :custom-emojis="appearNote.emojis" />
:author="appearNote.user"
:i="$i"
:custom-emojis="appearNote.emojis"
/>
</div> </div>
</div> </div>
</div> </div>
@ -472,6 +429,39 @@ function readPromo() {
isDeleted.value = true; isDeleted.value = true;
} }
let postIsExpanded = ref(false);
function setPostExpanded(val: boolean) {
postIsExpanded.value = val;
}
const accessibleLabel = computed(() => {
let label = `${props.note.user.username}; `;
if (props.note.renote) {
label += `${i18n.t("renoted")} ${props.note.renote.user.username}; `;
if (props.note.renote.cw) {
label += `${i18n.t('cw')}: ${props.note.renote.cw}; `;
if (postIsExpanded.value) {
label += `${props.note.renote.text}; `;
}
} else {
label += `${props.note.renote.text}; `;
}
} else {
if (props.note.cw) {
label += `${i18n.t("cw")}: ${props.note.cw}; `;
if (postIsExpanded.value) {
label += `${props.note.text}; `;
}
} else {
label += `${props.note.text}; `;
}
}
const date = new Date(props.note.createdAt);
label += `${date.toLocaleTimeString()}`;
return label;
})
defineExpose({ defineExpose({
focus, focus,
blur, blur,

View File

@ -35,39 +35,31 @@
<MkTab <MkTab
v-model="tab" v-model="tab"
:style=" :style="'underline'"
appearNote.repliesCount > 0 &&
appearNote.renoteCount > 0 &&
reactionsCount > 0 &&
directQuotes?.length > 0 &&
clips?.length > 0
? 'underline'
: ''
"
@update:modelValue="loadTab" @update:modelValue="loadTab"
> >
<option value="replies" v-if="appearNote.repliesCount > 0"> <option value="replies">
<i class="ph-arrow-u-up-left ph-bold ph-lg"></i> <!-- <i class="ph-arrow-u-up-left ph-bold ph-lg"></i> -->
<span class="count">{{ appearNote.repliesCount }}</span> <span v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</span>
{{ i18n.ts._notification._types.reply }} {{ i18n.ts._notification._types.reply }}
</option> </option>
<option value="renotes" v-if="appearNote.renoteCount > 0"> <option value="renotes" v-if="appearNote.renoteCount > 0">
<i class="ph-repeat ph-bold ph-lg"></i> <!-- <i class="ph-repeat ph-bold ph-lg"></i> -->
<span class="count">{{ appearNote.renoteCount }}</span> <span class="count">{{ appearNote.renoteCount }}</span>
{{ i18n.ts._notification._types.renote }} {{ i18n.ts._notification._types.renote }}
</option> </option>
<option value="reactions" v-if="reactionsCount > 0"> <option value="reactions" v-if="reactionsCount > 0">
<i class="ph-smiley ph-bold ph-lg"></i> <!-- <i class="ph-smiley ph-bold ph-lg"></i> -->
<span class="count">{{ reactionsCount }}</span> <span class="count">{{ reactionsCount }}</span>
{{ i18n.ts.reaction }} {{ i18n.ts.reaction }}
</option> </option>
<option value="quotes" v-if="directQuotes?.length > 0"> <option value="quotes" v-if="directQuotes?.length > 0">
<i class="ph-quotes ph-bold ph-lg"></i> <!-- <i class="ph-quotes ph-bold ph-lg"></i> -->
<span class="count">{{ directQuotes.length }}</span> <span class="count">{{ directQuotes.length }}</span>
{{ i18n.ts._notification._types.quote }} {{ i18n.ts._notification._types.quote }}
</option> </option>
<option value="clips" v-if="clips?.length > 0"> <option value="clips" v-if="clips?.length > 0">
<i class="ph-paperclip ph-bold ph-lg"></i> <!-- <i class="ph-paperclip ph-bold ph-lg"></i> -->
<span class="count">{{ clips.length }}</span> <span class="count">{{ clips.length }}</span>
{{ i18n.ts.clips }} {{ i18n.ts.clips }}
</option> </option>

View File

@ -54,11 +54,12 @@
v-model="showContent" v-model="showContent"
:note="note" :note="note"
v-on:keydown="focusFooter" v-on:keydown="focusFooter"
v-on:update:model-value="(val) => emit('expanded', val)"
/> />
<div <div
class="body" class="body"
v-bind="{ v-bind="{
'aria-hidden': !showContent ? 'true' : null, 'aria-hidden': note.cw && !showContent ? 'true' : null,
tabindex: !showContent ? '-1' : null, tabindex: !showContent ? '-1' : null,
}" }"
> >
@ -190,6 +191,7 @@ const props = defineProps<{
const emit = defineEmits<{ const emit = defineEmits<{
(ev: "push", v): void; (ev: "push", v): void;
(ev: "focusfooter"): void; (ev: "focusfooter"): void;
(ev: "expanded", v): void;
}>(); }>();
const cwButton = ref<HTMLElement>(); const cwButton = ref<HTMLElement>();

View File

@ -111,6 +111,7 @@
<div v-if="isMobile" class="buttons"> <div v-if="isMobile" class="buttons">
<button <button
:aria-label="i18n.t('menu')"
class="button nav _button" class="button nav _button"
@click="drawerMenuShowing = true" @click="drawerMenuShowing = true"
> >
@ -119,10 +120,11 @@
><i class="ph-circle ph-fill"></i ><i class="ph-circle ph-fill"></i
></span> ></span>
</button> </button>
<button class="button home _button" @click="mainRouter.push('/')"> <button :aria-label="i18n.t('home')" class="button home _button" @click="mainRouter.push('/')">
<i class="ph-house ph-bold ph-lg"></i> <i class="ph-house ph-bold ph-lg"></i>
</button> </button>
<button <button
:aria-label="i18n.t('notifications')"
class="button notifications _button" class="button notifications _button"
@click="mainRouter.push('/my/notifications')" @click="mainRouter.push('/my/notifications')"
> >
@ -131,7 +133,7 @@
><i class="ph-circle ph-fill"></i ><i class="ph-circle ph-fill"></i
></span> ></span>
</button> </button>
<button class="button post _button" @click="os.post()"> <button :aria-label="i18n.t('note')" class="button post _button" @click="os.post()">
<i class="ph-pencil ph-bold ph-lg"></i> <i class="ph-pencil ph-bold ph-lg"></i>
</button> </button>
</div> </div>

View File

@ -36,6 +36,7 @@
<div v-if="isMobile" class="buttons"> <div v-if="isMobile" class="buttons">
<button <button
:aria-label="i18n.t('menu')"
class="button nav _button" class="button nav _button"
@click="drawerMenuShowing = true" @click="drawerMenuShowing = true"
> >
@ -47,6 +48,7 @@
</div> </div>
</button> </button>
<button <button
:aria-label="i18n.t('home')"
class="button home _button" class="button home _button"
@click=" @click="
mainRouter.currentRoute.value.name === 'index' mainRouter.currentRoute.value.name === 'index'
@ -63,6 +65,7 @@
</div> </div>
</button> </button>
<button <button
:aria-label="i18n.t('notifications')"
class="button notifications _button" class="button notifications _button"
@click=" @click="
mainRouter.push('/my/notifications'); mainRouter.push('/my/notifications');
@ -80,6 +83,7 @@
</div> </div>
</button> </button>
<button <button
:aria-label="i18n.t('messaging')"
class="button messaging _button" class="button messaging _button"
@click=" @click="
mainRouter.push('/my/messaging'); mainRouter.push('/my/messaging');
@ -99,6 +103,7 @@
</div> </div>
</button> </button>
<button <button
:aria-label="i18n.t('_deck._columns.widgets')"
class="button widget _button" class="button widget _button"
@click="widgetsShowing = true" @click="widgetsShowing = true"
> >
@ -111,6 +116,7 @@
<button <button
v-if="isMobile && mainRouter.currentRoute.value.name === 'index'" v-if="isMobile && mainRouter.currentRoute.value.name === 'index'"
ref="postButton" ref="postButton"
:aria-label="i18n.t('note')"
class="postButton button post _button" class="postButton button post _button"
@click="os.post()" @click="os.post()"
> >
@ -122,6 +128,7 @@
" "
ref="postButton" ref="postButton"
class="postButton button post _button" class="postButton button post _button"
:aria-label="i18n.t('startMessaging')"
@click="messagingStart" @click="messagingStart"
> >
<i class="ph-user-plus ph-bold ph-lg"></i> <i class="ph-user-plus ph-bold ph-lg"></i>