{"version":3,"file":"figure-e36de973.js","sources":["../../../../node_modules/youtube-iframe/index.js","../../../../src/scripts/modules/figure.ts"],"sourcesContent":["(function(window) {\n\tvar YouTubeIframeLoader = {\n\t\tsrc: 'https://www.youtube.com/iframe_api',\n\t\tloading: false,\n\t\tloaded: false,\n\t\tlisteners: [],\n\n\t\tload: function(callback) {\n\t\t\tvar _this = this;\n\t\t\tthis.listeners.push(callback);\n\n\t\t\tif(this.loaded) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t_this.done();\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.loading = true;\n\n\t\t\twindow.onYouTubeIframeAPIReady = function() {\n\t\t\t\t_this.loaded = true;\n\t\t\t\t_this.done();\n\t\t\t};\n\n\t\t\tvar script = document.createElement('script');\n\t\t\tscript.type = 'text/javascript';\n\t\t\tscript.src = this.src;\n\t\t\tdocument.body.appendChild(script);\n\t\t},\n\n\t\tdone: function() {\n\t\t\tdelete window.onYouTubeIframeAPIReady;\n\n\t\t\twhile(this.listeners.length) {\n\t\t\t\tthis.listeners.pop()(window.YT);\n\t\t\t}\n\t\t}\n\t};\n\n\tif(typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = YouTubeIframeLoader;\n\t} else {\n\t\twindow.YouTubeIframeLoader = YouTubeIframeLoader;\n\t}\n}(window));\n","import { Component } from '@verndale/core';\nimport YouTubeIframeLoader from 'youtube-iframe';\nimport { BREAKPOINTS } from '../helpers/breakpoints';\nimport { debounce } from '../helpers/debounce';\nimport { DataLayerObject, ExtendedWindowType } from '../helpers/global-types';\n\ntype YoutubePlayer = {\n  on: (event: string, cb: () => void) => void;\n  showLightbox: () => void;\n  setVolume: (newVolume: number) => void;\n  playVideo: () => void;\n  pauseVideo: () => void;\n  getCurrentTime: () => number;\n  getDuration: () => number;\n  loadVideoById: (id: string, start: number, quality: string) => void;\n};\n\nclass VideoFigure extends Component {\n  private player: YoutubePlayer | null = null;\n  private src: string;\n  private pauseLabel: string;\n  private playLabel: string;\n  private autoplay: boolean;\n  private playing = false;\n  private lastEvent: number | null;\n  private config: object;\n  private customControls: boolean;\n  private mobileVideoId: string;\n  private tabletVideoId: string;\n  private wideVideoId: string;\n  private currentBreakpoint: number;\n  private changed: boolean;\n  private checkProgress: null | NodeJS.Timer;\n  private playingInterval: null | NodeJS.Timer;\n  private fallback: number;\n  private playedVideoTimes: number[];\n  private iframeLoaded: boolean;\n  private facadeEvents: string[];\n\n  constructor(el: HTMLElement) {\n    super(el);\n    this.src = this.el.dataset.url || '';\n    this.pauseLabel = this.el.dataset.pauseLabel || 'Pause';\n    this.playLabel = this.el.dataset.playLabel || 'Play';\n    this.autoplay = this.el.dataset.autoplay ? true : false;\n    this.customControls = this.el.dataset.customControls ? true : false;\n    this.mobileVideoId = this.el.dataset.mobileVideoId || '';\n    this.tabletVideoId =\n      this.el.dataset.tabletVideoId || this.el.dataset.mobileVideoId || '';\n    this.wideVideoId = this.el.dataset.wideVideoId || this.src || '';\n    this.currentBreakpoint = 0;\n    this.fallback = 0;\n    this.playing = false;\n    this.lastEvent = null;\n    this.config = {};\n    this.changed = false;\n    this.playingInterval = null;\n    this.checkProgress = null;\n    this.playedVideoTimes = [];\n    this.iframeLoaded = false;\n    this.facadeEvents = [\n      'resize',\n      'mousemove',\n      'touchstart',\n      'touchmove',\n      'scroll',\n      'click',\n      'keydown'\n    ];\n\n    if (this.wideVideoId || this.tabletVideoId || this.mobileVideoId) {\n      this.resizeYoutubePlayer();\n    }\n\n    this.addFacadeListeners();\n  }\n\n  setupDefaults() {\n    this.dom = {\n      el: this.el,\n      videoTrigger: this.el.querySelector<HTMLButtonElement>(\n        '.figure__media-button'\n      ),\n      localVideo: this.el.querySelector<HTMLVideoElement>('video'),\n      captionOverlay: this.el.querySelector<HTMLElement>(\n        '.figure__caption--overlay'\n      ),\n      youtubeImg: this.el.querySelector<HTMLElement>(\n        '.figure__media-youtube-img'\n      ),\n      iframe: this.el.querySelector<HTMLElement>('.iframe'),\n      iframeContainer: this.el.querySelector<HTMLElement>('.figure__media')\n    };\n\n    if (this.dom.localVideo && this.autoplay) {\n      (this.dom.localVideo as HTMLVideoElement).muted = true;\n      this.handleVideoClick();\n    }\n  }\n\n  addListeners() {\n    (this.dom.videoTrigger as HTMLButtonElement)?.addEventListener(\n      'click',\n      this.handleVideoClick.bind(this)\n    );\n\n    if (this.dom.localVideo) {\n      (this.dom.localVideo as HTMLVideoElement).addEventListener(\n        'play',\n        this.handleVideoPlay.bind(this)\n      );\n      (this.dom.localVideo as HTMLVideoElement).addEventListener(\n        'pause',\n        this.handleVideoPause.bind(this)\n      );\n      (this.dom.localVideo as HTMLVideoElement).addEventListener(\n        'ended',\n        this.handleVideoEnd.bind(this)\n      );\n    }\n\n    this.mobileVideoId = this.el.dataset.mobileVideoId || '';\n    this.tabletVideoId =\n      this.el.dataset.tabletVideoId || this.el.dataset.mobileVideoId || '';\n    this.wideVideoId = this.el.dataset.wideVideoId || this.src || '';\n\n    if (\n      this.dom.iframe &&\n      (this.mobileVideoId || this.tabletVideoId || this.wideVideoId)\n    ) {\n      window.addEventListener(\n        'resize',\n        debounce(this.handleYoutubeResize.bind(this), 250)\n      );\n    }\n  }\n\n  addFacadeListeners() {\n    this.facadeEvents.forEach(event => {\n      window.addEventListener(event, this.handleWindowInteraction.bind(this));\n    });\n  }\n\n  removeFacadeListeners() {\n    this.facadeEvents.forEach(event => {\n      window.removeEventListener(\n        event,\n        this.handleWindowInteraction.bind(this)\n      );\n    });\n  }\n\n  resizeYoutubePlayer() {\n    if (this.player) {\n      if (\n        window.matchMedia(`(max-width: ${BREAKPOINTS.tablet - 1}px)`).matches &&\n        this.currentBreakpoint !== BREAKPOINTS.mobile &&\n        this.mobileVideoId\n      ) {\n        this.player?.loadVideoById(this.mobileVideoId, 0, 'large');\n        this.currentBreakpoint = BREAKPOINTS.mobile;\n        return;\n      }\n\n      if (\n        window.matchMedia(\n          `(min-width:${BREAKPOINTS.tablet}px) and (max-width: ${\n            BREAKPOINTS.tabletLandscape - 1\n          }px)`\n        ).matches &&\n        this.currentBreakpoint !== BREAKPOINTS.tablet &&\n        this.tabletVideoId\n      ) {\n        this.player?.loadVideoById(this.tabletVideoId, 0, 'large');\n        this.currentBreakpoint = BREAKPOINTS.tablet;\n        return;\n      }\n\n      if (\n        window.matchMedia(\n          `(min-width:${BREAKPOINTS.tabletLandscape}px) and (max-width: ${\n            BREAKPOINTS.wide - 1\n          }px)`\n        ).matches &&\n        this.currentBreakpoint !== BREAKPOINTS.tabletLandscape &&\n        this.src\n      ) {\n        this.player?.loadVideoById(this.src, 0, 'large');\n        this.currentBreakpoint = BREAKPOINTS.tabletLandscape;\n        return;\n      }\n\n      if (\n        window.matchMedia(`(min-width: ${BREAKPOINTS.wide}px)`).matches &&\n        this.currentBreakpoint !== BREAKPOINTS.wide &&\n        this.wideVideoId\n      ) {\n        this.player?.loadVideoById(this.wideVideoId, 0, 'large');\n        this.currentBreakpoint = BREAKPOINTS.wide;\n      }\n    }\n  }\n\n  playVideoEvent() {\n    const videoPlayerPlay = this.el.dataset.videoPlayerPlay;\n    if (videoPlayerPlay) {\n      (window as ExtendedWindowType).dataLayer.push(\n        JSON.parse(videoPlayerPlay) as DataLayerObject\n      );\n    }\n  }\n\n  progressVideoEvent(iframe: YoutubePlayer) {\n    if (iframe && iframe.getCurrentTime && iframe.getDuration) {\n      const progress = Math.floor(\n        (iframe?.getCurrentTime() * 100) / iframe?.getDuration()\n      );\n      let progressVal = 0;\n      if (progress === 75) {\n        progressVal = 75;\n      } else if (progress === 50) {\n        progressVal = 50;\n      } else if (progress === 25) {\n        progressVal = 25;\n      } else if (progress === 10) {\n        progressVal = 10;\n      }\n\n      if (progressVal > 0) {\n        if (!this.playedVideoTimes.includes(progressVal)) {\n          this.playedVideoTimes.push(progressVal);\n          const videoPlayerProgress =\n            this.el.dataset.videoPlayerProgress?.replace(\n              '{progress}',\n              progressVal.toString()\n            );\n          if (videoPlayerProgress) {\n            (window as ExtendedWindowType).dataLayer.push(\n              JSON.parse(videoPlayerProgress) as DataLayerObject\n            );\n          }\n        }\n      }\n    }\n  }\n\n  endVideoEvent() {\n    this.playedVideoTimes = [];\n    const videoPlayerEnd = this.el.dataset.videoPlayerEnd;\n    if (videoPlayerEnd) {\n      (window as ExtendedWindowType).dataLayer.push(\n        JSON.parse(videoPlayerEnd) as DataLayerObject\n      );\n    }\n  }\n\n  loadIframe() {\n    if (this.dom.iframe) {\n      YouTubeIframeLoader.load(this.handleIframeLoader.bind(this));\n      (this.dom.iframe as HTMLElement).setAttribute('tabindex', '-1');\n      this.iframeLoaded = true;\n      this.removeFacadeListeners();\n    }\n  }\n\n  handleWindowInteraction() {\n    if (!this.iframeLoaded) this.loadIframe();\n  }\n\n  handleYoutubeResize() {\n    this.resizeYoutubePlayer();\n  }\n\n  handleIframeLoader(YT: {\n    Player: new (\n      arg0: HTMLElement | NodeListOf<HTMLElement> | null,\n      arg1: {\n        height: string;\n        width: string;\n        videoId: string;\n        playerVars: object;\n        events: {\n          onStateChange: (event: { data: number }) => void;\n          onReady: () => void;\n        };\n      }\n    ) => YoutubePlayer | null;\n  }) {\n    this.config = {\n      modestbranding: 1,\n      rel: 0,\n      showinfo: 0,\n      autohide: 1,\n      playsinline: 1\n    };\n\n    if (this.autoplay) {\n      this.config = {\n        modestbranding: 1,\n        rel: 0,\n        showinfo: 0,\n        autohide: 1,\n        playsinline: 1,\n        autoplay: 1,\n        mute: 1\n      };\n    }\n\n    if (this.customControls) {\n      this.config = {\n        ...this.config,\n        disable: 1,\n        iv_load_policy: 3,\n        loop: 1,\n        ecver: 2\n      };\n    }\n\n    this.player = new YT.Player(this.dom.iframe, {\n      height: '390',\n      width: '640',\n      videoId: this.src,\n      playerVars: this.config,\n      events: {\n        onStateChange: this.handleStateChange.bind(this),\n        onReady: this.handlePlayerReady.bind(this)\n      }\n    });\n\n    if (this.autoplay) {\n      this.handleVideoPlay();\n    }\n  }\n\n  handlePlayerReady() {\n    if (this.customControls) {\n      this.resizeYoutubePlayer();\n    }\n  }\n\n  handleStateChange(event: { data: number }) {\n    this.lastEvent = event.data;\n    if (event.data === 0) {\n      setTimeout(() => {\n        this.handleVideoPause();\n        this.player?.playVideo?.();\n        this.endVideoEvent();\n      }, 100);\n    }\n\n    if (event.data === 1) {\n      if (!this.changed) {\n        this.handleVideoPlay();\n        this.player?.playVideo?.();\n      } else {\n        this.player?.pauseVideo?.();\n        this.changed = false;\n      }\n    }\n\n    if (event.data === 2) {\n      setTimeout(() => this.handleVideoPause(), 250);\n    }\n  }\n\n  async handleVideoClick() {\n    if (this.el.getAttribute('data-prevent-playing') !== 'true') {\n      if (this.dom.localVideo) {\n        if ((this.dom.localVideo as HTMLVideoElement).paused) {\n          (this.dom.localVideo as HTMLVideoElement).play();\n          (this.dom.localVideo as HTMLVideoElement).setAttribute(\n            'controls',\n            'true'\n          );\n        } else {\n          (this.dom.localVideo as HTMLVideoElement).pause();\n          (this.dom.localVideo as HTMLVideoElement).removeAttribute('controls');\n        }\n      }\n\n      if (this.dom.iframe) {\n        if (this.player) {\n          if (!this.playing) {\n            const _iframe = this.dom.iframe as HTMLIFrameElement;\n            if (_iframe.getAttribute('tabindex') === '-1') {\n              _iframe.setAttribute('tabindex', '0');\n            }\n            this.player.playVideo?.();\n            this.playing = true;\n          } else {\n            this.player.pauseVideo?.();\n            this.handleVideoPause();\n            this.playing = false;\n          }\n        }\n      }\n    }\n  }\n\n  handleExternalVideoPause() {\n    if (this.playing) {\n      this.player?.pauseVideo?.();\n      this.playing = false;\n    }\n  }\n\n  handleReplaceId(id: string, autoplay = false) {\n    this.player?.loadVideoById(id, 0, '');\n    this.changed = !autoplay;\n  }\n\n  handleRemoveImage() {\n    if (this.player && this.player?.getCurrentTime() > 0.1) {\n      this.el.classList.add('figure-video--playing');\n      (this.dom.youtubeImg as HTMLElement)?.setAttribute(\n        'style',\n        'display:none'\n      );\n\n      (this.dom.videoTrigger as HTMLElement)?.classList.add(\n        'figure__media-button--pause'\n      );\n\n      if (this.playingInterval) {\n        clearInterval(this.playingInterval);\n      }\n    } else {\n      this.fallback++;\n    }\n    if (this.fallback > 500) {\n      if (this.playingInterval) {\n        clearInterval(this.playingInterval);\n      }\n    }\n  }\n\n  handleVideoPlay() {\n    this.playVideoEvent();\n    this.playedVideoTimes = [];\n    const videoTrigger = this.dom.videoTrigger as HTMLVideoElement;\n\n    if (this.customControls) {\n      if (!this.autoplay) {\n        videoTrigger.classList.add('figure__media-button--pause');\n      }\n    } else {\n      (this.dom.iframeContainer as HTMLElement)\n        ?.querySelector('.iframe')\n        ?.setAttribute('tabindex', '0');\n    }\n    if (this.dom.iframe) {\n      const ytIframe = this.el.querySelector<HTMLIFrameElement>('iframe');\n      if (!this.customControls) {\n        ytIframe?.focus();\n      }\n      this.progressVideoEvent(this.player as YoutubePlayer);\n\n      if (this.autoplay && this.playingInterval === null) {\n        this.playingInterval = setInterval(() => {\n          this.handleRemoveImage();\n        }, 100);\n      } else {\n        this.el.classList.add('figure-video--playing');\n        (this.dom.youtubeImg as HTMLElement)?.setAttribute(\n          'style',\n          'display:none'\n        );\n      }\n\n      videoTrigger.setAttribute('aria-label', this.pauseLabel);\n\n      if (this.checkProgress) {\n        clearInterval(this.checkProgress);\n      }\n      this.checkProgress = setInterval(() => {\n        this.progressVideoEvent(this.player as YoutubePlayer);\n      }, 1100);\n    }\n\n    this.playing = true;\n  }\n\n  handleVideoPause() {\n    if (this.checkProgress) {\n      clearInterval(this.checkProgress);\n    }\n    const videoTrigger = this.dom.videoTrigger as HTMLVideoElement;\n    if (this.lastEvent === 2 || this.lastEvent === 0) {\n      if (this.dom.iframe) {\n        videoTrigger.setAttribute('aria-label', this.playLabel);\n\n        if (this.customControls) {\n          videoTrigger.classList.remove('figure__media-button--pause');\n          this.el.classList.remove('figure-video--playing');\n        }\n      }\n      this.playing = false;\n    } else {\n      if (this.dom.localVideo) {\n        (this.dom.localVideo as HTMLVideoElement).removeAttribute('controls');\n        (this.dom.videoTrigger as HTMLVideoElement).setAttribute(\n          'tabindex',\n          '0'\n        );\n      }\n    }\n  }\n\n  handleVideoEnd() {\n    this.el.classList.remove('figure-video--playing');\n\n    if (this.dom.localVideo) {\n      (this.dom.localVideo as HTMLVideoElement).currentTime = 0;\n      (this.dom.localVideo as HTMLVideoElement).load();\n      (this.dom.localVideo as HTMLVideoElement).removeAttribute('controls');\n    }\n  }\n}\n\nexport default VideoFigure;\n"],"names":["window","YouTubeIframeLoader","callback","_this","script","module","VideoFigure","Component","el","__publicField","_a","debounce","event","BREAKPOINTS","_b","_c","_d","videoPlayerPlay","iframe","progress","progressVal","videoPlayerProgress","videoPlayerEnd","YT","_iframe","id","autoplay","videoTrigger","ytIframe"],"mappings":"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","x_google_ignoreList":[0]}