@@ -49,18 +49,21 @@ Here you can find insights about our Cloud Native Computing Linz meetups includi
49
49
</div >
50
50
</div >
51
51
52
- ### Top 15 Speakers
52
+ ### Recent Speakers (Last 15 Events)
53
53
<div class =" chart-container " >
54
54
<canvas id =" topSpeakersChart " ></canvas >
55
55
<div id =" topSpeakersFallback " style =" display : none ;" >
56
- <div class="chart-title">🎤 Top Speakers</div>
56
+ <div class="chart-title">🎤 Recent Speakers</div>
57
57
<table class="stats-table">
58
58
<thead>
59
- <tr><th>Speaker</th><th>Presentations</th><th>Visual</th></tr>
59
+ <tr><th>Speaker</th><th>Most Recent Event</th><th> Presentations</th><th>Visual</th></tr>
60
60
</thead>
61
61
<tbody>
62
+ {% comment %} Get the last 15 events (most recent) {% endcomment %}
63
+ {% assign recent_events = site.data.events | reverse | slice: 0, 15 %}
62
64
{% assign speakers = "" | split: "|" %}
63
- {% for event in site.data.events %}
65
+ {% assign speaker_events = "" | split: "|" %}
66
+ {% for event in recent_events %}
64
67
{% if event.talks %}
65
68
{% for talk in event.talks %}
66
69
{% if talk.speaker and talk.speaker != '' %}
@@ -76,6 +79,7 @@ Here you can find insights about our Cloud Native Computing Linz meetups includi
76
79
{% assign single_speaker = part | strip %}
77
80
{% if single_speaker != '' %}
78
81
{% assign speakers = speakers | push: single_speaker %}
82
+ {% assign speaker_events = speaker_events | push: single_speaker | append: '###' | append: event.date | append: '###' | append: event.title %}
79
83
{% endif %}
80
84
{% endfor %}
81
85
{% endif %}
@@ -86,27 +90,47 @@ Here you can find insights about our Cloud Native Computing Linz meetups includi
86
90
{% assign speaker_rows = "" | split: "|" %}
87
91
{% for speaker in unique_speakers %}
88
92
{% assign count = 0 %}
93
+ {% assign most_recent_date = '' %}
94
+ {% assign most_recent_title = '' %}
89
95
{% for s in speakers %}
90
96
{% if s == speaker %}
91
97
{% assign count = count | plus: 1 %}
92
98
{% endif %}
93
99
{% endfor %}
94
- {% assign speaker_rows = speaker_rows | push: speaker | append: '|||' | append: count %}
100
+ {% comment %} Find the most recent event for this speaker {% endcomment %}
101
+ {% for entry in speaker_events %}
102
+ {% assign parts = entry | split: '###' %}
103
+ {% if parts[0] == speaker %}
104
+ {% if most_recent_date == '' or parts[1] > most_recent_date %}
105
+ {% assign most_recent_date = parts[1] %}
106
+ {% assign most_recent_title = parts[2] %}
107
+ {% endif %}
108
+ {% endif %}
109
+ {% endfor %}
110
+ {% assign speaker_rows = speaker_rows | push: speaker | append: '|||' | append: count | append: '|||' | append: most_recent_date | append: '|||' | append: most_recent_title %}
95
111
{% endfor %}
96
- {% assign sorted_speaker_rows = speaker_rows | sort_natural | reverse %}
97
- {% for entry in sorted_speaker_rows %}
112
+ {% comment %} Sort by most recent date (descending) {% endcomment %}
113
+ {% assign sorted_speaker_rows = speaker_rows | sort %}
114
+ {% assign final_sorted_rows = "" | split: "|" %}
115
+ {% for row in sorted_speaker_rows %}
116
+ {% assign final_sorted_rows = final_sorted_rows | unshift: row %}
117
+ {% endfor %}
118
+ {% for entry in final_sorted_rows %}
98
119
{% assign parts = entry | split: '|||' %}
99
120
{% assign speaker = parts[0] %}
100
121
{% assign count = parts[1] %}
122
+ {% assign event_date = parts[2] %}
123
+ {% assign event_title = parts[3] %}
101
124
<tr>
102
125
<td>{{ speaker }}</td>
126
+ <td><strong>{{ event_date }}</strong><br><small>{{ event_title }}</small></td>
103
127
<td class="number-cell">{{ count }}</td>
104
128
<td><span class="host-bar" style="width: {{ count | times: 10 }}px;"></span> {{ count }}</td>
105
129
</tr>
106
130
{% endfor %}
107
131
</tbody>
108
132
</table>
109
- <div class="fallback-note">🎤 This data shows which speakers have presented most often at our events .</div>
133
+ <div class="fallback-note">🎤 This shows speakers from our 15 most recent events, sorted by their latest presentation date .</div>
110
134
</div >
111
135
</div >
112
136
@@ -328,9 +352,12 @@ function initializeChartsWithoutTime() {
328
352
const hostLabels = sortedHosts .map (([host ]) => host);
329
353
const hostData = sortedHosts .map (([, count ]) => count);
330
354
331
- // Top speakers data
355
+ // Recent speakers data (from last 15 events)
356
+ const recentEvents = events .slice (- 15 ); // Get last 15 events
332
357
const speakerCount = {};
333
- events .forEach (event => {
358
+ const speakerLastEvent = {};
359
+
360
+ recentEvents .forEach (event => {
334
361
if (event .talks && event .talks .length > 0 ) {
335
362
event .talks .forEach (talk => {
336
363
if (talk .speaker ) {
@@ -355,21 +382,29 @@ function initializeChartsWithoutTime() {
355
382
.map (s => s .trim ()) // Trim whitespace
356
383
.filter (s => s); // Remove empty strings
357
384
358
- // Count each speaker
385
+ // Count each speaker and track their most recent event
359
386
speakers .forEach (speaker => {
360
387
if (speaker) {
361
388
speakerCount[speaker] = (speakerCount[speaker] || 0 ) + 1 ;
389
+ // Update last event if this event is more recent
390
+ if (! speakerLastEvent[speaker] || event .date > speakerLastEvent[speaker]) {
391
+ speakerLastEvent[speaker] = event .date ;
392
+ }
362
393
}
363
394
});
364
395
}
365
396
});
366
397
}
367
398
});
368
399
369
- // Sort speakers by count desc
400
+ // Sort speakers by most recent event date (descending)
370
401
const sortedSpeakers = Object .entries (speakerCount)
371
- .sort ((a , b ) => b[1 ] - a[1 ])
372
- .slice (0 , 15 ); // Get top 20 speakers for better visualization
402
+ .sort ((a , b ) => {
403
+ const dateA = speakerLastEvent[a[0 ]];
404
+ const dateB = speakerLastEvent[b[0 ]];
405
+ return dateB .localeCompare (dateA); // Most recent first
406
+ })
407
+ .slice (0 , 15 ); // Get top 15 most recent speakers
373
408
const speakerLabels = sortedSpeakers .map (([speaker ]) => speaker);
374
409
const speakerData = sortedSpeakers .map (([, count ]) => count);
375
410
@@ -514,7 +549,7 @@ function initializeChartsWithoutTime() {
514
549
}
515
550
});
516
551
517
- // Top Speakers Chart
552
+ // Recent Speakers Chart
518
553
const speakersCtx = document .getElementById (' topSpeakersChart' ).getContext (' 2d' );
519
554
new Chart (speakersCtx, {
520
555
type: ' bar' ,
@@ -530,6 +565,13 @@ function initializeChartsWithoutTime() {
530
565
},
531
566
options: {
532
567
... commonOptions,
568
+ plugins: {
569
+ ... commonOptions .plugins ,
570
+ title: {
571
+ display: true ,
572
+ text: ' Recent Speakers (Last 15 Events)'
573
+ }
574
+ },
533
575
scales: {
534
576
y: {
535
577
beginAtZero: true ,
@@ -659,9 +701,12 @@ function initializeCharts() {
659
701
const hostLabels = sortedHosts .map (([host ]) => host);
660
702
const hostData = sortedHosts .map (([, count ]) => count);
661
703
662
- // Top speakers data
704
+ // Recent speakers data (from last 15 events)
705
+ const recentEvents = events .slice (- 15 ); // Get last 15 events
663
706
const speakerCount = {};
664
- events .forEach (event => {
707
+ const speakerLastEvent = {};
708
+
709
+ recentEvents .forEach (event => {
665
710
if (event .talks && event .talks .length > 0 ) {
666
711
event .talks .forEach (talk => {
667
712
if (talk .speaker ) {
@@ -681,21 +726,29 @@ function initializeCharts() {
681
726
.map (s => s .trim ())
682
727
.filter (s => s && s .length > 0 );
683
728
684
- // Count each speaker
729
+ // Count each speaker and track their most recent event
685
730
speakers .forEach (speaker => {
686
731
if (speaker) {
687
732
speakerCount[speaker] = (speakerCount[speaker] || 0 ) + 1 ;
733
+ // Update last event if this event is more recent
734
+ if (! speakerLastEvent[speaker] || event .date > speakerLastEvent[speaker]) {
735
+ speakerLastEvent[speaker] = event .date ;
736
+ }
688
737
}
689
738
});
690
739
}
691
740
});
692
741
}
693
742
});
694
743
695
- // Sort speakers by count desc
744
+ // Sort speakers by most recent event date (descending)
696
745
const sortedSpeakers = Object .entries (speakerCount)
697
- .sort ((a , b ) => b[1 ] - a[1 ])
698
- .slice (0 , 20 ); // Get top 20 speakers for better visualization
746
+ .sort ((a , b ) => {
747
+ const dateA = speakerLastEvent[a[0 ]];
748
+ const dateB = speakerLastEvent[b[0 ]];
749
+ return dateB .localeCompare (dateA); // Most recent first
750
+ })
751
+ .slice (0 , 15 ); // Get top 15 most recent speakers
699
752
const speakerLabels = sortedSpeakers .map (([speaker ]) => speaker);
700
753
const speakerData = sortedSpeakers .map (([, count ]) => count);
701
754
@@ -839,7 +892,7 @@ function initializeCharts() {
839
892
}
840
893
});
841
894
842
- // Top Speakers Chart
895
+ // Recent Speakers Chart
843
896
const speakersCtx = document .getElementById (' topSpeakersChart' ).getContext (' 2d' );
844
897
new Chart (speakersCtx, {
845
898
type: ' bar' ,
@@ -855,6 +908,13 @@ function initializeCharts() {
855
908
},
856
909
options: {
857
910
... commonOptions,
911
+ plugins: {
912
+ ... commonOptions .plugins ,
913
+ title: {
914
+ display: true ,
915
+ text: ' Recent Speakers (Last 15 Events)'
916
+ }
917
+ },
858
918
scales: {
859
919
y: {
860
920
beginAtZero: true ,
0 commit comments