aboutsummaryrefslogtreecommitdiffstats
path: root/web/components/EventDetail.vue
blob: 8fd5b0306ec704f650ccd4410d0eca591f02df44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<script setup lang="ts">
import { format } from 'date-fns';
import { type Event as ScheduledEvent } from '~/stores/schedule';

const { event } = defineProps<{
  event: ScheduledEvent;
}>();

const getHostname = (url: string) => new URL(url).hostname;

</script>

<template>
  <div class="event">
    <div class="event-details">
      <span class="event-info">
        {{ format(event.start, "eeee kk:mm") }} - {{ format(event.end, "kk:mm") }}, {{ event.room }}
      </span>
      <span class="event-title">{{ event.title }}</span>
      <span class="event-speaker">{{ event.persons.map(p => p.name).join(", ") }}</span>
    </div>

    <div class="event-abstract" v-html="event.abstract" />

    <div v-if="event.links.length > 0 || event.attachments.length > 0" class="event-supplementary">
      <div class="event-links" v-if="event.links.length > 0">
        <span class="event-links-header">Links</span>
        <ul>
          <li v-for="link in event.links" :key="link.href" class="event-link">
            <a :href="link.href" target="_blank">{{ link.name }}</a>
          </li>
        </ul>
      </div>

      <div class="event-attachments" v-if="event.attachments.length > 0">
        <span class="event-attachments-header">Attachments</span>
        <ul>
          <li v-for="attachment in event.attachments" :key="attachment.href" class="event-attachment">
            <a :href="attachment.href" target="_blank">{{ attachment.name }}</a>
          </li>
        </ul>
      </div>
    </div>

    <div>
      <span v-if="event.track" class="event-track"><NuxtLink :to="'/tracks/' + event.track.slug">{{ event.track.name }}</NuxtLink> &bull;</span> <a v-if="event.url" class="event-url" :href="event.url" target="_blank">view on {{ getHostname(event.url)}}</a>
    </div>
  </div>
</template>

<style scoped>
.event {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.event-details {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  flex-direction: column;
  line-height: 1.3;
}

.event-info {
  font-size: var(--text-normal); 
  color: var(--color-text); 
  margin: 0;
}

.event-title {
  font-size: var(--text-larger);
  font-weight: 600; 
  margin: 0;
}

.event-supplementary {
  display: flex;
  flex-direction: row;
  gap: 1rem;
}

.event-links-header, .event-attachments-header, .event-track-header {
  font-weight: 600;
}

.event-speaker {
  font-size: var(--text-small);
  color: var(--color-text-muted);
}

.event-track, .event-url {
  font-size: var(--text-small);
}

.event-button {
  background: none;
  border: none;
  color: var(--color-primary); 
  cursor: pointer;
  outline: none;
}

.event-button:hover {
  color: var(--color-primary-dark); 
}

.event-icon {
  height: 1.5rem; 
  width: 1.5rem; 
}
</style>