Skip to content

Commit 59bc012

Browse files
committed
Update event.md
1 parent f91b03a commit 59bc012

File tree

1 file changed

+89
-47
lines changed

1 file changed

+89
-47
lines changed

_pages/event.md

Lines changed: 89 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -371,25 +371,29 @@ body {
371371
<span class="expand-icon">▼</span>
372372
</div>
373373
<div class="schedule-day-content">
374-
{% for session in day.sessions %}
375-
<div class="schedule-session">
376-
<p class="schedule-time">{{ session.time }}</p>
377-
<h6>{{ session.title }}</h6>
378-
{% for item in session.items %}
379-
<p>
380-
{% assign processed_item = item %}
381-
{% for speaker in site.data.winter_school_speakers %}
382-
{% assign speaker_name = speaker.name | remove: "Prof. Dr. " %}
383-
{% if item contains speaker_name %}
384-
{% assign processed_item = processed_item | replace: speaker_name, '<a href="javascript:void(0)" class="speaker-link" data-speaker-id="' | append: forloop.index | append: '">' | append: speaker_name | append: '</a>' %}
385-
{% endif %}
386-
{% endfor %}
387-
{{ processed_item }}
388-
</p>
389-
{% endfor %}
390-
</div>
374+
{% for session in day.sessions %}
375+
<div class="schedule-session">
376+
<p class="schedule-time">{{ session.time }}</p>
377+
<h6>{{ session.title }}</h6>
378+
{% for item in session.items %}
379+
<p>
380+
{% assign processed_item = item %}
381+
{% for speaker in site.data.winter_school_speakers %}
382+
{% assign speaker_full_name = speaker.name %}
383+
{% assign speaker_short_name = speaker.name | remove: "Prof. Dr. " %}
384+
{% if item contains speaker_full_name or item contains speaker_short_name %}
385+
{% capture speaker_link %}
386+
<a class="speaker-link" onclick="showSpeakerDetails('{{ forloop.index }}')" href="#">{{ speaker_short_name }}</a>
387+
{% endcapture %}
388+
{% assign processed_item = processed_item | replace: speaker_full_name, speaker_link | replace: speaker_short_name, speaker_link %}
389+
{% endif %}
391390
{% endfor %}
392-
</div>
391+
{{ processed_item }}
392+
</p>
393+
{% endfor %}
394+
</div>
395+
{% endfor %}
396+
</div>
393397
</div>
394398
{% endfor %}
395399
</section>
@@ -398,46 +402,84 @@ body {
398402
</div>
399403
</div>
400404
<br>
401-
402405
<script>
403406
document.addEventListener('DOMContentLoaded', function() {
404-
// Schedule day toggle functionality
407+
// Schedule day toggles
405408
const dayHeaders = document.querySelectorAll('.schedule-day-header');
406409
dayHeaders.forEach(header => {
407-
header.addEventListener('click', function() {
410+
header.addEventListener('click', function(e) {
411+
e.preventDefault();
408412
this.classList.toggle('active');
409413
const content = this.nextElementSibling;
410-
content.classList.toggle('show');
411-
const icon = this.querySelector('.expand-icon');
412-
icon.textContent = icon.textContent === '' ? '' : '';
414+
if (content) {
415+
content.classList.toggle('show');
416+
const icon = this.querySelector('.expand-icon');
417+
if (icon) {
418+
icon.textContent = icon.textContent === '' ? '' : '';
419+
}
420+
}
413421
});
414422
});
415423

416-
// Speaker link functionality
417-
const speakerLinks = document.querySelectorAll('.speaker-link');
418-
speakerLinks.forEach(link => {
419-
link.addEventListener('click', function(e) {
424+
// Speaker cards click handling
425+
document.querySelectorAll('.custom-card').forEach((card, index) => {
426+
card.setAttribute('data-speaker-id', index + 1);
427+
card.addEventListener('click', (e) => {
420428
e.preventDefault();
421-
const speakerId = this.getAttribute('data-speaker-id');
422-
423-
// Reset all cards and details
424-
document.querySelectorAll('.custom-card').forEach(card => {
425-
card.classList.remove('active');
426-
});
427-
document.querySelectorAll('.speaker-details').forEach(detail => {
428-
detail.classList.remove('show');
429-
});
430-
431-
// Activate clicked speaker's card and details
432-
const speakerCard = document.querySelector(`.custom-card[data-speaker-id="${speakerId}"]`);
433-
const speakerDetails = document.getElementById(`speaker-details-${speakerId}`);
434-
435-
if (speakerCard && speakerDetails) {
436-
speakerCard.classList.add('active');
437-
speakerDetails.classList.add('show');
438-
speakerDetails.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
439-
}
429+
showSpeakerDetails(index + 1);
440430
});
441431
});
432+
433+
// Speaker links in schedule
434+
document.addEventListener('click', function(e) {
435+
if (e.target.classList.contains('speaker-link')) {
436+
e.preventDefault();
437+
const speakerId = e.target.dataset.speakerId;
438+
if (speakerId) {
439+
showSpeakerDetails(speakerId);
440+
}
441+
}
442+
});
442443
});
444+
445+
function showSpeakerDetails(speakerId) {
446+
try {
447+
// Reset previous states
448+
document.querySelectorAll('.custom-card').forEach(card => {
449+
card.classList.remove('active');
450+
});
451+
document.querySelectorAll('.speaker-details').forEach(detail => {
452+
detail.classList.remove('show');
453+
});
454+
455+
// Activate selected speaker
456+
const speakerCard = document.querySelector(`.custom-card[data-speaker-id="${speakerId}"]`);
457+
const speakerDetails = document.getElementById(`speaker-details-${speakerId}`);
458+
459+
if (!speakerCard || !speakerDetails) {
460+
console.error('Speaker card or details not found');
461+
return;
462+
}
463+
464+
speakerCard.classList.add('active');
465+
speakerDetails.classList.add('show');
466+
467+
// Scroll to speaker section with offset for fixed headers
468+
const speakerSection = document.querySelector('.speakers-section');
469+
if (speakerSection) {
470+
const headerOffset = 100; // Adjust based on your header height
471+
const elementPosition = speakerSection.getBoundingClientRect().top;
472+
const offsetPosition = elementPosition + window.pageYOffset - headerOffset;
473+
474+
window.scrollTo({
475+
top: offsetPosition,
476+
behavior: 'smooth'
477+
});
478+
}
479+
} catch (error) {
480+
console.error('Error showing speaker details:', error);
481+
// Optional: Show user-friendly error message
482+
alert('Sorry, there was an error displaying the speaker details.');
483+
}
484+
}
443485
</script>

0 commit comments

Comments
 (0)