<html> <head> <!-- <link rel="prerender" href="http://localhost:3000/free"> --> <script> if (!location.search.includes("nonResponsive")) { document.write('<meta name="viewport" content="width=device-width"/>'); } </script> <script> (function (C, A, L) { let d = C.document; C.Cal = C.Cal || function () { let cal = C.Cal; let ar = arguments; if (!cal.loaded) { cal.ns = {}; cal.q = cal.q || []; d.head.appendChild(d.createElement("script")).src = A; cal.loaded = true; } if (ar[0] === L) { const api = function () { api.q.push(arguments); }; const namespace = arguments[1]; api.q = api.q || []; namespace ? (cal.ns[namespace] = api) : null; } cal.q.push(ar); }; })(window, "//localhost:3002/dist/embed.umd.js", "init"); </script> <script> Cal("init"); // Create a namespace "second". It can be accessed as Cal.ns.second with the exact same API as Cal Cal("init", "second"); // Create a namespace "third". It can be accessed as Cal.ns.second with the exact same API as Cal Cal("init", "third"); </script> <style> .debug { /* border: 1px solid black; */ margin-bottom: 5px; } .loader { color: green; } </style> </head> <body> <h3>This page has a non responsive version accessible <a href="?nonResponsive">here</a></h3> <h3>Pre-render test page available at <a href="?prerender-test">here</a></h3> <div> <button data-cal-link="free">Book with Free User</button> <div> <i >Corresponding Cal Link is being preloaded. Assuming that it would take you some time to click this as you are reading this text, it would open up super fast[If you are running a production build on local]. Try switching to slow 3G or create a custom Network configuration which is impossibly slow</i > </div> </div> <div id="namespaces-test"> <div class="debug"> <h2>Default Namespace(Cal)<i>[Black Theme][Guests(janedoe@gmail.com and test@gmail.com)]</i></h2> <div> <i><a href="?only=ns:default">Test in Zen Mode</a></i> </div> <i id="booking-status-"> You would see last Booking page action in my place </i> <div id="cal-booking-place-" style="max-height: 30vh; overflow: scroll"> <div> if you render booking embed in me, I would not let it be more than 30vh in height. So you would have to scroll to see the entire content </div> <div class="loader" id="cal-booking-loader-">Loading .....</div> </div> </div> <div class="debug"> <h2>Namespace "second"(Cal.ns.second)[Custom Styling]</h2> <div> <i><a href="?only=ns:second">Test in Zen Mode</a></i> </div> <i id="booking-status-second"> <i>You would see last Booking page action in my place</i> </i> <div id="cal-booking-place-second"> <div>If you render booking embed in me, I won't restrict you. The entire page is yours.</div> <button onclick="(function () {Cal.ns.second('ui', {styles:{eventTypeListItem:{backgroundColor:'blue'}}})})()"> Change <code>eventTypeListItem</code> bg color </button> <button onclick="(function () {Cal.ns.second('ui', {styles:{body:{background:'red'}}})})()"> Change <code>body</code> bg color </button> <div class="loader" id="cal-booking-loader-second">Loading .....</div> </div> </div> <div class="debug"> <h2>Namespace "third"(Cal.ns.third)</h2> <div> <i><a href="?only=ns:third">Test in Zen Mode</a></i> </div> <i id="booking-status-third"> <i>You would see last Booking page action in my place</i> </i> <div id="cal-booking-place-third" style="width: 30%"> <div>If you render booking embed in me, I would not let you be more than 30% wide</div> <div class="loader" id="cal-booking-loader-third">Loading .....</div> </div> </div> </div> <script> const searchParams = new URL(document.URL).searchParams; const only = searchParams.get("only"); // In prerender-test, we would want to test just the prerender case and nothing else. if (searchParams.get("prerender-test") === null) { if (!only || only === "ns:default") { Cal("inline", { elementOrSelector: "#cal-booking-place-", calLink: "pro?case=1", config: { name: "John Doe", email: "johndoe@gmail.com", notes: "Test Meeting", guests: ["janedoe@gmail.com", "test@gmail.com"], theme: "dark", }, }); } if (!only || only === "ns:second") { // Bulk API is supported - Keep all configuration at one place. Cal.ns.second( [ "inline", { elementOrSelector: "#cal-booking-place-second", calLink: "pro?case=2", }, ], [ "ui", { styles: { body: { background: "white", }, eventTypeListItem: { backgroundColor: "#D3D3D3", }, enabledDateButton: { backgroundColor: "#D3D3D3", }, disabledDateButton: { backgroundColor: "lightslategray", }, }, }, ] ); } if (!only || only === "ns:third") { Cal.ns.third( [ "inline", { elementOrSelector: "#cal-booking-place-third", calLink: "pro?case=3", }, ], [ "ui", { styles: { body: { background: "white", }, }, }, ] ); } } else { document.getElementById("namespaces-test").style.display = "none"; } Cal("preload", { calLink: "free", }); </script> <script> const callback = function (e) { const detail = e.detail; const namespace = detail.namespace; if (detail.type === "linkReady") { document.getElementById("cal-booking-loader-" + namespace).remove(); } document.getElementById(`booking-status-${namespace}`).innerHTML = JSON.stringify(e.detail); }; Cal("on", { action: "*", callback, }); Cal.ns.second("on", { action: "*", callback, }); Cal.ns.third("on", { action: "*", callback, }); </script> </body> </html>