<div class="video-player video-player--cover" data-video-id=tMRqsKzuMd4 aria-busy="false">
<div class="video-player__youtube"></div>
<button class="video-player__cover" style="background-image: url(/mocks/img/video-cover.jpg);">
<span class="video-player__label">
Play video (2 min)
</span>
</button>
<div class="video-player__overlay">
<div class="video-player__overlay-content">
<p>Du måste godkänna <a href="#">cookies för marknadsföring</a> om du vill visa den här typen av innehåll från Swegon.</p>
<button class="button button--cover video-player__overlay-button ">
<span class="button__label">Jag godkänner</span>
</button>
</div>
<div class="progress-indicator video-player__loader"></div>
</div>
</div>
<div class="video-player {{getmodifiers modifiers "video-player"}}" data-video-id={{videoId}} aria-busy="false">
<div class="video-player__youtube"></div>
<button class="video-player__cover" style="background-image: url({{coverImageUrl}});">
<span class="video-player__label">
{{{label}}}
</span>
</button>
<div class="video-player__overlay">
<div class="video-player__overlay-content">
<p>Du måste godkänna <a href="#">cookies för marknadsföring</a> om du vill visa den här typen av innehåll från Swegon.</p>
{{> @button tag="button" label="Jag godkänner" additionalClasses="video-player__overlay-button" }}
</div>
{{> @progress-indicator additionalClasses="video-player__loader"}}
</div>
</div>
{
"coverImageUrl": "/mocks/img/video-cover.jpg",
"videoId": "tMRqsKzuMd4",
"label": "Play video (2 min)",
"modifiers": [
"cover"
]
}
const YouTubePlayer = (el) => {
function initPlayer (videoElement) {
const videoId = videoElement.dataset.videoId;
const youtubePlayer = videoElement.querySelector('.video-player__youtube');
new window.YT.Player(youtubePlayer, {
videoId: videoId,
host: 'https://www.youtube-nocookie.com',
playerVars: {
autoplay: 1,
modestbranding: 1,
rel: 0
},
events: {
'onReady': function(e) {
onPlayerReady(videoElement);
}
}
});
}
function onPlayerReady (videoElement) {
videoElement.classList.remove('video-player--cover');
videoElement.setAttribute('aria-busy', false);
}
initPlayer(el);
};
export default YouTubePlayer;
import YouTubePlayer from './YouTubePlayer';
const els = document.querySelectorAll('.video-player');
const youtubeScriptId = 'youtube-api';
let isYouTubeIframeAPILoaded = false;
function loadYoutubePlayer(el) {
// Check if Cookiebot exist, has consent and marketing is not approved.
if (window.Cookiebot && window.Cookiebot.consent && window.Cookiebot.consent.marketing !== true) {
const wc = window.Cookiebot;
const overlay = el.querySelector('.video-player__overlay');
const overlayBtn = overlay.querySelector('.video-player__overlay-button');
const overlayVisibleClass = 'video-player__overlay--visible';
const cookiebotDialogEl = document.getElementById('CybotCookiebotDialog') || document.createElement('div');
const consent = wc.consent;
// Show overlay
overlay.classList.add(overlayVisibleClass);
// Add click event to approve button.
overlayBtn.addEventListener('click', () => {
// Hide all visible overlays.
const visibleOverlays = document.querySelectorAll(`.${overlayVisibleClass}`);
for (let visibleOverlay of visibleOverlays) {
visibleOverlay.classList.remove(overlayVisibleClass);
}
// Manually approve Cookiebot consent marketing and keeps the rest of consent data.
// submitCustomConsent(optinPreferences, optinStatistics, optinMarketing)
// Documentation: https://www.cookiebot.com/en/developer/
wc.submitCustomConsent && wc.submitCustomConsent(consent.preferences, consent.statistics, true);
// Hides Cookiebots dialog if it's visible.
if (cookiebotDialogEl && cookiebotDialogEl.style && cookiebotDialogEl.style.display === 'block') {
wc.hide && wc.hide();
}
// Load/reload YoutubePlayer.
loadYoutubePlayer(el);
});
} else {
// Start Youtube player loader.
el.setAttribute('aria-busy', true);
// Load Youtube API.
if (!isYouTubeIframeAPILoaded) {
const tag = document.createElement('script');
const firstScript = document.getElementsByTagName('script')[0];
tag.src = 'https://www.youtube.com/iframe_api';
tag.id = youtubeScriptId;
firstScript.parentNode.insertBefore(tag, firstScript);
}
// Playing video when API is loaded and ready.
if (!isYouTubeIframeAPILoaded) {
window.onYouTubeIframeAPIReady = () => {
YouTubePlayer(el);
isYouTubeIframeAPILoaded = true;
};
} else {
YouTubePlayer(el);
}
}
};
function updateVideoPlayerContent(el, data) {
const videoHolderClass = 'video-player__youtube';
const videoHolder = el.querySelector(`.${videoHolderClass}`);
const videoPlayerCover = el.querySelector('.video-player__cover');
const durationElement = el.querySelector('.video-player__label');
if (videoHolder) {
// Remove Iframe/div.
videoHolder.parentNode.removeChild(videoHolder); // IE11 support for remove();
// Add new video player div.
const wrapper = document.createElement('div');
wrapper.className = videoHolderClass;
// Update Cover image.
el.classList.add('video-player--cover');
videoPlayerCover.parentNode.insertBefore(wrapper, videoPlayerCover);
// Update video id
el.setAttribute('data-video-id', data.data.id);
// Update Cover image
videoPlayerCover.style.backgroundImage = `url(${data.data.coverImage})`;
// Update duration time
durationElement.innerHTML = data.data.label;
}
}
for (let el of els) {
const trigger = el.querySelector('.video-player__cover');
trigger.addEventListener('click', () => {
loadYoutubePlayer(el);
});
el.addEventListener('update', (data) => {
updateVideoPlayerContent(el, data);
});
}
$video-player-ratio: percentage(9 / 16);
.video-player {
position: relative;
display: inline-block;
width: 100%;
padding-bottom: $video-player-ratio;
&--cover &__cover {
visibility: visible;
}
&--full-height {
height: 100%;
.video-player__cover {
height: 100%;
}
}
iframe, & object, & embed {
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
}
}
.video-player__cover {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
padding-bottom: $video-player-ratio;
background-size: cover;
background-position: center;
visibility: hidden;
cursor: pointer;
&:before {
content: " ";
display: block;
position: absolute;
bottom: 0;
width: 100%;
height: size(15);
background: linear-gradient(to top, rgba($color-black, 0.8), transparent);
@include breakpoint($s) {
height: size(17.5);
}
}
}
.video-player__label {
color: $color-white;
font-size: size(2);
line-height: size(3);
font-weight: $font-weight-bold;
position: absolute;
left: size(2.25);
bottom: size(3);
padding-left: size(7.5);
@include breakpoint($s) {
left: size(4);
bottom: size(5.25);
}
&:before, &:after {
content: " ";
display: block;
position: absolute;
left: 0;
bottom: -50%;
}
&:before {
width: size(6);
height: size(6);
background: $color-white;
border-radius: 100%;
}
&:after {
margin-left: size(2.5);
margin-bottom: size(1.25);
border: solid size(1.75) $color-gray-5;
transform: scaleY(0.7);
border-color: transparent transparent transparent $color-gray-5;
}
}
.video-player__overlay {
display: flex;
align-items: center;
background-color: rgba($color-green-pale, 0.93);
position: absolute;
top: 0;
left: -9999px;
opacity: 0;
z-index: 1;
padding: size(1);
transition: opacity 200ms ease-out;
@include breakpoint($xs) {
padding: size(4);
}
.video-player[aria-busy="true"] &,
&--visible {
left: 0;
right: 0;
bottom: 0;
opacity: 1;
}
}
.video-player__overlay-content {
text-align: center;
max-width: 600px;
margin: 0 auto;
opacity: 0;
transform: translateY(size(1.5));
transition: opacity 200ms ease-out 150ms, transform 200ms ease-out 150ms;
@include breakpoint-down(375px) {
font-size: size(1.75);
line-height: size(2.5);
}
.video-player__overlay--visible & {
opacity: 1;
transform: translateY(0);
}
.video-player[aria-busy="true"] & {
opacity: 0;
}
p {
color: $color-black;
font-size: size(2);
text-size-adjust: none;
@include breakpoint-down(375px) {
font-size: size(1.75);
line-height: size(2.5);
}
}
}
.video-player__overlay-button {
margin: 0;
background-color: $color-green-dark !important;
border: none !important;
}
.video-player__loader {
opacity: 0;
transition: opacity 300ms ease-out 300ms;
visibility: hidden;
z-index: $z-below;
.video-player[aria-busy="true"] & {
opacity: 1;
visibility: visible;
z-index: $z-neutral;
}
}
No notes defined.