mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-08-04 03:27:05 -04:00
78 lines
2.6 KiB
Vue
78 lines
2.6 KiB
Vue
<script setup lang="ts">
|
|
import { EventLevel } from '../src/calendar/helpers.ts';
|
|
import type { Event, Day } from '../src/calendar/helpers.ts';
|
|
|
|
const props = withDefaults(defineProps<{
|
|
event: Event;
|
|
year?: number;
|
|
range?: boolean;
|
|
ics?: boolean;
|
|
addButton?: boolean;
|
|
removeButton?: boolean;
|
|
month?: boolean;
|
|
}>(), {
|
|
year: () => new Date().getFullYear(),
|
|
});
|
|
|
|
const emit = defineEmits< {
|
|
add: [event: string];
|
|
delete: [event: string];
|
|
}>();
|
|
|
|
const config = useConfig();
|
|
|
|
const eventDays = computed((): Day[] => {
|
|
return props.event.getDays(props.year);
|
|
});
|
|
const eventName = computed((): string => {
|
|
return props.event.name.split('$')[0];
|
|
});
|
|
const eventParam = computed((): string | null => {
|
|
return props.event.name.split('$')[1] || null;
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<component
|
|
:is="event.level === EventLevel.CustomDay ? 'span' : 'nuxt-link'"
|
|
v-if="range"
|
|
:to="calendarDayRoute(eventDays[0])"
|
|
class="badge bg-primary text-white"
|
|
>
|
|
<T v-if="month" :params="{ day: event.getRange(year) }">calendar.dates.{{ eventDays[0].month }}</T>
|
|
<template v-else>
|
|
{{ event.getRange(year) }}
|
|
</template>
|
|
</component>
|
|
<Tooltip v-if="event.level === EventLevel.CustomDay" :text="$t('profile.calendar.customEvents.disclaimer')">
|
|
<Icon :v="event.display.name" />
|
|
</Tooltip>
|
|
<template v-else>
|
|
<Flag
|
|
v-if="event.display.type === 'flag'"
|
|
:alt="$t(`flags_alt.${event.display.name.replace(/'/g, '*').replace(/ /g, '_')}`) || ''"
|
|
:img="`/flags/${event.display.name}.png`"
|
|
/>
|
|
<Icon v-else :v="event.display.name" />
|
|
</template>
|
|
<T v-if="$te(`calendar.events.${eventName}`, true)" :params="{ param: eventParam! }">calendar.events.{{ eventName }}</T>
|
|
<LinkedText v-else :text="eventName" />
|
|
<a
|
|
v-if="ics && event.level !== EventLevel.CustomDay"
|
|
:href="`/api/queer-calendar-${config.locale}-${year}-${event.getUuid($config.public.baseUrl)}.ics`"
|
|
class="small"
|
|
:aria-label="`${$t('crud.download')} .ics`"
|
|
:title="`${$t('crud.download')} .ics`"
|
|
>
|
|
<Icon v="calendar-plus" />
|
|
</a>
|
|
<small v-if="event.localCalendar">({{ event.localCalendar }})</small>
|
|
<small v-if="event.comment" class="text-muted">{{ event.comment }}</small>
|
|
<a v-if="addButton" href="#" class="text-success" @click.prevent="emit('add', eventName)">
|
|
<Icon v="plus-circle" hover />
|
|
</a>
|
|
<a v-if="removeButton" href="#" class="text-danger" @click.prevent="emit('delete', eventName)">
|
|
<Icon v="minus-circle" hover />
|
|
</a>
|
|
</template>
|