UNPKG

ng-gpt

Version:
1 lines 53.1 kB
{"version":3,"file":"ng-gpt.mjs","sources":["../../../projects/ng-gpt/src/lib/gpt.config.ts","../../../projects/ng-gpt/src/lib/gpt.contants.ts","../../../projects/ng-gpt/src/lib/services/idle.service.ts","../../../projects/ng-gpt/src/lib/services/script-injector.service.ts","../../../projects/ng-gpt/src/lib/services/http-error.service.ts","../../../projects/ng-gpt/src/lib/services/pubads.setConfig.service.ts","../../../projects/ng-gpt/src/lib/services/parse-duration.service.ts","../../../projects/ng-gpt/src/lib/services/gpt-refresh.service.ts","../../../projects/ng-gpt/src/lib/services/gpt-idGenerator.service.ts","../../../projects/ng-gpt/src/lib/ng-gpt.service.ts","../../../projects/ng-gpt/src/lib/ng-gpt-ad.directive.ts","../../../projects/ng-gpt/src/lib/ng-gpt-video.directive.ts","../../../projects/ng-gpt/src/lib/ng-gpt.module.ts","../../../projects/ng-gpt/src/public-api.ts","../../../projects/ng-gpt/src/ng-gpt.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport {\n  LazyLoadOptionsConfig,\n  SafeFrameConfig,\n} from './ng-gpt-googletag.interface';\n\nexport class GptConfig {\n  [index: string]: any;\n  idleLoad?: boolean;\n  onSameNavigation?: 'refresh' | 'ignore';\n  singleRequestMode?: boolean;\n  enableVideoAds?: boolean;\n  personalizedAds?: boolean;\n  collapseEmptyDivs?: boolean;\n  centering?: boolean;\n  address?: string;\n  limitedAds?: boolean;\n  forceSafeFrame?: boolean;\n  ppid?: string;\n  globalTargeting?: object;\n  safeFrameConfig?: SafeFrameConfig;\n  enableLazyLoad?: LazyLoadOptionsConfig;\n  loadGPT?: boolean;\n}\n\nexport const GPT_CONFIG = new InjectionToken<GptConfig>('gptConfig');\n","export const GPT_URL = '//www.googletagservices.com/tag/js/gpt.js';\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';\n\n@Injectable()\nexport class IdleService {\n  private requestIdleCallback: any;\n\n  constructor(@Inject(PLATFORM_ID) platformId: Object, zone: NgZone) {\n    const w: any = isPlatformBrowser(platformId) ? window : {};\n    if (w.requestIdleCallback) {\n      this.requestIdleCallback = (fun: Function) => {\n        return w.requestIdleCallback(fun);\n      };\n    } else {\n      this.requestIdleCallback = (fun: Function) => {\n        return zone.runOutsideAngular(() => w.setTimeout(fun, 50));\n      };\n    }\n  }\n\n  request(fun: Function) {\n    this.requestIdleCallback(fun);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpErrorService } from '.';\n\n@Injectable()\nexport class ScriptInjectorService {\n  constructor(private httpError: HttpErrorService) {}\n\n  private completeURL(url: string) {\n    const ssl = document.location.protocol === 'https:';\n    return (ssl ? 'https:' : 'http:') + url;\n  }\n\n  private createScript(url: string) {\n    const script = document.createElement('script');\n\n    script.async = true;\n    script.type = 'text/javascript';\n    script.src = this.completeURL(url);\n\n    return script;\n  }\n\n  private promiseScript(script: any, url: string) {\n    const promise = new Promise((resolve, reject) => {\n      script.onload = () => {\n        resolve(script);\n      };\n      script.onerror = () => {\n        reject({\n          path: url,\n          loaded: false,\n        });\n      };\n    });\n\n    promise.catch((response: any) => {\n      this.httpError.httpError({ status: 400 }, `loading script \"${url}\"`);\n    });\n\n    return promise;\n  }\n\n  injectScript(script: any) {\n    const head = document.head || document.querySelector('head');\n    head.appendChild(script);\n  }\n\n  scriptInjector(url: string) {\n    const script = this.createScript(url);\n    this.injectScript(script);\n    return this.promiseScript(script, url);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class HttpErrorService {\n  httpError(response: any, message: string) {\n    console.error(`Error (${response.status}) ${message ? message : ''}`);\n  }\n\n  isErrorCode = function (code: number | string) {\n    if (typeof code === 'number') {\n      return !(code >= 200 && code < 300);\n    }\n    return code[0] !== '2';\n  };\n}\n","import { Injectable } from '@angular/core';\nimport { PubAdsService, SafeFrameConfig } from '../ng-gpt-googletag.interface';\n\n@Injectable()\nexport class PubadsSetConfigService {\n  /**\n   * Passes location information from websites so you can geo-target line items to specific locations.\n   *\n   * @param address Freeform address.\n   * @param pubads Publisher Ads service. This service is used to fetch and show ads from your Google Ad Manager account.\n   */\n  public addLocation(address: string, pubads: PubAdsService): void {\n    if (address) {\n      pubads.setLocation(address);\n    }\n  }\n\n  /**\n   * Sets the value for the publisher-provided ID.\n   *\n   * @param ppid An alphanumeric ID provided by the publisher with a recommended maximum of 150 characters.\n   * @param pubads Publisher Ads service. This service is used to fetch and show ads from your Google Ad Manager account.\n   */\n  public addPPID(ppid: string, pubads: PubAdsService): void {\n    if (ppid) {\n      pubads.setPublisherProvidedId(ppid);\n    }\n  }\n\n  /**\n   * Sets a custom targeting parameter for this slot.\n   *\n   * @param globalTargeting\n   * @param pubads Publisher Ads service. This service is used to fetch and show ads from your Google Ad Manager account.\n   */\n  public addTargeting(\n    globalTargeting: { [index: string]: any },\n    pubads: PubAdsService\n  ): void {\n    if (Object.keys(globalTargeting).length) {\n      for (const key in globalTargeting) {\n        if (globalTargeting.hasOwnProperty(key)) {\n          pubads.setTargeting(key, globalTargeting[key]);\n        }\n      }\n    }\n  }\n\n  /**\n   * Sets the page-level preferences for SafeFrame configuration.\n   *\n   * @param safeFrameConfig The configuration object.\n   * @param pubads Publisher Ads service. This service is used to fetch and show ads from your Google Ad Manager account.\n   */\n  public addSafeFrameConfig(\n    safeFrameConfig: SafeFrameConfig,\n    pubads: PubAdsService\n  ): void {\n    if (Object.keys(safeFrameConfig).length)\n      pubads.setSafeFrameConfig(safeFrameConfig);\n  }\n}\n","import { Injectable } from '@angular/core';\n\nclass GPTDurationError extends Error {\n  constructor(interval: number | string) {\n    super(`Invalid interval: '${interval}'ls`);\n  }\n}\n\n@Injectable()\nexport class ParseDurationService {\n  convertToMilliseconds(time: number, unit: string) {\n    console.assert(/^(m?s|min|h)$/g.test(unit));\n\n    if (unit === 'ms') {\n      return time;\n    }\n    if (unit === 's') {\n      return time * 1000;\n    }\n    if (unit === 'min') {\n      return time * 60 * 1000;\n    }\n\n    return time * 60 * 60 * 1000;\n  }\n\n  convert(match: any) {\n    const time = parseFloat(match[1]);\n\n    if (match.length === 2) {\n      return time;\n    }\n\n    return this.convertToMilliseconds(time, match[2]);\n  }\n\n  parseDuration(interval: any) {\n    if (interval === undefined || interval === null) {\n      throw new GPTDurationError(interval);\n    }\n\n    if (typeof interval === 'number') {\n      return interval;\n    }\n\n    if (typeof interval !== 'string') {\n      throw new TypeError(`'${interval}' must be of number or string type`);\n    }\n\n    const match = interval.match(/((?:\\d+)?.?\\d+)(m?s|min|h)?/);\n\n    if (!match) {\n      throw new GPTDurationError(interval);\n    }\n\n    return this.convert(match);\n  }\n}\n","import {\n  Injectable,\n  EventEmitter,\n  Optional,\n  Injector,\n  Inject,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { Subscription, timer, from } from 'rxjs';\n\nimport { GptConfig, GPT_CONFIG } from '../gpt.config';\nimport { ParseDurationService } from '.';\nimport { Googletag } from '../ng-gpt-googletag.interface';\n\nclass GPTRefreshError extends Error {}\n\ndeclare var googletag: Googletag;\n\n@Injectable()\nexport class GptRefreshService {\n  refreshEvent: EventEmitter<any> = new EventEmitter();\n  private refreshSlots: any[] = [];\n  private singleRequest: Subscription;\n  private intervals: { [index: string]: any } = {};\n\n  constructor(\n    @Optional()\n    @Inject(GPT_CONFIG)\n    private config: GptConfig,\n    private inject: Injector,\n    private parseDuration: ParseDurationService\n  ) {}\n\n  slotRefresh(\n    slot: any,\n    refreshInterval?: number | string,\n    initRefresh = false\n  ) {\n    const deferred: Promise<any> = from([slot]).toPromise(),\n      task = { slot: slot, deferred: deferred };\n\n    deferred.then(() => {\n      if (this.hasSlotInterval(slot)) {\n        this.cancelInterval(slot);\n      }\n      if (refreshInterval) {\n        this.addSlotInterval(task, refreshInterval);\n      }\n    });\n\n    if (this.config.singleRequestMode === true && initRefresh) {\n      // Use a timer to handle refresh of a single request mode\n      this.refreshSlots.push(slot);\n      if (this.singleRequest && !this.singleRequest.closed) {\n        this.singleRequest.unsubscribe();\n      }\n      this.singleRequest = timer(100).subscribe(() => {\n        const pubads = googletag.pubads();\n        pubads.enableSingleRequest();\n        googletag.enableServices();\n        this.refreshSlots.forEach((s: any) => {\n          googletag.display(s.getSlotElementId());\n        });\n        pubads.refresh(this.refreshSlots);\n        this.refreshSlots = [];\n      });\n    } else {\n      googletag.display(slot.getSlotElementId());\n      this.refresh([task]);\n    }\n\n    return deferred;\n  }\n\n  cancelInterval(slot: any) {\n    if (!this.hasSlotInterval(slot)) {\n      throw new GPTRefreshError('No interval for given slot');\n    }\n\n    const interval: Subscription = this.intervals[this.slotIntervalKey(slot)];\n    interval.unsubscribe();\n    delete this.intervals[slot];\n\n    return this;\n  }\n\n  private hasSlotInterval(slot: any) {\n    return this.slotIntervalKey(slot) in this.intervals;\n  }\n\n  private refresh(tasks?: any[]) {\n    if (tasks === undefined) {\n      googletag.cmd.push(() => {\n        googletag.pubads().refresh();\n      });\n      return;\n    }\n\n    if (tasks.length === 0) {\n      return false;\n    }\n\n    googletag.cmd.push(() => {\n      googletag.pubads().refresh(tasks.map((task: any) => task.slot));\n      tasks.forEach((task: any) => {\n        Promise.resolve(task.slot);\n      });\n    });\n\n    return true;\n  }\n\n  private addSlotInterval(task: any, interval: any) {\n    const parsedInterval = this.parseDuration.parseDuration(interval);\n    this.validateInterval(parsedInterval, interval);\n\n    const refresh = timer(parsedInterval, parsedInterval).subscribe(() => {\n      const doc = this.inject.get(DOCUMENT);\n      if (!this.hiddenCheck(doc.getElementById(task.slot.getSlotElementId()))) {\n        this.refresh([task]);\n        this.refreshEvent.emit(task.slot);\n      }\n    });\n\n    this.intervals[this.slotIntervalKey(task.slot)] = refresh;\n\n    return refresh;\n  }\n\n  private slotIntervalKey(slot: any) {\n    return slot.getSlotId().getDomId();\n  }\n\n  private validateInterval(milliseconds: number, beforeParsing: any) {\n    if (milliseconds < 1000) {\n      console.warn('Careful: ${beforeParsing} is quite a low interval!');\n    }\n  }\n\n  hiddenCheck(element: any): any {\n    if (typeof window !== 'undefined') {\n      const css = window.getComputedStyle(element);\n      if (css.display === 'none') {\n        return true;\n      } else if (element.parentElement) {\n        return this.hiddenCheck(element.parentElement);\n      }\n    }\n    return false;\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class GptIDGeneratorService {\n  private generatedIDs: { [index: string]: any } = {};\n\n  generateID(type = 'gpt-ad'): string {\n    let id = '';\n\n    do {\n      const number = Math.random().toString().slice(2);\n      id = type + '-' + number;\n    } while (id in this.generatedIDs);\n\n    this.generatedIDs[id] = true;\n\n    return id;\n  }\n\n  gptIDGenerator(element: HTMLElement): string {\n    if (element && element.id && !(element.id in this.generatedIDs)) {\n      return element.id;\n    }\n\n    const id = this.generateID(element.tagName.toLowerCase());\n    if (element) {\n      element.id = id;\n    }\n\n    return id;\n  }\n\n  isTaken(id: string): boolean {\n    return id in this.generatedIDs;\n  }\n\n  isUnique(id: string): boolean {\n    return !this.isTaken(id);\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\nimport { PubadsSetConfigService, ScriptInjectorService } from './services';\nimport { GptConfig, GPT_CONFIG } from './gpt.config';\nimport { GPT_URL } from './gpt.contants';\nimport {\n  Googletag,\n  LazyLoadOptionsConfig,\n  SafeFrameConfig,\n} from './ng-gpt-googletag.interface';\nimport { IdleService } from './services/idle.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgGptService {\n  private collapseEmptyDivs = true;\n  private enableVideoAds = false;\n  private enableLazyLoad: LazyLoadOptionsConfig = {};\n  private centering = false;\n  private personalizedAds = true;\n  private limitedAds = false;\n  private forceSafeFrame = false;\n  private address: string = '';\n  private ppid: string = '';\n  private globalTargeting: object = {};\n  private safeFrameConfig: SafeFrameConfig = {};\n  private loadGPT = true;\n  private loaded = false;\n  [index: string]: any;\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformID: Object,\n    @Inject(GPT_CONFIG) private config: GptConfig,\n    @Optional() idleLoad: IdleService,\n    private pubadsSetConfig: PubadsSetConfigService,\n    private scriptInjector: ScriptInjectorService\n  ) {\n    if (isPlatformBrowser(this.platformID)) {\n      const w: any = window,\n        googletag: Googletag = w.googletag || {};\n\n      this.gptConfig();\n\n      googletag.cmd = googletag.cmd || [];\n      googletag.cmd.push(() => {\n        this.setup();\n      });\n      w.googletag = googletag;\n\n      if (this.loadGPT) {\n        const loadScript = () => {\n          this.scriptInjector.scriptInjector(GPT_URL).then((script: any) => {\n            this.loaded = true;\n          });\n        };\n        if (idleLoad) {\n          idleLoad.request(loadScript);\n        } else {\n          loadScript();\n        }\n      }\n    }\n  }\n\n  private gptConfig() {\n    for (const key in this.config) {\n      if (this.hasOwnProperty(key)) {\n        this[key] = this.config[key];\n      }\n    }\n  }\n\n  private setup() {\n    const w: any = window,\n      googletag: Googletag = w.googletag,\n      pubads = googletag.pubads();\n\n    if (this.enableVideoAds) pubads.enableVideoAds();\n    if (this.collapseEmptyDivs) pubads.collapseEmptyDivs();\n\n    pubads.disableInitialLoad();\n    pubads.setForceSafeFrame(this.forceSafeFrame);\n    pubads.setCentering(this.centering);\n    pubads.setRequestNonPersonalizedAds(this.personalizedAds ? 0 : 1);\n\n    this.pubadsSetConfig.addLocation(this.address, pubads);\n    this.pubadsSetConfig.addPPID(this.ppid, pubads);\n    this.pubadsSetConfig.addTargeting(this.globalTargeting, pubads);\n    this.pubadsSetConfig.addSafeFrameConfig(this.safeFrameConfig, pubads);\n\n    pubads.setPrivacySettings({\n      limitedAds: this.limitedAds,\n    });\n\n    if (this.config.singleRequestMode !== true) {\n      if (this.config.enableVideoAds) {\n        pubads.enableVideoAds();\n      }\n      googletag.enableServices();\n    }\n\n    if (Object.keys(this.enableLazyLoad).length) {\n      pubads.enableLazyLoad(this.enableLazyLoad);\n    }\n  }\n\n  hasLoaded(): boolean {\n    return this.loaded;\n  }\n\n  defineTask(task: any): void {\n    if (isPlatformBrowser(this.platformID)) {\n      const w: any = window,\n        googletag: Googletag = w.googletag;\n\n      googletag.cmd.push(task);\n    }\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  PLATFORM_ID,\n} from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { Subscription, Observable } from 'rxjs';\nimport { GptConfig, GPT_CONFIG } from './gpt.config';\nimport { Googletag, SafeFrameConfig, Slot } from './ng-gpt-googletag.interface';\nimport { NgGptService } from './ng-gpt.service';\nimport { GptRefreshService } from './services';\nimport { GptIDGeneratorService } from './services/gpt-idGenerator.service';\n\ndeclare var googletag: Googletag;\n\nexport class GptRefreshEvent {\n  type: string;\n  slot: any;\n  data?: any;\n}\n\ninterface SizeMapping {\n  viewport: [number, number];\n  sizes: [number, number][];\n}\n\ninterface TargetingArguments {\n  [key: string]: any;\n}\n\n@Directive({ selector: 'gpt-ad' })\nexport class NgGptAdDirective implements OnInit, AfterViewInit, OnDestroy {\n  @Input() id: string;\n  @Input() adUnit: string;\n  @Input() sizes: [number, number][] | string = 'fluid';\n  @Input() sizeMapping: SizeMapping[] = [];\n  @Input() forceSafeFrame: boolean;\n  @Input() safeFrameConfig: SafeFrameConfig;\n  @Input() refresh: number;\n  @Input() collapseEmptyDivs: boolean;\n  @Input() targetingArguments: TargetingArguments = {};\n\n  @Output() afterRefresh: EventEmitter<GptRefreshEvent> = new EventEmitter();\n\n  private slot: Slot;\n  private onSameNavigation;\n  private scripts: any[] = [];\n  private exclusions: any[] = [];\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformID: Object,\n    private elementRef: ElementRef,\n    private gpt: NgGptService,\n    private gptRefresh: GptRefreshService,\n    private gptIDGenerator: GptIDGeneratorService,\n    @Inject(GPT_CONFIG) private config: GptConfig,\n    @Optional() router: Router\n  ) {\n    if (isPlatformBrowser(this.platformID)) {\n      this.gptRefresh.refreshEvent.subscribe((slot) => {\n        if (slot === this.slot) {\n          this.afterRefresh.emit({ type: 'refresh', slot: slot });\n        }\n      });\n      if (router) {\n        this.onSameNavigation = router.events.pipe().subscribe((event: any) => {\n          if (\n            this.slot &&\n            !this.refresh &&\n            this.config.onSameNavigation === 'refresh'\n          ) {\n            this.refreshContent.call(this);\n          }\n        });\n      }\n    }\n  }\n\n  ngOnInit() {\n    this.checkRequiredFields(this.adUnit, 'adUnit');\n    if (isPlatformBrowser(this.platformID) && !this.id) {\n      this.gptIDGenerator.gptIDGenerator(this.elementRef.nativeElement);\n    }\n  }\n\n  ngAfterViewInit() {\n    if (isPlatformBrowser(this.platformID)) {\n      this.gpt.defineTask(() => {\n        this.defineSlot();\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.slot) {\n      googletag.destroySlots([this.slot]);\n    }\n    if (this.onSameNavigation) {\n      this.onSameNavigation.unsubscribe();\n    }\n  }\n\n  private setSizeMapping(slot: Slot) {\n    const ad = this.getState();\n\n    if (ad.sizeMapping.length === 0) {\n      return;\n    }\n\n    const sizeMapping = googletag.sizeMapping();\n\n    ad.sizeMapping.forEach((mapping) => {\n      sizeMapping.addSize(mapping.viewport, mapping.sizes);\n    });\n\n    slot.defineSizeMapping(sizeMapping.build());\n  }\n\n  private defineSlot() {\n    const ad = this.getState(),\n      element = this.elementRef.nativeElement;\n\n    this.slot = googletag.defineSlot(ad.adUnit, ad.sizes, element.id);\n\n    if (\n      this.forceSafeFrame !== undefined &&\n      ad.forceSafeFrame === !this.config.forceSafeFrame\n    ) {\n      this.slot.setForceSafeFrame(ad.forceSafeFrame);\n    }\n\n    // if (ad.clickUrl) {\n    //   this.slot.setClickUrl(ad.clickUrl);\n    // }\n\n    if (ad.collapseEmptyDivs) {\n      this.slot.setCollapseEmptyDiv(true, true);\n    }\n\n    if (ad.safeFrameConfig) {\n      this.slot.setSafeFrameConfig(ad.safeFrameConfig);\n    }\n\n    googletag.pubads().addEventListener('slotRenderEnded', (event) => {\n      if (event.slot === this.slot) {\n        this.afterRefresh.emit({\n          type: 'renderEnded',\n          slot: this.slot,\n          data: event,\n        });\n      }\n    });\n\n    this.setSizeMapping(this.slot);\n\n    Object.keys(ad.targetingArguments).forEach((arg) => {\n      this.slot.setTargeting(arg, ad.targetingArguments[arg]);\n    });\n\n    ad.exclusions.forEach((exclusion) => {\n      this.slot.setCategoryExclusion(exclusion);\n    });\n\n    ad.scripts.forEach((script) => {\n      script(this.slot);\n    });\n\n    if (this.config.enableVideoAds) {\n      this.slot.addService(googletag.companionAds());\n    }\n\n    this.slot.addService(googletag.pubads());\n\n    this.refreshContent();\n  }\n\n  private refreshContent() {\n    this.gptRefresh.slotRefresh(this.slot, this.refresh, true).then((slot) => {\n      this.afterRefresh.emit({ type: 'init', slot: slot });\n    });\n  }\n\n  get isHidden() {\n    return this.gptRefresh.hiddenCheck(this.elementRef.nativeElement);\n  }\n\n  getState() {\n    return Object.freeze({\n      sizes: typeof this.sizes === 'string' ? [this.sizes] : this.sizes,\n      sizeMapping: this.sizeMapping,\n      targetingArguments: this.targetingArguments,\n      exclusions: this.exclusions,\n      adUnit: this.adUnit,\n      forceSafeFrame: this.forceSafeFrame === true,\n      safeFrameConfig: this.safeFrameConfig,\n      // clickUrl: this.clickUrl,\n      refresh: this.refresh,\n      scripts: this.scripts,\n      collapseEmptyDivs: this.collapseEmptyDivs === true,\n    });\n  }\n\n  checkRequiredFields(input: any, name: string) {\n    if (input === null) {\n      throw new Error(`Attribute ${name} is required`);\n    }\n  }\n\n  addExclusion(exclusion: any) {\n    this.exclusions.push(exclusion);\n  }\n\n  addScript(script: any) {\n    this.scripts.push(script);\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  Directive,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnInit,\n  Output,\n  PLATFORM_ID,\n  Renderer2,\n} from '@angular/core';\nimport { loadImaSdk, google } from '@alugha/ima';\nimport { GptIDGeneratorService } from './services';\n\n@Directive({ selector: 'gpt-video' })\nexport class NgGptVideoDirective implements OnInit {\n  @Input() id: string;\n  @Input() adTagUrl: string;\n  @Input() sizes: [number, number];\n  @Output() adEvents = new EventEmitter<any>();\n  @Input() adActions: EventEmitter<'play' | 'pause' | 'resume'>;\n\n  contentPlayer: HTMLVideoElement;\n  adContainer: HTMLElement;\n\n  private contentCompleteCalled: boolean;\n  private adDisplayContainer: google.ima.AdDisplayContainer;\n  private adsLoader: google.ima.AdsLoader;\n  private adsManager: google.ima.AdsManager;\n  private adsDone = false;\n  private ima: any;\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformId: Object,\n    private elementRef: ElementRef,\n    private renderer: Renderer2,\n    private gptIDGenerator: GptIDGeneratorService\n  ) {}\n\n  ngOnInit(): void {\n    if (isPlatformBrowser(this.platformId)) {\n      const el = this.elementRef.nativeElement;\n\n      if (!this.id) {\n        this.gptIDGenerator.gptIDGenerator(el);\n      }\n\n      this.contentPlayer = el.querySelector('video');\n      this.renderer.setAttribute(\n        this.contentPlayer,\n        'width',\n        this.sizes[0].toString()\n      );\n      this.renderer.setAttribute(\n        this.contentPlayer,\n        'height',\n        this.sizes[1].toString()\n      );\n\n      this.adContainer = el.querySelector('.ad-container');\n      if (!this.adContainer) {\n        this.adContainer = this.renderer.createElement('div');\n        this.renderer.addClass(this.adContainer, 'ad-container');\n        this.renderer.appendChild(el, this.adContainer);\n      }\n\n      // ima setup\n      loadImaSdk().then((ima) => {\n        this.ima = ima;\n        return this.setUpIMA();\n      });\n\n      this.adActions.subscribe((act) => {\n        switch (act) {\n          case 'play':\n            this.play();\n            break;\n          case 'pause':\n            this.pause();\n            break;\n          case 'resume':\n            this.resume();\n            break;\n        }\n      });\n    }\n  }\n\n  play() {\n    if (!this.adsDone) {\n      this.initialUserAction();\n      this.loadAds();\n      this.adsDone = true;\n    }\n  }\n\n  pause() {\n    if (this.adsManager) {\n      this.adsManager.pause();\n    }\n  }\n\n  resume() {\n    if (this.adsManager) {\n      this.adsManager.resume();\n    }\n  }\n\n  setUpIMA() {\n    // Create the ad display container.\n    this.adDisplayContainer = new this.ima.AdDisplayContainer(\n      this.adContainer,\n      this.contentPlayer\n    );\n    // Create ads loader.\n    this.adsLoader = new this.ima.AdsLoader(this.adDisplayContainer);\n    // Listen and respond to ads loaded and error events.\n    this.adsLoader.addEventListener(\n      this.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n      (event) => this.onAdsManagerLoaded(event),\n      false\n    );\n    this.adsLoader.addEventListener(\n      this.ima.AdErrorEvent.Type.AD_ERROR,\n      (event) => this.onAdError(event),\n      false\n    );\n\n    // An event listener to tell the SDK that our content video\n    // is completed so the SDK can play any post-roll ads.\n    this.contentPlayer.onended = () => {\n      this.contentEnded();\n    };\n  }\n\n  initialUserAction() {\n    this.adDisplayContainer.initialize();\n    this.contentPlayer.load();\n  }\n\n  requestAds(adTagUrl: string) {\n    const adsRequest = new this.ima.AdsRequest();\n    adsRequest.adTagUrl = adTagUrl;\n    adsRequest.linearAdSlotWidth = this.sizes[0];\n    adsRequest.linearAdSlotHeight = this.sizes[1];\n    adsRequest.nonLinearAdSlotWidth = this.sizes[0];\n    adsRequest.nonLinearAdSlotHeight = this.sizes[1];\n    this.adsLoader.requestAds(adsRequest);\n  }\n\n  contentEnded() {\n    this.contentCompleteCalled = true;\n    this.adsLoader.contentComplete();\n  }\n\n  onAdsManagerLoaded(adsManagerLoadedEvent: any) {\n    const adsRenderingSettings = new this.ima.AdsRenderingSettings();\n    adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n    this.adsManager = adsManagerLoadedEvent.getAdsManager(\n      this.contentPlayer,\n      adsRenderingSettings\n    );\n    this.startAdsManager(this.adsManager);\n  }\n\n  startAdsManager(adsManager: google.ima.AdsManager) {\n    // Attach the pause/resume events.\n    adsManager.addEventListener(\n      this.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,\n      () => this.onContentPauseRequested(),\n      false\n    );\n    adsManager.addEventListener(\n      this.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,\n      () => this.onContentResumeRequested(),\n      false\n    );\n    // Handle errors.\n    adsManager.addEventListener(\n      this.ima.AdErrorEvent.Type.AD_ERROR,\n      (event: google.ima.AdErrorEvent) => this.onAdError(event),\n      false\n    );\n    const events = [\n      this.ima.AdEvent.Type.ALL_ADS_COMPLETED,\n      this.ima.AdEvent.Type.CLICK,\n      this.ima.AdEvent.Type.COMPLETE,\n      this.ima.AdEvent.Type.FIRST_QUARTILE,\n      this.ima.AdEvent.Type.LOADED,\n      this.ima.AdEvent.Type.MIDPOINT,\n      this.ima.AdEvent.Type.PAUSED,\n      this.ima.AdEvent.Type.STARTED,\n      this.ima.AdEvent.Type.THIRD_QUARTILE,\n    ];\n    events.forEach((event) =>\n      adsManager.addEventListener(\n        event,\n        (adEvent) => this.onAdEvent(adEvent),\n        false\n      )\n    );\n\n    adsManager.init(this.sizes[0], this.sizes[1], this.ima.ViewMode.NORMAL);\n\n    adsManager.start();\n  }\n\n  onContentPauseRequested() {\n    this.pauseForAd();\n  }\n\n  onContentResumeRequested() {\n    // Without this check the video starts over from the beginning on a\n    // post-roll's CONTENT_RESUME_REQUESTED\n    if (!this.contentCompleteCalled) {\n      this.resumeAfterAd();\n    }\n  }\n\n  onAdEvent(adEvent: any) {\n    if (adEvent.type === this.ima.AdEvent.Type.LOADED) {\n      const ad = adEvent.getAd();\n      if (!ad.isLinear()) {\n        this.onContentResumeRequested();\n      }\n    }\n    this.adEvents.emit(adEvent);\n  }\n\n  onAdError(adErrorEvent: any) {\n    if (this.adsManager) {\n      this.adsManager.destroy();\n    }\n    this.resumeAfterAd();\n    this.adEvents.emit(adErrorEvent);\n  }\n\n  // application functions\n\n  resumeAfterAd() {\n    this.contentPlayer.play();\n  }\n\n  pauseForAd() {\n    this.contentPlayer.pause();\n  }\n\n  loadAds() {\n    this.requestAds(this.adTagUrl);\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { GptConfig, GPT_CONFIG } from './gpt.config';\nimport { NgGptAdDirective } from './ng-gpt-ad.directive';\nimport { NgGptVideoDirective } from './ng-gpt-video.directive';\nimport {\n  HttpErrorService,\n  ScriptInjectorService,\n  IdleService,\n  PubadsSetConfigService,\n  GptRefreshService,\n  ParseDurationService,\n  GptIDGeneratorService,\n} from './services';\n\n@NgModule({\n  declarations: [NgGptAdDirective, NgGptVideoDirective],\n  providers: [\n    HttpErrorService,\n    ScriptInjectorService,\n    IdleService,\n    PubadsSetConfigService,\n    GptRefreshService,\n    ParseDurationService,\n    GptIDGeneratorService,\n  ],\n  exports: [NgGptAdDirective, NgGptVideoDirective],\n})\nexport class NgGptModule {\n  static forRoot(config?: GptConfig): ModuleWithProviders<NgGptModule> {\n    return {\n      ngModule: NgGptModule,\n      providers: [\n        ...(config && config.idleLoad === true ? [IdleService] : []),\n        { provide: GPT_CONFIG, useValue: config || {} },\n      ],\n    };\n  }\n}\n","/*\n * Public API Surface of ng-gpt\n */\n\nexport * from './lib/ng-gpt.service';\nexport * from './lib/ng-gpt-ad.directive';\nexport * from './lib/ng-gpt-video.directive';\nexport * from './lib/ng-gpt.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}