504 lines
17 KiB
HTML
504 lines
17 KiB
HTML
<html>
|
|
<head>
|
|
<title>Embed Playground</title>
|
|
<!-- <link rel="prerender" href="http://localhost:3000/free"> -->
|
|
<!-- <script src="./src/embed.ts" type="module"></script> -->
|
|
<script>
|
|
if (!location.search.includes("nonResponsive")) {
|
|
document.write('<meta name="viewport" content="width=device-width"/>');
|
|
}
|
|
(()=> {
|
|
const url = new URL(document.URL);
|
|
// Only run the example specified by only=, avoids distraction and faster to test.
|
|
const only = window.only = url.searchParams.get("only");
|
|
const elementIdentifier = only !== "all" ? only.replace("ns:",""): null
|
|
if (elementIdentifier) {
|
|
location.hash="#cal-booking-place-" + elementIdentifier + "-iframe"
|
|
}
|
|
})()
|
|
</script>
|
|
<script>
|
|
(function (C, A, L) {
|
|
let p = function (a, ar) {
|
|
a.q.push(ar);
|
|
};
|
|
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 () {
|
|
p(api, arguments);
|
|
};
|
|
const namespace = ar[1];
|
|
api.q = api.q || [];
|
|
typeof namespace === "string" ? (cal.ns[namespace] = api) && p(api, ar) : p(cal, ar);
|
|
return;
|
|
}
|
|
p(cal, ar);
|
|
};
|
|
})(window, "//localhost:3000/embed/embed.js", "init");
|
|
</script>
|
|
|
|
<style>
|
|
body {
|
|
background: linear-gradient(
|
|
90deg,
|
|
rgba(120, 116, 186, 1) 0%,
|
|
rgba(221, 221, 255, 1) 41%,
|
|
rgba(148, 232, 249, 1) 100%
|
|
);
|
|
}
|
|
.inline-embed-container {
|
|
/* border: 1px solid black; */
|
|
margin-bottom: 5px;
|
|
border-bottom: 1px solid
|
|
}
|
|
|
|
.loader {
|
|
color: green;
|
|
}
|
|
* {
|
|
--cal-brand-color: gray;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<span style="display: block;" ><a href="?nonResponsive">Non responsive version of this page here</a></span>
|
|
<span style="display: block;" ><a href="?only=prerender-test">Go to Pre-render test page only</a><small></small></span>
|
|
<div>
|
|
<script>
|
|
if (only === "all" || only === "prerender-test") {
|
|
document.write(`
|
|
<button data-cal-namespace="prerendertestLightTheme" data-cal-config='{"theme":"light"}' data-cal-link="free?light&popup">Book with Free User[Light Theme]</button>
|
|
<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
|
|
>`)
|
|
}
|
|
</script>
|
|
</div>
|
|
<span style="display: block;" ><a href="?only=all">Render All embeds together</a><small> - It would be slow to load</small></span>
|
|
<div>
|
|
|
|
<h2>Popup Examples</h2>
|
|
<button data-cal-namespace="popupAutoTheme" data-cal-link="free">Book with Free User[Auto Theme]</button>
|
|
<button data-cal-namespace="popupDarkTheme" data-cal-config='{"theme":"dark"}' data-cal-link="free">Book with Free User[Dark Theme]</button>
|
|
<button data-cal-namespace="popupTeamLinkLightTheme" data-cal-config='{"theme":"light"}' data-cal-link="team/seeded-team/collective-seeded-team-event">Book with Test Team[Light Theme]</button>
|
|
<button data-cal-namespace="popupTeamLinkDarkTheme" data-cal-config='{"theme":"dark"}' data-cal-link="team/seeded-team/collective-seeded-team-event">Book with Test Team[Dark Theme]</button>
|
|
<button data-cal-namespace="popupTeamLinksList" data-cal-link="team/seeded-team/">See Team Links [Auto Theme]</button>
|
|
<button data-cal-namespace="popupReschedule" data-cal-link="reschedule/qm3kwt3aTnVD7vmP9tiT2f">Reschedule Event[Auto Theme]</button>
|
|
<button data-cal-namespace="popupPaidEvent" data-cal-link="pro/paid">Book Paid Event [Auto Theme]</button>
|
|
<button data-cal-namespace="popupHideEventTypeDetails" data-cal-link="free/30min">Book Free Event [Auto Theme][uiConfig.hideEventTypeDetails=true]</button>
|
|
<button data-cal-namespace="routingFormAuto" data-cal-link="forms/948ae412-d995-4865-875a-48302588de03">Book through Routing Form [Auto Theme]</button>
|
|
<button data-cal-namespace="routingFormDark" data-cal-config='{"theme":"dark"}' data-cal-link="forms/948ae412-d995-4865-875a-48302588de03">Book through Routing Form [Dark Theme]</button>
|
|
<!-- <div>
|
|
<h2>Embed for Pages behind authentication</h2>
|
|
<button data-cal-namespace="upcomingBookings" data-cal-config='{"theme":"dark"}' data-cal-link="bookings/upcoming">Show Upcoming Bookings</button>
|
|
</div> -->
|
|
</div>
|
|
<h2>Inline Embed Examples</h2>
|
|
<div id="namespaces-test">
|
|
<div class="inline-embed-container" id="cal-booking-place-default">
|
|
<h3>
|
|
<a href="?only=ns:default">[Dark Theme][Guests(janedoe@example.com and test@example.com)]</a>
|
|
</h3>
|
|
<i class="last-action"> You would see last Booking page action in my place </i>
|
|
<div >
|
|
<div class="place" style="width:100%;"></div>
|
|
<div class="loader" id="cal-booking-loader-"></div>
|
|
</div>
|
|
</div>
|
|
<div class="inline-embed-container" id="cal-booking-place-second">
|
|
<h3><a href="?only=ns:second">[Custom Styling]</a></h3>
|
|
<div class="place">
|
|
<div>If you render booking embed in me, I won't restrict you. The entire page is yours. Content is by default aligned center</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>
|
|
<button onclick="(function () {Cal.ns.second('ui', {styles:{align:'left'}})})()">
|
|
Align left
|
|
</button>
|
|
<button onclick="(function () {Cal.ns.second('ui', {styles:{align:'center'}})})()">
|
|
Align Center
|
|
</button>
|
|
<button onclick="(function () {Cal.ns.second('ui', {styles:{enabledDateButton: {
|
|
backgroundColor: '#D3D3D3',
|
|
},
|
|
disabledDateButton: {
|
|
backgroundColor: 'lightslategray',
|
|
},}})})()">
|
|
Change Date Button Color
|
|
</button>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="inline-embed-container" id="cal-booking-place-third">
|
|
<h3><a href="?only=ns:third">[Custom Styling - Transparent Background]</a></h3>
|
|
<div style="width: 30%" class="place">
|
|
<div>If you render booking embed in me, I would not let you be more than 30% wide</div>
|
|
</div>
|
|
</div>
|
|
<div class="inline-embed-container" id="cal-booking-place-fourth">
|
|
<h3><a href="?only=ns:fourth">[Team Event Test][inline taking entire width]</a></h3>
|
|
<div style="width: 30%" class="place">
|
|
<div>If you render booking embed in me, I would not let you be more than 30% wide</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="inline-embed-container" id="cal-booking-place-fifth">
|
|
<h3><a href="?only=ns:fifth">[Team Event Test][inline along with some content]</a></h3>
|
|
<div style="display:flex;align-items: center;">
|
|
<h4 style="width: 30%">
|
|
On the right side you can book a team meeting =>
|
|
</h4>
|
|
<div style="width: 70%" class="place">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="inline-embed-container" id="cal-booking-place-inline-routing-form">
|
|
<h3><a href="?only=inline-routing-form">Inline Routing Form</a></h3>
|
|
<div style="display:flex;align-items: center;">
|
|
<h4 style="width: 30%">
|
|
On the right side you can book a team meeting =>
|
|
</h4>
|
|
<div style="width: 70%" class="place">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="inline-embed-container" id="cal-booking-place-hideEventTypeDetails">
|
|
<h3><a href="?only=hideEventTypeDetails">Hide EventType Details Test</a></h3>
|
|
<div class="place">
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<script>
|
|
const callback = function (e) {
|
|
const detail = e.detail;
|
|
const namespace = detail.namespace || "default";
|
|
|
|
if (detail.type === "linkReady") {
|
|
document.querySelector(`#cal-booking-place-${namespace} .loader`).remove();
|
|
} else if (detail.type === "linkFailed") {
|
|
document.querySelector(`#cal-booking-place-${namespace} .loader`).remove();
|
|
}
|
|
document.querySelector(`#cal-booking-place-${namespace} .last-action`).innerHTML = JSON.stringify(
|
|
e.detail
|
|
);
|
|
};
|
|
const searchParams = new URL(document.URL).searchParams;
|
|
let only = window.only
|
|
if (only === "all" || only === "ns:default") {
|
|
Cal("init", {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
});
|
|
|
|
Cal("inline", {
|
|
elementOrSelector: "#cal-booking-place-default .place",
|
|
calLink: "pro?case=1",
|
|
config: {
|
|
__autoScroll:true,
|
|
iframeAttrs: {
|
|
id: "cal-booking-place-default-iframe"
|
|
},
|
|
name: "John",
|
|
email: "johndoe@gmail.com",
|
|
notes: "Test Meeting",
|
|
guests: ["janedoe@example.com", "test@example.com"],
|
|
theme: "dark",
|
|
},
|
|
});
|
|
Cal("on", {
|
|
action: "*",
|
|
callback,
|
|
});
|
|
}
|
|
if (only === "all" || only === "ns:second") {
|
|
// Create a namespace "second". It can be accessed as Cal.ns.second with the exact same API as Cal
|
|
Cal("init", "second", {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
});
|
|
|
|
// Bulk API is supported - Keep all configuration at one place.
|
|
Cal.ns.second(
|
|
[
|
|
"inline",
|
|
{
|
|
elementOrSelector: "#cal-booking-place-second .place",
|
|
calLink: "pro?case=2",
|
|
config: {
|
|
iframeAttrs: {
|
|
id: "cal-booking-place-second-iframe"
|
|
},
|
|
}
|
|
},
|
|
]
|
|
);
|
|
Cal.ns.second("on", {
|
|
action: "*",
|
|
callback,
|
|
});
|
|
}
|
|
if (only === "all" || only === "ns:third") {
|
|
// Create a namespace "third". It can be accessed as Cal.ns.second with the exact same API as Cal
|
|
Cal("init", "third", {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
});
|
|
|
|
Cal.ns.third(
|
|
[
|
|
"inline",
|
|
{
|
|
elementOrSelector: "#cal-booking-place-third .place",
|
|
calLink: "pro/30min",
|
|
config: {
|
|
iframeAttrs: {
|
|
id: "cal-booking-place-third-iframe"
|
|
},
|
|
}
|
|
},
|
|
],
|
|
[
|
|
"ui",
|
|
{
|
|
styles: {
|
|
body: {
|
|
background: "transparent",
|
|
},
|
|
branding: {
|
|
brandColor: "#81e61c",
|
|
lightColor: "#494545",
|
|
lighterColor: "#4c4848",
|
|
lightestColor: "#7c7777",
|
|
highlightColor: "#9b0e0e",
|
|
medianColor: "black",
|
|
},
|
|
enabledDateButton: {
|
|
backgroundColor: "red"
|
|
},
|
|
disabledDateButton: {
|
|
backgroundColor: "green"
|
|
}
|
|
},
|
|
},
|
|
]
|
|
);
|
|
Cal.ns.third("on", {
|
|
action: "*",
|
|
callback,
|
|
});
|
|
}
|
|
if (only === "all" || only === "ns:fourth") {
|
|
Cal("init", "fourth", {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
});
|
|
Cal.ns.fourth(
|
|
[
|
|
"inline",
|
|
{
|
|
elementOrSelector: "#cal-booking-place-fourth .place",
|
|
calLink: "team/seeded-team",
|
|
config: {
|
|
iframeAttrs: {
|
|
id: "cal-booking-place-fourth-iframe"
|
|
},
|
|
}
|
|
},
|
|
],
|
|
[
|
|
"ui",
|
|
{
|
|
styles: {
|
|
body: {
|
|
background: "transparent",
|
|
},
|
|
branding: {
|
|
brandColor: "#81e61c",
|
|
lightColor: "#494545",
|
|
lighterColor: "#4c4848",
|
|
lightestColor: "#7c7777",
|
|
highlightColor: "#9b0e0e",
|
|
medianColor: "black",
|
|
},
|
|
},
|
|
},
|
|
]
|
|
);
|
|
Cal.ns.fourth("on", {
|
|
action: "*",
|
|
callback,
|
|
});
|
|
}
|
|
if (only === "all" || only === "ns:fifth") {
|
|
Cal("init", "fifth", {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
});
|
|
Cal.ns.fifth(
|
|
[
|
|
"inline",
|
|
{
|
|
elementOrSelector: "#cal-booking-place-fifth .place",
|
|
calLink: "team/seeded-team/collective-seeded-team-event",
|
|
config: {
|
|
iframeAttrs: {
|
|
id: "cal-booking-place-fifth-iframe"
|
|
},
|
|
}
|
|
},
|
|
],
|
|
);
|
|
Cal.ns.fifth("on", {
|
|
action: "*",
|
|
callback,
|
|
});
|
|
}
|
|
if (only === "all" || only === "prerender-test") {
|
|
Cal('init', 'prerendertestLightTheme', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
Cal.ns.prerendertestLightTheme("preload", {
|
|
calLink: "free",
|
|
});
|
|
}
|
|
|
|
if (only === "all" || only === "inline-routing-form") {
|
|
Cal('init', 'inline-routing-form', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
Cal.ns['inline-routing-form'](
|
|
[
|
|
"inline",
|
|
{
|
|
elementOrSelector: "#cal-booking-place-inline-routing-form .place",
|
|
calLink: "forms/948ae412-d995-4865-875a-48302588de03",
|
|
config: {
|
|
iframeAttrs: {
|
|
id: "cal-booking-place-inline-routing-form-iframe"
|
|
},
|
|
}
|
|
},
|
|
],
|
|
);
|
|
}
|
|
|
|
if (only === "all" || only === "hideEventTypeDetails") {
|
|
let identifier = "hideEventTypeDetails"
|
|
Cal('init', identifier, {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal.ns.hideEventTypeDetails([
|
|
['inline', {
|
|
elementOrSelector: `#cal-booking-place-${identifier} .place`,
|
|
calLink: "free/30min",
|
|
config: {
|
|
iframeAttrs: {
|
|
id: `cal-booking-place-${identifier}-iframe`
|
|
},
|
|
}
|
|
}],
|
|
[
|
|
'ui', {
|
|
hideEventTypeDetails:true
|
|
}
|
|
]
|
|
]);
|
|
}
|
|
|
|
Cal('init', 'popupDarkTheme', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal('init', 'popupHideEventTypeDetails', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
});
|
|
|
|
Cal.ns.popupHideEventTypeDetails('ui', {
|
|
hideEventTypeDetails:true
|
|
});
|
|
|
|
Cal('init', 'popupReschedule', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal('init', 'popupAutoTheme', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
Cal('init', 'popupTeamLinkLightTheme', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
Cal('init', 'popupTeamLinkDarkTheme', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal('init', 'popupTeamLinkDarkTheme', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal('init', 'popupTeamLinksList', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal('init', 'popupPaidEvent', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal("init", "floatingButton", {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
});
|
|
|
|
Cal('init', 'routingFormAuto', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
Cal('init', 'routingFormDark', {
|
|
debug: 1,
|
|
origin: "http://localhost:3000",
|
|
})
|
|
|
|
|
|
if (only === "all" || only == "ns:floatingButton") {
|
|
Cal.ns.floatingButton("floatingButton", {
|
|
calLink: "pro"
|
|
})
|
|
}
|
|
</script>
|
|
<script></script>
|
|
</body>
|
|
</html>
|