1
1
import { EventEmitter , Inject , Injectable , Renderer2 , RendererFactory2 } from '@angular/core' ;
2
2
import { NavigationEnd , Router } from '@angular/router' ;
3
- import {
4
- CommonOptions ,
5
- MetrikaGoalEventOptions ,
6
- MetrikaHitEventOptions ,
7
- MetrikaHitOptions ,
8
- NgxMetrikaConfig
9
- } from './interfaces' ;
3
+ import { CommonOptions , MetrikaGoalEventOptions , MetrikaHitEventOptions , MetrikaHitOptions , NgxMetrikaConfig } from './interfaces' ;
10
4
import { filter , tap } from 'rxjs/operators' ;
11
5
import { YM_CONFIG } from './ym.token' ;
12
6
import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject' ;
7
+ import { DOCUMENT } from '@angular/common' ;
13
8
14
9
declare var Ya : any ;
15
10
@@ -30,9 +25,12 @@ export class NgxMetrikaService {
30
25
public hit = new EventEmitter < MetrikaHitEventOptions > ( ) ;
31
26
public reachGoal = new BehaviorSubject < MetrikaGoalEventOptions > ( { target : 'test' } ) ;
32
27
33
- constructor ( @Inject ( YM_CONFIG ) ymConfig : NgxMetrikaConfig ,
34
- private router : Router ,
35
- rendererFactory : RendererFactory2 ) {
28
+ constructor (
29
+ @Inject ( YM_CONFIG ) ymConfig : NgxMetrikaConfig ,
30
+ private router : Router ,
31
+ rendererFactory : RendererFactory2 ,
32
+ @Inject ( DOCUMENT ) private document : Document ,
33
+ ) {
36
34
this . renderer = rendererFactory . createRenderer ( null , null ) ;
37
35
if ( ymConfig && ymConfig . id ) {
38
36
this . configure ( ymConfig ) ;
@@ -52,7 +50,7 @@ export class NgxMetrikaService {
52
50
this . config = config ;
53
51
this . insertMetrika ( config ) ;
54
52
this . checkCounter ( config . id )
55
- . then ( x => {
53
+ . then ( ( ) => {
56
54
this . hit . subscribe ( ( y : MetrikaHitEventOptions ) => {
57
55
this . onHit ( this . router . url , y . hitOptions ) ;
58
56
} ) ;
@@ -121,15 +119,15 @@ export class NgxMetrikaService {
121
119
}
122
120
} ) ;
123
121
124
- const n = document . getElementsByTagName ( 'script ' ) [ 0 ] ;
122
+ const head = this . document . getElementsByTagName ( 'head ' ) [ 0 ] ;
125
123
const s = document . createElement ( 'script' ) ;
126
124
s . type = 'text/javascript' ;
127
125
s . async = true ;
128
126
s . src = 'https://mc.yandex.ru/metrika/tag.js' ;
129
- const insetScriptTag = ( ) => n . parentNode . insertBefore ( s , n ) ;
127
+ const insetScriptTag = ( ) => head . appendChild ( s ) ;
130
128
131
129
if ( ( window as any ) . opera === '[object Opera]' ) {
132
- document . addEventListener ( 'DOMContentLoaded' , insetScriptTag , false ) ;
130
+ this . document . addEventListener ( 'DOMContentLoaded' , insetScriptTag , false ) ;
133
131
} else {
134
132
insetScriptTag ( ) ;
135
133
}
@@ -138,7 +136,7 @@ export class NgxMetrikaService {
138
136
139
137
checkCounter ( id : string | number ) : Promise < any > {
140
138
const that = this ;
141
- return new Promise ( ( resolve , reject ) => {
139
+ return new Promise ( ( resolve ) => {
142
140
const counterName = `yacounter${ id } inited` ;
143
141
that . renderer . listen ( 'document' , counterName , ( ) => {
144
142
resolve ( { } ) ;
0 commit comments