UNPKG

@bloomscorp/ngx-pixel

Version:

An Angular library to simplify the use of a Facebook Pixel. This is directly forked from https://github.com/NielsCodes/ngx-pixel since the library is no longer maintained.

1 lines 12 kB
{"version":3,"file":"bloomscorp-ngx-pixel.mjs","sources":["../../../projects/pixel/src/lib/pixel.service.ts","../../../projects/pixel/src/lib/pixel.module.ts","../../../projects/pixel/src/bloomscorp-ngx-pixel.ts"],"sourcesContent":["import { PixelEventName, PixelConfiguration, PixelEventProperties } from './pixel.models';\nimport { Inject, Injectable, Optional, PLATFORM_ID, Renderer2, RendererFactory2 } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { filter } from 'rxjs/operators';\n\ndeclare const fbq: any;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PixelService {\n\n private doc: Document;\n private renderer: Renderer2\n\n constructor(\n @Inject('config') private config: PixelConfiguration,\n @Inject(DOCUMENT) private injectedDocument: any,\n @Inject(PLATFORM_ID) private platformId: Object,\n @Optional() private router: Router,\n private rendererFactory: RendererFactory2\n ) {\n\n // DOCUMENT cannot be injected directly as Document type, see https://github.com/angular/angular/issues/20351\n // It is therefore injected as any and then cast to Document\n this.doc = injectedDocument as Document;\n this.renderer = rendererFactory.createRenderer(null, null);\n\n if (router) {\n // Log page views after router navigation ends\n router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(event => {\n\n if (this.isLoaded()) {\n this.track('PageView');\n }\n\n });\n }\n\n }\n\n /**\n * Initialize the Pixel tracking script\n * - Adds the script to page's head\n * - Tracks first page view\n */\n initialize(pixelId = this.config.pixelId): void {\n if (this.isLoaded()) {\n console.warn('Tried to initialize a Pixel instance while another is already active. Please call `remove()` before initializing a new instance.');\n return;\n }\n this.config.enabled = true;\n this.addPixelScript(pixelId);\n }\n\n /** Remove the Pixel tracking script */\n remove(): void {\n this.removePixelScript();\n this.config.enabled = false;\n }\n\n /**\n * Track a Standard Event as predefined by Facebook\n *\n * See {@link https://developers.facebook.com/docs/facebook-pixel/reference Facebook Pixel docs - reference}\n * @param eventName The name of the event that is being tracked\n * @param properties Optional properties of the event\n */\n track(\n eventName: PixelEventName,\n properties?: PixelEventProperties\n ): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n if (!this.isLoaded()) {\n console.warn('Tried to track an event without initializing a Pixel instance. Call `initialize()` first.');\n return;\n }\n\n if (properties) {\n fbq('track', eventName, properties);\n } else {\n fbq('track', eventName);\n }\n\n }\n\n /**\n * Track a custom Event\n *\n * See {@link https://developers.facebook.com/docs/facebook-pixel/implementation/conversion-tracking#custom-conversions Facebook Pixel docs - custom conversions}\n * @param eventName The name of the event that is being tracked\n * @param properties Optional properties of the event\n */\n trackCustom(eventName: string, properties?: object): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n if (!this.isLoaded()) {\n console.warn('Tried to track an event without initializing a Pixel instance. Call `initialize()` first.');\n return;\n }\n\n if (properties) {\n fbq('trackCustom', eventName, properties);\n } else {\n fbq('trackCustom', eventName);\n }\n }\n\n /**\n * Adds the Facebook Pixel tracking script to the application\n * @param pixelId The Facebook Pixel ID to use\n */\n private addPixelScript(pixelId: string): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n const pixelCode = `\n var pixelCode = function(f,b,e,v,n,t,s)\n {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n n.queue=[];t=b.createElement(e);t.async=!0;\n t.src=v;s=b.getElementsByTagName(e)[0];\n s.parentNode.insertBefore(t,s)}(window, document,'script',\n 'https://connect.facebook.net/en_US/fbevents.js');\n fbq('init', '${pixelId}');\n fbq('track', 'PageView');`;\n\n\n const scriptElement = this.renderer.createElement('script');\n this.renderer.setAttribute(scriptElement, 'id', 'pixel-script');\n this.renderer.setAttribute(scriptElement, 'type', 'text/javascript');\n this.renderer.setProperty(scriptElement, 'innerHTML', pixelCode);\n this.renderer.appendChild(this.doc.head, scriptElement);\n }\n\n /** Remove Facebook Pixel tracking script from the application */\n private removePixelScript(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const pixelElement = this.doc.getElementById('pixel-script');\n if (pixelElement) {\n pixelElement.remove();\n }\n }\n\n /** Checks if the script element is present */\n private isLoaded(): boolean {\n if (isPlatformBrowser(this.platformId)) {\n const pixelElement = this.doc.getElementById('pixel-script');\n return !!pixelElement;\n }\n return false;\n }\n\n}\n","import { PixelConfiguration } from './pixel.models';\nimport { Inject, ModuleWithProviders, NgModule, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { PixelService } from './pixel.service';\n\n@NgModule({\n imports: [],\n})\nexport class PixelModule {\n\n private static config: PixelConfiguration | null = null;\n\n constructor(\n private pixel: PixelService,\n @Inject(PLATFORM_ID) platformId: Object\n ) {\n if (!PixelModule.config) {\n throw Error('ngx-pixel not configured correctly. Pass the `pixelId` property to the `forRoot()` function');\n }\n if (PixelModule.config.enabled && isPlatformBrowser(platformId)) {\n this.pixel.initialize();\n }\n }\n\n /**\n * Initiale the Facebook Pixel Module\n *\n * Add your Pixel ID as parameter\n */\n static forRoot(config: PixelConfiguration): ModuleWithProviders<PixelModule> {\n this.config = config;\n const pixelId = config.pixelId;\n this.verifyPixelId(pixelId);\n\n return {\n ngModule: PixelModule,\n providers: [PixelService, { provide: 'config', useValue: config }]\n };\n }\n\n /**\n * Verifies the Pixel ID that was passed into the configuration.\n * - Checks if Pixel was initialized\n * @param pixelId Pixel ID to verify\n */\n private static verifyPixelId(pixelId: string): void {\n // Have to verify first that all Pixel IDs follow the same 15 digit format\n if (pixelId === null || pixelId === undefined || pixelId.length === 0) {\n throw Error('Invalid Facebook Pixel ID. Did you pass the ID into the forRoot() function?');\n }\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;MAWa,YAAY,CAAA;IAKvB,WAC4B,CAAA,MAA0B,EAC1B,gBAAqB,EAClB,UAAkB,EAC3B,MAAc,EAC1B,eAAiC,EAAA;QAJf,IAAM,CAAA,MAAA,GAAN,MAAM,CAAoB;QAC1B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAK;QAClB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAQ;QAC3B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAC1B,IAAe,CAAA,eAAA,GAAf,eAAe,CAAkB;;;AAKzC,QAAA,IAAI,CAAC,GAAG,GAAG,gBAA4B,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE3D,IAAI,MAAM,EAAE;;YAEV,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,IAAG;AAEpF,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;iBACxB;AAEH,aAAC,CAAC,CAAC;SACJ;KAEF;AAED;;;;AAIG;AACH,IAAA,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,CAAC,IAAI,CAAC,kIAAkI,CAAC,CAAC;YACjJ,OAAO;SACR;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;KAC9B;;IAGD,MAAM,GAAA;QACJ,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;KAC7B;AAED;;;;;;AAMG;IACH,KAAK,CACH,SAAyB,EACzB,UAAiC,EAAA;QAEjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC,OAAO;SACR;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;YAC1G,OAAO;SACR;QAED,IAAI,UAAU,EAAE;AACd,YAAA,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;SACrC;aAAM;AACL,YAAA,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;SACzB;KAEF;AAED;;;;;;AAMG;IACH,WAAW,CAAC,SAAiB,EAAE,UAAmB,EAAA;QAChD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC,OAAO;SACR;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;YAC1G,OAAO;SACR;QAED,IAAI,UAAU,EAAE;AACd,YAAA,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;SAC3C;aAAM;AACL,YAAA,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;SAC/B;KACF;AAED;;;AAGG;AACK,IAAA,cAAc,CAAC,OAAe,EAAA;QACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC,OAAO;SACR;AAED,QAAA,MAAM,SAAS,GAAG,CAAA;;;;;;;;;mBASH,OAAO,CAAA;8BACI,CAAC;QAG3B,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;KACzD;;IAGO,iBAAiB,GAAA;QACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACvC,OAAO;SACR;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAC7D,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,MAAM,EAAE,CAAC;SACvB;KACF;;IAGO,QAAQ,GAAA;AACd,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,YAAY,CAAC;SACvB;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAtJU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,EAMb,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,QAAQ,EACR,EAAA,EAAA,KAAA,EAAA,QAAQ,aACR,WAAW,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AARV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFX,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAEP,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAOI,MAAM;2BAAC,QAAQ,CAAA;;0BACf,MAAM;2BAAC,QAAQ,CAAA;;0BACf,MAAM;2BAAC,WAAW,CAAA;;0BAClB,QAAQ;;;MCZA,WAAW,CAAA;aAEP,IAAM,CAAA,MAAA,GAA8B,IAA9B,CAAmC,EAAA;IAExD,WACU,CAAA,KAAmB,EACN,UAAkB,EAAA;QAD/B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAc;AAG3B,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,KAAK,CAAC,6FAA6F,CAAC,CAAC;SAC5G;QACD,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE;AAC/D,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;SACzB;KACF;AAED;;;;AAIG;IACH,OAAO,OAAO,CAAC,MAA0B,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE5B,OAAO;AACL,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,SAAS,EAAE,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;SACnE,CAAC;KACH;AAED;;;;AAIG;IACK,OAAO,aAAa,CAAC,OAAe,EAAA;;AAE1C,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AACrE,YAAA,MAAM,KAAK,CAAC,6EAA6E,CAAC,CAAC;SAC5F;KACF;AA1CU,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,2CAMZ,WAAW,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GANV,WAAW,EAAA,CAAA,CAAA,EAAA;+GAAX,WAAW,EAAA,CAAA,CAAA,EAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;0BAOI,MAAM;2BAAC,WAAW,CAAA;;;ACdvB;;AAEG;;;;"}