Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
1f13dd9
ondemand POC
gbajaj91 Mar 25, 2025
288afb0
using participant view
gbajaj91 Mar 25, 2025
b023075
css changes
gbajaj91 Mar 26, 2025
aa0a997
removing padding from agenda
gbajaj91 Mar 27, 2025
f5a3aaf
Agenda updates.
gbajaj91 Mar 27, 2025
1401a58
Adding adobe connect block
gbajaj91 Mar 28, 2025
326b6de
Merge branch 'dev' into iframe-poc
gbajaj91 May 9, 2025
ef17959
WIP. To test
qiyundai May 14, 2025
7907c4e
fix changes
gbajaj91 May 14, 2025
c06004d
remove event type specific template callbacks
qiyundai May 14, 2025
90e810f
url based query param for connect.
gbajaj91 May 15, 2025
15fd6f3
Merge branch 'dev' into mkto-poc
gbajaj91 May 19, 2025
60d6c63
Minor enhancements to support marketo form and adobe connect behind a…
gbajaj91 May 19, 2025
2e09e98
Adding Script file for marketo
gbajaj91 May 19, 2025
15b9fa5
support for join url
gbajaj91 May 22, 2025
ea9b7fe
Lana log
qiyundai May 22, 2025
53ef912
MR refactor WIP
qiyundai May 22, 2025
a3ad3f1
WIP
qiyundai May 22, 2025
3e8e5b5
Revert "WIP"
qiyundai May 23, 2025
dda5217
Revert "MR refactor WIP"
qiyundai May 23, 2025
16d57a3
extracting metadata and MR both as plugins
qiyundai May 24, 2025
a0c4468
Update chrono-box.js
qiyundai May 24, 2025
6a7686f
timing framework new worker
qiyundai May 24, 2025
5c2e8fd
New Chrono Box and Timing Framework Ready for Alignment
qiyundai May 25, 2025
c447340
timing worker test added
qiyundai May 27, 2025
36bc891
Added testing manager
qiyundai May 27, 2025
1f281ff
Testing logic extraction
qiyundai May 28, 2025
1704aa9
updating marketo script
gbajaj91 May 28, 2025
8b3a57a
Update worker.test.js
qiyundai May 28, 2025
cdefc2b
Adding overlay
gbajaj91 May 30, 2025
7c43fc7
Merge branch 'dev' into class-tf
qiyundai May 30, 2025
1d4bff1
Remove non-prod API functions
qiyundai Jun 2, 2025
8ce4e9b
Create README.md
qiyundai Jun 2, 2025
9fe08e5
Fetching Connect Url from Marketo Form Response
gbajaj91 Jun 4, 2025
4029a9d
typo fix
gbajaj91 Jun 4, 2025
a7a2ef3
Hiding join button
gbajaj91 Jun 4, 2025
6b3d4ee
Merge remote-tracking branch 'origin/dev' into mkto-poc
gbajaj91 Jun 9, 2025
afe5518
Merge branch 'dev' into class-tf
qiyundai Jun 12, 2025
e8af965
Fixing toggleTime testing
qiyundai Jun 12, 2025
fde267b
Updated tab isolation
qiyundai Jun 13, 2025
e0b7704
loading script directly
gbajaj91 Jun 13, 2025
763fbd2
updating mktotestformconfig
gbajaj91 Jun 13, 2025
eb56491
Revert "loading script directly"
gbajaj91 Jun 13, 2025
c7c5078
removing version param
gbajaj91 Jun 13, 2025
ea31eef
Incorporating the changes in testformconfig and adobe connect
gbajaj91 Jun 20, 2025
4367c68
minor fix
gbajaj91 Jun 20, 2025
b45c5bb
removing timeout
gbajaj91 Jun 20, 2025
3550197
Update worker.js
qiyundai Jun 23, 2025
7f9d1e5
add metadata deep query
qiyundai Jun 23, 2025
6fd7cf0
Fix module import type
qiyundai Jun 24, 2025
b2363b1
Fix defaulting to first item issue
qiyundai Jun 24, 2025
ee0c107
Merge branch 'dev' into class-tf
qiyundai Jun 24, 2025
cab5a4e
Webinar Fix WIP
qiyundai Jun 24, 2025
87d36c6
Fix metadata array issue
qiyundai Jun 24, 2025
deca941
Merge branch 'dev' into class-tf
qiyundai Jun 25, 2025
938f435
Added more error handling and added potential multiple MR ID handling
qiyundai Jun 25, 2025
f197356
linting
qiyundai Jun 25, 2025
f6ddf49
more linting
qiyundai Jun 25, 2025
dfa7020
Override form id via url
gbajaj91 Jul 9, 2025
1d4f8fe
self-supply tabId from sessionStorage
qiyundai Jul 9, 2025
8e9f22e
Merge branch 'class-tf' into mkto-poc
gbajaj91 Jul 21, 2025
e79921e
Merge branch 'dev' into mkto-poc
gbajaj91 Jul 21, 2025
d1d1204
auto promote to next view in chrono box
gbajaj91 Jul 21, 2025
8c1e9d2
Fixing tabId import location
qiyundai Jul 21, 2025
d2829af
Merge branch 'dev' into class-tf
qiyundai Jul 21, 2025
ebfe7a3
key update
gbajaj91 Jul 21, 2025
3babb69
Merge branch 'class-tf' into mkto-poc1
gbajaj91 Jul 21, 2025
00f102f
enhancements to mkto form
gbajaj91 Jul 23, 2025
da653f2
enhancing adobeconnect
gbajaj91 Jul 23, 2025
4f9d066
code changes
gbajaj91 Jul 23, 2025
d4b0b0d
minor chrono fix
gbajaj91 Jul 23, 2025
68abc10
Add overlay decorate
ambalika91 Jul 23, 2025
a1d63c2
updated script
gbajaj91 Jul 23, 2025
292851a
adding status listener to chronobox for now
gbajaj91 Jul 23, 2025
91a0e6a
chrono box enhancement
gbajaj91 Jul 23, 2025
9df743c
fix css property
ambalika91 Jul 24, 2025
9e1c9ad
fixing duplicates
gbajaj91 Jul 24, 2025
bec117a
set status active on registration
gbajaj91 Jul 24, 2025
cc8f8d4
resolve conflict
ambalika91 Jul 24, 2025
2dac64f
change name of asset
ambalika91 Jul 24, 2025
80d9637
adding right watch point
gbajaj91 Jul 24, 2025
87043b1
minor fix
gbajaj91 Jul 24, 2025
1be2c2a
adding minor fix
gbajaj91 Jul 24, 2025
3973d26
css formatting
ambalika91 Jul 25, 2025
38ceba0
marketo block
gbajaj91 Jul 25, 2025
b607f82
updating the mkto form
gbajaj91 Jul 28, 2025
3d0de68
adding new element
gbajaj91 Jul 28, 2025
7ac4c41
UI enhancements
gbajaj91 Jul 28, 2025
d4f7b71
minor fixes
gbajaj91 Jul 28, 2025
29dd436
minor correction
gbajaj91 Jul 28, 2025
38b5133
custom event support for marketo form complete
gbajaj91 Jul 28, 2025
7e9d154
[mwpw 176009] Add overlay view for mobile portraint orientation. (#368)
gbajaj91 Jul 28, 2025
e68db8a
Review comments incorporated
gbajaj91 Jul 30, 2025
9fdc789
mcz-handler fix
gbajaj91 Jul 30, 2025
c71e808
adding missing css
gbajaj91 Jul 30, 2025
f106a26
minor adobe connect fix
gbajaj91 Jul 30, 2025
b5c3dbf
revert unwanted changes
gbajaj91 Jul 30, 2025
1e9216e
Lint fixes
gbajaj91 Jul 30, 2025
ca1b173
lint fix
gbajaj91 Jul 30, 2025
f1410a0
minor class style in .css
gbajaj91 Jul 30, 2025
25fb3d1
Review comments
gbajaj91 Jul 31, 2025
754545c
minor review comment
gbajaj91 Jul 31, 2025
66c4af0
Merge branch 'dev' into mkto-poc
qiyundai Aug 6, 2025
caa1103
Merge branch 'dev' into mkto-poc
qiyundai Aug 6, 2025
adaf150
Merge branch 'dev' into mkto-poc
qiyundai Aug 13, 2025
93374ff
Script update
gbajaj91 Aug 21, 2025
c4f7c1a
adding support for mczID flow
gbajaj91 Aug 21, 2025
71eed3d
minor fix
gbajaj91 Aug 21, 2025
76d927c
Merge branch 'dev' into mkto-poc
qiyundai Aug 26, 2025
e851803
Quick lint
qiyundai Aug 27, 2025
dde9a9e
Merge branch 'dev' into mkto-poc
gbajaj91 Nov 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions events/blocks/adobe-connect/adobe-connect.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
.adobe-connect {
width: 100%;
padding: 0;
margin: 0;
}

.adobe-connect .fullwidth {
width: 100%;
height: 900px;
}

.adobe-connect button {
font-size: var(--type-body-s-size);
background-color: var(--link-color);
min-width: 114px;
height: 40px;
line-height: 20px;
padding: 9px 16px;
border: 0;
border-radius: 24px;
color: #fff;
font-weight: 700;
box-shadow: none;
margin: 0 auto;
cursor: pointer;
transition: background-color 0.13s, color 0.13s;
}

.adobe-connect .hidden {
visibility: hidden !important;
opacity: 0 !important;
}

/* Overlay background */
.adobe-connect .iframe-overlay {
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 85%);
color: #fff;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 9999;
font-family: inherit;
pointer-events: auto;
padding: 10px;
gap: 16px;
flex-shrink: 0;
margin: 0;
}

.adobe-connect .iframe-overlay .overlay-close-btn {
display: flex;
width: 22px;
height: 22px;
align-items: flex-start;
position: absolute;
right: 32px;
top: 33px;
}

.adobe-connect .iframe-overlay .overlay-heading,
.adobe-connect .iframe-overlay .overlay-heading-yrs {
font-weight: 700;
text-align: center;
line-height: 125%;
font-style: normal;
color: #fff;
font-size: 24px;
align-self: stretch;
margin: 0;
}

.adobe-connect .iframe-overlay .overlay-subheading {
width: 245px;
color: #FFF;
text-align: center;
font-size: 16px;
font-weight: 700;
line-height: 125%;
}

.adobe-connect .iframe-overlay .overlay-illustration {
margin: 40px 0 40px 0;
display: flex;
justify-content: center;
}

.adobe-connect .iframe-overlay .overlay-landscape {
height: 22px;
align-self: stretch;
color: #FFF;
text-align: center;
font-size: 18px;
font-style: normal;
font-weight: 700;
line-height: 125%;
/* 22.5px */
}

.adobe-connect .iframe-overlay .overlay-rotate-msg {
align-self: stretch;
color: #FFF;
text-align: center;
font-size: 12px;
font-style: normal;
font-weight: 400;
line-height: 150%;
/* 18px */
}

.adobe-connect .iframe-overlay .overlay-continue-btn {
height: 50px;
background: #3B63FB;
color: #FFF;
text-align: center;
font-size: 19px;
font-style: normal;
font-weight: 700;
padding: 12px 24px 14px 24px;
border-radius: 100px;
line-height: 24px;
/* 126.316% */
margin-top: 40px;
}

@media only screen and (orientation: portrait) {
.adobe-connect .iframe-overlay .overlay-heading-yrs {
display: none;
}
}

@media only screen and (orientation: landscape) {
.adobe-connect .iframe-overlay .overlay-heading {
display: none;
}
.adobe-connect .iframe-overlay .overlay-subheading {
display: none;
}
.adobe-connect .iframe-overlay .overlay-landscape {
display: none;
}
.adobe-connect .iframe-overlay .overlay-rotate-msg {
display: none;
}
}
150 changes: 150 additions & 0 deletions events/blocks/adobe-connect/adobe-connect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
import { LIBS, getMetadata } from '../../scripts/utils.js';

const { createTag } = await import(`${LIBS}/utils/utils.js`);

// TODO: remove post validation with marketo integration.
function addParams(searchParams, params, key, value) {
if (params.has(key)) {
searchParams[key] = params.get(key);
} else {
searchParams[key] = value;
}
}

// TODO: remove post validation with marketo integration.
function addSearchParams(url, searchParams) {
const urlObj = new URL(url);
Comment thread
qiyundai marked this conversation as resolved.

Object.entries(searchParams).forEach(([key, value]) => {
urlObj.searchParams.append(key, value);
});

return urlObj.toString();
}

// TODO: remove post validation with marketo integration.
function getSearchParamsFromCurrentUrl() {
const params = new URL(window.location.href).searchParams;
const searchParams = {};
addParams(searchParams, params, 'mkto_trk', 'marketo_tracker');
addParams(searchParams, params, 'mkt_tok', 'marketo_token');
addParams(searchParams, params, 'ecid', 'experience_cloud_id');
addParams(searchParams, params, 'mkto_event_id', 'marketo_event_id');
return searchParams;
}

function createOverlay(rowBlock) {
// Show the overlay div if it exists and is hidden
if (rowBlock.classList.contains('hidden')) {
rowBlock.classList.remove('hidden');
}

// Overlay container
const elements = {
overlay: rowBlock.querySelector(':scope > div:nth-of-type(1)'),
heading: rowBlock.querySelector(':scope > div:nth-of-type(1) > h2:nth-of-type(1)'),
subheading: rowBlock.querySelector(':scope > div:nth-of-type(1) > p:nth-of-type(1)'),
bestViewedInLandscape: rowBlock.querySelector(':scope > div:nth-of-type(1) > p:nth-of-type(2)'),
rotateYourPhone: rowBlock.querySelector(':scope > div:nth-of-type(1) > p:nth-of-type(3)'),
youAreAllSet: rowBlock.querySelector(':scope > div:nth-of-type(1) > h2:nth-of-type(2)'),
continueBtn: rowBlock.querySelector(':scope > div:nth-of-type(1) > p:nth-of-type(4) > a'),
};

const overlay = rowBlock.querySelector(':scope > div:nth-of-type(1)');
overlay.classList.add('iframe-overlay');

// Close button (top right)
const closeBtn = createTag(
'img',
{
class: 'overlay-close-btn',
'aria-label': 'Close overlay',
src: '/events/blocks/adobe-connect/asset/Cross.svg',
alt: 'Close overlay',
},

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's also add role and tabindex attribute for this.

Alternatively, you might consider actually wrapping this img in a button element. You may also consider moving the svg files to the icons folder and use getIcon to summon the icon into your button's inner html, but this works just fine.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

);
overlay.insertAdjacentElement('beforeend', closeBtn);
closeBtn.addEventListener('click', () => overlay.remove());

// Heading
elements.heading.classList.add('overlay-heading');

// subheading
elements.subheading.classList.add('overlay-subheading');

// Illustration (SVG)
const rotateImg = createTag('img', {
class: 'overlay-illustration',
src: '/events/blocks/adobe-connect/asset/Rotate.svg',
alt: 'Phone rotation illustration',
});
elements.subheading.insertAdjacentElement('afterend', rotateImg);

elements.bestViewedInLandscape.classList.add('overlay-landscape');
elements.rotateYourPhone.classList.add('overlay-rotate-msg');
// Message container
const messageContainer = createTag('div', { class: 'overlay-message-container' }, [elements.bestViewedInLandscape, elements.rotateYourPhone]);
rotateImg.insertAdjacentElement('afterend', messageContainer);

elements.continueBtn.classList.add('overlay-continue-btn');
elements.continueBtn.addEventListener('click', (event) => {
event.preventDefault();
overlay.remove();
});

// Message for landscape mode
elements.youAreAllSet.classList.add('overlay-heading-yrs');

return overlay;
}

function isMobileDevice() {
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
}

function isPortraitMode() {
return window.innerHeight > window.innerWidth;
}

function shouldShowOverlay() {
return isMobileDevice() && isPortraitMode();
}

export default async function init(el) {
const h2 = el.querySelector('h2');
let url = h2?.textContent;

h2.remove();

// Hide the overlay div if it exists
const overlayElem = el.querySelector(':scope > div:nth-of-type(2)');
if (overlayElem) {
overlayElem.classList.add('hidden');
}

if (getMetadata('adobe-connect-url')) {
url = getMetadata('adobe-connect-url');
} else {
console.log('No adobe-connect-url found');
return;
}

// TODO: remove post validation with marketo integration.
const searchParams = getSearchParamsFromCurrentUrl();
url = addSearchParams(url, searchParams);

if (overlayElem && shouldShowOverlay()) {
createOverlay(overlayElem);
} else if (overlayElem) {
overlayElem.remove();
}

// Create iframe
createTag('iframe', {
src: url,
frameborder: '0',
allowfullscreen: 'true',
class: 'fullwidth',
style: 'position: relative; z-index: 1;',
}, '', { parent: el });
}
3 changes: 3 additions & 0 deletions events/blocks/adobe-connect/asset/Cross.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions events/blocks/adobe-connect/asset/Rotate.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file.
7 changes: 7 additions & 0 deletions events/blocks/anchor-point/anchor-point.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default async function init(el) {
const rows = Array.from(el.children);
const idName = `${rows[0].textContent.trim().toLowerCase()}`;

el.innerHTML = '';
el.setAttribute('id', idName);
}
Empty file.
73 changes: 73 additions & 0 deletions events/blocks/mcz-handler/mcz-handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { CheckResourceLocation } from '../../../rs/360-KCI-804/images/mktoTestFormConfig.js';
import { setMetadata, getMetadata } from '../../scripts/utils.js';

export default async function init(el) {
const rows = Array.from(el.children);
const resourceLocation = `#${rows[0].textContent.trim().toLowerCase()}`;
// suggestion to use getElementbyId
const key = rows[1].textContent.trim().toLowerCase();

const resourceWatch = 'main .section .chrono-box';

el.innerHTML = '';

el.setAttribute('data-mcz-dl-status', 'loading');

let mczId = null;
if (getMetadata('eventExternalId')) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Image

The column currently in the metadata sheet is called 'external-event-id'. Your code is looking for eventExternalId. Is this intended? Are you planning on using the existing column or adding a new column? Also, I think generally we don't have camelCase metadata.

const eventExternalId = getMetadata('eventExternalId');
// split the eventExternalId by - and get the last part
mczId = eventExternalId.replace('-', '').toLowerCase();
}

await CheckResourceLocation(el, resourceWatch, resourceLocation, mczId);

async function mczMarketoFormAdobeConnectEvent() {
if (window.mcz_marketoForm_pref?.form?.success?.type === 'adobe_connect') {
const { metadataStore } = await import('../../features/timing-framework/plugins/metadata/plugin.js');

const eventUrl = window.mcz_marketoForm_pref?.form?.success?.content;
setMetadata('adobe-connect-url', eventUrl);
metadataStore.set(key, 'adobe-connect');

console.log('Marketo form completed - Adobe Connect URL:', eventUrl);
}
}

// Debounce function to limit rapid calls
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}

// Debounced callback for observer
const debouncedCallback = debounce(() => {
const status = el.getAttribute('data-mcz-dl-status');

// TODO: remove this console.log post validation with marketo integration.
console.log('Attribute "data-mcz-dl-status" changed to', status);
if (status === 'active') {
mczMarketoFormAdobeConnectEvent();
}
}, 300); // 300ms debounce delay

const observer = new MutationObserver((mutationsList) => {
mutationsList.forEach((mutation) => {
if (mutation.type === 'attributes') {
debouncedCallback();
}
});
});

observer.observe(el, {
attributes: true, // Observe attribute changes
attributeFilter: ['data-mcz-dl-status'], // Optional: filter specific attributes
});
}
Loading
Loading