mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-08-05 03:57:03 -04:00
90 lines
3.3 KiB
Vue
90 lines
3.3 KiB
Vue
<script setup lang="ts">
|
|
import useConfig from '~/composables/useConfig.ts';
|
|
import type { Name } from '~/src/classes.ts';
|
|
import { clearUrl } from '~/src/helpers.ts';
|
|
|
|
defineProps<{
|
|
name: Name;
|
|
}>();
|
|
|
|
const { $translator: translator } = useNuxtApp();
|
|
const config = useConfig();
|
|
|
|
const namedaysString = (name: Name) => {
|
|
if (!name.namedays.length) {
|
|
return '';
|
|
}
|
|
|
|
const days = name.namedays.map((d) => {
|
|
const [month, day] = d.split('-');
|
|
return translator.translate(`calendar.dates.${month}`, { day });
|
|
});
|
|
|
|
return days.join(', ');
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<div class="d-flex justify-content-between">
|
|
<h3>{{ name.name }}</h3>
|
|
<slot></slot>
|
|
</div>
|
|
<div class="d-flex flex-column flex-md-row">
|
|
<ul class="list-unstyled w-md-50">
|
|
<li v-if="name.origin" class="mb-2">
|
|
<Icon v="map-marked-alt" />
|
|
<strong><T>names.origin</T><T>quotation.colon</T></strong>
|
|
{{ name.origin }}
|
|
</li>
|
|
<li v-if="name.meaning" class="mb-2">
|
|
<Icon v="comment-exclamation" />
|
|
<strong><T>names.meaning</T><T>quotation.colon</T></strong>
|
|
<LinkedText :text="name.meaning" />
|
|
</li>
|
|
<li v-if="name.usage" class="mb-2">
|
|
<Icon v="user-friends" />
|
|
<strong><T>names.usage</T><T>quotation.colon</T></strong>
|
|
{{ name.usage }}
|
|
</li>
|
|
<li v-if="config.names.legally && name.legally" class="mb-2">
|
|
<Icon v="file-contract" />
|
|
<strong><T>names.legally</T><T>quotation.colon</T></strong>
|
|
{{ name.legally }}
|
|
</li>
|
|
<li v-if="config.names.count" class="mb-2">
|
|
<Icon v="users" />
|
|
<strong><T>names.count</T><T>quotation.colon</T></strong>
|
|
<NameCount :name="name.name" />
|
|
</li>
|
|
<li v-if="config.names.namedays && name.namedays.length">
|
|
<Icon v="glass-cheers" />
|
|
<strong><T>names.namedays</T><T>quotation.colon</T></strong>
|
|
{{ namedaysString(name) }}
|
|
<p v-if="name.namedaysComment" class="small">
|
|
(<LinkedText :text="name.namedaysComment" />)
|
|
</p>
|
|
</li>
|
|
</ul>
|
|
<ul class="list-unstyled w-md-50">
|
|
<li v-for="pro in name.pros" class="mb-2">
|
|
<Icon v="plus-circle" />
|
|
<LinkedText :text="pro" />
|
|
</li>
|
|
<li v-for="con in name.cons" class="mb-2">
|
|
<Icon v="minus-circle" />
|
|
<LinkedText :text="con" />
|
|
</li>
|
|
<li v-for="person in name.notablePeople" class="mb-2">
|
|
<Icon v="user" />
|
|
<LinkedText :text="person" />
|
|
</li>
|
|
<li v-for="link in name.links" class="mb-2">
|
|
<Icon v="external-link" />
|
|
<a :href="link.trim()" target="_blank" rel="noopener">{{ clearUrl(link) }}</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</template>
|