Improve participants lists

This commit is contained in:
Dennis Reimann
2023-10-02 16:45:33 +02:00
parent fee4f92c54
commit f1716fe0d1
4 changed files with 47 additions and 32 deletions

View File

@@ -37,8 +37,11 @@ const truncate = (str, wordCount) => {
return [head, tail] return [head, tail]
} }
const memberUrl = member => const memberUrl = member => {
member.url || member.nostr ? `https://snort.social/p/${member.nostr}` : `https://twitter.com/${member.twitter}` if (member.url) return member.url
else if (member.nostr) return `https://snort.social/p/${member.nostr}`
else if (member.twitter) return `https://twitter.com/${member.twitter}`
}
module.exports = { module.exports = {
markdown: mdTransformer.render, markdown: mdTransformer.render,

View File

@@ -82,8 +82,8 @@
.avatar { .avatar {
display: block; display: block;
height: 2rem; height: var(--avatar-size, 2rem);
width: 2rem; width: var(--avatar-size, 2rem);
border-radius: 50%; border-radius: 50%;
} }
@@ -101,13 +101,14 @@
} }
.episodeItem { .episodeItem {
--avatar-size: 1rem;
margin: 0; margin: 0;
border-radius: var(--space-l); border-radius: var(--space-l);
background-color: var(--color-card-bg); background-color: var(--color-card-bg);
transition-property: background-color; transition-property: background-color;
transition-duration: var(--transition-duration-fast); transition-duration: var(--transition-duration-fast);
& a { & a.plain {
display: flex; display: flex;
&:hover .meta { &:hover .meta {
@@ -146,18 +147,25 @@
& .content { & .content {
flex: 1; flex: 1;
@media (--up_to_M) {
padding: var(--space-m) var(--space-l); padding: var(--space-m) var(--space-l);
}
@media (--M_and_up) {
padding: var(--space-l);
}
& > *:last-child { & > *:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
} }
& .participants {
margin-top: var(--space-m);
}
}
.player .participants,
.episodeItem .participants {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: var(--space-m);
list-style: none;
} }
.player { .player {
@@ -166,6 +174,7 @@
display: flex; display: flex;
border-radius: var(--border-radius); border-radius: var(--border-radius);
background-color: var(--color-card-bg);
overflow: hidden; overflow: hidden;
@media (--up_to_M) { @media (--up_to_M) {
@@ -173,6 +182,10 @@
min-width: 300px; min-width: 300px;
max-width: 400px; max-width: 400px;
} }
& .participants {
margin: var(--space-m) var(--space-l) var(--space-m) calc(var(--player-button-size) + var(--player-button-margin) + var(--space-l));
}
} }
.player__coverlink { .player__coverlink {
@@ -194,7 +207,6 @@
flex-direction: column; flex-direction: column;
flex: 1; flex: 1;
color: var(--color-body-text); color: var(--color-body-text);
background-color: var(--color-card-bg);
transition-property: color, background-color; transition-property: color, background-color;
transition-duration: var(--transition-duration-fast); transition-duration: var(--transition-duration-fast);
} }
@@ -231,15 +243,7 @@
content: '2.0x'; content: '2.0x';
} }
.player__participants { .player__controls {
flex-wrap: wrap;
gap: var(--space-m);
margin: 0 0 0 calc(var(--player-button-size) + var(--player-button-margin));
list-style: none;
}
.player__controls,
.player__participants {
display: flex; display: flex;
align-items: center; align-items: center;
padding: var(--space-m) var(--space-l); padding: var(--space-m) var(--space-l);

View File

@@ -125,6 +125,19 @@ mixin spende(d, trunc = false)
else if d.info else if d.info
p.info= d.info p.info= d.info
mixin participants(ps, link)
.participants
for participant in ps
- const member = team[participant.toLowerCase()]
if member
if link
a(href=memberUrl(member))
img.avatar(src=assetPath(member.image || "/img/avatar.svg") alt=member.name)
else
img.avatar(src=assetPath(member.image || "/img/avatar.svg") alt=member.name)
else
img.avatar(src=assetPath("/img/avatar.svg") alt=participant)
mixin episodeItem(e) mixin episodeItem(e)
article.episodeItem&attributes(attributes) article.episodeItem&attributes(attributes)
a.plain(href=`/podcast/${e.slug}/`) a.plain(href=`/podcast/${e.slug}/`)
@@ -135,6 +148,8 @@ mixin episodeItem(e)
span= e.categoryName + (e.number ? ` #${e.number}` : '') span= e.categoryName + (e.number ? ` #${e.number}` : '')
time(datetime=e.date)= e.block || formatDate(e.date) time(datetime=e.date)= e.block || formatDate(e.date)
.title=e.titlePlain .title=e.titlePlain
if e.participants.length
+participants(e.participants, false)
mixin episodePlayer(e) mixin episodePlayer(e)
.player.player--single&attributes(attributes) .player.player--single&attributes(attributes)
@@ -167,15 +182,7 @@ mixin episodePlayer(e)
.player__name(data-amplitude-song-info="name" data-amplitude-main-song-info="true") .player__name(data-amplitude-song-info="name" data-amplitude-main-song-info="true")
if e.participants.length if e.participants.length
ul.player__participants +participants(e.participants, true)
for participant in e.participants
- const member = team[participant.toLowerCase()]
li
if member
a(href=memberUrl(member))
img.avatar(src=assetPath(member.image || "/img/avatar.svg") alt=member.name)
else
img.avatar(src=assetPath("/img/avatar.svg") alt=participant)
.player__links .player__links
a.player__download(href=e.enclosure.url) a.player__download(href=e.enclosure.url)

View File

@@ -67,12 +67,13 @@ const parseEpisode = e => {
const duration = e['itunes:duration'] const duration = e['itunes:duration']
const enclosure = e.enclosure.__attr const enclosure = e.enclosure.__attr
const [, participantsString] = const [, participantsString] =
firstLine.match(/(?:(?:von\sund\s)?mit\s)([^.]*)$/i) || [] firstLine.match(/(?:(?:von\sund\s)?mit\s)([^.]*)/i) || []
const participants = participantsString const participants = participantsString
? participantsString ? participantsString
.replace(/(\s*,\s*|\s*und\s*|\s*&\s*)/gi, '%') .replace(/(\s*,\s*|\s*und\s*|\s*&\s*)/gi, '%')
.trim() .trim()
.split('%') .split('%')
.map(p => p.trim())
: [] : []
return { return {
block, block,