|
| 1 | +{{/* Announcement pop-up for the featured event (DuckDB × MySQL Day). Slides in at |
| 2 | + the bottom left of any page after 10 seconds, links to the event page, and |
| 3 | + stays dismissed for a week once closed or clicked. Not rendered on the event |
| 4 | + page itself or once the event date has passed. Text comes from the event |
| 5 | + page's front matter; timing and dismissal live in the inline script. */}} |
| 6 | +{{ $ev := site.GetPage "/events/duckdb-mysql-day" }} |
| 7 | +{{ if and $ev (now.Before ($ev.Date.AddDate 0 0 1)) (ne $.RelPermalink $ev.RelPermalink) }} |
| 8 | +{{ $cover := $ev.Resources.GetMatch "cover.jpg" }} |
| 9 | +<aside class="ev-popup" id="event-popup" hidden aria-label="Event announcement" data-id="duckdb-mysql-day" data-end="{{ $ev.Date.AddDate 0 0 1 | time.Format "2006-01-02T00:00:00Z" }}"> |
| 10 | + <button type="button" class="ev-popup-close" aria-label="Close announcement">×</button> |
| 11 | + <a href="{{ $ev.RelPermalink }}" class="ev-popup-link"> |
| 12 | + {{ with $cover }}{{ $img := .Resize "640x q80" }}<img src="{{ $img.RelPermalink }}" width="{{ $img.Width }}" height="{{ $img.Height }}" alt="" class="ev-popup-img" loading="lazy">{{ end }} |
| 13 | + <span class="ev-popup-body"> |
| 14 | + <span class="ev-popup-kicker">{{ $ev.Date.Format "January 2" }} · {{ with $ev.Params.home_meta }}{{ . }}{{ else }}Online{{ end }}</span> |
| 15 | + <span class="ev-popup-title">{{ $ev.Title }}</span> |
| 16 | + <span class="ev-popup-text">A one-day online conference on fast analytics for MySQL.</span> |
| 17 | + <span class="ev-popup-cta">See the speakers & register →</span> |
| 18 | + </span> |
| 19 | + </a> |
| 20 | +</aside> |
| 21 | +<script> |
| 22 | + (function () { |
| 23 | + var el = document.getElementById('event-popup'); |
| 24 | + if (!el) return; |
| 25 | + var key = 'ev-popup-dismissed-' + el.getAttribute('data-id'); |
| 26 | + var week = 7 * 24 * 60 * 60 * 1000; |
| 27 | + try { |
| 28 | + var t = parseInt(localStorage.getItem(key), 10); |
| 29 | + if (t && Date.now() - t < week) return; |
| 30 | + } catch (e) {} |
| 31 | + var end = Date.parse(el.getAttribute('data-end')); |
| 32 | + if (end && Date.now() > end) return; |
| 33 | + |
| 34 | + function dismiss() { |
| 35 | + try { localStorage.setItem(key, String(Date.now())); } catch (e) {} |
| 36 | + el.classList.remove('is-visible'); |
| 37 | + setTimeout(function () { el.hidden = true; }, 400); |
| 38 | + } |
| 39 | + el.querySelector('.ev-popup-close').addEventListener('click', dismiss); |
| 40 | + el.querySelector('.ev-popup-link').addEventListener('click', function () { |
| 41 | + try { localStorage.setItem(key, String(Date.now())); } catch (e) {} |
| 42 | + }); |
| 43 | + el.addEventListener('keydown', function (e) { if (e.key === 'Escape') dismiss(); }); |
| 44 | + |
| 45 | + setTimeout(function () { |
| 46 | + el.hidden = false; |
| 47 | + requestAnimationFrame(function () { |
| 48 | + requestAnimationFrame(function () { el.classList.add('is-visible'); }); |
| 49 | + }); |
| 50 | + }, 10000); |
| 51 | + })(); |
| 52 | +</script> |
| 53 | +{{ end }} |
0 commit comments