ng-gpt
Version:
A Angular implementation of the google GPT API.
1 lines • 53.1 kB
Source Map (JSON)
{"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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"}