Untitled
unknown
plain_text
2 years ago
13 kB
15
Indexable
(function(){
var style=document.createElement('style');style.type='text/css';style.appendChild(document.createTextNode('@media(max-width:767px) { html body .game-card[data-adventure-id="50"], html body .game-card[data-adventure-id="107"], html body .game-card[data-adventure-id="8"] { display: none !important; } html body .cv-2-3-videos-container { margin-top: 3rem; } html body .cv-2-3-video-box { width: 100%; position: relative; } html body .cv-2-3-bg-video { width: 100%; aspect-ratio: 9/16; object-fit: fill; height: 666px; } html body .cv-2-3-video-content-div { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%); } html body .cv-2-3-video-content-div>.cv-2-3-upper { flex: 1; padding: 44px 60px 40px; display: flex; flex-direction: column; justify-content: space-between; align-items: center; } html body .cv-2-3-video-title { color: #FFF; text-align: center; font-family: \'MADESoulmaze\'; font-size: 27px; font-style: normal; font-weight: 400; line-height: 27px; text-transform: uppercase; text-align: center; } html body .cv-2-3-play-video { width: 100px; aspect-ratio: 1/1; display: flex; justify-content: center; align-items: center; position: relative; } html body .cv-2-3-play-video .cv-2-3-play-img { width: 100%; height: 100%; display: block; position: absolute; top: 0; left: 0; transition: all 0.2s linear; } html body .cv-2-3-play-video:not(.cv-2-3-playing) .cv-2-3-play-img.cv-2-3-p, html body .cv-2-3-play-video.cv-2-3-playing .cv-2-3-play-img:not(.cv-2-3-p) { opacity: 0; } html body .cv-2-3-video-content-div>.cv-2-3-bottom { padding: 32px 44px 20px; display: flex; flex-direction: column; align-items: center; } html body .cv-2-3-book-now { display: flex; padding: 13px 32px; justify-content: center; align-items: center; gap: 10px; background: #FF00B8; width: 100%; color: #FFF; text-align: center; font-family: \'MADESoulmaze\'; font-size: 22px; font-style: normal; font-weight: 400; line-height: 28px; text-transform: uppercase; cursor: pointer; margin-top: 38px; } html body .cv-2-3-learn-more { color: #FFF; font-family: \'Rubik\'; font-size: 18px; font-style: normal; font-weight: 600; line-height: 23px; /* 127.778% */ text-decoration-line: underline; margin-top: 24px; } html body .cv-2-3-usps { display: flex; flex-wrap: wrap; width: 100%; grid-row-gap: 16px; } html body .cv-2-3-usps>.cv-2-3-usp { width: 50%; display: flex; align-items: center; grid-gap: 7.44px; color: #FFF; font-family: Rubik; font-size: 15px; font-style: normal; font-weight: 700; line-height: 20px; } html body .cv-2-3-play-video .cv-2-3-play-img.cv-2-3-p img { scale: 1.3; } html body .cv-2-3-video-box+.cv-2-3-video-box { margin-top: 65px; }}'));document.head.appendChild(style);
(function (w) {
"use strict";
var tag = "cv-2-3",
debug = document.cookie.indexOf("cfQA") > -1,
window = typeof unsafeWindow !== "undefined" ? unsafeWindow : w,
testData = {
"vdos": [
{
poster: "https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvBox1.png",
vdoSrc: "https://cfactory-img.s3.amazonaws.com/pitches/IGB/SnapTik_App_7144076508448050438-HD.mp4",
vdoTitle: "SQUID GAME",
usp: ["60mins", "Challenge", "16+", "2-6"],
gameCardId: "50",
},
{
poster: "https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvBox2.png",
vdoSrc: "https://cfactory-img.s3.amazonaws.com/pitches/IGB/ssstik.io_1695797671490.mp4",
vdoTitle: `PAW PATROL: NEW RECRUITS`,
usp: ["60mins", "Challenge", "16+", "2-6"],
gameCardId: "107",
},
{
poster: "https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvBox3.png",
vdoSrc: "https://cfactory-img.s3.amazonaws.com/pitches/IGB/TikTok%20Alien%20Aptitude%20Test.mp4",
vdoTitle: "ALIEN APTITUDE TEST",
usp: ["60mins", "Competition", "8+", "2-6"],
gameCardId: "8",
}
]
,
"uspIcons": {
"60mins": "https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvClock.svg",
"Challenge": "https://cfactory-img.s3.amazonaws.com/pitches/IGB/ImmersiveGamebox_GameFilters_Challenge.svg",
"16+": "https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvage.svg",
"8+": "https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvage.svg",
"2-6": "https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvClock.svg",
"Competition": "https://cfactory-img.s3.amazonaws.com/pitches/IGB/ImmersiveGamebox_GameFilters_Competition.svg"
}
};
window[tag] = {
log: function (msg) {
if (debug) console.log("[CV]", tag, "-->", msg);
},
waitForElement: function (cssSelector, callback) {
var stop,
elementCached,
timeout,
check = function () {
try {
elementCached = document.querySelector(cssSelector);
if (stop) return;
if (elementCached) {
callback(elementCached);
clearTimeout(timeout);
window[tag].log(cssSelector + " found");
} else {
window.requestAnimationFrame(check);
}
} catch (err) {
window[tag].log(err.message);
}
};
window.requestAnimationFrame(check);
timeout = setTimeout(function () {
stop = true;
window[tag].log(cssSelector + " not found");
}, 15000);
},
testStart: function () {
try {
this.waitForElement("body", function (docBody) {
docBody.classList.add(tag);
});
// INITIALIZE THE TEST
initVariation();
window[tag].log("test running");
} catch (err) {
window[tag].log(err.message);
}
},
};
window[tag].testStart();
function initVariation() {
window[tag].waitForElement("html body .games-category-filter", () => {
if (window.innerWidth < 767) {
const videosHTML = `<div class="${tag}-videos-container">${genVideosHTML()}</div>`;
if (!document.querySelector(`.${tag}-videos-container`)) {
document.querySelector("html body .games-category-filter").insertAdjacentHTML("afterend", videosHTML);
videoElsEvents();
}
}
});
}
const genVideosHTML = () => {
const videos = testData.vdos;
const HTML = videos.reduce((t, vD) => {
return t += videoTemplate(vD);
}, "");
return HTML;
}
const videoTemplate = (vD) => {
const videoHTML = `
<!-- video template -->
<div class="${tag}-video-box" data-playing="false">
<video poster="${vD.poster}" disablepictureinpicture=""
controlslist="nodownload noplaybackrate" class="${tag}-bg-video">
<source src="${vD.vdoSrc}" type="video/mp4">
</video>
<div class="${tag}-video-content-div">
<div class="${tag}-upper">
<h1 class="${tag}-video-title">${vD.vdoTitle}</h1>
<button class="${tag}-play-video">
<span class="${tag}-play-img">
<img src="https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvPlay.png">
</span>
<span class="${tag}-play-img ${tag}-p">
<img src="https://cfactory-img.s3.amazonaws.com/pitches/IGB/cvPause.png">
</span>
</button>
</div>
<div class="${tag}-bottom">
<div class="${tag}-usps">
<div class="${tag}-usp">
<img src="${testData.uspIcons[vD.usp[0]]}">
${vD.usp[0]}
</div>
<div class="${tag}-usp">
<img src="${testData.uspIcons[vD.usp[1]]}">${vD.usp[1]}
</div>
<div class="${tag}-usp">
<img src="${testData.uspIcons[vD.usp[2]]}">${vD.usp[2]}
</div>
<div class="${tag}-usp">
<img src="${testData.uspIcons[vD.usp[3]]}">${vD.usp[3]}
</div>
</div>
<a class="${tag}-book-now other-ctasss" data-id="${vD.gameCardId}">BOOK NOW</a><a class="${tag}-learn-more other-ctasss" data-id="${vD.gameCardId}">Learn more</a>
</div>
</div>
</div>
`;
return videoHTML;
}
const videoElsEvents = () => {
// play and pausing video
document.querySelectorAll(`.${tag}-video-box`).forEach(vDPlay => {
if (vDPlay) {
vDPlay.addEventListener("click", function (e) {
const eTrgt = e.target;
if (!eTrgt.classList.contains('other-ctasss')) {
const thisBox = !eTrgt.classList.contains(`${tag}-video-box`) ? eTrgt.closest(`.${tag}-video-box`) : eTrgt;
const vDEl = thisBox.querySelector("video");
const playBtn = thisBox.querySelector(`.${tag}-play-video`);
const isPlaying = playPausevideo(vDEl) || false;
if (isPlaying) {
playBtn.classList.add(`${tag}-playing`);
} else {
playBtn.classList.remove(`${tag}-playing`);
}
thisBox.setAttribute("data-playing", isPlaying);
}
});
}
});
// book now click
document.querySelectorAll(`.${tag}-book-now`).forEach(bkCt => {
if (bkCt) {
bkCt.addEventListener("click", function () {
const gameCrdId = this.getAttribute("data-id");
const sel = `html body .game-card[data-adventure-id="${gameCrdId}"]>div>div:last-child>div a`;
window[tag].waitForElement(sel, function () {
document.querySelector(sel).click();
});
});
}
});
// learn more click
document.querySelectorAll(`.${tag}-learn-more`).forEach(lnCt => {
if (lnCt) {
lnCt.addEventListener("click", function () {
const gameCrdId = this.getAttribute("data-id");
const sel = `html body .game-card[data-adventure-id="${gameCrdId}"]>div>div:last-child>a.underline`;
window[tag].waitForElement(sel, function () {
document.querySelector(sel).click();
});
});
}
});
// check is video in viewport
window.addEventListener("scroll", function () {
const playingVideoBox = document.querySelector(`.${tag}-video-box[data-playing="true"]`) || document.querySelector(`.${tag}-video-box`);
const scrollDirection = getScrollDirection();
if (scrollDirection === "down") {
if (!playingVideoBox.previousElementSibling && playingVideoBox.getAttribute("data-playing") == "false") {
playingVideoBox.click();
} else {
const playingVideoBoxNxtSib = playingVideoBox.nextElementSibling;
if (playingVideoBoxNxtSib && isInViewport(playingVideoBoxNxtSib) && playingVideoBoxNxtSib.getAttribute("data-playing") == "false") {
// pausing running video
playingVideoBox.click();
// running viewport el video
playingVideoBoxNxtSib.click();
}
}
} else {
const playingVideoBoxPrvSib = playingVideoBox.previousElementSibling;
if (playingVideoBoxPrvSib && isInViewport(playingVideoBoxPrvSib) && playingVideoBoxPrvSib.getAttribute("data-playing") == "false") {
// pausing running video
playingVideoBox.click();
// running viewport el video
playingVideoBoxPrvSib.click();
}
}
});
}
const playPausevideo = (vDEl) => {
if (vDEl.paused || vDEl.readyState < 3) {
vDEl.play();
return true;
} else {
vDEl.pause();
return false;
}
};
const isInViewport = (element) => {
const rect = element.getBoundingClientRect();
const viewportHeight = window.innerHeight || document.documentElement.clientHeight;
const elementHeight = rect.bottom - rect.top;
return (
rect.bottom >= viewportHeight / 3 && // Bottom is at least 1/3 from the top
rect.top <= (2 / 3) * viewportHeight && // Top is at most 2/3 from the top
rect.right >= 0 && // Right side is visible
rect.left <= window.innerWidth // Left side is visible
);
}
let lastScrollPosition = 0;
function getScrollDirection() {
const currentScrollPosition = window.scrollY;
if (currentScrollPosition > lastScrollPosition) {
lastScrollPosition = currentScrollPosition;
return 'down';
} else {
lastScrollPosition = currentScrollPosition;
return 'up';
}
}
})(window);
})();
Editor is loading...