<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"
  ]
}
  • Content:
    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;
    
  • URL: /components/raw/youtube-player/YouTubePlayer.js
  • Filesystem Path: src/components/youtube-player/YouTubePlayer.js
  • Size: 735 Bytes
  • Content:
    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);
        });
    }
    
  • URL: /components/raw/youtube-player/index.js
  • Filesystem Path: src/components/youtube-player/index.js
  • Size: 4 KB
  • Content:
    $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;
        }
    }
    
  • URL: /components/raw/youtube-player/youtube-palyer.scss
  • Filesystem Path: src/components/youtube-player/youtube-palyer.scss
  • Size: 3.5 KB

No notes defined.