1
1
import { Inject , Injectable , NgZone } from '@angular/core' ;
2
2
import { ɵgetDOM as getDOM } from '@angular/platform-browser' ;
3
3
import { DOCUMENT } from '@angular/common' ;
4
+ import { PlatformUtil } from './utils' ;
4
5
5
6
const EVENT_SUFFIX = 'precise' ;
6
7
@@ -11,26 +12,31 @@ const EVENT_SUFFIX = 'precise';
11
12
*/
12
13
@Injectable ( )
13
14
export class HammerGesturesManager {
15
+ private platformBrowser : boolean ;
14
16
/**
15
17
* Event option defaults for each recognizer, see http://hammerjs.github.io/api/ for API listing.
16
18
*/
17
- protected hammerOptions : HammerOptions = {
18
- // D.P. #447 Force TouchInput due to PointerEventInput bug (https://github.com/hammerjs/hammer.js/issues/1065)
19
- // see https://github.com/IgniteUI/igniteui-angular/issues/447#issuecomment-324601803
20
- inputClass : Hammer . TouchInput ,
21
- recognizers : [
22
- [ Hammer . Pan , { threshold : 0 } ] ,
23
- [ Hammer . Swipe , {
24
- direction : Hammer . DIRECTION_HORIZONTAL
25
- } ] ,
26
- [ Hammer . Tap ] ,
27
- [ Hammer . Tap , { event : 'doubletap' , taps : 2 } , [ 'tap' ] ]
28
- ]
29
- } ;
19
+ protected hammerOptions : HammerOptions = { } ;
30
20
31
21
private _hammerManagers : Array < { element : EventTarget , manager : HammerManager ; } > = [ ] ;
32
22
33
- constructor ( private _zone : NgZone , @Inject ( DOCUMENT ) private doc : any ) {
23
+ constructor ( private _zone : NgZone , @Inject ( DOCUMENT ) private doc : any , private platformUtil : PlatformUtil ) {
24
+ this . platformBrowser = this . platformUtil . isBrowser ;
25
+ if ( this . platformBrowser ) {
26
+ this . hammerOptions = {
27
+ // D.P. #447 Force TouchInput due to PointerEventInput bug (https://github.com/hammerjs/hammer.js/issues/1065)
28
+ // see https://github.com/IgniteUI/igniteui-angular/issues/447#issuecomment-324601803
29
+ inputClass : Hammer . TouchInput ,
30
+ recognizers : [
31
+ [ Hammer . Pan , { threshold : 0 } ] ,
32
+ [ Hammer . Swipe , {
33
+ direction : Hammer . DIRECTION_HORIZONTAL
34
+ } ] ,
35
+ [ Hammer . Tap ] ,
36
+ [ Hammer . Tap , { event : 'doubletap' , taps : 2 } , [ 'tap' ] ]
37
+ ]
38
+ } ;
39
+ }
34
40
}
35
41
36
42
public supports ( eventName : string ) : boolean {
@@ -41,10 +47,14 @@ export class HammerGesturesManager {
41
47
* Add listener extended with options for Hammer.js. Will use defaults if none are provided.
42
48
* Modeling after other event plugins for easy future modifications.
43
49
*/
44
- public addEventListener ( element : HTMLElement ,
45
- eventName : string ,
46
- eventHandler : ( eventObj ) => void ,
47
- options : HammerOptions = null ) : ( ) => void {
50
+ public addEventListener (
51
+ element : HTMLElement ,
52
+ eventName : string ,
53
+ eventHandler : ( eventObj ) => void ,
54
+ options : HammerOptions = null ) : ( ) => void {
55
+ if ( ! this . platformBrowser ) {
56
+ return ;
57
+ }
48
58
49
59
// Creating the manager bind events, must be done outside of angular
50
60
return this . _zone . runOutsideAngular ( ( ) => {
@@ -67,6 +77,10 @@ export class HammerGesturesManager {
67
77
* @param target Can be one of either window, body or document(fallback default).
68
78
*/
69
79
public addGlobalEventListener ( target : string , eventName : string , eventHandler : ( eventObj ) => void ) : ( ) => void {
80
+ if ( ! this . platformBrowser ) {
81
+ return ;
82
+ }
83
+
70
84
const element = this . getGlobalEventTarget ( target ) ;
71
85
72
86
// Creating the manager bind events, must be done outside of angular
0 commit comments