UNPKG

ngx-matomo-client

Version:

Matomo (fka. Piwik) client for Angular applications

1 lines 25.4 kB
{"version":3,"file":"ngx-matomo-client-form-analytics.mjs","sources":["../../../projects/ngx-matomo-client/form-analytics/configuration.ts","../../../projects/ngx-matomo-client/form-analytics/directives/errors.ts","../../../projects/ngx-matomo-client/form-analytics/utils/coercion.ts","../../../projects/ngx-matomo-client/form-analytics/matomo-form-analytics.service.ts","../../../projects/ngx-matomo-client/form-analytics/directives/track-form.directive.ts","../../../projects/ngx-matomo-client/form-analytics/directives/track-form-field.directive.ts","../../../projects/ngx-matomo-client/form-analytics/directives/track-forms.directive.ts","../../../projects/ngx-matomo-client/form-analytics/matomo-form-analytics-initializer.service.ts","../../../projects/ngx-matomo-client/form-analytics/matomo-form-analytics.module.ts","../../../projects/ngx-matomo-client/form-analytics/providers.ts","../../../projects/ngx-matomo-client/form-analytics/public-api.ts","../../../projects/ngx-matomo-client/form-analytics/ngx-matomo-client-form-analytics.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\nimport { ɵINTERNAL_MATOMO_CONFIGURATION as INTERNAL_MATOMO_CONFIGURATION } from 'ngx-matomo-client/core';\n\nexport interface MatomoFormAnalyticsConfiguration {\n disabled?: boolean;\n loadScript?: boolean | string;\n autoScan?: boolean;\n autoScanDelay?: number;\n}\n\nexport type InternalMatomoFormAnalyticsConfiguration = Required<MatomoFormAnalyticsConfiguration>;\n\nexport const MATOMO_FORM_ANALYTICS_CONFIGURATION =\n new InjectionToken<MatomoFormAnalyticsConfiguration>('MATOMO_FORM_ANALYTICS_CONFIGURATION');\n\nexport const DEFAULT_FORM_ANALYTICS_CONFIGURATION: InternalMatomoFormAnalyticsConfiguration = {\n disabled: false,\n loadScript: false,\n autoScan: true,\n autoScanDelay: 0,\n};\n\nexport const INTERNAL_MATOMO_FORM_ANALYTICS_CONFIGURATION =\n new InjectionToken<InternalMatomoFormAnalyticsConfiguration>(\n 'INTERNAL_MATOMO_FORM_ANALYTICS_CONFIGURATION',\n {\n factory() {\n const matomoConfig = inject(INTERNAL_MATOMO_CONFIGURATION);\n const userConfig = inject(MATOMO_FORM_ANALYTICS_CONFIGURATION, { optional: true }) || {};\n const merged = {\n ...DEFAULT_FORM_ANALYTICS_CONFIGURATION,\n ...userConfig,\n };\n\n return {\n ...merged,\n disabled: merged.disabled || matomoConfig.disabled,\n };\n },\n },\n );\n","export function throwFormNotFoundError(selector: string): never {\n throw new Error(`Directive ${selector} can only be used inside [matomoTrackForm]`);\n}\n","import { ElementRef } from '@angular/core';\n\nexport function coerceElement(elementOrRef: Element | ElementRef<Element>): Element;\nexport function coerceElement(\n elementOrRef: Element | ElementRef<Element> | null | undefined,\n): Element | null | undefined;\nexport function coerceElement(\n elementOrRef: Element | ElementRef<Element> | null | undefined,\n): Element | null | undefined {\n return elementOrRef instanceof ElementRef ? elementOrRef.nativeElement : elementOrRef;\n}\n","import { ElementRef, inject, Injectable } from '@angular/core';\nimport { ɵInternalMatomoTracker as InternalMatomoTracker } from 'ngx-matomo-client/core';\nimport { coerceElement } from './utils/coercion';\n\nexport interface MatomoFormAnalyticsInstance {\n isFormAnalyticsEnabled(): boolean;\n\n disableFormAnalytics(): void;\n\n setTrackingTimer(delayInMilliSeconds: number): void;\n}\n\n@Injectable()\nexport class MatomoFormAnalytics {\n private readonly delegate: InternalMatomoTracker<MatomoFormAnalyticsInstance, 'FormAnalytics::'> =\n inject(InternalMatomoTracker);\n\n disableFormAnalytics(): void {\n this.delegate.push(['FormAnalytics::disableFormAnalytics']);\n }\n\n enableFormAnalytics(): void {\n this.delegate.push(['FormAnalytics::enableFormAnalytics']);\n }\n\n enableDebugMode(): void {\n this.delegate.push(['FormAnalytics::enableDebugMode']);\n }\n\n setTrackingTimer(delayInMilliSeconds: number): void {\n this.delegate.push(['FormAnalytics::setTrackingTimer', delayInMilliSeconds]);\n }\n\n scanForForms(root?: Element | ElementRef): void {\n this.delegate.push(['FormAnalytics::scanForForms', coerceElement(root)]);\n }\n\n trackForm(formElement: Element | ElementRef): void {\n this.delegate.push(['FormAnalytics::trackForm', coerceElement(formElement)]);\n }\n\n trackFormSubmit(formElement: Element | ElementRef) {\n this.delegate.push(['FormAnalytics::trackFormSubmit', coerceElement(formElement)]);\n }\n\n trackFormConversion(formElementOrName: Element | ElementRef | string, formId?: string): void {\n this.delegate.push([\n 'FormAnalytics::trackFormConversion',\n typeof formElementOrName === 'string' ? formElementOrName : coerceElement(formElementOrName),\n formId,\n ]);\n }\n\n isFormAnalyticsEnabled(): Promise<boolean> {\n return this.delegate.get('FormAnalytics::isFormAnalyticsEnabled');\n }\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n HostListener,\n inject,\n Input,\n} from '@angular/core';\nimport { MatomoFormAnalytics } from '../matomo-form-analytics.service';\n\n@Directive({\n selector: '[matomoTrackForm]',\n standalone: true,\n exportAs: 'matomoTrackForm',\n})\nexport class TrackFormDirective implements AfterViewInit {\n private readonly elementRef: ElementRef<Element> = inject(ElementRef);\n private readonly tracker = inject(MatomoFormAnalytics);\n private initialized = false;\n\n /** If true, will track a conversion after form submit */\n @Input({ transform: booleanAttribute }) trackConversionOnSubmit = false;\n\n @Input({ transform: booleanAttribute }) set matomoIgnore(ignore: boolean) {\n if (ignore) {\n this.elementRef.nativeElement.setAttribute('data-matomo-ignore', '');\n } else {\n this.elementRef.nativeElement.removeAttribute('data-matomo-ignore');\n }\n }\n\n @Input() set matomoTrackForm(name: string | null | undefined) {\n if (name) {\n this.elementRef.nativeElement.setAttribute('data-matomo-name', name);\n } else {\n this.elementRef.nativeElement.removeAttribute('data-matomo-name');\n }\n\n if (this.initialized) {\n this.track();\n }\n }\n\n constructor() {\n this.elementRef.nativeElement.setAttribute('data-matomo-form', '');\n }\n\n ngAfterViewInit(): void {\n this.track();\n this.initialized = true;\n }\n\n track(): void {\n this.tracker.trackForm(this.elementRef);\n }\n\n trackSubmit(): void {\n this.tracker.trackFormSubmit(this.elementRef);\n }\n\n trackConversion(): void {\n this.tracker.trackFormConversion(this.elementRef);\n }\n\n @HostListener('submit')\n trackFormConversionOnSubmit(): void {\n if (this.trackConversionOnSubmit) {\n this.trackConversion();\n }\n }\n}\n","import {\n AfterViewInit,\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n Input,\n} from '@angular/core';\nimport { throwFormNotFoundError } from './errors';\nimport { TrackFormDirective } from './track-form.directive';\n\n@Directive({\n selector: '[matomoTrackFormField]',\n standalone: true,\n exportAs: 'matomoTrackFormField',\n})\nexport class TrackFormFieldDirective implements AfterViewInit {\n private readonly elementRef: ElementRef<Element> = inject(ElementRef);\n private readonly form =\n inject(TrackFormDirective, { optional: true }) ??\n throwFormNotFoundError('[matomoTrackFormField]');\n\n private initialized = false;\n\n @Input({ transform: booleanAttribute }) set matomoIgnore(ignore: boolean) {\n if (ignore) {\n this.elementRef.nativeElement.setAttribute('data-matomo-ignore', '');\n } else {\n this.elementRef.nativeElement.removeAttribute('data-matomo-ignore');\n }\n }\n\n @Input() set matomoTrackFormField(name: string | null | undefined) {\n if (name) {\n this.elementRef.nativeElement.setAttribute('data-matomo-name', name);\n } else {\n this.elementRef.nativeElement.removeAttribute('data-matomo-name');\n }\n\n if (this.initialized) {\n this.track();\n }\n }\n\n ngAfterViewInit(): void {\n this.track();\n this.initialized = true;\n }\n\n track(): void {\n this.form.track();\n }\n}\n","import { AfterViewInit, Directive, ElementRef, inject } from '@angular/core';\nimport { MatomoFormAnalytics } from '../matomo-form-analytics.service';\n\n@Directive({\n selector: '[matomoTrackForms]',\n standalone: true,\n exportAs: 'matomoTrackForms',\n})\nexport class TrackFormsDirective implements AfterViewInit {\n private readonly elementRef: ElementRef<Element> = inject(ElementRef);\n private readonly tracker = inject(MatomoFormAnalytics);\n\n ngAfterViewInit(): void {\n this.scan();\n }\n\n scan(): void {\n this.tracker.scanForForms(this.elementRef);\n }\n\n trackSubmit(element: Element | ElementRef<Element>): void {\n this.tracker.trackFormSubmit(element);\n }\n\n trackConversion(element: Element | ElementRef<Element>): void {\n this.tracker.trackFormConversion(element);\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, OnDestroy, PLATFORM_ID } from '@angular/core';\nimport {\n MatomoTracker,\n ɵappendTrailingSlash as appendTrailingSlash,\n ɵASYNC_INTERNAL_MATOMO_CONFIGURATION as ASYNC_INTERNAL_MATOMO_CONFIGURATION,\n ɵgetTrackersConfiguration as getTrackersConfiguration,\n ɵisAutoConfigurationMode as isAutoConfigurationMode,\n ɵisExplicitTrackerConfiguration as isExplicitTrackerConfiguration,\n ɵrunOnce as runOnce,\n ɵScriptInjector as ScriptInjector,\n} from 'ngx-matomo-client/core';\nimport { debounceTime, identity, Subscription } from 'rxjs';\nimport { INTERNAL_MATOMO_FORM_ANALYTICS_CONFIGURATION } from './configuration';\nimport { MatomoFormAnalytics } from './matomo-form-analytics.service';\n\nconst DEFAULT_SCRIPT_SUFFIX = 'plugins/FormAnalytics/tracker.min.js';\n\n@Injectable()\nexport class MatomoFormAnalyticsInitializer implements OnDestroy {\n private readonly config = inject(INTERNAL_MATOMO_FORM_ANALYTICS_CONFIGURATION);\n private readonly coreConfig = inject(ASYNC_INTERNAL_MATOMO_CONFIGURATION);\n private readonly scriptInjector = inject(ScriptInjector);\n private readonly tracker = inject(MatomoTracker);\n private readonly formAnalytics = inject(MatomoFormAnalytics);\n private readonly platformId = inject(PLATFORM_ID);\n\n private pageTrackedSubscription: Subscription | undefined;\n\n ngOnDestroy(): void {\n this.pageTrackedSubscription?.unsubscribe();\n }\n\n readonly initialize = runOnce(async () => {\n // Do not set-up router if running on server\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n if (this.config.disabled) {\n this.formAnalytics.disableFormAnalytics();\n return;\n }\n\n if (this.config.loadScript) {\n const scriptUrl =\n typeof this.config.loadScript === 'boolean'\n ? await this.buildDefaultScriptUrl()\n : this.config.loadScript;\n\n this.scriptInjector.injectDOMScript(scriptUrl);\n }\n\n if (this.config.autoScan) {\n const delayOp = this.config.autoScanDelay\n ? debounceTime(this.config.autoScanDelay)\n : identity;\n\n this.pageTrackedSubscription = this.tracker.pageViewTracked\n .pipe(delayOp)\n .subscribe(() => this.formAnalytics.scanForForms());\n }\n });\n\n private async buildDefaultScriptUrl(): Promise<string> {\n const config = await this.coreConfig;\n\n if (isAutoConfigurationMode(config) && isExplicitTrackerConfiguration(config)) {\n const [mainTracker] = getTrackersConfiguration(config);\n\n if (mainTracker) {\n return appendTrailingSlash(mainTracker.trackerUrl) + DEFAULT_SCRIPT_SUFFIX;\n }\n }\n\n throw new Error(\n 'Cannot resolve default matomo FormAnalytics plugin script url. ' +\n 'Please explicitly provide `loadScript` configuration property instead of `true`',\n );\n }\n}\n","import { ModuleWithProviders, NgModule, inject } from '@angular/core';\nimport {\n MATOMO_FORM_ANALYTICS_CONFIGURATION,\n MatomoFormAnalyticsConfiguration,\n} from './configuration';\nimport { TrackFormFieldDirective } from './directives/track-form-field.directive';\nimport { TrackFormDirective } from './directives/track-form.directive';\nimport { TrackFormsDirective } from './directives/track-forms.directive';\nimport { MatomoFormAnalyticsInitializer } from './matomo-form-analytics-initializer.service';\n\nexport const MATOMO_FORM_ANALYTICS_DIRECTIVES = [\n TrackFormDirective,\n TrackFormsDirective,\n TrackFormFieldDirective,\n] as const;\n\n@NgModule({\n imports: [...MATOMO_FORM_ANALYTICS_DIRECTIVES],\n exports: [...MATOMO_FORM_ANALYTICS_DIRECTIVES],\n})\nexport class MatomoFormAnalyticsModule {\n private readonly formAnalytics = inject(MatomoFormAnalyticsInitializer);\n\n constructor() {\n const parent = inject(MatomoFormAnalyticsModule, { optional: true, skipSelf: true });\n\n if (!parent) {\n // Do not initialize if it is already (by a parent module)\n this.formAnalytics.initialize();\n }\n }\n\n static forRoot(\n config: MatomoFormAnalyticsConfiguration = {},\n ): ModuleWithProviders<MatomoFormAnalyticsModule> {\n return {\n ngModule: MatomoFormAnalyticsModule,\n providers: [{ provide: MATOMO_FORM_ANALYTICS_CONFIGURATION, useValue: config }],\n };\n }\n}\n","import { ENVIRONMENT_INITIALIZER, ErrorHandler, inject } from '@angular/core';\nimport {\n MatomoFeature as MatomoFeature,\n ɵcreateMatomoFeature as createMatomoFeature,\n} from 'ngx-matomo-client/core';\nimport {\n MATOMO_FORM_ANALYTICS_CONFIGURATION,\n MatomoFormAnalyticsConfiguration,\n} from './configuration';\nimport { MatomoFormAnalyticsInitializer } from './matomo-form-analytics-initializer.service';\nimport { MatomoFormAnalytics } from './matomo-form-analytics.service';\n\n/**\n * Additional Matomo router features kind\n */\nexport const enum FormAnalyticsMatomoFeatureKind {\n FormAnalytics = 'FormAnalytics',\n}\n\n/** Enable automatic page views tracking */\nexport function withFormAnalytics(config?: MatomoFormAnalyticsConfiguration): MatomoFeature {\n const providers = [\n MatomoFormAnalytics,\n MatomoFormAnalyticsInitializer,\n {\n provide: MATOMO_FORM_ANALYTICS_CONFIGURATION,\n useValue: config,\n },\n {\n provide: ENVIRONMENT_INITIALIZER,\n multi: true,\n useValue() {\n const errorHandler = inject(ErrorHandler);\n\n // Do NOT wait here for initialization, because app startup should NOT be blocked until deferred config is resolved\n // However, correctly propagate errors to error handler\n Promise.resolve(inject(MatomoFormAnalyticsInitializer).initialize()).catch(error =>\n errorHandler.handleError(error),\n );\n },\n },\n ];\n\n return createMatomoFeature(FormAnalyticsMatomoFeatureKind.FormAnalytics, providers);\n}\n","/*\n * Public API Surface of plugin form-analytics\n */\n\nexport {\n MatomoFormAnalyticsModule,\n MATOMO_FORM_ANALYTICS_DIRECTIVES,\n} from './matomo-form-analytics.module';\nexport { withFormAnalytics } from './providers';\nexport {\n MatomoFormAnalyticsConfiguration,\n MATOMO_FORM_ANALYTICS_CONFIGURATION,\n} from './configuration';\nexport { MatomoFormAnalytics, MatomoFormAnalyticsInstance } from './matomo-form-analytics.service';\nexport { TrackFormDirective } from './directives/track-form.directive';\nexport { TrackFormsDirective } from './directives/track-forms.directive';\nexport { TrackFormFieldDirective } from './directives/track-form-field.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["INTERNAL_MATOMO_CONFIGURATION","InternalMatomoTracker","ASYNC_INTERNAL_MATOMO_CONFIGURATION","ScriptInjector","runOnce","isAutoConfigurationMode","isExplicitTrackerConfiguration","getTrackersConfiguration","appendTrailingSlash","createMatomoFeature"],"mappings":"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"}