{"version":3,"file":"videogular-ngx-videogular-ima-ads.mjs","sources":["../../../../libs/ngx-videogular/ima-ads/src/lib/vg-ima-ads.component.ts","../../../../libs/ngx-videogular/ima-ads/src/lib/ima-ads.module.ts","../../../../libs/ngx-videogular/ima-ads/src/index.ts","../../../../libs/ngx-videogular/ima-ads/src/videogular-ngx-videogular-ima-ads.ts"],"sourcesContent":["import './google.ima';\nimport {\n  Component,\n  ElementRef,\n  Input,\n  HostBinding,\n  ViewEncapsulation,\n  OnInit,\n  OnDestroy,\n  Output,\n  EventEmitter,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport {\n  IPlayable,\n  VgApiService,\n  VgFullscreenApiService,\n  VgEvents,\n} from '@videogular/ngx-videogular/core';\n\n@Component({\n    selector: 'vg-ima-ads',\n    encapsulation: ViewEncapsulation.None,\n    template: `<div class=\"vg-ima-ads\"></div>`,\n    styles: [\n        `\n      vg-ima-ads {\n        position: absolute;\n        width: 100%;\n        height: 100%;\n        z-index: 300;\n      }\n      vg-ima-ads .vg-ima-ads {\n        position: absolute;\n        width: 100%;\n        height: 100%;\n        pointer-events: none;\n      }\n    `,\n    ],\n    standalone: false\n})\nexport class VgImaAdsComponent implements OnInit, OnDestroy {\n  @Input() vgFor: string;\n  @Input() vgNetwork: string;\n  @Input() vgUnitPath: string;\n  @Input() vgCompanion: string;\n  @Input() vgCompanionSize: number[];\n  @Input() vgAdTagUrl: string;\n  @Input() vgSkipButton: string;\n  @Input() vgSkipButtonLocale = 'en';\n\n  @Output() onAdStart: EventEmitter<boolean> = new EventEmitter();\n  @Output() onAdStop: EventEmitter<boolean> = new EventEmitter();\n  @Output() onSkipAd: EventEmitter<boolean> = new EventEmitter();\n\n  elem: HTMLElement;\n  target: IPlayable;\n  ima: Ima;\n  isFullscreen = false;\n  skipButton: HTMLElement;\n\n  subscriptions: Subscription[] = [];\n\n  @HostBinding('style.display') displayState = 'none';\n\n  constructor(\n    ref: ElementRef,\n    public API: VgApiService,\n    public fsAPI: VgFullscreenApiService\n  ) {\n    this.elem = ref.nativeElement;\n    this.onContentEnded = this.onContentEnded.bind(this);\n  }\n\n  ngOnInit() {\n    if (this.API.isPlayerReady) {\n      this.onPlayerReady();\n    } else {\n      this.subscriptions.push(\n        this.API.playerReadyEvent.subscribe(() => this.onPlayerReady())\n      );\n    }\n  }\n\n  onPlayerReady() {\n    if (typeof google === 'undefined') {\n      this.onMissingGoogleImaLoader();\n      return;\n    }\n\n    this.target = this.API.getMediaById(this.vgFor);\n\n    this.initializations();\n\n    this.subscriptions.push(\n      this.target.subscriptions.ended.subscribe(this.onContentEnded.bind(this))\n    );\n    this.subscriptions.push(\n      this.target.subscriptions.play.subscribe(this.onUpdateState.bind(this))\n    );\n\n    this.subscriptions.push(\n      this.fsAPI.onChangeFullscreen.subscribe(\n        this.onChangeFullscreen.bind(this)\n      )\n    );\n\n    this.ima.adsLoader.addEventListener(\n      google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n      this.onAdsManagerLoaded.bind(this),\n      false\n    );\n    this.ima.adsLoader.addEventListener(\n      google.ima.AdErrorEvent.Type.AD_ERROR,\n      this.onAdError.bind(this),\n      false\n    );\n\n    this.loadAds();\n  }\n\n  initializations() {\n    this.ima = new Ima(this.elem, this.vgSkipButtonLocale);\n\n    if (this.vgSkipButton) {\n      this.skipButton = document.querySelector(\n        this.vgSkipButton\n      ) as HTMLElement;\n      this.skipButton.style.display = 'none';\n      this.skipButton.addEventListener('click', this.onClickSkip.bind(this));\n      this.elem.insertBefore(this.skipButton, this.elem.firstChild);\n    }\n\n    window.addEventListener('resize', () => {\n      const w = this.API.videogularElement.offsetWidth;\n      const h = this.API.videogularElement.offsetHeight;\n\n      if (this.ima.adsManager) {\n        if (this.isFullscreen) {\n          this.ima.adsManager.resize(w, h, google.ima.ViewMode.FULLSCREEN);\n        } else {\n          this.ima.adsManager.resize(w, h, google.ima.ViewMode.NORMAL);\n        }\n      }\n    });\n  }\n\n  loadAds() {\n    if (this.vgCompanion) {\n      googletag.cmd.push(() => {\n        const adUnitPath: string = '/' + this.vgNetwork + '/' + this.vgUnitPath;\n        const slot: googletag.Slot = googletag.defineSlot(\n          adUnitPath,\n          this.vgCompanionSize,\n          this.vgCompanion\n        );\n\n        if (slot) {\n          slot.addService(googletag.companionAds());\n          slot.addService(googletag.pubads());\n\n          googletag.companionAds().setRefreshUnfilledSlots(true);\n\n          googletag.pubads().enableVideoAds();\n\n          googletag.enableServices();\n        }\n      });\n    }\n  }\n\n  onUpdateState(event: any) {\n    switch (event.type) {\n      case VgEvents.VG_PLAY:\n        if (!this.ima.adsLoaded) {\n          this.API.pause();\n          this.ima.adDisplayContainer.initialize();\n          this.requestAds(this.vgAdTagUrl);\n          this.ima.adsLoaded = true;\n        }\n        break;\n    }\n  }\n\n  requestAds(adTagUrl: string) {\n    // Show only to get computed style in pixels\n    this.show();\n\n    const adsRequest = new google.ima.AdsRequest();\n    const computedStyle = window.getComputedStyle(this.elem);\n    adsRequest.adTagUrl = adTagUrl;\n\n    adsRequest.linearAdSlotWidth = parseInt(computedStyle.width, 10);\n    adsRequest.linearAdSlotHeight = parseInt(computedStyle.height, 10);\n    adsRequest.nonLinearAdSlotWidth = parseInt(computedStyle.width, 10);\n    adsRequest.nonLinearAdSlotHeight = parseInt(computedStyle.height, 10);\n\n    this.ima.adsLoader.requestAds(adsRequest);\n  }\n\n  onAdsManagerLoaded(evt: google.ima.AdsManagerLoadedEvent) {\n    this.show();\n    this.ima.adsManager = evt.getAdsManager(this.target);\n    this.processAdsManager(this.ima.adsManager);\n  }\n  // @ts-ignore\n  processAdsManager(adsManager: google.ima.AdsManager) {\n    const w = this.API.videogularElement.offsetWidth;\n    const h = this.API.videogularElement.offsetHeight;\n\n    // Attach the pause/resume events.\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,\n      this.onContentPauseRequested.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,\n      this.onContentResumeRequested.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED,\n      this.onSkippableStateChanged.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.ALL_ADS_COMPLETED,\n      this.onAllAdsComplete.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdEvent.Type.COMPLETE,\n      this.onAdComplete.bind(this),\n      false\n    );\n    this.ima.adsManager.addEventListener(\n      google.ima.AdErrorEvent.Type.AD_ERROR,\n      this.onAdError.bind(this),\n      false\n    );\n\n    this.ima.adsManager.init(w, h, google.ima.ViewMode.NORMAL);\n    this.ima.adsManager.start();\n  }\n\n  onSkippableStateChanged() {\n    const isSkippable = this.ima.adsManager.getAdSkippableState();\n\n    if (isSkippable) {\n      this.skipButton.style.display = 'block';\n    } else {\n      this.skipButton.style.display = 'none';\n    }\n  }\n\n  onClickSkip() {\n    this.ima.adsManager.skip();\n    this.onSkipAd.emit(true);\n  }\n\n  onContentPauseRequested() {\n    this.show();\n    this.API.pause();\n    this.onAdStop.emit(true);\n  }\n\n  onContentResumeRequested() {\n    this.API.play();\n    this.onAdStart.emit(true);\n    this.hide();\n  }\n  // @ts-ignore\n  onAdError(evt) {\n    if (this.ima.adsManager) {\n      this.ima.adsManager.destroy();\n    }\n    this.hide();\n    this.API.play();\n    this.onAdStop.emit(true);\n  }\n\n  onAllAdsComplete() {\n    this.hide();\n    // The last ad was a post-roll\n    if (this.ima.adsManager.getCuePoints().join().indexOf('-1') >= 0) {\n      this.API.pause(); // it was stop() in Videogular v1\n      this.onAdStop.emit(true);\n    }\n  }\n\n  onAdComplete() {\n    // TODO: Update view with current ad count\n    this.ima.currentAd++;\n    this.onAdStop.emit(true);\n  }\n\n  show() {\n    window.dispatchEvent(new CustomEvent(VgEvents.VG_START_ADS));\n    this.displayState = 'block';\n  }\n\n  hide() {\n    window.dispatchEvent(new CustomEvent(VgEvents.VG_END_ADS));\n    this.displayState = 'none';\n  }\n\n  onContentEnded() {\n    this.ima.adsLoader.contentComplete();\n    this.onAdStop.emit(true);\n  }\n\n  onChangeFullscreen(fsState: boolean) {\n    if (!this.fsAPI.nativeFullscreen) {\n      this.isFullscreen = fsState;\n    }\n  }\n\n  private onMissingGoogleImaLoader() {\n    this.hide();\n    this.API.play();\n  }\n\n  ngOnDestroy() {\n    this.subscriptions.forEach((s) => s.unsubscribe());\n  }\n}\n\nexport class Ima {\n  adDisplayContainer: google.ima.AdDisplayContainer;\n  adsLoader: google.ima.AdsLoader;\n  adsManager: google.ima.AdsManager;\n  adsLoaded: boolean;\n  currentAd: number;\n\n  constructor(imaAdsElement: HTMLElement, imaSkipButtonLocale: string) {\n    if (!!google?.ima['settings'] && imaSkipButtonLocale) {\n      google.ima['settings'].setLocale(imaSkipButtonLocale);\n    }\n\n    this.adDisplayContainer = new google.ima.AdDisplayContainer(imaAdsElement);\n    this.adsLoader = new google.ima.AdsLoader(this.adDisplayContainer);\n\n    this.adsManager = null;\n    this.adsLoaded = false;\n    this.currentAd = 0;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { VgImaAdsComponent } from './vg-ima-ads.component';\nimport { VgCoreModule } from '@videogular/ngx-videogular/core';\n\n@NgModule({\n  imports: [CommonModule, VgCoreModule],\n  declarations: [VgImaAdsComponent],\n  exports: [VgImaAdsComponent],\n})\nexport class VgImaAdsModule {}\n","export * from './lib/ima-ads.module';\nexport * from './lib/vg-ima-ads.component';\n// export './lib/google.ima';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}