£8
Access to the full workshop
), so it runs on every page. * * Any link to https://admin.southlondonacro.co.uk/book/… opens in a pop-up * instead of a new page. Without this script (or with JavaScript off) the * same links just open the booking page — nothing breaks. * * Book the next jam: https://admin.southlondonacro.co.uk/book/jam/lsbu-jam * Book a specific date: https://admin.southlondonacro.co.uk/book/jam/lsbu-jam?on=2026-10-17 * * The booking page talks back with three messages (admin/lib/book/embed.ts): * slac:height resize the pop-up to fit * slac:navigate card payment: send the whole window to Stripe * slac:close the "Done" button after a booking */ (function () { var ORIGIN = window.SLAC_BOOKING_ORIGIN || 'https://admin.southlondonacro.co.uk' if (window.__slacBookingPopup) return window.__slacBookingPopup = true function build() { var css = '#slac-book{border:0;padding:0;width:min(1120px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 32px);' + 'border-radius:20px;overflow:hidden;background:#fff;box-shadow:0 30px 80px rgba(20,8,12,.35)}' + '#slac-book::backdrop{background:rgba(20,8,12,.55);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}' + '#slac-book-bar{display:flex;justify-content:flex-end;padding:10px 10px 0}' + '#slac-book-close{all:unset;cursor:pointer;width:36px;height:36px;border-radius:999px;display:grid;place-items:center;' + 'font:600 22px/1 system-ui,sans-serif;color:#1d1b25;background:rgba(0,0,0,.06)}' + '#slac-book-close:hover{background:rgba(0,0,0,.12)}#slac-book-close:focus-visible{outline:2px solid #e11f26;outline-offset:2px}' + '#slac-book-frame{display:block;width:100%;border:0;height:70dvh;max-height:calc(100dvh - 90px);background:#fff}' + '@media (max-width:640px){#slac-book{width:100vw;height:100dvh;max-height:100dvh;margin:0;border-radius:0}' + '#slac-book-frame{height:calc(100dvh - 46px)!important;max-height:none}}' var style = document.createElement('style') style.textContent = css document.head.appendChild(style) var dialog = document.createElement('dialog') dialog.id = 'slac-book' dialog.setAttribute('aria-label', 'Book with South London Acro') dialog.innerHTML = '
' + '' document.body.appendChild(dialog) return dialog } var dialog = null function frame() { return document.getElementById('slac-book-frame') } function open(url) { if (!dialog) { dialog = build() document.getElementById('slac-book-close').addEventListener('click', function () { dialog.close() }) dialog.addEventListener('click', function (e) { if (e.target === dialog) dialog.close() }) dialog.addEventListener('close', function () { frame().src = 'about:blank' document.documentElement.style.overflow = '' }) } if (typeof dialog.showModal !== 'function') { window.location.href = url; return } frame().src = url document.documentElement.style.overflow = 'hidden' dialog.showModal() } document.addEventListener('click', function (e) { if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return var a = e.target && e.target.closest ? e.target.closest('a[href]') : null if (!a || a.href.indexOf(ORIGIN + '/book/') !== 0) return e.preventDefault() open(a.href) }) window.addEventListener('message', function (e) { if (e.origin !== ORIGIN || !e.data || typeof e.data !== 'object') return if (e.data.type === 'slac:height' && typeof e.data.height === 'number' && window.innerWidth > 640) { frame().style.height = Math.max(360, Math.min(e.data.height, window.innerHeight - 90)) + 'px' } else if (e.data.type === 'slac:navigate' && /^https:\/\/checkout\.stripe\.com\//.test(e.data.url)) { window.location.href = e.data.url } else if (e.data.type === 'slac:close' && dialog) { dialog.close() } }) })()Book your ticket online today.
Access to the full workshop