<button id="video-dialog-label" data-behavior="video-lightbox" data-video-id="M7lc1UVf-VE" data-poster-image="/assets/example-content/womens-hero-600.png">
    Generate a video in lightbox
</button>

<button>
    This button can't be focussed while the dialog is open.
</button>

No notes defined.

/* No context defined. */
  • Content:
    import video, { loadYouTubeApi } from '../video/video';
    import { Dialog } from '../lightbox-overlay/lightbox-overlay';
    
    const DIALOG_ID = 'generated-video-dialog';
    
    const generateLightBox = ({ videoId, labelId, posterImage }) => {
      return `
      <div role="dialog" id="${DIALOG_ID}" aria-labelledby="${labelId}" aria-modal="true" class="lightbox-overlay">
        <div class="video" data-behavior="lightbox-video" data-video-id="${videoId}" id="lightbox-video-container">
          <button class="lightbox-overlay__close" id="close">
            <span class="visually-hidden">Close dialog</span>
          </button>      
          <div class="video__player-wrap">
            <div id="lightbox-player" class="youtube-video-player"></div>
            <img src="${posterImage}" />
          </div>
        </div>
      </div>`;
    };
    
    const removeLightBox = () => {
      document.getElementById(DIALOG_ID).remove();
    };
    
    export default parentElement => {
      const { videoId, posterImage } = parentElement.dataset;
    
      if (window.YouTubeIframeApiReady === undefined) {
        loadYouTubeApi();
      }
    
      // eslint-disable-next-line func-names
      parentElement.addEventListener('click', function() {
        // Create the lightbox
        const lightboxContainer = document.createElement('div');
    
        lightboxContainer.innerHTML = generateLightBox({
          videoId,
          labelId: parentElement.id,
          posterImage,
        });
        document.body.appendChild(lightboxContainer);
    
        // eslint-disable-next-line no-new
        new Dialog({
          dialogId: DIALOG_ID,
          focusAfterClosed: this,
          focusFirst: 'close',
          closeCallBack: () => removeLightBox(),
        });
    
        // Open the dialog
        const videoElement = document.querySelector(
          '[data-behavior=lightbox-video]'
        );
    
        video(videoElement);
      });
    };
    
  • URL: /components/raw/dynamic-video-dialog/generate-lightbox.js
  • Filesystem Path: src/library/components/dynamic-video-dialog/generate-lightbox.js
  • Size: 1.8 KB
  • Content:
    import Player from '@vimeo/player';
    import { Dialog } from '../lightbox-overlay/lightbox-overlay';
    
    const DIALOG_ID = 'generated-vimeo-video-dialog';
    
    const generateVimeoLightBox = ({ videoId, labelId, posterImage }) => {
      return `
      <div role="dialog" id="${DIALOG_ID}" aria-labell, edby="${labelId}" aria-modal="true" class="lightbox-overlay">
        <div class="video" data-behavior="lightbox-video" data-video-id="${videoId}" id="lightbox-video-container">
          <button class="lightbox-overlay__close" id="close">
            <span class="visually-hidden">Close dialog</span>
          </button>      
          <div class="video__player-wrap">
            <div id="lightbox-vimeo-player" class="vimeo-video-player"></div>
            <img src="${posterImage}" />
          </div>
        </div>
      </div>`;
    };
    
    const removeLightBox = () => {
      document.getElementById(DIALOG_ID).remove();
    };
    
    export default parentElement => {
      const { videoId, posterImage } = parentElement.dataset;
    
      // eslint-disable-next-line func-names
      parentElement.addEventListener('click', function() {
        // Create the lightbox
        const lightboxContainer = document.createElement('div');
    
        lightboxContainer.innerHTML = generateVimeoLightBox({
          videoId,
          labelId: parentElement.id,
          posterImage,
        });
        document.body.appendChild(lightboxContainer);
    
        // eslint-disable-next-line no-new
        new Dialog({
          dialogId: DIALOG_ID,
          focusAfterClosed: this,
          focusFirst: 'close',
          closeCallBack: () => removeLightBox(),
        });
    
        const player = new Player('lightbox-vimeo-player', {
          id: videoId,
          autoplay: 1,
          title: 0,
          sidedock: 0,
          quality: 'auto',
          width: '100%',
          height: '100%',
        });
    
        player
          .play()
          .then(() => {
            lightboxContainer.classList.add('vimeo-player-loaded');
            // The video is loadded
          })
          .catch(() => {
            // console.log(error.name);
            // eslint-disable-next-line no-param-reassign
            lightboxContainer.querySelector(
              '.video__player-wrap img'
            ).style.display = 'block';
            // eslint-disable-next-line no-param-reassign
            lightboxContainer.querySelector('.vimeo-video-player').style.display =
              'none';
          });
      });
    };
    
  • URL: /components/raw/dynamic-video-dialog/generate-vimeo-lightbox.js
  • Filesystem Path: src/library/components/dynamic-video-dialog/generate-vimeo-lightbox.js
  • Size: 2.3 KB
<button id="video-dialog-label" data-behavior="video-lightbox" data-video-id="M7lc1UVf-VE"
  data-poster-image="/assets/example-content/womens-hero-600.png">
  Generate a video in lightbox
</button>

<button>
  This button can't be focussed while the dialog is open.
</button>
  • Handle: @dynamic-video-dialog
  • Preview:
  • Filesystem Path: src/library/components/dynamic-video-dialog/dynamic-video-dialog.hbs