Skip to content

Commit 8f58cb2

Browse files
Mazizovaclaude
andauthored
DuckDB × MySQL Day: share cover, Roman's talk title, registration widget pop-up (#110)
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
1 parent 8d6001c commit 8f58cb2

4 files changed

Lines changed: 94 additions & 6 deletions

File tree

‎assets/scss/_event-landing.scss‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,3 +376,56 @@
376376
.dmd-landing .dmd-hero-original .dmd-hero-desc{max-width:100%}
377377
.dmd-landing .dmd-hero-original .dmd-hero-art{margin-top:10px}}
378378
[data-theme="light"] .dmd-landing .dmd-hero-original .dmd-hero-desc{color:#64748b}
379+
380+
// Registration pop-up that embeds the external registration widget.
381+
.dmd-landing dialog.dmd-dialog-widget {
382+
width: #{"min(760px, calc(100% - 24px))"};
383+
max-width: none;
384+
max-height: #{"calc(100vh - 24px)"};
385+
padding: 0;
386+
overflow: hidden;
387+
}
388+
389+
.dmd-landing dialog.dmd-dialog-widget .dmd-close {
390+
position: absolute;
391+
top: 10px;
392+
right: 10px;
393+
z-index: 2;
394+
width: 32px;
395+
height: 32px;
396+
padding: 0;
397+
line-height: 30px;
398+
font-size: 22px;
399+
color: #ffffff;
400+
background: rgba(21, 27, 43, 0.85);
401+
border-radius: 50%;
402+
}
403+
404+
.dmd-landing .dmd-hopin-container {
405+
height: #{"min(82vh, 820px)"};
406+
background: #ffffff;
407+
}
408+
409+
.dmd-landing .dmd-hopin-container iframe {
410+
display: block;
411+
width: 100%;
412+
height: 100%;
413+
border: 0;
414+
}
415+
416+
// On phones the registration form gets the whole screen.
417+
@media (max-width: 640px) {
418+
.dmd-landing dialog.dmd-dialog-widget {
419+
width: 100%;
420+
max-width: 100%;
421+
height: 100%;
422+
max-height: 100%;
423+
margin: 0;
424+
border-radius: 0;
425+
border: 0;
426+
}
427+
428+
.dmd-landing dialog.dmd-dialog-widget .dmd-hopin-container {
429+
height: 100%;
430+
}
431+
}
197 KB
Loading

‎content/events/duckdb-mysql-day/index.md‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,13 @@ hero_description: "A one-day online conference on bringing fast analytics to MyS
55
date: 2026-11-17
66
url: "/events/duckdb-mysql-day/"
77
layout: "duckdb-mysql-day"
8-
# Set this to the real registration link when it exists; until then the
9-
# Register buttons open a "details coming soon" dialog.
8+
# Image used when the page is shared on social networks.
9+
images:
10+
- cover.jpg
11+
# Registration widget (RingCentral Events). Every Register button opens it in a
12+
# pop-up. If it is ever empty, registration_url is used as a plain link, and if
13+
# that is empty too the buttons open a "details coming soon" dialog.
14+
registration_widget: "https://registration.events.ringcentral.com/widgets/registration/duckdb-x-mysql-day?widget_id=TWGSBGd5cEk7rk05fmBYgD7SA"
1015
registration_url: ""
1116
strip:
1217
- {icon: "↗", label: "SAVE THE DATE", value: "November 17, 2026"}
@@ -31,7 +36,7 @@ schedule:
3136
- {est: "10:00–10:45", cet: "16:00–16:45", track: "Opening talk", title: "Twenty Years of Bolting Analytics onto MySQL: Will DuckDB Finally Make It HTAP?", speaker: "Vadim Tkachenko"}
3237
- {est: "10:45–11:30", cet: "16:45–17:30", track: "Columnar engines", title: "When MySQL meets DuckDB: Best practices for columnar engines on MySQL", speaker: "Zongzhi Chen"}
3338
- {est: "11:30–12:15", cet: "17:30–18:15", track: "Analytical replication", title: "MySQL analytical replication with DuckDB and Parquet files", speaker: "Daniel Guzmán Burgos"}
34-
- {est: "12:15–13:00", cet: "18:15–19:00", track: "More to come", title: "Talk title to be announced", speaker: "Roman Nozdrin"}
39+
- {est: "12:15–13:00", cet: "18:15–19:00", track: "Storage engines", title: "When the Sea Lion Learns to Quack: DuckDB as a MariaDB Storage Engine", speaker: "Roman Nozdrin"}
3540
schedule_note: "Tentative timings; subject to change. Register to get the final schedule as soon as it’s published."
3641
topic_tags: ["DuckDB", "MySQL", "HTAP", "Parquet", "Columnar engines", "Open source analytics"]
3742
register:

‎layouts/events/duckdb-mysql-day.html‎

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
its styles live in assets/scss/_event-landing.scss, scoped under
44
.dmd-landing (and every class prefixed dmd-) so nothing leaks into the rest
55
of the site. Text, speakers and the schedule come from the page's front
6-
matter. While registration_url is empty, every Register button opens the
7-
"coming soon" dialog; set it and they become plain links.
6+
matter. Every Register button opens a pop-up with the registration widget
7+
(registration_widget in front matter, loaded on first open). Without a
8+
widget, registration_url turns them into plain links, and without that they
9+
open a "coming soon" dialog.
810
*/}}
911
{{ define "main" }}
1012
{{ $reg := .Params.registration_url }}
13+
{{ if .Params.registration_widget }}{{ $reg = "" }}{{ end }}
1114
{{ $page := . }}
1215
<div class="dmd-landing">
1316

@@ -99,7 +102,34 @@ <h1>DuckDB <span class="dmd-cross">×</span><br>MySQL <span class="dmd-gradient"
99102
</div>
100103
</section>
101104

102-
{{ if not $reg }}
105+
{{ $widget := .Params.registration_widget }}
106+
{{ if $widget }}
107+
<dialog id="registration" class="dmd-dialog-widget" aria-label="Register for {{ .Title }}">
108+
<button class="dmd-close" aria-label="Close registration form">×</button>
109+
<div class="dmd-hopin-container" id="registration-widget" data-src="{{ $widget }}"></div>
110+
</dialog>
111+
<script>
112+
(function () {
113+
var dialog = document.getElementById('registration');
114+
var box = document.getElementById('registration-widget');
115+
if (!dialog || !dialog.showModal) return;
116+
function load() {
117+
if (box.firstChild) return;
118+
// Load the registration form on first open only, and pass any query
119+
// string (e.g. UTM tags) through to it.
120+
var iframe = document.createElement('iframe');
121+
iframe.src = box.getAttribute('data-src') + window.location.search.replace('?', '&');
122+
iframe.title = 'Registration form';
123+
box.appendChild(iframe);
124+
}
125+
document.querySelectorAll('[data-register]').forEach(function (b) {
126+
b.addEventListener('click', function () { load(); dialog.showModal(); });
127+
});
128+
dialog.querySelector('.dmd-close').addEventListener('click', function () { dialog.close(); });
129+
dialog.addEventListener('click', function (e) { if (e.target === dialog) dialog.close(); });
130+
})();
131+
</script>
132+
{{ else if not $reg }}
103133
<dialog id="registration">
104134
<button class="dmd-close" aria-label="Close registration information">×</button>
105135
<p class="dmd-eyebrow">DUCKDB × MYSQL DAY</p>

0 commit comments

Comments
 (0)