Skip to content

Commit d057cd1

Browse files
authored
Fix javascript retrieving speakers from Pretalx (#15221)
- handle type error when avatar is blank. - Change avatar to avatar_url due to API changes upstream - Update URL, change method from limit to page per docs.
1 parent 35b65ef commit d057cd1

File tree

1 file changed

+38
-22
lines changed

1 file changed

+38
-22
lines changed

content/events/2025-amsterdam/speakers.md

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,54 +9,70 @@ Description = "Meet our speakers for DevOpsDays Amsterdam 2025"
99
<div class="pretalx-widget">
1010
<div class="pretalx-widget-info-message">
1111
JavaScript is disabled in your browser. To access our speaker list without JavaScript,
12-
please <a target="_blank" href="https://talks.devopsdays.org/devopsdays-amsterdam-2025/speakers/">click here</a>.
12+
please <a target="_blank" href="https://talks.devopsdays.org/devopsdays-amsterdam-2025/speaker/">click here</a>.
1313
</div>
1414
</div>
1515
</noscript>
1616

1717
<script>
1818
const ul = document.getElementById('speakers');
1919
const list = document.createDocumentFragment();
20-
const url = 'https://talks.devopsdays.org/api/events/devopsdays-amsterdam-2025/speakers/?limit=50';
20+
const url = 'https://talks.devopsdays.org/api/events/devopsdays-amsterdam-2025/speakers/?page=1&page_size=50';
2121

2222
fetch(url)
23-
.then((response) => {
24-
return response.json();
25-
})
23+
.then((response) => response.json())
2624
.then((data) => {
2725
let speakers = data.results;
28-
2926
console.log(speakers);
3027

31-
speakers.map(function(speaker) {
28+
speakers.forEach(function(speaker) {
3229
let li = document.createElement('div');
33-
li.className = `col-lg-3 col-md-6 p-3`;
30+
li.className = 'col-lg-3 col-md-6 p-3';
31+
3432
let name = document.createElement('h3');
33+
name.textContent = speaker.name;
34+
3535
let pic = document.createElement('img');
36+
pic.className = 'speakers-page';
37+
pic.src =
38+
(typeof speaker.avatar_url === 'string' && speaker.avatar_url.trim().length > 0)
39+
? speaker.avatar_url
40+
: '/img/speaker-default.jpg';
41+
3642
let bio = document.createElement('details');
37-
bio.className = `p-1`;
38-
let talk = document.createElement('a');
39-
40-
name.innerHTML = `${speaker.name}`;
41-
pic.src = speaker.avatar.length != 0 ? `${speaker.avatar}`: '/img/speaker-default.jpg';
42-
pic.className = `speakers-page`;
43-
bio.innerHTML = `<summary><b>About ${speaker.name}</b></summary><p>${speaker.biography ? `${speaker.biography}`: `Ipsum`}</p>`;
44-
talk.setAttribute('href', speaker.submissions[0] ? `https://talks.devopsdays.org/devopsdays-amsterdam-2025/talk/${speaker.submissions[0]}` : ``);
45-
talk.setAttribute('target', '_blank');
46-
talk.className = `btn btn-primary`;
47-
talk.innerHTML = `Link to talk`;
43+
bio.className = 'p-1';
44+
bio.innerHTML =
45+
`<summary><b>About ${speaker.name}</b></summary><p>${
46+
speaker.biography
47+
? speaker.biography
48+
: `No biography found for ${speaker.name}. If you are ${speaker.name}, please email the organizers with a biography to be used here.`
49+
}</p>`;
4850

4951
li.appendChild(name);
5052
li.appendChild(pic);
5153
li.appendChild(bio);
52-
li.appendChild(talk);
54+
55+
if (
56+
Array.isArray(speaker.submissions) &&
57+
speaker.submissions.length > 0 &&
58+
speaker.submissions[0]
59+
) {
60+
let talk = document.createElement('a');
61+
talk.href = `https://talks.devopsdays.org/devopsdays-amsterdam-2025/talk/${speaker.submissions[0]}`;
62+
talk.target = '_blank';
63+
talk.className = 'btn btn-primary';
64+
talk.textContent = 'Link to talk';
65+
li.appendChild(talk);
66+
}
67+
5368
list.appendChild(li);
5469
});
5570
})
5671
.catch(function(error) {
57-
console.log(error);
72+
console.error('Error fetching speaker data:', error);
5873
})
5974
.finally(() => {
6075
ul.appendChild(list);
6176
});
62-
</script>
77+
</script>
78+

0 commit comments

Comments
 (0)