{"version":3,"file":"dfp.mjs","sources":["../../src/lib/consts.ts","../../src/lib/events.ts","../../src/lib/actions.ts","../../src/lib/dfp.service.ts","../../src/lib/dfp-ad.directive.ts","../../src/lib/dfp.module.ts","../../src/public-api.ts","../../src/dfp.ts"],"sourcesContent":["/* eslint-disable no-unused-vars */\nimport { InjectionToken } from '@angular/core';\nimport { of } from 'rxjs';\n\nexport const DELAY_TIME = 50;\n\nexport enum GPT_SOURCE {\n  STANDARD = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',\n  LIMITED_ADS = 'https://pagead2.googlesyndication.com/tag/js/gpt.js',\n}\n\nexport const GPT_LOADER = new InjectionToken('GPT_LOADER', {\n  providedIn: 'root',\n  factory: () => of(GPT_SOURCE.STANDARD),\n});\n","export class Event implements googletag.events.Event {\n  serviceName!: string;\n  slot!: googletag.Slot;\n  constructor(event: googletag.events.Event) {\n    Object.assign(this, event);\n  }\n}\n\nexport class ImpressionViewableEvent extends Event {}\n\nexport class RewardedSlotClosedEvent extends Event {}\n\nexport class RewardedSlotGrantedEvent\n  extends Event\n  implements googletag.events.RewardedSlotGrantedEvent\n{\n  payload!: googletag.RewardedPayload | null;\n}\n\nexport class RewardedSlotReadyEvent\n  extends Event\n  implements googletag.events.RewardedSlotReadyEvent\n{\n  makeRewardedVisible!: () => void;\n}\n\nexport class SlotOnloadEvent extends Event {}\n\nexport class SlotRenderEndedEvent\n  extends Event\n  implements googletag.events.SlotRenderEndedEvent\n{\n  companyIds!: number[] | null;\n  creativeTemplateId!: number | null;\n  isBackfill!: boolean;\n  labelIds!: number[] | null;\n  slotContentChanged!: boolean;\n  yieldGroupIds!: number[] | null;\n  advertiserId!: number | null;\n  campaignId!: number | null;\n  creativeId!: number | null;\n  isEmpty!: boolean;\n  lineItemId!: number | null;\n  size!: string | number[] | null;\n  sourceAgnosticCreativeId!: number | null;\n  sourceAgnosticLineItemId!: number | null;\n}\n\nexport class SlotRequestedEvent extends Event {}\n\nexport class SlotResponseReceived extends Event {}\n\nexport class SlotVisibilityChangedEvent\n  extends Event\n  implements googletag.events.SlotVisibilityChangedEvent\n{\n  inViewPercentage!: number;\n}\n\nexport const EVENT_TYPES: Array<keyof googletag.events.EventTypeMap> = [\n  'impressionViewable',\n  'rewardedSlotClosed',\n  'rewardedSlotGranted',\n  'rewardedSlotReady',\n  'slotRequested',\n  'slotResponseReceived',\n  'slotRenderEnded',\n  'slotOnload',\n  'slotVisibilityChanged',\n];\n\nexport function eventFactory(\n  type: keyof googletag.events.EventTypeMap,\n  event: googletag.events.Event,\n): Event {\n  switch (type) {\n    case 'impressionViewable':\n      return new ImpressionViewableEvent(event);\n    case 'rewardedSlotClosed':\n      return new RewardedSlotClosedEvent(event);\n    case 'rewardedSlotGranted':\n      return new RewardedSlotGrantedEvent(event);\n    case 'rewardedSlotReady':\n      return new RewardedSlotReadyEvent(event);\n    case 'slotRequested':\n      return new SlotRequestedEvent(event);\n    case 'slotResponseReceived':\n      return new SlotResponseReceived(event);\n    case 'slotRenderEnded':\n      return new SlotRenderEndedEvent(event);\n    case 'slotOnload':\n      return new SlotOnloadEvent(event);\n    case 'slotVisibilityChanged':\n      return new SlotVisibilityChangedEvent(event);\n  }\n}\n","class SlotRequest {\n  slot: googletag.Slot;\n  constructor(slot: googletag.Slot) {\n    this.slot = slot;\n  }\n}\n\nexport class DisplaySlot extends SlotRequest {}\n\nexport class RefreshSlot extends SlotRequest {}\n\nexport type Request = DisplaySlot | RefreshSlot;\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport { EMPTY, Observable, Subject, timer } from 'rxjs';\nimport { buffer, filter, switchMap, take } from 'rxjs/operators';\n\nimport { DELAY_TIME, GPT_LOADER, GPT_SOURCE } from './consts';\nimport {\n  Event,\n  EVENT_TYPES,\n  eventFactory,\n  RewardedSlotReadyEvent,\n  RewardedSlotGrantedEvent,\n  RewardedSlotClosedEvent,\n  SlotRenderEndedEvent,\n} from './events';\nimport { Request, DisplaySlot, RefreshSlot } from './actions';\nimport { ScriptOptions, DfpAd } from './types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DfpService {\n  private $singleRequest = new Subject<Request>();\n  private $events = new Subject<Event>();\n  get events(): Observable<Event> {\n    return this.$events.asObservable();\n  }\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformId: object,\n    @Inject(DOCUMENT) private document: Document,\n    @Inject(GPT_LOADER) private gptLoader: Observable<GPT_SOURCE>,\n  ) {\n    if (isPlatformBrowser(this.platformId)) {\n      this.init();\n    }\n  }\n\n  private init(): void {\n    // GPT\n    this.gptLoader.subscribe((gptSource) => {\n      this.appendScript({ async: true, src: gptSource });\n    });\n    // Single Request Queue\n    this.$singleRequest\n      .pipe(\n        buffer(\n          this.$singleRequest.pipe(switchMap(() => timer(DELAY_TIME * 2))),\n        ),\n      )\n      .subscribe((acts) => {\n        const refreshSlots: googletag.Slot[] = [];\n        acts.forEach((act) => {\n          if (act instanceof DisplaySlot) {\n            googletag.display(act.slot);\n          }\n          if (\n            act instanceof RefreshSlot ||\n            googletag.pubads().isInitialLoadDisabled()\n          ) {\n            refreshSlots.push(act.slot);\n          }\n        });\n        if (refreshSlots.length > 0) {\n          googletag.pubads().refresh(refreshSlots);\n        }\n      });\n    // Event Listeners\n    googletag.cmd.push(() => {\n      EVENT_TYPES.forEach((type) =>\n        googletag.pubads().addEventListener(type, (event) => {\n          this.$events.next(eventFactory(type, event));\n        }),\n      );\n    });\n  }\n\n  define(ad: DfpAd, definedSlot?: googletag.Slot): googletag.Slot {\n    const id = ad.id || '';\n\n    let slot: googletag.Slot;\n    if (definedSlot) {\n      slot = definedSlot;\n    } else {\n      const exists = this.getSlot(id);\n      if (exists) {\n        this.destroy(exists);\n      }\n      if (ad.size) {\n        slot = googletag.defineSlot(ad.unitPath, ad.size, id) as googletag.Slot;\n      } else {\n        slot = googletag.defineOutOfPageSlot(ad.unitPath, id) as googletag.Slot;\n      }\n    }\n\n    slot\n      .clearCategoryExclusions()\n      .clearTargeting()\n      .defineSizeMapping(ad.sizeMapping || [])\n      .updateTargetingFromMap(ad.targeting || {})\n      .setClickUrl(ad.clickUrl || '')\n      .setForceSafeFrame(ad.forceSafeFrame || false)\n      .setSafeFrameConfig(ad.safeFrameConfig || {});\n\n    if (ad.categoryExclusion instanceof Array) {\n      ad.categoryExclusion.forEach((cat) => slot.setCategoryExclusion(cat));\n    } else if ('string' === typeof ad.categoryExclusion) {\n      slot.setCategoryExclusion(ad.categoryExclusion);\n    }\n\n    if (ad.collapseEmptyDiv instanceof Array) {\n      slot.setCollapseEmptyDiv(ad.collapseEmptyDiv[0], ad.collapseEmptyDiv[1]);\n    } else if ('boolean' === typeof ad.collapseEmptyDiv) {\n      slot.setCollapseEmptyDiv(ad.collapseEmptyDiv);\n    }\n\n    const attributes = ad.adsense || {};\n    for (const key in attributes) {\n      const attributeName = key as googletag.adsense.AttributeName;\n      slot.set(attributeName, attributes[attributeName] ?? '');\n    }\n\n    slot.addService(googletag.pubads());\n    googletag.enableServices();\n\n    return slot;\n  }\n\n  display(slot: googletag.Slot): void {\n    this.$singleRequest.next(new DisplaySlot(slot));\n  }\n\n  refresh(slot: googletag.Slot): void {\n    this.$singleRequest.next(new RefreshSlot(slot));\n  }\n\n  /**\n   * Displays a rewarded ad. This method should not be called until the user has consented to view the ad.\n   */\n  rewarded(ad: DfpAd) {\n    const rewarded = googletag.defineOutOfPageSlot(\n      ad.unitPath,\n      googletag.enums.OutOfPageFormat.REWARDED,\n    );\n    if (rewarded === null) {\n      return EMPTY;\n    }\n    googletag.display(this.define(ad, rewarded));\n    return this.events.pipe(\n      filter((event) => {\n        if (event.slot === rewarded) {\n          if (event instanceof RewardedSlotReadyEvent) {\n            event.makeRewardedVisible();\n          }\n          return (\n            (event instanceof SlotRenderEndedEvent && event.isEmpty) ||\n            event instanceof RewardedSlotGrantedEvent ||\n            event instanceof RewardedSlotClosedEvent\n          );\n        }\n        return false;\n      }),\n      take<\n        | SlotRenderEndedEvent\n        | RewardedSlotGrantedEvent\n        | RewardedSlotClosedEvent\n      >(1),\n    );\n  }\n\n  destroy(slot: googletag.Slot): void {\n    googletag.destroySlots([slot]);\n  }\n\n  getSlot(elementId: string): googletag.Slot | undefined {\n    return this.getSlots().find(\n      (slot) => elementId === slot.getSlotElementId(),\n    );\n  }\n\n  getSlots(elementIds?: string[]): googletag.Slot[] {\n    const slots: googletag.Slot[] = googletag.pubads().getSlots();\n    return slots.filter(\n      (slot) =>\n        !elementIds || elementIds.indexOf(slot.getSlotElementId()) !== -1,\n    );\n  }\n\n  /**\n   * Use googletag.cmd.push() to execute the callback function.\n   * @param callback\n   */\n  cmd(callback: () => void): boolean {\n    if (isPlatformBrowser(this.platformId)) {\n      googletag.cmd.push(callback);\n      return true;\n    }\n    return false;\n  }\n\n  appendScript(\n    options: ScriptOptions,\n    parentNode?: Element,\n  ): HTMLScriptElement {\n    parentNode = parentNode || this.document.head;\n    const oldScript = options.id\n      ? parentNode.querySelector('#' + options.id)\n      : null;\n    const script = this.document.createElement('script');\n    Object.assign(script, options, { type: 'text/javascript' });\n    if (oldScript) {\n      parentNode.replaceChild(script, oldScript);\n    } else {\n      this.appendText('\\n', parentNode);\n      parentNode.appendChild(script);\n      this.appendText('\\n', parentNode);\n    }\n    return script;\n  }\n\n  appendText(data: string, parentNode?: Element): Text {\n    parentNode = parentNode || this.document.head;\n    const text = this.document.createTextNode(data);\n    parentNode.appendChild(text);\n    return text;\n  }\n}\n","/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nimport {\n  Directive,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Optional,\n  Output,\n  PLATFORM_ID,\n  SimpleChanges,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { NavigationEnd, Router } from '@angular/router';\n\nimport { Subject, timer } from 'rxjs';\nimport { filter, switchMap, takeUntil } from 'rxjs/operators';\n\nimport { DELAY_TIME } from './consts';\nimport { DfpService } from './dfp.service';\nimport { DfpAd } from './types';\nimport { SlotRenderEndedEvent, SlotVisibilityChangedEvent } from './events';\n\n@Directive({\n  selector: '[dfpAd]',\n  exportAs: 'dfpAd',\n})\nexport class DfpAdDirective implements DoCheck, OnChanges, OnDestroy {\n  private $destroy = new Subject<void>();\n  private $update = new Subject<void>();\n  private element?: HTMLElement;\n  private slot?: googletag.Slot;\n\n  @Output() renderEnded = new EventEmitter<SlotRenderEndedEvent>();\n  @Output() visibilityChanged = new EventEmitter<SlotVisibilityChangedEvent>();\n\n  @Input() set dfpAd(dfpAd: string | DfpAd) {\n    if (typeof dfpAd === 'string') {\n      this.unitPath = dfpAd;\n    } else {\n      Object.assign(this, dfpAd);\n    }\n  }\n  unitPath!: string;\n  @Input('dfpAdId') id?: string;\n  @Input('dfpAdSize') size?: googletag.GeneralSize;\n  @Input('dfpAdSizeMapping') sizeMapping?: googletag.SizeMappingArray;\n  @Input('dfpAdCategoryExclusion') categoryExclusion?: string | string[];\n  /**\n   * This works only for non-SRA requests.\n   */\n  @Input('dfpAdClickUrl') clickUrl?: string;\n  @Input('dfpAdCollapseEmptyDiv') collapseEmptyDiv?:\n    | boolean\n    | [boolean, boolean];\n  @Input('dfpAdForceSafeFrame') forceSafeFrame?: boolean;\n  @Input('dfpAdSafeFrameConfig') safeFrameConfig?: googletag.SafeFrameConfig;\n  @Input('dfpAdTargeting') targeting?: Record<string, string | string[]>;\n  @Input('dfpAdAdsense') adsense?: Record<string, string>;\n\n  constructor(\n    @Inject(PLATFORM_ID) platformId: object,\n    private viewContainer: ViewContainerRef,\n    private dfp: DfpService,\n    @Optional() private router?: Router,\n    @Optional() private elementRef?: ElementRef<HTMLElement>,\n    @Optional() private templateRef?: TemplateRef<unknown>,\n  ) {\n    if (isPlatformBrowser(platformId)) {\n      this.init();\n    }\n  }\n\n  private init(): void {\n    this.$update\n      .pipe(\n        switchMap(() => timer(DELAY_TIME)),\n        takeUntil(this.$destroy),\n      )\n      .subscribe(() => {\n        this.dfp.cmd(() => this.display());\n      });\n\n    this.dfp.events\n      .pipe(\n        filter((event) => event.slot === this.slot),\n        takeUntil(this.$destroy),\n      )\n      .subscribe((event) => {\n        if (event instanceof SlotRenderEndedEvent) {\n          this.renderEnded.emit(event);\n        } else if (event instanceof SlotVisibilityChangedEvent) {\n          this.visibilityChanged.emit(event);\n        }\n      });\n\n    this.router &&\n      this.router.events\n        .pipe(\n          filter((event) => event instanceof NavigationEnd),\n          takeUntil(this.$destroy),\n        )\n        .subscribe(() => {\n          this.$update.next();\n        });\n  }\n\n  create(): void {\n    if (this.unitPath) {\n      if (!this.element) {\n        if (this.templateRef) {\n          const view = this.viewContainer.createEmbeddedView(this.templateRef);\n          this.element = view.rootNodes[0];\n        } else if (this.elementRef) {\n          this.element = this.elementRef.nativeElement;\n        }\n      }\n      this.$update.next();\n    } else {\n      this.clear();\n    }\n  }\n\n  display(): void {\n    if (!this.element || this.element.innerText.match(/\\S+/)) {\n      return;\n    }\n\n    let parentElement = this.element.parentElement;\n    while (parentElement) {\n      if (parentElement.getAttribute('ng-version')) {\n        break;\n      }\n      if (\n        parentElement.style.visibility === 'hidden' ||\n        parentElement.style.display === 'none'\n      ) {\n        return;\n      }\n      parentElement = parentElement.parentElement;\n    }\n\n    if (this.slot && this.id === this.element.id) {\n      this.dfp.define(this, this.slot);\n      this.dfp.refresh(this.slot);\n    } else {\n      this.destroy();\n      const id = this.element.id || this.id;\n      this.slot = this.dfp.define(Object.assign({}, this, { id: id }));\n      this.element.id = id || this.slot.getSlotElementId();\n      this.id = this.element.id;\n      this.dfp.display(this.slot);\n    }\n  }\n\n  clear(): void {\n    this.viewContainer.clear();\n    this.element = undefined;\n    this.destroy();\n  }\n\n  destroy(): void {\n    if (this.slot) {\n      this.dfp.destroy(this.slot);\n      this.slot = undefined;\n    }\n  }\n\n  ngDoCheck(): void {\n    if (this.element && this.element.id && this.id !== this.element.id) {\n      this.id = this.element.id;\n      this.destroy();\n      this.create();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const change = changes['dfpAd'] || changes['id'] || changes['size'];\n    if (change && !change.isFirstChange()) {\n      this.clear();\n    }\n    this.create();\n  }\n\n  ngOnDestroy(): void {\n    this.$destroy.next();\n    this.clear();\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { DfpAdDirective } from './dfp-ad.directive';\n\nconst DFP_DIRECTIVES = [DfpAdDirective];\n\n@NgModule({\n  declarations: DFP_DIRECTIVES,\n  exports: DFP_DIRECTIVES,\n})\nexport class DfpModule {}\n","/*\n * Public API Surface of dfp\n */\n\nglobalThis.googletag = globalThis.googletag || { cmd: [] };\n\nexport * from './lib/consts';\nexport * from './lib/events';\nexport * from './lib/types';\nexport { DfpService } from './lib/dfp.service';\nexport { DfpModule } from './lib/dfp.module';\nexport { DfpAdDirective } from './lib/dfp-ad.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DfpService"],"mappings":"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"}