forked from potsda.mn/mobilizon
Merge branch 'main' of https://framagit.org/framasoft/mobilizon into fomo-3.1.0
This commit is contained in:
commit
609740f931
|
@ -193,7 +193,7 @@ body {
|
|||
|
||||
/* Select */
|
||||
.select {
|
||||
@apply dark:bg-zinc-600 dark:placeholder:text-zinc-400 dark:text-zinc-50 rounded pl-2 pr-6 border-2 border-transparent h-10 shadow-none border rounded;
|
||||
@apply dark:bg-zinc-600 dark:placeholder:text-zinc-400 dark:text-zinc-50 rounded pl-2 pr-8 border-2 border-transparent h-10 shadow-none border rounded;
|
||||
}
|
||||
|
||||
/* Radio */
|
||||
|
|
18
js/src/components/Event/SkeletonDateCalendarIcon.vue
Normal file
18
js/src/components/Event/SkeletonDateCalendarIcon.vue
Normal file
|
@ -0,0 +1,18 @@
|
|||
<template>
|
||||
<div
|
||||
class="datetime-container flex flex-col rounded-lg text-center justify-center overflow-hidden items-stretch bg-white dark:bg-gray-700 text-violet-3 dark:text-white"
|
||||
>
|
||||
<div class="datetime-container-content">
|
||||
<div class="ml-2 h-8 bg-slate-200 w-16"></div>
|
||||
<div class="ml-2 mt-2 h-4 bg-slate-200 w-16"></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
div.datetime-container {
|
||||
width: calc(80px);
|
||||
box-shadow: 0 0 12px rgba(0, 0, 0, 0.2);
|
||||
height: calc(80px);
|
||||
}
|
||||
</style>
|
|
@ -1,5 +1,4 @@
|
|||
import gql from "graphql-tag";
|
||||
import { DISCUSSION_BASIC_FIELDS_FRAGMENT } from "./discussion";
|
||||
import { RESOURCE_METADATA_BASIC_FIELDS_FRAGMENT } from "./resources";
|
||||
import { POST_BASIC_FIELDS } from "./post";
|
||||
import { ACTOR_FRAGMENT } from "./actor";
|
||||
|
@ -246,7 +245,6 @@ export const GROUP_FIELDS_FRAGMENTS = gql`
|
|||
}
|
||||
}
|
||||
${GROUP_BASIC_FIELDS_FRAGMENTS}
|
||||
${DISCUSSION_BASIC_FIELDS_FRAGMENT}
|
||||
${RESOURCE_METADATA_BASIC_FIELDS_FRAGMENT}
|
||||
`;
|
||||
|
||||
|
@ -278,8 +276,6 @@ export const GET_GROUP = gql`
|
|||
$postsLimit: Int
|
||||
$membersPage: Int
|
||||
$membersLimit: Int
|
||||
$discussionsPage: Int
|
||||
$discussionsLimit: Int
|
||||
) {
|
||||
getGroup(id: $id) {
|
||||
mediaSize
|
||||
|
@ -287,9 +283,6 @@ export const GET_GROUP = gql`
|
|||
}
|
||||
}
|
||||
${GROUP_FIELDS_FRAGMENTS}
|
||||
${DISCUSSION_BASIC_FIELDS_FRAGMENT}
|
||||
${POST_BASIC_FIELDS}
|
||||
${RESOURCE_METADATA_BASIC_FIELDS_FRAGMENT}
|
||||
`;
|
||||
|
||||
export const CREATE_GROUP = gql`
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "لقد ألغيتَ مشاركتك",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "Has exclòs el/la membre {member}.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "S'ha desconnectat la sessió",
|
||||
"You have been invited by {invitedBy} to the following group:": "{invitedBy} t'ha convidat a afegir-te al següent grup:",
|
||||
"You have been removed from this group's members.": "T'han tret d'aquest grup.",
|
||||
"You have cancelled your participation": "Has canceŀlat la teva participació",
|
||||
|
|
|
@ -1347,7 +1347,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "Nemáte žádné nadcházející události. Možná zkuste jiný filtr?",
|
||||
"You excluded member {member}.": "Vyloučili jste člena {member}.",
|
||||
"You have attended {count} events in the past.": "V minulosti jste se nezúčastnili žádné akce.|V minulosti jste se zúčastnili jedné akce.|V minulosti jste se zúčastnili {count} akcí.",
|
||||
"You have been disconnected": "Byl jste odpojen",
|
||||
"You have been invited by {invitedBy} to the following group:": "Byli jste pozváni společností {invitedBy} do následující skupiny:",
|
||||
"You have been removed from this group's members.": "Byli jste odstraněni z členů této skupiny.",
|
||||
"You have cancelled your participation": "Zrušili jste svou účast",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1275,7 +1275,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "Sie haben keine anstehenden Veranstaltungen. Möglicherweise eine andere Filtereinstellung versuchen?",
|
||||
"You excluded member {member}.": "Sie haben {member} ausgeschlossen.",
|
||||
"You have attended {count} events in the past.": "Sie haben in der Vergangenheit keine Veranstaltungen besucht.|Sie haben in der Vergangenheit eine Veranstaltung besucht.|Sie haben in der Vergangenheit {count} Veranstaltungen besucht.",
|
||||
"You have been disconnected": "Ihre Verbindung wurde getrennt",
|
||||
"You have been invited by {invitedBy} to the following group:": "Sie wurden von {invitedBy} zu dieser Gruppe eingeladen:",
|
||||
"You have been removed from this group's members.": "Sie wurden von diesen Gruppenmitgliedern entfernt.",
|
||||
"You have cancelled your participation": "Sie haben Ihre Teilnahme abgesagt",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1226,7 +1226,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "No tienes ningún evento próximo. ¿Quizás probar con otro filtro?",
|
||||
"You excluded member {member}.": "Ha excluido al miembro {member}.",
|
||||
"You have attended {count} events in the past.": "No ha asistido a ningún evento en el pasado. |Ha asistido a un evento en el pasado. |Ha asistido a {count} eventos en el pasado.",
|
||||
"You have been disconnected": "Has sido desconectado",
|
||||
"You have been invited by {invitedBy} to the following group:": "Usted ha sido invitado por {invitedBy} al siguiente grupo:",
|
||||
"You have been removed from this group's members.": "Ha sido eliminado de los miembros de este grupo.",
|
||||
"You have cancelled your participation": "Has cancelado tu participación",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "Jätit pois käyttäjän {member}.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Yhteytesi on katkaistu",
|
||||
"You have been invited by {invitedBy} to the following group:": "{invitedBy} on kutsunut sinut seuraaviin ryhmiin:",
|
||||
"You have been removed from this group's members.": "Sinut on poistettu ryhmän jäsenistä.",
|
||||
"You have cancelled your participation": "Olet perunut osallistumisesi",
|
||||
|
|
|
@ -1145,7 +1145,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "Chan eil tachartas ri thighinn agad. Am feuch thu criathrag eile?",
|
||||
"You excluded member {member}.": "Dhùin thu am ball {member} a-mach.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Chaidh do cheangal a bhriseadh",
|
||||
"You have been invited by {invitedBy} to the following group:": "Thug {invitedBy} cuireadh dhut dhan bhuidheann seo:",
|
||||
"You have been removed from this group's members.": "Chaidh do thoirt air falbh o bhallrachd a’ bhuidhinn seo.",
|
||||
"You have cancelled your participation": "Sguir thu dhen chom-pàirteachadh agad",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "Excluíches a {member}.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "A túa sesión rematou",
|
||||
"You have been invited by {invitedBy} to the following group:": "Foches convidada por {invitedBy} ó seguinte grupo:",
|
||||
"You have been removed from this group's members.": "Sacáronte deste grupo.",
|
||||
"You have cancelled your participation": "Cancelaches a túa participación",
|
||||
|
|
|
@ -367,7 +367,6 @@
|
|||
"You are participating in this event anonymously but didn't confirm participation": "את.ה משתתפ.ת באירוע זה באופן אנונימי אך טרם אישרת את השתתפותך",
|
||||
"You can add tags by hitting the Enter key or by adding a comma": "ניתן להוסיף תגיות על־ידי לחיצה על מקש Enter או על־ידי הוספת פסיק",
|
||||
"You can try another search term or drag and drop the marker on the map": "ניתן לנסות חיפוש נוסף או לגרור את הסמן שעל המפה",
|
||||
"You have been disconnected": "נותקת",
|
||||
"You have cancelled your participation": "ביטלת את השתתפותך",
|
||||
"You have one event in {days} days.": "אין לך אירועים ב־{days} days | יש לך אירוע אחד ב־{days} ימים. | יש לך {count} אירועים ב־{days} ימים",
|
||||
"You have one event today.": "אין לך אירועים היום | יש לך אירוע אחד היום | יש לך {count} אירועים היום",
|
||||
|
|
|
@ -1186,7 +1186,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "Isključili ste člana {member}.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Isključeni ste",
|
||||
"You have been invited by {invitedBy} to the following group:": "{invitedBy} su vas pozvali u grupu:",
|
||||
"You have been removed from this group's members.": "Izbačeni ste iz ove grupe.",
|
||||
"You have cancelled your participation": "Otkazali ste svoje sudjelovanje",
|
||||
|
|
|
@ -1234,7 +1234,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "Nincsenek közelgő eseményei. Esetleg megpróbál egy másik szűrőt?",
|
||||
"You excluded member {member}.": "Ön kizárta {member} tagot.",
|
||||
"You have attended {count} events in the past.": "Ön nem vett részt semmilyen eseményen a múltban.|Ön egy eseményen vett részt a múltban.|Ön {count} eseményen vett részt a múltban.",
|
||||
"You have been disconnected": "A kapcsolata bontva lett",
|
||||
"You have been invited by {invitedBy} to the following group:": "{invitedBy} meghívta Önt a következő csoportba:",
|
||||
"You have been removed from this group's members.": "El lett távolítva a csoport tagjai közül.",
|
||||
"You have cancelled your participation": "Törölte a részvételét",
|
||||
|
|
|
@ -1080,7 +1080,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "Anda telah diundang oleh {invitedBy} ke kelompok berikut:",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "Anda telah membatalkan keikutsertaan Anda",
|
||||
|
|
|
@ -1239,7 +1239,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "Non ci sono eventi imminenti. Forse si può provare con un altro filtro?",
|
||||
"You excluded member {member}.": "Hai escluso il membro {member}.",
|
||||
"You have attended {count} events in the past.": "Non hai ancora partecipato ad alcun evento.|Hai partecipato ad un evento.|Hai partecipato a {count} eventi.",
|
||||
"You have been disconnected": "Sei stato disconnesso",
|
||||
"You have been invited by {invitedBy} to the following group:": "Sei stato invitato da {invitedBy} al seguente gruppo:",
|
||||
"You have been removed from this group's members.": "Sei stato rimosso dai membri di questo gruppo.",
|
||||
"You have cancelled your participation": "Hai cancellato la tua partecipazione",
|
||||
|
|
|
@ -1100,7 +1100,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "あなたはこのグループのメンバーから除外されました。",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1080,7 +1080,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "U sloot lid {member} uit.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "De verbinding is verbroken",
|
||||
"You have been invited by {invitedBy} to the following group:": "U bent uitgenodigd door {invitedBy} voor deelname aan de volgende groep:",
|
||||
"You have been removed from this group's members.": "Je bent uitgeschreven als lid van deze groep.",
|
||||
"You have cancelled your participation": "U hebt uw deelname geannuleerd",
|
||||
|
|
|
@ -1234,7 +1234,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "Du har ingen komande hendingar. Kanskje du kan prøva eit anna søk?",
|
||||
"You excluded member {member}.": "Du kasta ut medlemen {member}.",
|
||||
"You have attended {count} events in the past.": "Du har ikkje vore med på hendingar tidlegare.|Du har vore med på ei hending tidlegare.|Du har vore med på {count} hendingar tidlegare.",
|
||||
"You have been disconnected": "Du er fråkopla",
|
||||
"You have been invited by {invitedBy} to the following group:": "{invitedBy} har invitert deg til denne gruppa:",
|
||||
"You have been removed from this group's members.": "Du er ikkje lenger medlem i denne gruppa.",
|
||||
"You have cancelled your participation": "Du har avlyst deltakinga di",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Sètz estat desconnectat",
|
||||
"You have been invited by {invitedBy} to the following group:": "{invitedBy} vos a convidat a rejónher lo grop seguent :",
|
||||
"You have been removed from this group's members.": "Vos an mes defòra del grop.",
|
||||
"You have cancelled your participation": "Avètz anullada vòstra participacion",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Zostałeś(-aś) rozłączony(-a)",
|
||||
"You have been invited by {invitedBy} to the following group:": "Zostałeś zaproszony przez {invitedBy} do następującej grupy:",
|
||||
"You have been removed from this group's members.": "Zostałeś(-aś) usunięty(-a) z członków tej grupy.",
|
||||
"You have cancelled your participation": "Wycofałeś(-aś) swój udział",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Você foi desconectado",
|
||||
"You have been invited by {invitedBy} to the following group:": "Você foi convidado por {invitedBy} para o seguinte grupo:",
|
||||
"You have been removed from this group's members.": "Você foi removido dos membros deste grupo.",
|
||||
"You have cancelled your participation": "Você cancelou a sua participação",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "Вы исключили участника {member}.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Вы были отключены",
|
||||
"You have been invited by {invitedBy} to the following group:": "Вы были приглашены пользователем {invitedBy} в следующую группу:",
|
||||
"You have been removed from this group's members.": "Вы были удалены из участников этой группы.",
|
||||
"You have cancelled your participation": "Вы отказались от участия",
|
||||
|
|
|
@ -1070,7 +1070,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "Izključili ste člana {member}.",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Povezava je bila prekinjena",
|
||||
"You have been invited by {invitedBy} to the following group:": "{invitedBy} vas je povabil v naslednjo skupino:",
|
||||
"You have been removed from this group's members.": "Odstranjeni ste bili iz te skupine.",
|
||||
"You have cancelled your participation": "Odpovedali ste udeležbo",
|
||||
|
|
|
@ -1071,7 +1071,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "Du har blivit frånkopplad",
|
||||
"You have been invited by {invitedBy} to the following group:": "Du har blivit inbjuden av {invitedBy} till följande grupp:",
|
||||
"You have been removed from this group's members.": "Du har blivit borttagen som gruppmedlem.",
|
||||
"You have cancelled your participation": "Du har avslutat ditt deltagande",
|
||||
|
|
|
@ -1239,7 +1239,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "你没有任何即将发生的活动。也许可以尝试另一个过滤条件?",
|
||||
"You excluded member {member}.": "你排除了会员{member}。",
|
||||
"You have attended {count} events in the past.": "你在过去没有参加过任何活动。|你在过去参加过一次活动。|你在过去参加过{count}次活动。",
|
||||
"You have been disconnected": "你已经离线",
|
||||
"You have been invited by {invitedBy} to the following group:": "您已被{invitedBy}邀请加入以下群组:",
|
||||
"You have been removed from this group's members.": "你已被从这个群组的成员中删除。",
|
||||
"You have cancelled your participation": "你已经取消了你的参与",
|
||||
|
|
|
@ -1106,7 +1106,6 @@
|
|||
"You don't have any upcoming events. Maybe try another filter?": "",
|
||||
"You excluded member {member}.": "",
|
||||
"You have attended {count} events in the past.": "",
|
||||
"You have been disconnected": "",
|
||||
"You have been invited by {invitedBy} to the following group:": "",
|
||||
"You have been removed from this group's members.": "",
|
||||
"You have cancelled your participation": "",
|
||||
|
|
|
@ -114,6 +114,13 @@
|
|||
>
|
||||
<article class="flex gap-1">
|
||||
<div class="flex-none">
|
||||
<router-link
|
||||
class="no-underline"
|
||||
:to="{
|
||||
name: RouteName.ADMIN_PROFILE,
|
||||
params: { id: props.row.actor.id },
|
||||
}"
|
||||
>
|
||||
<figure v-if="props.row.actor.avatar">
|
||||
<img
|
||||
class="rounded"
|
||||
|
@ -124,16 +131,35 @@
|
|||
/>
|
||||
</figure>
|
||||
<AccountCircle :size="48" v-else />
|
||||
</router-link>
|
||||
</div>
|
||||
<div>
|
||||
<div class="prose dark:prose-invert">
|
||||
<span v-if="props.row.actor.name">{{
|
||||
props.row.actor.name
|
||||
}}</span
|
||||
><span v-else>@{{ usernameWithDomain(props.row.actor) }}</span
|
||||
<router-link
|
||||
class="no-underline"
|
||||
:to="{
|
||||
name: RouteName.ADMIN_PROFILE,
|
||||
params: { id: props.row.actor.id },
|
||||
}"
|
||||
v-if="props.row.actor.name"
|
||||
>{{ props.row.actor.name }}</router-link
|
||||
><router-link
|
||||
class="no-underline"
|
||||
:to="{
|
||||
name: RouteName.ADMIN_PROFILE,
|
||||
params: { id: props.row.actor.id },
|
||||
}"
|
||||
v-else
|
||||
>@{{ usernameWithDomain(props.row.actor) }}</router-link
|
||||
><br />
|
||||
<span v-if="props.row.actor.name"
|
||||
>@{{ usernameWithDomain(props.row.actor) }}</span
|
||||
<router-link
|
||||
class="no-underline"
|
||||
:to="{
|
||||
name: RouteName.ADMIN_PROFILE,
|
||||
params: { id: props.row.actor.id },
|
||||
}"
|
||||
v-if="props.row.actor.name"
|
||||
>@{{ usernameWithDomain(props.row.actor) }}</router-link
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -199,6 +199,13 @@
|
|||
v-slot="props"
|
||||
>
|
||||
<article class="flex gap-2">
|
||||
<router-link
|
||||
class="no-underline"
|
||||
:to="{
|
||||
name: RouteName.ADMIN_GROUP_PROFILE,
|
||||
params: { id: props.row.parent.id },
|
||||
}"
|
||||
>
|
||||
<figure class="" v-if="props.row.parent.avatar">
|
||||
<img
|
||||
class="rounded-full"
|
||||
|
@ -209,13 +216,26 @@
|
|||
/>
|
||||
</figure>
|
||||
<AccountCircle v-else :size="48" />
|
||||
</router-link>
|
||||
<div class="">
|
||||
<div class="prose dark:prose-invert">
|
||||
<span v-if="props.row.parent.name">{{
|
||||
props.row.parent.name
|
||||
}}</span
|
||||
<router-link
|
||||
class="no-underline"
|
||||
:to="{
|
||||
name: RouteName.ADMIN_GROUP_PROFILE,
|
||||
params: { id: props.row.parent.id },
|
||||
}"
|
||||
v-if="props.row.parent.name"
|
||||
>{{ props.row.parent.name }}</router-link
|
||||
><br />
|
||||
<span>@{{ usernameWithDomain(props.row.parent) }}</span>
|
||||
<router-link
|
||||
class="no-underline"
|
||||
:to="{
|
||||
name: RouteName.ADMIN_GROUP_PROFILE,
|
||||
params: { id: props.row.parent.id },
|
||||
}"
|
||||
>@{{ usernameWithDomain(props.row.parent) }}</router-link
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
|
|
|
@ -133,7 +133,7 @@ const preferredUsername = ref("");
|
|||
const name = ref("");
|
||||
const domain = ref("");
|
||||
|
||||
const local = useRouteQuery("local", false, booleanTransformer);
|
||||
const local = useRouteQuery("local", true, booleanTransformer);
|
||||
const suspended = useRouteQuery("suspended", false, booleanTransformer);
|
||||
const page = useRouteQuery("page", 1, integerTransformer);
|
||||
|
||||
|
|
|
@ -115,11 +115,11 @@ import Account from "vue-material-design-icons/Account.vue";
|
|||
|
||||
const PROFILES_PER_PAGE = 10;
|
||||
|
||||
const preferredUsername = ref("");
|
||||
const name = ref("");
|
||||
const domain = ref("");
|
||||
const preferredUsername = useRouteQuery("preferredUsername", "");
|
||||
const name = useRouteQuery("name", "");
|
||||
const domain = useRouteQuery("domain", "");
|
||||
|
||||
const local = useRouteQuery("local", false, booleanTransformer);
|
||||
const local = useRouteQuery("local", true, booleanTransformer);
|
||||
const suspended = useRouteQuery("suspended", false, booleanTransformer);
|
||||
const page = useRouteQuery("page", 1, integerTransformer);
|
||||
|
||||
|
|
|
@ -7,7 +7,12 @@
|
|||
class="flex flex-col relative pb-2 bg-white dark:bg-zinc-700 my-2 rounded"
|
||||
>
|
||||
<div class="date-calendar-icon-wrapper relative" v-if="event?.beginsOn">
|
||||
<skeleton-date-calendar-icon
|
||||
v-if="eventLoading"
|
||||
class="absolute left-3 -top-16"
|
||||
/>
|
||||
<date-calendar-icon
|
||||
v-else
|
||||
:date="event.beginsOn.toString()"
|
||||
class="absolute left-3 -top-16"
|
||||
/>
|
||||
|
@ -23,7 +28,12 @@
|
|||
<section class="intro px-2 pt-4" dir="auto">
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<div class="flex-1 min-w-[300px]">
|
||||
<div
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse mb-2 h-12 bg-slate-200 w-3/4"
|
||||
/>
|
||||
<h1
|
||||
v-else
|
||||
class="text-4xl font-bold m-0"
|
||||
dir="auto"
|
||||
:lang="event?.language"
|
||||
|
@ -31,7 +41,11 @@
|
|||
{{ event?.title }}
|
||||
</h1>
|
||||
<div class="organizer">
|
||||
<div v-if="event?.organizerActor && !event?.attributedTo">
|
||||
<div
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse mb-2 h-6 space-y-6 bg-slate-200 w-64"
|
||||
/>
|
||||
<div v-else-if="event?.organizerActor && !event?.attributedTo">
|
||||
<popover-actor-card
|
||||
:actor="event.organizerActor"
|
||||
:inline="true"
|
||||
|
@ -78,7 +92,11 @@
|
|||
</span>
|
||||
</div>
|
||||
<div class="flex flex-wrap items-center gap-2 gap-y-4 mt-2 my-3">
|
||||
<p v-if="event?.status !== EventStatus.CONFIRMED">
|
||||
<div
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse mb-2 h-6 space-y-6 bg-slate-200 w-64"
|
||||
/>
|
||||
<p v-else-if="event?.status !== EventStatus.CONFIRMED">
|
||||
<tag
|
||||
variant="warning"
|
||||
v-if="event?.status === EventStatus.TENTATIVE"
|
||||
|
@ -90,7 +108,7 @@
|
|||
>{{ t("Event cancelled") }}</tag
|
||||
>
|
||||
</p>
|
||||
<template v-if="!event?.draft">
|
||||
<template v-if="!eventLoading && !event?.draft">
|
||||
<p
|
||||
v-if="event?.visibility === EventVisibility.PUBLIC"
|
||||
class="inline-flex gap-1"
|
||||
|
@ -111,11 +129,16 @@
|
|||
<tag variant="info">{{ organizerDomain }}</tag>
|
||||
</a>
|
||||
</template>
|
||||
<p class="flex flex-wrap gap-1 items-center" dir="auto">
|
||||
<div
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse mb-2 h-6 space-y-6 bg-slate-200 w-64"
|
||||
/>
|
||||
<p v-else class="flex flex-wrap gap-1 items-center" dir="auto">
|
||||
<tag v-if="eventCategory" class="category" capitalize>{{
|
||||
eventCategory
|
||||
}}</tag>
|
||||
<router-link
|
||||
class="rounded-md truncate text-sm text-violet-title py-1 bg-purple-3 dark:text-violet-3 category"
|
||||
v-for="tag in event?.tags ?? []"
|
||||
:key="tag.title"
|
||||
:to="{ name: RouteName.TAG, params: { tag: tag.title } }"
|
||||
|
@ -129,8 +152,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="eventLoading">
|
||||
<div class="animate-pulse mb-2 h-6 bg-slate-200 w-64" />
|
||||
<div class="animate-pulse mb-2 h-6 bg-slate-200 w-64" />
|
||||
</div>
|
||||
<EventActionSection
|
||||
v-if="event"
|
||||
v-else-if="event"
|
||||
:event="event"
|
||||
:currentActor="currentActor"
|
||||
:participations="participations"
|
||||
|
@ -147,8 +174,23 @@
|
|||
class="rounded bg-white dark:bg-zinc-700 shadow-md h-min max-w-screen-sm"
|
||||
>
|
||||
<div class="sticky p-4">
|
||||
<aside
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse rounded bg-white dark:bg-zinc-700 h-min max-w-screen-sm"
|
||||
>
|
||||
<div class="mb-6 p-2" v-for="i in 3" :key="i">
|
||||
<div class="mb-2 h-6 bg-slate-200 w-64" />
|
||||
<div class="flex space-x-4 flex-row">
|
||||
<div class="rounded-full bg-slate-200 h-10 w-10"></div>
|
||||
<div class="flex flex-col flex-1 space-y-2">
|
||||
<div class="h-3 bg-slate-200"></div>
|
||||
<div class="h-3 bg-slate-200"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<event-metadata-sidebar
|
||||
v-if="event"
|
||||
v-else-if="event"
|
||||
:event="event"
|
||||
:user="loggedUser"
|
||||
@showMapModal="showMap = true"
|
||||
|
@ -160,7 +202,19 @@
|
|||
class="event-description bg-white dark:bg-zinc-700 px-3 pt-1 pb-3 rounded mb-4"
|
||||
>
|
||||
<h2 class="text-2xl">{{ t("About this event") }}</h2>
|
||||
<p v-if="!event?.description">
|
||||
<div
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse mb-2 h-6 space-y-6 bg-slate-200 w-3/4"
|
||||
/>
|
||||
<div
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse mb-2 h-6 space-y-6 bg-slate-200 w-3/4"
|
||||
/>
|
||||
<div
|
||||
v-if="eventLoading"
|
||||
class="animate-pulse mb-2 h-6 space-y-6 bg-slate-200 w-1/4"
|
||||
/>
|
||||
<p v-else-if="!event?.description">
|
||||
{{ t("The event organizer didn't add any description.") }}
|
||||
</p>
|
||||
<div v-else>
|
||||
|
@ -242,6 +296,7 @@ import {
|
|||
usernameWithDomain,
|
||||
} from "@/types/actor";
|
||||
import DateCalendarIcon from "@/components/Event/DateCalendarIcon.vue";
|
||||
import SkeletonDateCalendarIcon from "@/components/Event/SkeletonDateCalendarIcon.vue";
|
||||
import StartTimeIcon from "@/components/Event/StartTimeIcon.vue";
|
||||
import Earth from "vue-material-design-icons/Earth.vue";
|
||||
import Link from "vue-material-design-icons/Link.vue";
|
||||
|
|
|
@ -26,6 +26,7 @@ defmodule Mobilizon.Web.Email.Group do
|
|||
users ++ [Users.get_user_with_activity_settings!(actor.user_id)]
|
||||
end
|
||||
end)
|
||||
|> Enum.uniq_by(& &1.email)
|
||||
|> Enum.each(¬ify_follower(event, group, &1))
|
||||
end
|
||||
|
||||
|
|
156
test/web/email/group_test.exs
Normal file
156
test/web/email/group_test.exs
Normal file
|
@ -0,0 +1,156 @@
|
|||
defmodule Mobilizon.Web.Email.GroupTest do
|
||||
@moduledoc """
|
||||
Test the Mobilizon.Web.Email.Group module
|
||||
"""
|
||||
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Events.Event
|
||||
alias Mobilizon.Users
|
||||
alias Mobilizon.Users.{ActivitySetting, Setting, User}
|
||||
alias Mobilizon.Web.Email.Group
|
||||
|
||||
use Mobilizon.DataCase
|
||||
import Swoosh.TestAssertions
|
||||
import Mobilizon.Factory
|
||||
|
||||
describe "Notify of new event" do
|
||||
test "members, followers, execept the ones that disabled it" do
|
||||
{_user_creator, actor} = insert_user_with_settings("user@creator.com")
|
||||
%Actor{} = group = insert(:group)
|
||||
%Event{} = event = insert(:event, attributed_to: group, organizer_actor: actor)
|
||||
|
||||
insert(:member,
|
||||
parent: group,
|
||||
actor: actor,
|
||||
role: :administrator,
|
||||
member_since: DateTime.add(DateTime.utc_now(), -3600)
|
||||
)
|
||||
|
||||
{_user_member, actor_member} = insert_user_with_settings("user@member.com")
|
||||
|
||||
insert(:member,
|
||||
parent: group,
|
||||
actor: actor_member,
|
||||
role: :member,
|
||||
member_since: DateTime.add(DateTime.utc_now(), -3600)
|
||||
)
|
||||
|
||||
{_user_pending_member, actor_pending_member} =
|
||||
insert_user_with_settings("user@pending.member.com")
|
||||
|
||||
insert(:member,
|
||||
parent: group,
|
||||
actor: actor_pending_member,
|
||||
role: :not_approved
|
||||
)
|
||||
|
||||
{_user_invited_member, actor_invited_member} =
|
||||
insert_user_with_settings("user@invited.member.com")
|
||||
|
||||
insert(:member,
|
||||
parent: group,
|
||||
actor: actor_invited_member,
|
||||
role: :invited,
|
||||
member_since: DateTime.add(DateTime.utc_now(), -3600)
|
||||
)
|
||||
|
||||
{_user_rejected_member, actor_rejected_member} =
|
||||
insert_user_with_settings("user@rejected.member.com")
|
||||
|
||||
insert(:member,
|
||||
parent: group,
|
||||
actor: actor_rejected_member,
|
||||
role: :rejected,
|
||||
member_since: DateTime.add(DateTime.utc_now(), -3600)
|
||||
)
|
||||
|
||||
{_user_approved_follower, actor_follower} =
|
||||
insert_user_with_settings("user@approved.follower.com")
|
||||
|
||||
insert(:follower, actor: actor_follower, target_actor: group, approved: true)
|
||||
|
||||
{_user_no_notify_follower, actor_follower_no_notify} =
|
||||
insert_user_with_settings("user@no-notify.follower.com")
|
||||
|
||||
insert(:follower,
|
||||
actor: actor_follower_no_notify,
|
||||
target_actor: group,
|
||||
approved: true,
|
||||
notify: false
|
||||
)
|
||||
|
||||
{_user_unapproved_follower, actor_unapproved_follower} =
|
||||
insert_user_with_settings("user@unapproved.follower.com")
|
||||
|
||||
insert(:follower, actor: actor_unapproved_follower, target_actor: group, approved: false)
|
||||
|
||||
# One profile has no notify, the other one has it
|
||||
{user_still_notify_follower, actor_follower_still_notify} =
|
||||
insert_user_with_settings("user@still-notify.follower.com")
|
||||
|
||||
insert(:follower,
|
||||
actor: actor_follower_still_notify,
|
||||
target_actor: group,
|
||||
approved: true,
|
||||
notify: false
|
||||
)
|
||||
|
||||
%Actor{} = actor_follower_with_notify = insert(:actor, user: user_still_notify_follower)
|
||||
|
||||
insert(:follower,
|
||||
actor: actor_follower_with_notify,
|
||||
target_actor: group,
|
||||
approved: true,
|
||||
notify: true
|
||||
)
|
||||
|
||||
%Actor{} = actor_remote_follower = insert(:actor, user: nil, domain: "some.remote.tld")
|
||||
|
||||
insert(:follower,
|
||||
actor: actor_remote_follower,
|
||||
target_actor: group,
|
||||
approved: true,
|
||||
notify: true
|
||||
)
|
||||
|
||||
assert :ok == Group.notify_of_new_event(event)
|
||||
|
||||
refute_email_sent(to: "user@creator.com")
|
||||
refute_email_sent(to: "user@pending.member.com")
|
||||
refute_email_sent(to: "user@invited.member.com")
|
||||
refute_email_sent(to: "user@rejected.member.com")
|
||||
refute_email_sent(to: "user@unapproved.follower.com")
|
||||
refute_email_sent(to: "user@no-notify.follower.com")
|
||||
|
||||
assert_email_sent(to: "user@member.com")
|
||||
assert_email_sent(to: "user@approved.follower.com")
|
||||
assert_email_sent(to: "user@still-notify.follower.com")
|
||||
end
|
||||
end
|
||||
|
||||
defp insert_user_with_settings(email) do
|
||||
%User{} = user = insert(:user, email: email)
|
||||
|
||||
%Actor{} = actor = insert(:actor, user: user)
|
||||
|
||||
%Setting{} =
|
||||
user_settings =
|
||||
insert(:settings,
|
||||
user: user,
|
||||
user_id: user.id,
|
||||
group_notifications: :one_day
|
||||
)
|
||||
|
||||
%ActivitySetting{} =
|
||||
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user)
|
||||
|
||||
{:ok, user} =
|
||||
Users.update_user(user, %{
|
||||
settings: user_settings,
|
||||
activity_settings: [activity_setting],
|
||||
default_actor_id: actor.id
|
||||
})
|
||||
|
||||
{user, actor}
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue