From 6d09d9b8e17b85235edea5ca56fb5ebbd50dff9e Mon Sep 17 00:00:00 2001
From: David Stap
Date: Fri, 1 Aug 2025 15:21:21 +0200
Subject: [PATCH 1/7] added functionality to display plenary talks
---
bin/create_hugo_data.py | 107 ++++++++++++++
data/xml/2021.acl.xml | 50 +++----
data/xml/2021.emnlp.xml | 10 +-
data/xml/2021.naacl.xml | 24 ++--
data/xml/2022.acl.xml | 40 +++---
data/xml/2022.emnlp.xml | 16 +--
data/xml/2022.naacl.xml | 14 +-
data/xml/2023.acl.xml | 22 +--
data/xml/2023.eacl.xml | 14 +-
data/xml/2023.emnlp.xml | 14 +-
data/xml/2024.eacl.xml | 12 +-
data/xml/2024.naacl.xml | 10 +-
hugo/content/talks/_content.gotmpl | 10 ++
hugo/content/talks/_index.md | 4 +
hugo/layouts/events/single.html | 12 ++
hugo/layouts/talks/single.html | 218 +++++++++++++++++++++++++++++
16 files changed, 464 insertions(+), 113 deletions(-)
create mode 100644 hugo/content/talks/_content.gotmpl
create mode 100644 hugo/content/talks/_index.md
create mode 100644 hugo/layouts/talks/single.html
diff --git a/bin/create_hugo_data.py b/bin/create_hugo_data.py
index 40de2f6866..00c5d5436f 100755
--- a/bin/create_hugo_data.py
+++ b/bin/create_hugo_data.py
@@ -493,6 +493,43 @@ def export_events(anthology, builddir, dryrun):
data["title"] = event.title.as_text()
else:
data["title"] = f"{anthology.venues[main_venue].name} ({data['year']})"
+
+ # Add talks data if available
+ if event.talks:
+ talks_data = []
+ for idx, talk in enumerate(event.talks, 1):
+ talk_id = f"{event.id}.talk-{idx}"
+ talk_data = {
+ "id": talk_id,
+ "title": talk.title.as_text(),
+ "title_html": remove_extra_whitespace(talk.title.as_html(allow_url=False)),
+ "speakers": [], # Process speakers differently
+ "type": talk.type,
+ }
+ # Process speakers - NameSpecification objects contain Name objects
+ for speaker in talk.speakers:
+ speaker_dict = {
+ "id": speaker.id if speaker.id else "",
+ "full_name": speaker.name.as_first_last(),
+ "first": speaker.name.first if speaker.name.first else "",
+ "last": speaker.name.last,
+ }
+ talk_data["speakers"].append(speaker_dict)
+ # Add video URL if available
+ if "video" in talk.attachments:
+ talk_data["video_url"] = talk.attachments["video"].url
+ # Add other attachments
+ attachments = []
+ for att_type, attachment in talk.attachments.items():
+ if att_type != "video":
+ attachments.append({
+ "type": att_type,
+ "url": attachment.url
+ })
+ if attachments:
+ talk_data["attachments"] = attachments
+ talks_data.append(talk_data)
+ data["talks"] = talks_data
all_events[event.id] = data
@@ -501,6 +538,75 @@ def export_events(anthology, builddir, dryrun):
f.write(ENCODER.encode(all_events))
+def export_talks(anthology, builddir, dryrun):
+ # Export individual talk data files
+ all_talks = {}
+ print("Exporting talks...")
+
+ os.makedirs(f"{builddir}/data/talks", exist_ok=True)
+
+ for event in anthology.events.values():
+ if not event.talks:
+ continue
+
+ for idx, talk in enumerate(event.talks, 1):
+ talk_id = f"{event.id}.talk-{idx}"
+
+ # Create talk data
+ talk_data = {
+ "id": talk_id,
+ "event_id": event.id,
+ "event_title": event.title.as_text() if event.title else f"{event.id}",
+ "title": talk.title.as_text(),
+ "title_html": remove_extra_whitespace(talk.title.as_html(allow_url=False)),
+ "speakers": [],
+ "type": talk.type,
+ }
+
+ # Process speakers
+ for speaker in talk.speakers:
+ speaker_data = {
+ "id": speaker.id if speaker.id else "",
+ "full_name": speaker.name.as_first_last(),
+ "first": speaker.name.first if speaker.name.first else "",
+ "last": speaker.name.last,
+ }
+ talk_data["speakers"].append(speaker_data)
+
+ # Add video URL if available
+ if "video" in talk.attachments:
+ talk_data["video_url"] = talk.attachments["video"].url
+ talk_data["video_name"] = talk.attachments["video"].name
+
+ # Add other attachments
+ attachments = []
+ for att_type, attachment in talk.attachments.items():
+ if att_type != "video":
+ attachments.append({
+ "type": att_type,
+ "url": attachment.url,
+ "name": attachment.name if hasattr(attachment, 'name') else att_type
+ })
+ if attachments:
+ talk_data["attachments"] = attachments
+
+ # Add location and dates from event
+ if event.location:
+ talk_data["location"] = event.location
+ if event.dates:
+ talk_data["dates"] = event.dates
+
+ all_talks[talk_id] = talk_data
+
+ # Write individual talk file
+ if not dryrun:
+ with open(f"{builddir}/data/talks/{talk_id}.json", "wb") as f:
+ f.write(ENCODER.encode(talk_data))
+
+ # Note: Not creating combined talks.json to avoid Hugo data collisions
+ # Individual talk files in build/data/talks/ are sufficient
+
+
def export_sigs(anthology, builddir, dryrun):
all_sigs = {}
print("Exporting SIGs...")
@@ -551,6 +657,7 @@ def export_anthology(anthology, builddir, clean=False, dryrun=False):
export_people(anthology, builddir, dryrun)
export_venues(anthology, builddir, dryrun)
export_events(anthology, builddir, dryrun)
+ export_talks(anthology, builddir, dryrun)
export_sigs(anthology, builddir, dryrun)
diff --git a/data/xml/2021.acl.xml b/data/xml/2021.acl.xml
index c5cbc6e24d..7666f5c51b 100644
--- a/data/xml/2021.acl.xml
+++ b/data/xml/2021.acl.xml
@@ -12778,17 +12778,17 @@ The source code has been made available at \url{https://github.com/liam0949/DCLO
Keynote 1: Advancing Technological Equity in Speech and Language Processing
HelenMeng
- 2021.acl.keynote1.mp4
+ 2021.acl-keynote.1.mp4
Keynote 2: Learning and Processing Language from Wearables: Opportunities and Challenges
AlejandrinaCristia
- 2021.acl.keynote2.mp4
+ 2021.acl-keynote.2.mp4
Keynote 3: Reliable Characterizations of NLP Systems as a Social Responsibility
ChristopherPotts
- 2021.acl.keynote3.mp4
+ 2021.acl-keynote.3.mp4
Opening Session
@@ -12796,90 +12796,90 @@ The source code has been made available at \url{https://github.com/liam0949/DCLO
RobertoNavigli
FeiXia
WenjieLi
- 2021.acl.opening-session.mp4
+ 2021.acl-opening.1.mp4
Presidential Address
RadaMihalcea
- 2021.acl.presidential-address.mp4
+ 2021.acl-presidential.1.mp4
Business Meeting: Business Manager Report
PriscillaRasmussen
- 2021.acl.business-meeting1.mp4
+ 2021.acl-business.1.mp4
Business Meeting: Conference Officer Report
YusukeMiyao
- 2021.acl.business-meeting2.mp4
+ 2021.acl-business.2.mp4
Business Meeting: EACL Report
ShulyWintner
- 2021.acl.business-meeting3.mp4
+ 2021.acl-business.3.mp4
Business Meeting: NAACL Report
ColinCherry
- 2021.acl.business-meeting4.mp4
+ 2021.acl-business.4.mp4
Business Meeting: CL Report
Hwee TouNg
- 2021.acl.business-meeting5.mp4
+ 2021.acl-business.5.mp4
Business Meeting: TACL Report
BrianRoark
- 2021.acl.business-meeting6.mp4
+ 2021.acl-business.6.mp4
Business Meeting: ACL Rolling Review Report
AmandaStent
- 2021.acl.business-meeting7.mp4
+ 2021.acl-business.7.mp4
Business Meeting: ACL Anthology Report
MattPost
- 2021.acl.business-meeting8.mp4
+ 2021.acl-business.8.mp4
Business Meeting: Professional Conduct Committee Report
GraemeHirst
Emily M.Bender
- 2021.acl.business-meeting9.mp4
+ 2021.acl-business.9.mp4
Business Meeting: Publicity Director Report
BarbaraPlank
SarvnazKarimi
CarolineLawrence
- 2021.acl.business-meeting10.mp4
+ 2021.acl-business.10.mp4
Business Meeting: Secretary's Report
ShiqiZhao
- 2021.acl.business-meeting11.mp4
+ 2021.acl-business.11.mp4
Business Meeting: Treasurer's Report
DavidYarowsky
- 2021.acl.business-meeting12.mp4
+ 2021.acl-business.12.mp4
Business Meeting: Sponsorship Director Report
ChrisCallison-Burch
- 2021.acl.business-meeting13.mp4
+ 2021.acl-business.13.mp4
Business Meeting: ACL 2023 Call for Bids
TimothyBaldwin
- 2021.acl.business-meeting111.mp4
+ 2021.acl-business.14.mp4
Business Meeting: ACL 2024 Call for Bids
IrynaGurevych
- 2021.acl.business-meeting121.mp4
+ 2021.acl-business.15.mp4
Panel: Green NLP
@@ -12894,23 +12894,23 @@ The source code has been made available at \url{https://github.com/liam0949/DCLO
MonaDiab
IrynaGurevych
YueZhang
- 2021.acl.panel.mp4
+ 2021.acl-panel.1.mp4
Distinguished Service Awards and Test of Time Awards Session
RadaMihalcea
- 2021.acl.test-of-time-award.mp4
+ 2021.acl-award.1.mp4
Lifetime Achievement Award Session
RadaMihalcea
JunichiTsujii
- 2021.acl.lifetime-achievement-award.mp4
+ 2021.acl-award.2.mp4
Best Papers Awards Session
TimothyBaldwin
- 2021.acl.best-papers.mp4
+ 2021.acl-award.3.mp4
Closing Session
@@ -12925,7 +12925,7 @@ The source code has been made available at \url{https://github.com/liam0949/DCLO
RobertoNavigli
FeiXia
MaggieLi
- 2021.acl.closing-session.mp4
+ 2021.acl-closing.1.mp4
2021.findings-acl
diff --git a/data/xml/2021.emnlp.xml b/data/xml/2021.emnlp.xml
index e48c767357..d05f7a928a 100644
--- a/data/xml/2021.emnlp.xml
+++ b/data/xml/2021.emnlp.xml
@@ -14122,17 +14122,17 @@
Keynote 1: Where next? Towards multi-text consumption via three inspired research lines
IdoDagan
- 2021.emnlp.keynote1.mp4
+ 2021.emnlp-keynote.1.mp4
Keynote 2: The language system in the human brain
EvelinaFedorenko
- 2021.emnlp.keynote2.mp4
+ 2021.emnlp-keynote.2.mp4
Keynote 3: LT4All!? Rethinking the Agenda
StevenBird
- 2021.emnlp.keynote3.mp4
+ 2021.emnlp-keynote.3.mp4
Opening Session
@@ -14140,7 +14140,7 @@
XuanjingHuang
LuciaSpecia
ScottYih
- 2021.emnlp.opening-session.mp4
+ 2021.emnlp-opening.1.mp4
Best Papers Awards Session and Closing Session
@@ -14151,7 +14151,7 @@
Key-SunChoi
Noah A.Smith
Chia-HuiChang
- 2021.emnlp.closing-session.mp4
+ 2021.emnlp-closing.1.mp4
2021.findings-emnlp
diff --git a/data/xml/2021.naacl.xml b/data/xml/2021.naacl.xml
index 6519010387..bef33e0595 100644
--- a/data/xml/2021.naacl.xml
+++ b/data/xml/2021.naacl.xml
@@ -8719,32 +8719,32 @@
Keynote 1: Humans Learn From Task Descriptions and So Should Our Models
HinrichSchütze
- 2021.naacl.keynote1.mp4
+ 2021.naacl-keynote.1.mp4
Keynote 2: From Disembodied to Embodied Multimodal Learning
DhruvBatra
- 2021.naacl.keynote2.mp4
+ 2021.naacl-keynote.2.mp4
Keynote 3: Generating Reality: Technical and Social Explorations in Generative Machine Learning Research
ShakirMohamed
- 2021.naacl.keynote3.mp4
+ 2021.naacl-keynote.3.mp4
Keynote 4: Moving the Needle in NLP Technology for the Processing of Code-switched Language
ThamarSolorio
- 2021.naacl.keynote4.mp4
+ 2021.naacl-keynote.4.mp4
Industry Track Keynote 1: Project Debater - from grand challenge to business applications, behind the scenes and lessons learned
AyaSoffer
- 2021.naacl.keynote_industry1.mp4
+ 2021.naacl-keynote.5.mp4
Industry Track Keynote 2: Semantic Scholar - Advanced NLP to Accelerate Scientific Research
DanWeld
- 2021.naacl.keynote_industry2.mp4
+ 2021.naacl-keynote.6.mp4
Opening Session
@@ -8752,7 +8752,7 @@
AnnaRumshisky
LukeZettlemoyer
DilekHakkani-Tur
- 2021.naacl.opening-session.mp4
+ 2021.naacl-opening.1.mp4
Business Meeting
@@ -8765,7 +8765,7 @@
AnnaRumshisky
Marie-FrancineMoens
BernardoMagnini
- 2021.naacl.business-meeting.mp4
+ 2021.naacl-business.1.mp4
Panel: Careers in NLP
@@ -8774,7 +8774,7 @@
JimmyLin
SebastianRuder
PhilipResnik
- 2021.naacl.panel1.mp4
+ 2021.naacl-panel.1.mp4
Panel: Startups in NLP
@@ -8783,12 +8783,12 @@
NasrinMostafazadeh
KieranSnyder
AlonLavie
- 2021.naacl.panel2.mp4
+ 2021.naacl-panel.2.mp4
Best Papers Awards Session
AnnaRumshisky
- 2021.naacl.best-papers.mp4
+ 2021.naacl-award.1.mp4
Closing Session
@@ -8798,7 +8798,7 @@
Marie-FrancineMoens
DanRoth
BernardoMagnini
- 2021.naacl.closing-session.mp4
+ 2021.naacl-closing.1.mp4
2021.alvr-1
diff --git a/data/xml/2022.acl.xml b/data/xml/2022.acl.xml
index caab86ff77..960f62fba7 100644
--- a/data/xml/2022.acl.xml
+++ b/data/xml/2022.acl.xml
@@ -12382,13 +12382,13 @@ in the Case of Unambiguous Gender
Keynote 1: Language in the human brain
Angela D.Friederici
- 2022.acl.keynote1.mp4
+ 2022.acl-keynote.1.mp4
Keynote 2: Fire-side Chat with Barbara Grosz and Yejin Choi search lectures
YejinChoi
BarbaraGrosz
- 2022.acl.keynote2.mp4
+ 2022.acl-keynote.2.mp4
The Next Big Ideas Talks
@@ -12399,7 +12399,7 @@ in the Case of Unambiguous Gender
HangLi
DanRoth
ThamarSolorio
- 2022.acl.next-big-ideas.mp4
+ 2022.acl-talk.1.mp4
Spotlight Talks for Young Rising Stars
@@ -12408,7 +12408,7 @@ in the Case of Unambiguous Gender
SebastianRuder
SwabhaSwayamdipta
DiyiYang
- 2022.acl.spotlight-talks.mp4
+ 2022.acl-talk.2.mp4
Opening Session and Presidential Address
@@ -12420,79 +12420,79 @@ in the Case of Unambiguous Gender
SmarandaMuresan
MonaDiab
TimothyBaldwin
- 2022.acl.opening-session.mp4
+ 2022.acl-opening.1.mp4
Business Meeting: TACL Report
BrianRoark
- 2022.acl.business-meeting1.mp4
+ 2022.acl-business.1.mp4
Business Meeting: Secretary's Report
ShiqiZhao
- 2022.acl.business-meeting2.mp4
+ 2022.acl-business.2.mp4
Business Meeting: EACL Report
ShulyWintner
- 2022.acl.business-meeting3.mp4
+ 2022.acl-business.3.mp4
Business Meeting: ACL 2024 Coordinating Committee Report
IrynaGurevych
- 2022.acl.business-meeting4.mp4
+ 2022.acl-business.4.mp4
Business Meeting: NAACL Chair Report
LucianaBenotti
- 2022.acl.business-meeting5.mp4
+ 2022.acl-business.5.mp4
Business Meeting: Sponsorship Director Report
ChrisCallison-Burch
- 2022.acl.business-meeting6.mp4
+ 2022.acl-business.6.mp4
Business Meeting: Professional Conduct Committee Report
GraemeHirst
Emily M.Bender
- 2022.acl.business-meeting7.mp4
+ 2022.acl-business.7.mp4
Business Meeting: Ethics Committee Report
Min-YenKan
- 2022.acl.business-meeting8.mp4
+ 2022.acl-business.8.mp4
Business Meeting: Conference Officer Report
YusukeMiyao
- 2022.acl.business-meeting9.mp4
+ 2022.acl-business.9.mp4
Business Meeting: Publicity Director Report
BarbaraPlank
- 2022.acl.business-meeting10.mp4
+ 2022.acl-business.10.mp4
Business Meeting: ACL 2025 Call for Bids
Emily M.Bender
- 2022.acl.business-meeting11.mp4
+ 2022.acl-business.11.mp4
Awards Ceremony
TimothyBaldwin
YusukeMiyao
- 2022.acl.awards-ceremony.mp4
+ 2022.acl-award.1.mp4
EMNLP 2022 Information Session
NizarHabash
- 2022.acl.emnlp-2022.mp4
+ 2022.acl-session.1.mp4
Best Papers Awards Session
BernardoMagnini
- 2022.acl.best-papers.mp4
+ 2022.acl-award.2.mp4
Closing Session
@@ -12503,7 +12503,7 @@ in the Case of Unambiguous Gender
AlessandroMoschitti
YulanHe
MonaDiab
- 2022.acl.closing-session.mp4
+ 2022.acl-closing.1.mp4
2022.findings-acl
diff --git a/data/xml/2022.emnlp.xml b/data/xml/2022.emnlp.xml
index 7d2f677f28..6b213e545b 100644
--- a/data/xml/2022.emnlp.xml
+++ b/data/xml/2022.emnlp.xml
@@ -13126,24 +13126,24 @@
Keynote 1: The multimodal language faculty and the visual languages of comics
NeilCohn
- 2022.emnlp.keynote1.mp4
+ 2022.emnlp-keynote.1.mp4
Keynote 2: Towards a Foundation for AGI
GaryMarcus
- 2022.emnlp.keynote2.mp4
+ 2022.emnlp-keynote.2.mp4
Industry Track Keynote: Takeaways from a systematic study of 75K models on Hugging Face
NazneenRajani
- 2022.emnlp.keynote-industry.mp4
+ 2022.emnlp-keynote.3.mp4
Opening Session
Noah A.Smith
YoavGoldberg
NizarHabash
- 2022.emnlp.opening-session.mp4
+ 2022.emnlp-opening.1.mp4
Business Meeting
@@ -13154,7 +13154,7 @@
AliceOh
MonojitChoudhury
NizarHabash
- 2022.emnlp.business-meeting.mp4
+ 2022.emnlp-business.1.mp4
Panel: Careers in NLP
@@ -13162,7 +13162,7 @@
HatemHaddad
AsliCelikyilmaz
YunyaoLi
- 2022.emnlp.panel1.mp4
+ 2022.emnlp-panel.1.mp4
Panel: Conference Theme and Beyond
@@ -13172,7 +13172,7 @@
YuliaTsvetkov
AndreasVlachos
Noah A.Smith
- 2022.emnlp.panel2.mp4
+ 2022.emnlp-panel.2.mp4
Best Papers Awards Session and Closing Session
@@ -13182,7 +13182,7 @@
YangLiu
TimBaldwin
NizarHabash
- 2022.emnlp.closing-session.mp4
+ 2022.emnlp-closing.1.mp4
2022.findings-emnlp
diff --git a/data/xml/2022.naacl.xml b/data/xml/2022.naacl.xml
index 7d54d817b4..b83c772867 100644
--- a/data/xml/2022.naacl.xml
+++ b/data/xml/2022.naacl.xml
@@ -8688,12 +8688,12 @@
Keynote 1: Shaping Technology with Moral Imagination: Leveraging the Machinery of Value Sensitive Design
BatyaFriedman
- 2022.naacl.keynote1.mp4
+ 2022.naacl-keynote.1.mp4
Keynote 2: NLP in Mexican Spanish: One of many stories
ManuelMontes-y-Gómez
- 2022.naacl.keynote2.mp4
+ 2022.naacl-keynote.2.mp4
Opening Session
@@ -8701,12 +8701,12 @@
MarineCarpuat
IvanMeza-Ruiz
Marie-Catherinede Marneffe
- 2022.naacl.opening-session.mp4
+ 2022.naacl-opening.1.mp4
Business Meeting: Diversity and Inclusion Financial Accessibility Report
NedjmaOusidhoum
- 2022.naacl.business-meeting.mp4
+ 2022.naacl-business.1.mp4
Panel: The Place of Linguistics and Symbolic Structures
@@ -8715,12 +8715,12 @@
ChittaBaral
ChristopherManning
DanRoth
- 2022.naacl.panel.mp4
+ 2022.naacl-panel.1.mp4
Best Papers Awards Session
Marie-Catherinede Marneffe
- 2022.naacl.best-papers.mp4
+ 2022.naacl-award.1.mp4
Closing Session
@@ -8729,7 +8729,7 @@
Emily M.Bender
DilekHakkani-Tür
ChristopherManning
- 2022.naacl.closing-session.mp4
+ 2022.naacl-closing.1.mp4
2022.findings-naacl
diff --git a/data/xml/2023.acl.xml b/data/xml/2023.acl.xml
index b8b0ce4458..a6d5c1098d 100644
--- a/data/xml/2023.acl.xml
+++ b/data/xml/2023.acl.xml
@@ -17854,17 +17854,17 @@
Keynote 1: Two Paths to Intelligence
GeoffreyHinton
- 2023.acl.keynote1.mp4
+ 2023.acl-keynote.1.mp4
Keynote 2: Large Language Models as Cultural Technologies: Imitation and Innovation in Children and Models
AlisonGopnik
- 2023.acl.keynote2.mp4
+ 2023.acl-keynote.2.mp4
Lifetime Achievement Award: My Big, Fat 50 Year Journey
MarthaPalmer
- 2023.acl.keynote3.mp4
+ 2023.acl-keynote.3.mp4
Opening Session and Presidential Address
@@ -17873,19 +17873,19 @@
AnnaRogers
JordanBoyd-Graber
IrynaGurevych
- 2023.acl.opening-session.mp4
+ 2023.acl-opening.1.mp4
Business Meeting
IrynaGurevych
DavidYarowski
Emily M.Bender
- 2023.acl.business-meeting.mp4
+ 2023.acl-business.1.mp4
ARR Info Session
Mausam
- 2023.acl.arr-info-session.mp4
+ 2023.acl-session.1.mp4
Memorial for Dragomir Radev
@@ -17895,7 +17895,7 @@
LoriLevin
CathyFinegan-Dollak
AlexanderFabbri
- 2023.acl.memorial-dragomir-radev.mp4
+ 2023.acl-session.2.mp4
Panel: Large Language Models
@@ -17904,7 +17904,7 @@
RoySchwartz
DiyiYang
IrynaGurevych
- 2023.acl.panel.mp4
+ 2023.acl-panel.1.mp4
Lifetime Achievement Award Session
@@ -17915,12 +17915,12 @@
RichardSocher
IreneLangkilde
HinrichSchütze
- 2023.acl.lifetime-achievement-award.mp4
+ 2023.acl-award.1.mp4
Best Papers Awards Session
AnnaRogers
- 2023.acl.best-papers.mp4
+ 2023.acl-award.2.mp4
Closing Session
@@ -17931,7 +17931,7 @@
NaokiOkazaki
KevinDuh
ClaireGardent
- 2023.acl.closing-session.mp4
+ 2023.acl-closing.1.mp4
2023.findings-acl
diff --git a/data/xml/2023.eacl.xml b/data/xml/2023.eacl.xml
index f555bcac6f..fa8df69426 100644
--- a/data/xml/2023.eacl.xml
+++ b/data/xml/2023.eacl.xml
@@ -4530,17 +4530,17 @@
Keynote 1: Going beyond the benefits of scale by reasoning about data
EdwardGrefenstette
- 2023.eacl.keynote1.mp4
+ 2023.eacl-keynote.1.mp4
Keynote 2: Chatbots for Good and Evil
KevinMunger
- 2023.eacl.keynote2.mp4
+ 2023.eacl-keynote.2.mp4
Keynote 3: Language Use in Embodied AI
JoyceChai
- 2023.eacl.keynote3.mp4
+ 2023.eacl-keynote.3.mp4
Opening Session
@@ -4550,7 +4550,7 @@
KathleenMcKeown
RobertoBasili
MarkoTadić
- 2023.eacl.opening-session.mp4
+ 2023.eacl-opening.1.mp4
Business Meeting
@@ -4559,7 +4559,7 @@
HaimingLiu
AndreasVlachos
IsabelleAugenstein
- 2023.eacl.business-meeting.mp4
+ 2023.eacl-business.1.mp4
Panel: Low-resource Languages in NLP Products
@@ -4568,14 +4568,14 @@
OleksiiMolchanovskyi
OlesDobosevych
MarianaRomanyshyn
- 2023.eacl.panel.mp4
+ 2023.eacl-panel.1.mp4
Best Papers Awards Session and Closing Session
AlessandroMoschitti
IsabelleAugenstein
AndreasVlachos
- 2023.eacl.closing-session.mp4
+ 2023.eacl-closing.1.mp4
2023.findings-eacl
diff --git a/data/xml/2023.emnlp.xml b/data/xml/2023.emnlp.xml
index 515a21fce9..da72ef3609 100644
--- a/data/xml/2023.emnlp.xml
+++ b/data/xml/2023.emnlp.xml
@@ -16728,17 +16728,17 @@
Keynote 1: Human-Centric Natural Language Processing
JongPark
- 2023.emnlp.keynote1.mp4
+ 2023.emnlp-keynote.1.mp4
Keynote 2: From Speech to Emotion to Mood: Mental Health Modeling in Real-World Environments.
Emily MowerProvost
- 2023.emnlp.keynote2.mp4
+ 2023.emnlp-keynote.2.mp4
Keynote 3: Academic NLP research in the Age of LLMs: Nothing but blue skies!
ChristopherManning
- 2023.emnlp.keynote3.mp4
+ 2023.emnlp-keynote.3.mp4
Opening Session
@@ -16747,7 +16747,7 @@
JuanPino
KalikaBali
HaizhouLi
- 2023.emnlp.opening-session.mp4
+ 2023.emnlp-opening.1.mp4
Business Meeting
@@ -16755,7 +16755,7 @@
DavidYarowsky
JenniferRachford
IsabelleAugenstein
- 2023.emnlp.business-meeting.mp4
+ 2023.emnlp-business.1.mp4
Panel: Beyond Text: Inclusive Human Communication with Language Technology
@@ -16764,7 +16764,7 @@
ChengkuoLee
María InésTorres
MonojitChoudhury
- 2023.emnlp.panel.mp4
+ 2023.emnlp-panel.1.mp4
Best Papers Awards Session and Closing Session
@@ -16772,7 +16772,7 @@
MichaelStrube
YujiMatsumoto
JordanBoyd-Graber
- 2023.emnlp.closing-session.mp4
+ 2023.emnlp-closing.1.mp4
2023.findings-emnlp
diff --git a/data/xml/2024.eacl.xml b/data/xml/2024.eacl.xml
index 7b92708fc5..558f99e09b 100644
--- a/data/xml/2024.eacl.xml
+++ b/data/xml/2024.eacl.xml
@@ -3935,12 +3935,12 @@
Keynote 1: Quality Data for LLMs: Challenges and Opportunities for NLP
HinrichSchütze
- 2024.eacl.keynote1.mp4
+ 2024.eacl-keynote.1.mp4
Keynote 2: Prompting is not all you need! Or why Structure and Representations still matter in NLP
MirellaLapata
- 2024.eacl.keynote2.mp4
+ 2024.eacl-keynote.2.mp4
Opening Session
@@ -3948,7 +3948,7 @@
MatthewPurver
ClaudiaBorg
HaimingLiu
- 2024.eacl.opening-session.mp4
+ 2024.eacl-opening.1.mp4
Business Meeting
@@ -3956,12 +3956,12 @@
RobertoBasili
HaimingLiu
MatthewPurver
- 2024.eacl.business-meeting.mp4
+ 2024.eacl-business.1.mp4
Best Papers Awards Session
BarbaraPlank
- 2024.eacl.best-papers.mp4
+ 2024.eacl-award.1.mp4
Closing Session
@@ -3970,7 +3970,7 @@
PreslavNakov
MarkFinlayson
BarbaraPlank
- 2024.eacl.closing-session.mp4
+ 2024.eacl-closing.1.mp4
2024.findings-eacl
diff --git a/data/xml/2024.naacl.xml b/data/xml/2024.naacl.xml
index 210b691b9e..1dc0c82f26 100644
--- a/data/xml/2024.naacl.xml
+++ b/data/xml/2024.naacl.xml
@@ -9425,12 +9425,12 @@
Keynote 1: Harnessing the Power of LLMs to Vitalize Indigenous Languages
ClaudioPinhanez
- 2024.naacl.keynote1.mp4
+ 2024.naacl-keynote.1.mp4
Keynote 2: Distributional Semantics: What do large language models have to say?
SeanaCoulson
- 2024.naacl.keynote2.mp4
+ 2024.naacl-keynote.2.mp4
Opening Session
@@ -9438,7 +9438,7 @@
KevinDuh
StevenBethard
HelenaGomez
- 2024.naacl.opening-session.mp4
+ 2024.naacl-opening.1.mp4
Business Meeting
@@ -9447,7 +9447,7 @@
JonMay
KevinDuh
JessyLi
- 2024.naacl.business-meeting.mp4
+ 2024.naacl-business.1.mp4
Panel: LLMs and their Impact on Education
@@ -9460,7 +9460,7 @@
Best Papers Awards Session
StevenBethard
- 2024.naacl.best-papers.mp4
+ 2024.naacl-award.1.mp4
Closing Session
diff --git a/hugo/content/talks/_content.gotmpl b/hugo/content/talks/_content.gotmpl
new file mode 100644
index 0000000000..d81913101d
--- /dev/null
+++ b/hugo/content/talks/_content.gotmpl
@@ -0,0 +1,10 @@
+{{ range $talk_id, $talk := .Site.Data.talks }}
+ {{ $page := dict
+ "kind" "page"
+ "path" $talk_id
+ "slug" $talk_id
+ "params" (dict "talk_id" $talk_id)
+ "title" $talk.title
+ }}
+ {{ $.AddPage $page }}
+{{ end }}
\ No newline at end of file
diff --git a/hugo/content/talks/_index.md b/hugo/content/talks/_index.md
new file mode 100644
index 0000000000..f7f0286458
--- /dev/null
+++ b/hugo/content/talks/_index.md
@@ -0,0 +1,4 @@
+---
+title: "Talks"
+type: "page"
+---
\ No newline at end of file
diff --git a/hugo/layouts/events/single.html b/hugo/layouts/events/single.html
index 92576d0fa3..b7a6c6f740 100644
--- a/hugo/layouts/events/single.html
+++ b/hugo/layouts/events/single.html
@@ -28,6 +28,18 @@ Links
{{ end }}
{{ end }}
+ {{ if $event.talks }}
+ Plenaries
+
+ {{ range $event.talks }}
+ -
+ {{ .title }}
+ {{ with .type }}{{ . | humanize }}{{ end }}
+ {{ if .video_url }} Video{{ end }}
+
+ {{ end }}
+
+ {{ end }}
Volumes
{{ range $volumes }}
diff --git a/hugo/layouts/talks/single.html b/hugo/layouts/talks/single.html
new file mode 100644
index 0000000000..8cc95fcac7
--- /dev/null
+++ b/hugo/layouts/talks/single.html
@@ -0,0 +1,218 @@
+{{ define "meta" }}
+{{ $talk := index .Site.Data.talks .Params.talk_id }}
+
+{{ range $talk.speakers }}
+
+{{ end }}
+{{ with $talk.event_id }}
+ {{ $event := index $.Site.Data.events . }}
+
+{{ end }}
+{{ with $talk.dates }}{{ end }}
+{{ with $talk.video_url }}
+
+{{ end }}
+
+
+
+
+
+{{ end }}
+
+{{ define "javascript" }}
+{{ $talk := index .Site.Data.talks .Params.talk_id }}
+
+
+
+{{ end }}
+
+{{ define "main" }}
+{{ $talk_id := .Params.talk_id }}
+{{ $talk := index .Site.Data.talks $talk_id }}
+
+
+
+ {{ with $talk.video_url }}
+ {{ $talk.title_html | safeHTML }}
+ {{ else }}
+ {{ $talk.title_html | safeHTML }}
+ {{ end }}
+
+ {{ with $talk.speakers }}
+
+ {{ $len := (len .) }}
+ {{ range $index, $speaker := . }}
+ {{ if $speaker.id }}
+ {{ partial "author_link.html" (dict "ctx" $ "person" $speaker) | chomp }}
+ {{ else }}
+ {{ $speaker.full_name }}
+ {{ end }}{{ if ne (add $index 1) $len }}, {{ end }}
+ {{ end }}
+
+ {{ end }}
+ {{ if $talk.type }}
+
{{ $talk.type | humanize }}
+ {{ end }}
+
+
+
+
+ {{ with $talk.video_url }}
+
+
+
Video
+
+
+
+
+
+ {{ end }}
+
+
+ - Talk ID:
+ - {{ $talk_id }}
+
+ - Event:
+ -
+ {{ with $talk.event_id }}
+ {{ $event_page := printf "/events/%s" . }}
+ {{ $talk.event_title }}
+ {{ end }}
+
+
+ {{ with $talk.location }}
+ - Location:
+ - {{ . }}
+ {{ end }}
+
+ {{ with $talk.dates }}
+ - Date:
+ - {{ . }}
+ {{ end }}
+
+ - URL:
+ - {{ .Permalink }}
+
+ - Cite (BibTeX):
+ -
+
+
+
+ {{ with $talk.video_url }}
+ - Video:
+ - {{ . }}
+ {{ end }}
+
+ {{ range $talk.attachments }}
+ - {{ humanize .type }}:
+ -
+
+ {{ .name }}
+
+
+ {{ end }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $authors := slice }}
+ {{ range $talk.speakers }}
+ {{ $authors = $authors | append .full_name }}
+ {{ end }}
+
@misc{{ printf "{%s" ($talk_id | replace "." "-") }},
+ title = {{ printf "{%s}" $talk.title }},
+ author = {{ printf "{%s}" (delimit $authors " and ") }},
+ booktitle = {{ printf "{%s}" $talk.event_title }},
+ year = {{ printf "{%s}" (substr $talk.event_id 0 4) }},
+ {{ with $talk.location }}address = {{ printf "{%s}" . }},{{ end }}
+ url = {{ printf "{%s}" $.Permalink }},
+ {{ with $talk.video_url }}video = {{ printf "{%s}" . }}{{ end }}
+}
+
+
+
+
+
+
+{{ end }}
\ No newline at end of file
From c28b268ce338998a8f28d2ab5bc8f545d0b2b6b2 Mon Sep 17 00:00:00 2001
From: David Stap
Date: Fri, 1 Aug 2025 15:36:47 +0200
Subject: [PATCH 2/7] fix reformatting issues
---
bin/create_hugo_data.py | 53 +++++++++++++++++-------------
hugo/content/talks/_content.gotmpl | 2 +-
hugo/content/talks/_index.md | 2 +-
hugo/layouts/talks/single.html | 2 +-
4 files changed, 33 insertions(+), 26 deletions(-)
diff --git a/bin/create_hugo_data.py b/bin/create_hugo_data.py
index 00c5d5436f..b3440b87c2 100755
--- a/bin/create_hugo_data.py
+++ b/bin/create_hugo_data.py
@@ -493,7 +493,7 @@ def export_events(anthology, builddir, dryrun):
data["title"] = event.title.as_text()
else:
data["title"] = f"{anthology.venues[main_venue].name} ({data['year']})"
-
+
# Add talks data if available
if event.talks:
talks_data = []
@@ -502,7 +502,9 @@ def export_events(anthology, builddir, dryrun):
talk_data = {
"id": talk_id,
"title": talk.title.as_text(),
- "title_html": remove_extra_whitespace(talk.title.as_html(allow_url=False)),
+ "title_html": remove_extra_whitespace(
+ talk.title.as_html(allow_url=False)
+ ),
"speakers": [], # Process speakers differently
"type": talk.type,
}
@@ -522,10 +524,7 @@ def export_events(anthology, builddir, dryrun):
attachments = []
for att_type, attachment in talk.attachments.items():
if att_type != "video":
- attachments.append({
- "type": att_type,
- "url": attachment.url
- })
+ attachments.append({"type": att_type, "url": attachment.url})
if attachments:
talk_data["attachments"] = attachments
talks_data.append(talk_data)
@@ -542,27 +541,29 @@ def export_talks(anthology, builddir, dryrun):
# Export individual talk data files
all_talks = {}
print("Exporting talks...")
-
+
os.makedirs(f"{builddir}/data/talks", exist_ok=True)
-
+
for event in anthology.events.values():
if not event.talks:
continue
-
+
for idx, talk in enumerate(event.talks, 1):
talk_id = f"{event.id}.talk-{idx}"
-
+
# Create talk data
talk_data = {
"id": talk_id,
"event_id": event.id,
"event_title": event.title.as_text() if event.title else f"{event.id}",
"title": talk.title.as_text(),
- "title_html": remove_extra_whitespace(talk.title.as_html(allow_url=False)),
+ "title_html": remove_extra_whitespace(
+ talk.title.as_html(allow_url=False)
+ ),
"speakers": [],
"type": talk.type,
}
-
+
# Process speakers
for speaker in talk.speakers:
speaker_data = {
@@ -572,37 +573,43 @@ def export_talks(anthology, builddir, dryrun):
"last": speaker.name.last,
}
talk_data["speakers"].append(speaker_data)
-
+
# Add video URL if available
if "video" in talk.attachments:
talk_data["video_url"] = talk.attachments["video"].url
talk_data["video_name"] = talk.attachments["video"].name
-
+
# Add other attachments
attachments = []
for att_type, attachment in talk.attachments.items():
if att_type != "video":
- attachments.append({
- "type": att_type,
- "url": attachment.url,
- "name": attachment.name if hasattr(attachment, 'name') else att_type
- })
+ attachments.append(
+ {
+ "type": att_type,
+ "url": attachment.url,
+ "name": (
+ attachment.name
+ if hasattr(attachment, 'name')
+ else att_type
+ ),
+ }
+ )
if attachments:
talk_data["attachments"] = attachments
-
+
# Add location and dates from event
if event.location:
talk_data["location"] = event.location
if event.dates:
talk_data["dates"] = event.dates
-
+
all_talks[talk_id] = talk_data
-
+
# Write individual talk file
if not dryrun:
with open(f"{builddir}/data/talks/{talk_id}.json", "wb") as f:
f.write(ENCODER.encode(talk_data))
-
+
# Note: Not creating combined talks.json to avoid Hugo data collisions
# Individual talk files in build/data/talks/ are sufficient
diff --git a/hugo/content/talks/_content.gotmpl b/hugo/content/talks/_content.gotmpl
index d81913101d..7ceafcd4a6 100644
--- a/hugo/content/talks/_content.gotmpl
+++ b/hugo/content/talks/_content.gotmpl
@@ -7,4 +7,4 @@
"title" $talk.title
}}
{{ $.AddPage $page }}
-{{ end }}
\ No newline at end of file
+{{ end }}
diff --git a/hugo/content/talks/_index.md b/hugo/content/talks/_index.md
index f7f0286458..d2a8d8c707 100644
--- a/hugo/content/talks/_index.md
+++ b/hugo/content/talks/_index.md
@@ -1,4 +1,4 @@
---
title: "Talks"
type: "page"
----
\ No newline at end of file
+---
diff --git a/hugo/layouts/talks/single.html b/hugo/layouts/talks/single.html
index 8cc95fcac7..6747f05a5d 100644
--- a/hugo/layouts/talks/single.html
+++ b/hugo/layouts/talks/single.html
@@ -215,4 +215,4 @@ Export citation
-{{ end }}
\ No newline at end of file
+{{ end }}
From e0ff6e172d7c11b8a84496527523ac23113a53fb Mon Sep 17 00:00:00 2001
From: David Stap
Date: Fri, 1 Aug 2025 16:12:33 +0200
Subject: [PATCH 3/7] fix Talk ID in URL
---
bin/create_hugo_data.py | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/bin/create_hugo_data.py b/bin/create_hugo_data.py
index b3440b87c2..caa81f528f 100755
--- a/bin/create_hugo_data.py
+++ b/bin/create_hugo_data.py
@@ -498,7 +498,19 @@ def export_events(anthology, builddir, dryrun):
if event.talks:
talks_data = []
for idx, talk in enumerate(event.talks, 1):
- talk_id = f"{event.id}.talk-{idx}"
+ # Generate talk ID from video filename if available, otherwise use default pattern
+ if "video" in talk.attachments and talk.attachments["video"].name:
+ # Extract talk ID from video filename like "2022.acl-keynote.2.mp4"
+ video_name = talk.attachments["video"].name
+ if video_name.endswith(".mp4"):
+ # Remove .mp4 extension to get the talk ID
+ talk_id = video_name[:-4]
+ else:
+ talk_id = video_name
+ else:
+ # Fallback to sequential numbering if no video
+ talk_id = f"{event.id}.talk-{idx}"
+
talk_data = {
"id": talk_id,
"title": talk.title.as_text(),
@@ -549,7 +561,18 @@ def export_talks(anthology, builddir, dryrun):
continue
for idx, talk in enumerate(event.talks, 1):
- talk_id = f"{event.id}.talk-{idx}"
+ # Generate talk ID from video filename if available, otherwise use default pattern
+ if "video" in talk.attachments and talk.attachments["video"].name:
+ # Extract talk ID from video filename like "2022.acl-keynote.2.mp4"
+ video_name = talk.attachments["video"].name
+ if video_name.endswith(".mp4"):
+ # Remove .mp4 extension to get the talk ID
+ talk_id = video_name[:-4]
+ else:
+ talk_id = video_name
+ else:
+ # Fallback to sequential numbering if no video
+ talk_id = f"{event.id}.talk-{idx}"
# Create talk data
talk_data = {
From c48a07680eb3120b6fcc78fc3e3fe6c2d7e198c7 Mon Sep 17 00:00:00 2001
From: David Stap
Date: Fri, 1 Aug 2025 16:46:41 +0200
Subject: [PATCH 4/7] save indentation level
---
bin/create_hugo_data.py | 86 ++++++++++++++++++++---------------------
1 file changed, 43 insertions(+), 43 deletions(-)
diff --git a/bin/create_hugo_data.py b/bin/create_hugo_data.py
index caa81f528f..7cf01002ef 100755
--- a/bin/create_hugo_data.py
+++ b/bin/create_hugo_data.py
@@ -495,51 +495,51 @@ def export_events(anthology, builddir, dryrun):
data["title"] = f"{anthology.venues[main_venue].name} ({data['year']})"
# Add talks data if available
- if event.talks:
- talks_data = []
- for idx, talk in enumerate(event.talks, 1):
- # Generate talk ID from video filename if available, otherwise use default pattern
- if "video" in talk.attachments and talk.attachments["video"].name:
- # Extract talk ID from video filename like "2022.acl-keynote.2.mp4"
- video_name = talk.attachments["video"].name
- if video_name.endswith(".mp4"):
- # Remove .mp4 extension to get the talk ID
- talk_id = video_name[:-4]
- else:
- talk_id = video_name
+ talks_data = []
+ for idx, talk in enumerate(event.talks or [], 1):
+ # Generate talk ID from video filename if available, otherwise use default pattern
+ if "video" in talk.attachments and talk.attachments["video"].name:
+ # Extract talk ID from video filename like "2022.acl-keynote.2.mp4"
+ video_name = talk.attachments["video"].name
+ if video_name.endswith(".mp4"):
+ # Remove .mp4 extension to get the talk ID
+ talk_id = video_name[:-4]
else:
- # Fallback to sequential numbering if no video
- talk_id = f"{event.id}.talk-{idx}"
-
- talk_data = {
- "id": talk_id,
- "title": talk.title.as_text(),
- "title_html": remove_extra_whitespace(
- talk.title.as_html(allow_url=False)
- ),
- "speakers": [], # Process speakers differently
- "type": talk.type,
+ talk_id = video_name
+ else:
+ # Fallback to sequential numbering if no video
+ talk_id = f"{event.id}.talk-{idx}"
+
+ talk_data = {
+ "id": talk_id,
+ "title": talk.title.as_text(),
+ "title_html": remove_extra_whitespace(
+ talk.title.as_html(allow_url=False)
+ ),
+ "speakers": [], # Process speakers differently
+ "type": talk.type,
+ }
+ # Process speakers - NameSpecification objects contain Name objects
+ for speaker in talk.speakers:
+ speaker_dict = {
+ "id": speaker.id if speaker.id else "",
+ "full_name": speaker.name.as_first_last(),
+ "first": speaker.name.first if speaker.name.first else "",
+ "last": speaker.name.last,
}
- # Process speakers - NameSpecification objects contain Name objects
- for speaker in talk.speakers:
- speaker_dict = {
- "id": speaker.id if speaker.id else "",
- "full_name": speaker.name.as_first_last(),
- "first": speaker.name.first if speaker.name.first else "",
- "last": speaker.name.last,
- }
- talk_data["speakers"].append(speaker_dict)
- # Add video URL if available
- if "video" in talk.attachments:
- talk_data["video_url"] = talk.attachments["video"].url
- # Add other attachments
- attachments = []
- for att_type, attachment in talk.attachments.items():
- if att_type != "video":
- attachments.append({"type": att_type, "url": attachment.url})
- if attachments:
- talk_data["attachments"] = attachments
- talks_data.append(talk_data)
+ talk_data["speakers"].append(speaker_dict)
+ # Add video URL if available
+ if "video" in talk.attachments:
+ talk_data["video_url"] = talk.attachments["video"].url
+ # Add other attachments
+ attachments = []
+ for att_type, attachment in talk.attachments.items():
+ if att_type != "video":
+ attachments.append({"type": att_type, "url": attachment.url})
+ if attachments:
+ talk_data["attachments"] = attachments
+ talks_data.append(talk_data)
+ if talks_data:
data["talks"] = talks_data
all_events[event.id] = data
From b724e5db5e85e57ffb411f5907e4b4b13d3cfe8d Mon Sep 17 00:00:00 2001
From: David Stap
Date: Fri, 1 Aug 2025 16:54:30 +0200
Subject: [PATCH 5/7] simplify using person_to_dict()
---
bin/create_hugo_data.py | 18 ++++++------------
hugo/layouts/talks/single.html | 8 ++++----
2 files changed, 10 insertions(+), 16 deletions(-)
diff --git a/bin/create_hugo_data.py b/bin/create_hugo_data.py
index 7cf01002ef..2b82b16ee5 100755
--- a/bin/create_hugo_data.py
+++ b/bin/create_hugo_data.py
@@ -521,12 +521,9 @@ def export_events(anthology, builddir, dryrun):
}
# Process speakers - NameSpecification objects contain Name objects
for speaker in talk.speakers:
- speaker_dict = {
- "id": speaker.id if speaker.id else "",
- "full_name": speaker.name.as_first_last(),
- "first": speaker.name.first if speaker.name.first else "",
- "last": speaker.name.last,
- }
+ speaker_dict = person_to_dict(
+ speaker.id if speaker.id else "", speaker.name
+ )
talk_data["speakers"].append(speaker_dict)
# Add video URL if available
if "video" in talk.attachments:
@@ -589,12 +586,9 @@ def export_talks(anthology, builddir, dryrun):
# Process speakers
for speaker in talk.speakers:
- speaker_data = {
- "id": speaker.id if speaker.id else "",
- "full_name": speaker.name.as_first_last(),
- "first": speaker.name.first if speaker.name.first else "",
- "last": speaker.name.last,
- }
+ speaker_data = person_to_dict(
+ speaker.id if speaker.id else "", speaker.name
+ )
talk_data["speakers"].append(speaker_data)
# Add video URL if available
diff --git a/hugo/layouts/talks/single.html b/hugo/layouts/talks/single.html
index 6747f05a5d..b7b52f38c8 100644
--- a/hugo/layouts/talks/single.html
+++ b/hugo/layouts/talks/single.html
@@ -2,7 +2,7 @@
{{ $talk := index .Site.Data.talks .Params.talk_id }}
{{ range $talk.speakers }}
-
+
{{ end }}
{{ with $talk.event_id }}
{{ $event := index $.Site.Data.events . }}
@@ -16,7 +16,7 @@
-
+
{{ end }}
{{ define "javascript" }}
@@ -89,7 +89,7 @@
{{ if $speaker.id }}
{{ partial "author_link.html" (dict "ctx" $ "person" $speaker) | chomp }}
{{ else }}
- {{ $speaker.full_name }}
+ {{ $speaker.full }}
{{ end }}{{ if ne (add $index 1) $len }}, {{ end }}
{{ end }}
@@ -195,7 +195,7 @@ Export citation
{{ $authors := slice }}
{{ range $talk.speakers }}
- {{ $authors = $authors | append .full_name }}
+ {{ $authors = $authors | append .full }}
{{ end }}
@misc{{ printf "{%s" ($talk_id | replace "." "-") }},
title = {{ printf "{%s}" $talk.title }},
From fa3debb2b411309f4b051dd153e36685d19a30e5 Mon Sep 17 00:00:00 2001
From: David Stap
Date: Fri, 1 Aug 2025 17:06:11 +0200
Subject: [PATCH 6/7] standardize talk attachment structure to match paper
attachments
---
bin/create_hugo_data.py | 16 +++++++++-------
hugo/layouts/talks/single.html | 2 +-
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/bin/create_hugo_data.py b/bin/create_hugo_data.py
index 2b82b16ee5..2738a9449e 100755
--- a/bin/create_hugo_data.py
+++ b/bin/create_hugo_data.py
@@ -532,7 +532,13 @@ def export_events(anthology, builddir, dryrun):
attachments = []
for att_type, attachment in talk.attachments.items():
if att_type != "video":
- attachments.append({"type": att_type, "url": attachment.url})
+ attachments.append(
+ {
+ "filename": attachment.name,
+ "type": att_type.capitalize(),
+ "url": attachment.url,
+ }
+ )
if attachments:
talk_data["attachments"] = attachments
talks_data.append(talk_data)
@@ -602,13 +608,9 @@ def export_talks(anthology, builddir, dryrun):
if att_type != "video":
attachments.append(
{
- "type": att_type,
+ "filename": attachment.name,
+ "type": att_type.capitalize(),
"url": attachment.url,
- "name": (
- attachment.name
- if hasattr(attachment, 'name')
- else att_type
- ),
}
)
if attachments:
diff --git a/hugo/layouts/talks/single.html b/hugo/layouts/talks/single.html
index b7b52f38c8..c5924eb43f 100644
--- a/hugo/layouts/talks/single.html
+++ b/hugo/layouts/talks/single.html
@@ -156,7 +156,7 @@ Video
{{ humanize .type }}:
- {{ .name }}
+ {{ .filename }}
{{ end }}
From f41df5c396771ed0ee97d90061a8887baac817ac Mon Sep 17 00:00:00 2001
From: David Stap
Date: Fri, 1 Aug 2025 17:22:36 +0200
Subject: [PATCH 7/7] replace individual talk files with combined talks.json +
fix speaker processing bug
---
bin/create_hugo_data.py | 24 +++++++-----------------
1 file changed, 7 insertions(+), 17 deletions(-)
diff --git a/bin/create_hugo_data.py b/bin/create_hugo_data.py
index 2738a9449e..e52cb0f1f2 100755
--- a/bin/create_hugo_data.py
+++ b/bin/create_hugo_data.py
@@ -519,11 +519,9 @@ def export_events(anthology, builddir, dryrun):
"speakers": [], # Process speakers differently
"type": talk.type,
}
- # Process speakers - NameSpecification objects contain Name objects
+ # Process speakers - NameSpecification objects
for speaker in talk.speakers:
- speaker_dict = person_to_dict(
- speaker.id if speaker.id else "", speaker.name
- )
+ speaker_dict = person_to_dict(speaker.id if speaker.id else "", speaker)
talk_data["speakers"].append(speaker_dict)
# Add video URL if available
if "video" in talk.attachments:
@@ -553,12 +551,10 @@ def export_events(anthology, builddir, dryrun):
def export_talks(anthology, builddir, dryrun):
- # Export individual talk data files
+ # Export talks data
all_talks = {}
print("Exporting talks...")
- os.makedirs(f"{builddir}/data/talks", exist_ok=True)
-
for event in anthology.events.values():
if not event.talks:
continue
@@ -592,9 +588,7 @@ def export_talks(anthology, builddir, dryrun):
# Process speakers
for speaker in talk.speakers:
- speaker_data = person_to_dict(
- speaker.id if speaker.id else "", speaker.name
- )
+ speaker_data = person_to_dict(speaker.id if speaker.id else "", speaker)
talk_data["speakers"].append(speaker_data)
# Add video URL if available
@@ -624,13 +618,9 @@ def export_talks(anthology, builddir, dryrun):
all_talks[talk_id] = talk_data
- # Write individual talk file
- if not dryrun:
- with open(f"{builddir}/data/talks/{talk_id}.json", "wb") as f:
- f.write(ENCODER.encode(talk_data))
-
- # Note: Not creating combined talks.json to avoid Hugo data collisions
- # Individual talk files in build/data/talks/ are sufficient
+ if not dryrun:
+ with open(f"{builddir}/data/talks.json", "wb") as f:
+ f.write(ENCODER.encode(all_talks))
def export_sigs(anthology, builddir, dryrun):