UNPKG

@niur/ng-gpt

Version:
1 lines 36.6 kB
{"version":3,"file":"niur-ng-gpt.mjs","sources":["../../../projects/ng-gpt/src/lib/ng-gpt.actions.ts","../../../projects/ng-gpt/src/lib/constants.ts","../../../projects/ng-gpt/src/lib/ng-gpt.events.ts","../../../projects/ng-gpt/src/lib/ng-gpt-options.service.ts","../../../projects/ng-gpt/src/lib/utils/script-injector.util.ts","../../../projects/ng-gpt/src/lib/utils/id-generator.util.ts","../../../projects/ng-gpt/src/lib/ng-gpt.service.ts","../../../projects/ng-gpt/src/lib/ng-gpt.directive.ts","../../../projects/ng-gpt/src/lib/ng-gpt.module.ts","../../../projects/ng-gpt/src/public-api.ts","../../../projects/ng-gpt/src/niur-ng-gpt.ts"],"sourcesContent":["class SlotRequest {\n public slot: googletag.Slot;\n\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","export const GPT_URL = '//securepubads.g.doubleclick.net/tag/js/gpt.js';\nexport const DELAY_TIME = 50;\nexport const DEFAULT_TAG_NAME = 'gpt-ad';\n","class NgGptEvent {\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 NgGptEvent {}\nexport class RewardedSlotClosedEvent extends NgGptEvent {}\nexport class RewardedSlotGrantedEvent extends NgGptEvent {\n payload!: null | googletag.RewardedPayload;\n}\nexport class SlotOnloadEvent extends NgGptEvent {}\nexport class SlotRenderEndedEvent extends NgGptEvent {\n advertiserId?: null | number;\n campaignId?: null | number;\n creativeId?: null | number;\n isEmpty!: boolean;\n lineItemId?: null | number;\n size!: googletag.SingleSize;\n sourceAgnosticCreativeId?: null | number;\n sourceAgnosticLineItemId?: null | number;\n}\nexport class SlotRequestedEvent extends NgGptEvent {}\nexport class SlotResponseReceived extends NgGptEvent {}\nexport class SlotVisibilityChangedEvent extends NgGptEvent {\n inViewPercentage!: number;\n}\n\nexport type Event =\n | ImpressionViewableEvent\n | RewardedSlotClosedEvent\n | RewardedSlotGrantedEvent\n | SlotOnloadEvent\n | SlotRenderEndedEvent\n | SlotRequestedEvent\n | SlotResponseReceived\n | SlotVisibilityChangedEvent;\n","import { Injectable, InjectionToken } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgGptServiceOptions {\n /**\n * Enables and disables horizontal centering of ads. Centering is disabled by default. In legacy gpt_mobile.js, centering is enabled by default.\n */\n public centering?: boolean;\n /**\n * Enables collapsing of slot divs so that they don't take up any space on the page when there is no ad content to display.\n */\n public collapseEmptyDivs?: boolean;\n /**\n * Sets custom targeting parameters for a given key that apply to all Publisher Ads service ad slots.\n */\n public targeting?: Record<string, string | string[]>;\n /**\n * Sets the value for the publisher-provided ID. See the article on {@link https://support.google.com/admanager/answer/2880055 PPID} for more details.\n */\n public ppid?: string;\n /**\n * Enables lazy loading in GPT as defined by the config object.\n */\n public enableLazyLoad?: {\n fetchMarginPercent: number;\n mobileScaling: number;\n renderMarginPercent: number;\n };\n /**\n * Passes location information from websites so you can geo-target line items to specific locations.\n */\n public address?: string;\n /**\n * Configures whether all ads on the page should be forced to be rendered using a SafeFrame container.\n */\n public forceSafeFrame?: boolean;\n /**\n * Sets the page-level preferences for SafeFrame configuration.\n *\n * These page-level preferences will be overridden by slot-level preferences, if specified.\n */\n public safeFrameConfig?: googletag.SafeFrameConfig;\n\n /**\n * Configuration object for privacy settings.\n */\n public privacySettingsConfig?: googletag.PrivacySettingsConfig;\n\n public disableInitialLoad?: boolean;\n\n /**\n * Enables single request mode for fetching multiple ads at the same time.\n * This requires all Publisher Ads slots to be defined and added to the PubAdsService prior to enabling the service.\n * Single request mode must be set before the service is enabled.\n */\n public enableSingleRequest?: boolean;\n}\n\nexport const GPT_OPTIONS = new InjectionToken<NgGptServiceOptions>(\n 'NgGptServiceOptions'\n);\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ScriptInjectorUtil {\n injectScript(url: string) {\n const script = this.createScript(url);\n const head = document.head || document.querySelector('head');\n\n head.appendChild(script);\n\n return this.promiseScript(script, url);\n }\n\n private createScript(url: string): HTMLScriptElement {\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 completeURL(url: string): string {\n const ssl = document.location.protocol === 'https:';\n return (ssl ? 'https:' : 'http:') + url;\n }\n\n private promiseScript(script: any, url: string): Promise<any> {\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(() => {\n console.error(`Error: loading script \"${url}\"`);\n });\n\n return promise;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DEFAULT_TAG_NAME } from '../constants';\n\n@Injectable()\nexport class IdGeneratorUtil {\n private ids: { [key: string]: boolean } = {};\n\n generate(element: HTMLElement): string {\n if (element && element.id && !(element.id in this.ids)) return element.id;\n\n const tagName = element.tagName || DEFAULT_TAG_NAME;\n\n let id = '';\n\n do {\n const number = Math.random().toString().slice(2);\n id = tagName + '-' + number;\n } while (id in this.ids);\n\n this.ids[id] = true;\n element.id = id;\n\n return id;\n }\n\n isTaken(id: string): boolean {\n return id in this.ids;\n }\n\n isUnique(id: string): boolean {\n return !this.isTaken(id);\n }\n}\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { buffer, switchMap } from 'rxjs/operators';\nimport { Subject, timer } from 'rxjs';\n\nimport { Request, RefreshSlot, DisplaySlot } from './ng-gpt.actions';\nimport { DELAY_TIME, GPT_URL } from './constants';\n\nimport {\n ImpressionViewableEvent,\n RewardedSlotClosedEvent,\n RewardedSlotGrantedEvent,\n SlotOnloadEvent,\n SlotRenderEndedEvent,\n SlotRequestedEvent,\n SlotResponseReceived,\n SlotVisibilityChangedEvent,\n} from './ng-gpt.events';\nimport { GPT_OPTIONS, NgGptServiceOptions } from './ng-gpt-options.service';\nimport { ScriptInjectorUtil } from './utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgGptService {\n private $singleRequest = new Subject<Request>();\n\n constructor(\n @Inject(GPT_OPTIONS) private options: NgGptServiceOptions,\n @Inject(PLATFORM_ID) private platformId: Object,\n private scriptInjector: ScriptInjectorUtil\n ) {\n if (isPlatformBrowser(this.platformId)) {\n this.init();\n }\n }\n\n init(): void {\n if (!window.googletag) {\n const loadScript = () => {\n this.scriptInjector.injectScript(GPT_URL);\n };\n loadScript();\n (window as any).googletag = window.googletag || { cmd: [] };\n }\n\n this.$singleRequest\n .pipe(\n buffer(this.$singleRequest.pipe(switchMap(() => timer(DELAY_TIME * 2))))\n )\n .subscribe((acts) => {\n const refreshSlots: googletag.Slot[] = [];\n acts.forEach((act) => {\n if (act instanceof DisplaySlot) {\n googletag.display(act.slot);\n } else {\n refreshSlots.push(act.slot);\n }\n });\n if (refreshSlots.length > 0) {\n googletag.pubads().refresh(refreshSlots);\n }\n });\n\n googletag.cmd.push(() => {\n const pubads = googletag.pubads();\n const {\n address,\n centering,\n collapseEmptyDivs,\n enableLazyLoad,\n enableSingleRequest,\n ppid,\n targeting,\n forceSafeFrame,\n safeFrameConfig,\n privacySettingsConfig,\n disableInitialLoad,\n } = this.options;\n\n if (disableInitialLoad) pubads.disableInitialLoad();\n\n // Collapse Empty Divs\n if (collapseEmptyDivs) pubads.collapseEmptyDivs();\n // Centering\n if (centering) pubads.setCentering(centering);\n // Location\n if (address) pubads.setLocation(address);\n // Publisher Provided Id\n if (ppid) pubads.setPublisherProvidedId(ppid);\n // Force Safe Frame\n if (forceSafeFrame) pubads.setForceSafeFrame(forceSafeFrame);\n // Targeting\n if (targeting && Object.keys(targeting).length) {\n for (const key in targeting) {\n if (targeting.hasOwnProperty(key)) {\n pubads.setTargeting(key, targeting[key]);\n }\n }\n }\n // Safe Frame Config\n if (safeFrameConfig && Object.keys(safeFrameConfig).length) {\n pubads.setSafeFrameConfig(safeFrameConfig);\n }\n // Privacy Settings Config\n if (privacySettingsConfig && Object.keys(privacySettingsConfig).length) {\n googletag.pubads().setPrivacySettings(privacySettingsConfig);\n }\n\n // Enable Lazy Load\n if (enableLazyLoad && Object.keys(enableLazyLoad).length) {\n pubads.enableLazyLoad(enableLazyLoad);\n }\n\n if (enableSingleRequest) {\n pubads.enableSingleRequest();\n }\n });\n }\n\n define(ad: any, slot?: googletag.Slot): googletag.Slot {\n const id = ad.id || '';\n const pubads = googletag.pubads();\n\n if (!slot) {\n const exists = this.getSlot(id);\n if (exists) {\n this.destroy(exists);\n }\n if (ad.size) {\n slot = googletag.defineSlot(\n ad.adUnitPath,\n ad.size,\n id\n ) as googletag.Slot;\n } else {\n slot = googletag.defineOutOfPageSlot(\n ad.adUnitPath,\n id\n ) as googletag.Slot;\n }\n }\n\n if (ad.sizeMapping) {\n slot.defineSizeMapping(ad.sizeMapping);\n }\n\n slot.clearCategoryExclusions();\n\n if (ad.categoryExclusion) {\n if (ad.categoryExclusion instanceof Array) {\n const s = slot;\n ad.categoryExclusion.forEach((cat: string) =>\n s.setCategoryExclusion(cat)\n );\n } else {\n slot.setCategoryExclusion(ad.categoryExclusion);\n }\n }\n\n slot.set('adsense_background_color', '#000000');\n\n if (typeof ad.forceSafeFrame === 'boolean') {\n slot.setForceSafeFrame(ad.forceSafeFrame);\n }\n\n if (ad.safeFrameConfig) {\n slot.setSafeFrameConfig(ad.safeFrameConfig);\n }\n\n slot.clearTargeting();\n if (ad.targeting) {\n slot.updateTargetingFromMap(ad.targeting);\n }\n\n if (ad.collapseEmptyDiv instanceof Array) {\n slot.setCollapseEmptyDiv(ad.collapseEmptyDiv[0], ad.collapseEmptyDiv[1]);\n } else if (typeof ad.collapseEmptyDiv === 'boolean') {\n slot.setCollapseEmptyDiv(ad.collapseEmptyDiv);\n }\n\n if (ad.clickUrl) {\n slot.setClickUrl(ad.clickUrl);\n }\n\n // Events\n googletag.cmd.push(() => {\n pubads.addEventListener('impressionViewable', (event) => {\n ad.impressionViewable.emit(new ImpressionViewableEvent(event));\n });\n pubads.addEventListener('rewardedSlotClosed', (event) => {\n ad.rewardedSlotClosed.emit(new RewardedSlotClosedEvent(event));\n });\n pubads.addEventListener('rewardedSlotGranted', (event) => {\n ad.rewardedSlotGranted.emit(new RewardedSlotGrantedEvent(event));\n });\n pubads.addEventListener('rewardedSlotReady', (event) => {\n ad.rewardedSlotReady.emit(new RewardedSlotGrantedEvent(event));\n });\n pubads.addEventListener('slotOnload', (event) => {\n ad.slotOnload.emit(new SlotOnloadEvent(event));\n });\n pubads.addEventListener('slotRenderEnded', (event) => {\n ad.slotRenderEnded.emit(new SlotRenderEndedEvent(event));\n });\n pubads.addEventListener('slotRequested', (event) => {\n ad.slotRequested.emit(new SlotRequestedEvent(event));\n });\n pubads.addEventListener('slotResponseReceived', (event) => {\n ad.slotResponseReceived.emit(new SlotResponseReceived(event));\n });\n pubads.addEventListener('slotVisibilityChanged', (event) => {\n ad.slotVisibilityChanged.emit(new SlotVisibilityChangedEvent(event));\n });\n });\n\n slot.addService(googletag.pubads());\n\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 destroy(slot: googletag.Slot): void {\n googletag.destroySlots([slot]);\n }\n\n getSlot(id: string): googletag.Slot | undefined {\n return this.getSlots().find((slot) => slot.getSlotElementId() === id);\n }\n\n getSlots(ids?: string[]): googletag.Slot[] {\n const slots: googletag.Slot[] = googletag.pubads().getSlots();\n\n return slots.filter(\n (slot) => !ids || ids.includes(slot.getSlotElementId())\n );\n }\n\n defineTask(task: () => void): boolean {\n if (isPlatformBrowser(this.platformId)) {\n googletag.cmd.push(task);\n return true;\n }\n return false;\n }\n}\n","import { filter, switchMap, takeUntil } from 'rxjs/operators';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, Subscription, timer } from 'rxjs';\nimport {\n AfterViewInit,\n Directive,\n DoCheck,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n PLATFORM_ID,\n} from '@angular/core';\n\nimport { NgGptService } from './ng-gpt.service';\nimport { IdGeneratorUtil } from './utils';\nimport { DELAY_TIME } from './constants';\n\n@Directive({\n selector: 'gpt-ad',\n})\nexport class NgGptDirective\n implements OnInit, DoCheck, OnDestroy, AfterViewInit\n{\n private $update = new Subject<void>();\n private $destroy = new Subject<void>();\n private slot?: googletag.Slot;\n\n private onSameNavigation: Subscription;\n\n @Input() adUnitPath: string = '';\n @Input() id?: string = '';\n @Input() size?: googletag.GeneralSize;\n @Input() sizeMapping?: googletag.SizeMappingArray;\n @Input() categoryExclusion?: string | string[];\n @Input() collapseEmptyDiv?: boolean | [boolean, boolean];\n @Input() forceSafeFrame?: boolean;\n @Input() safeFrameConfig?: googletag.SafeFrameConfig;\n @Input() targeting?: Record<string, string | string[]>;\n @Input() clickUrl?: string;\n @Input() refresh?: number;\n\n // Events\n @Output() impressionViewable: EventEmitter<Event> = new EventEmitter();\n @Output() rewardedSlotClosed: EventEmitter<Event> = new EventEmitter();\n @Output() rewardedSlotGranted: EventEmitter<Event> = new EventEmitter();\n @Output() rewardedSlotReady: EventEmitter<Event> = new EventEmitter();\n @Output() slotOnload: EventEmitter<Event> = new EventEmitter();\n @Output() slotRenderEnded: EventEmitter<Event> = new EventEmitter();\n @Output() slotRequested: EventEmitter<Event> = new EventEmitter();\n @Output() slotResponseReceived: EventEmitter<Event> = new EventEmitter();\n @Output() slotVisibilityChanged: EventEmitter<Event> = new EventEmitter();\n\n constructor(\n @Optional() private router: Router,\n @Inject(PLATFORM_ID) private platformId: Object,\n private elementRef: ElementRef,\n private gptService: NgGptService,\n private idGenerator: IdGeneratorUtil\n ) {\n if (isPlatformBrowser(platformId)) {\n this.init();\n }\n }\n ngAfterViewInit(): void {\n if (this.elementRef.nativeElement && this.elementRef.nativeElement.id) {\n this.destroy();\n this.create();\n }\n }\n\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId) && !this.id) {\n this.idGenerator.generate(this.elementRef.nativeElement);\n }\n }\n\n ngDoCheck(): void {\n if (\n this.elementRef.nativeElement &&\n this.elementRef.nativeElement.id &&\n this.id !== this.elementRef.nativeElement.id\n ) {\n this.id = this.elementRef.nativeElement.id;\n this.destroy();\n this.create();\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 display(): void {\n if (this.slot) {\n this.gptService.define(this, this.slot);\n this.gptService.refresh(this.slot);\n } else {\n this.destroy();\n this.slot = this.gptService.define(\n Object.assign({}, this, {\n id: this.id || this.elementRef.nativeElement?.id,\n })\n );\n this.gptService.display(this.slot);\n }\n }\n\n checkRequiredFields(input: any, name: string): void {\n if (!input) {\n throw new Error(`Attribute ${name} is required`);\n }\n }\n\n destroy() {\n if (this.slot) {\n this.gptService.destroy(this.slot);\n this.slot = undefined;\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.checkRequiredFields(this.adUnitPath, 'adUnitPath');\n this.gptService.defineTask(() => this.display());\n });\n\n if (this.router) {\n this.onSameNavigation = 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\n create() {\n if (this.adUnitPath) {\n this.$update.next();\n } else {\n this.destroy();\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { GPT_OPTIONS, NgGptServiceOptions } from './ng-gpt-options.service';\nimport { IdGeneratorUtil, ScriptInjectorUtil } from './utils';\nimport { NgGptDirective } from './ng-gpt.directive';\n\n@NgModule({\n declarations: [NgGptDirective],\n providers: [ScriptInjectorUtil, IdGeneratorUtil],\n exports: [NgGptDirective],\n})\nexport class NgGptModule {\n static forRoot(\n options?: NgGptServiceOptions\n ): ModuleWithProviders<NgGptModule> {\n return {\n ngModule: NgGptModule,\n providers: [\n {\n provide: GPT_OPTIONS,\n useValue: options || {},\n },\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.directive';\nexport * from './lib/ng-gpt.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ScriptInjectorUtil","i2.NgGptService","i3.IdGeneratorUtil"],"mappings":"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"}