mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig.space.git
synced 2025-12-13 16:26:50 +00:00
Improve participants lists
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user