Skip to content

Commit a978202

Browse files
authored
chore: Adds DevSprint to schedule page
1 parent 8836e17 commit a978202

File tree

2 files changed

+63
-26
lines changed

2 files changed

+63
-26
lines changed

src/program/schedule.njk

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ layout: base.njk
1313
</div>
1414

1515
<!-- Fetch Active days -->
16-
{% set active_days = schedule.schedule.conference.days.slice(0,3) %}
16+
{% set active_days = schedule.schedule.conference.days.slice(0,4) %}
1717

1818
<!-- Dynamically display Schedule Grid -->
1919
<div class="pt-20 grid gap-0 md:gap-6" style="grid-template-columns: repeat({{ active_days | length }}, minmax(0, 1fr));">
@@ -33,7 +33,20 @@ layout: base.njk
3333
<span class="block sm:inline-block">{{ dayInfo.label.split(' ')[0] }}</span>
3434
<span class="inline-block">{{ dayInfo.label.split(' ').slice(1).join(' ') }}</span>
3535
</p>
36-
<p class="text-center mb-0.5 font-semibold">{{ dayInfo.monthDay }}</p>
36+
{% set parts = dayInfo.monthDay.split(' ') %}
37+
{% set month_full = parts[0] %}
38+
{% set day_number = parts[1] %}
39+
40+
{% if month_full.length > 4 %}
41+
{% set month_short = month_full | truncate(4, true, '') %}
42+
{% else %}
43+
{% set month_short = month_full %}
44+
{% endif %}
45+
46+
<p class="text-center mb-0.5 font-semibold">
47+
<span class="hidden md:inline">{{ month_full }} {{ day_number }}</span>
48+
<span class="inline md:hidden">{{ month_short }} {{ day_number }}</span>
49+
</p>
3750
<p class="text-center font-medium text-[#4662FF] pb-4">{{ dayInfo.dayName|upper }}</p>
3851
</div>
3952
{%- endcall %}
@@ -399,4 +412,6 @@ layout: base.njk
399412
</div>
400413
</div>
401414

402-
<script src="{{ env.baseUrl ~ 'js/schedule.js'}}" defer></script>
415+
<script>const baseUrl = "{{ env.baseUrl }}";</script>
416+
<script src="{{ env.baseUrl ~ 'js/schedule.js' }}" defer></script>
417+

src/static/js/schedule.js

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,61 @@ document.addEventListener('DOMContentLoaded', () => {
1717
contents.forEach(content => content.classList.add('hidden'));
1818
};
1919

20-
// Initial state: Highlight the first card and show the first schedule
21-
if (cards.length > 0 && contents.length > 0) {
22-
selectedCard = cards[0];
23-
const firstContentId = selectedCard.getAttribute('data-schedule');
20+
const highlight = (card) => {
21+
const div = card.querySelector('.card-grid');
22+
div.classList.add('pycon-bg-lime');
23+
div.style.backgroundColor = '#CDFF89';
24+
};
25+
26+
const setInitialState = () => {
27+
if (!cards.length || !contents.length) return;
28+
resetCardBackgrounds();
29+
hideAllSchedules();
30+
31+
// Always show FIRST card + its content
32+
const firstCard = cards[0];
33+
const firstContentId = firstCard.getAttribute('data-schedule');
34+
35+
highlight(firstCard);
36+
document.getElementById(firstContentId)?.classList.remove('hidden');
37+
selectedCard = firstCard;
38+
};
39+
40+
// Initial load
41+
setInitialState();
2442

25-
// Highlight the first card
26-
const firstHighlightDiv = selectedCard.querySelector('.card-grid');
27-
firstHighlightDiv.classList.add('bg:pycon-bg-lime');
28-
firstHighlightDiv.style.backgroundColor = '#CDFF89';
43+
// If coming back via back/forward cache, reload once to reset UI to first card
44+
window.addEventListener('pageshow', (evt) => {
45+
const nav = performance.getEntriesByType('navigation')[0];
46+
const isBFCache = evt.persisted || (nav && nav.type === 'back_forward');
2947

30-
// Show the first schedule
31-
document.getElementById(firstContentId).classList.remove('hidden');
32-
}
48+
if (isBFCache && !sessionStorage.getItem('reloadedOnce')) {
49+
sessionStorage.setItem('reloadedOnce', '1');
50+
window.location.reload();
51+
} else if (!isBFCache) {
52+
// Normal load after hard reload; clear the flag
53+
sessionStorage.removeItem('reloadedOnce');
54+
}
55+
});
3356

34-
// Add event listeners to all cards
57+
// Click handlers
3558
cards.forEach(card => {
3659
const highlightDiv = card.querySelector('.card-grid');
3760

3861
card.addEventListener('click', () => {
39-
// Reset previous selection
40-
resetCardBackgrounds();
41-
hideAllSchedules();
62+
const scheduleId = card.getAttribute('data-schedule');
4263

43-
// Highlight the clicked card
44-
highlightDiv.classList.add('pycon-bg-lime');
45-
highlightDiv.style.backgroundColor = '#CDFF89'; // Lime background
64+
// Redirect-only card
65+
if (scheduleId === '4') {
66+
window.location.href = `${baseUrl}program/dev-sprint`;
67+
return;
68+
}
4669

47-
// Show the corresponding schedule
48-
const scheduleId = card.getAttribute('data-schedule');
49-
document.getElementById(scheduleId).classList.remove('hidden');
70+
resetCardBackgrounds();
71+
hideAllSchedules();
5072

51-
// Update the selected card
73+
highlight(card);
74+
document.getElementById(scheduleId)?.classList.remove('hidden');
5275
selectedCard = card;
5376
});
5477

@@ -66,4 +89,3 @@ document.addEventListener('DOMContentLoaded', () => {
6689
});
6790
});
6891
});
69-

0 commit comments

Comments
 (0)