2016-06-23 09:47:54 -07:00
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
2016-07-18 03:50:31 -07:00
import { CommonModule , PlatformLocation } from '@angular/common' ;
2016-08-25 00:50:16 -07:00
import { ApplicationModule , ClassProvider , ErrorHandler , ExistingProvider , FactoryProvider , NgModule , Optional , PLATFORM_INITIALIZER , PlatformRef , Provider , RootRenderer , Sanitizer , SkipSelf , Testability , TypeProvider , ValueProvider , createPlatformFactory , platformCore } from '@angular/core' ;
2016-06-08 16:38:52 -07:00
2016-06-30 13:07:17 -07:00
import { AnimationDriver } from '../src/dom/animation_driver' ;
2016-05-25 12:46:22 -07:00
import { WebAnimationsDriver } from '../src/dom/web_animations_driver' ;
2016-06-08 16:38:52 -07:00
import { BrowserDomAdapter } from './browser/browser_adapter' ;
import { BrowserPlatformLocation } from './browser/location/browser_platform_location' ;
import { BrowserGetTestability } from './browser/testability' ;
import { ELEMENT_PROBE_PROVIDERS } from './dom/debug/ng_probe' ;
import { getDOM } from './dom/dom_adapter' ;
import { DomRootRenderer , DomRootRenderer_ } from './dom/dom_renderer' ;
import { DOCUMENT } from './dom/dom_tokens' ;
import { DomEventsPlugin } from './dom/events/dom_events' ;
import { EVENT_MANAGER_PLUGINS , EventManager } from './dom/events/event_manager' ;
import { HAMMER_GESTURE_CONFIG , HammerGestureConfig , HammerGesturesPlugin } from './dom/events/hammer_gestures' ;
import { KeyEventsPlugin } from './dom/events/key_events' ;
import { DomSharedStylesHost , SharedStylesHost } from './dom/shared_styles_host' ;
2016-08-25 15:41:19 -07:00
import { DomSanitizer , DomSanitizerImpl } from './security/dom_sanitization_service' ;
2016-05-20 16:11:49 -07:00
2016-08-15 19:37:42 -07:00
export const INTERNAL_BROWSER_PLATFORM_PROVIDERS : Provider [ ] = [
2016-07-18 03:50:31 -07:00
{ provide : PLATFORM_INITIALIZER , useValue : initDomAdapter , multi : true } ,
{ provide : PlatformLocation , useClass : BrowserPlatformLocation }
] ;
2016-05-20 16:11:49 -07:00
2016-06-27 12:27:23 -07:00
/**
2016-06-28 11:01:35 -07:00
* @security Replacing built-in sanitization providers exposes the application to XSS risks.
* Attacker-controlled data introduced by an unsanitized provider could expose your
* application to XSS risks. For more detail, see the [Security Guide](http://g.co/ng/security).
2016-06-27 12:27:23 -07:00
* @experimental
*/
2016-05-20 16:11:49 -07:00
export const BROWSER_SANITIZATION_PROVIDERS : Array < any > = [
2016-08-25 15:41:19 -07:00
{ provide : Sanitizer , useExisting : DomSanitizer } ,
{ provide : DomSanitizer , useClass : DomSanitizerImpl } ,
2016-05-20 16:11:49 -07:00
] ;
2016-06-27 12:27:23 -07:00
/**
2016-08-23 15:41:05 -07:00
* @stable
2016-06-27 12:27:23 -07:00
*/
2016-07-26 05:21:19 -07:00
export const platformBrowser =
createPlatformFactory ( platformCore , 'browser' , INTERNAL_BROWSER_PLATFORM_PROVIDERS ) ;
2016-06-30 13:07:17 -07:00
export function initDomAdapter() {
2016-05-20 16:11:49 -07:00
BrowserDomAdapter . makeCurrent ( ) ;
BrowserGetTestability . init ( ) ;
}
2016-08-25 00:50:16 -07:00
export function errorHandler ( ) : ErrorHandler {
return new ErrorHandler ( ) ;
2016-05-20 16:11:49 -07:00
}
2016-06-30 13:07:17 -07:00
export function _document ( ) : any {
2016-05-20 16:11:49 -07:00
return getDOM ( ) . defaultDoc ( ) ;
}
2016-05-25 12:46:22 -07:00
2016-06-30 13:07:17 -07:00
export function _resolveDefaultAnimationDriver ( ) : AnimationDriver {
2016-05-25 12:46:22 -07:00
if ( getDOM ( ) . supportsWebAnimation ( ) ) {
return new WebAnimationsDriver ( ) ;
}
2016-06-30 13:07:17 -07:00
return AnimationDriver . NOOP ;
}
/**
2016-07-18 03:50:31 -07:00
* The ng module for the browser.
2016-07-08 10:47:17 -07:00
*
2016-08-23 15:41:05 -07:00
* @stable
2016-06-30 13:07:17 -07:00
*/
2016-07-18 03:50:31 -07:00
@NgModule ( {
2016-06-30 13:07:17 -07:00
providers : [
2016-08-25 00:50:16 -07:00
BROWSER_SANITIZATION_PROVIDERS , { provide : ErrorHandler , useFactory : errorHandler , deps : [ ] } ,
2016-07-18 03:50:31 -07:00
{ provide : DOCUMENT , useFactory : _document , deps : [ ] } ,
{ provide : EVENT_MANAGER_PLUGINS , useClass : DomEventsPlugin , multi : true } ,
{ provide : EVENT_MANAGER_PLUGINS , useClass : KeyEventsPlugin , multi : true } ,
{ provide : EVENT_MANAGER_PLUGINS , useClass : HammerGesturesPlugin , multi : true } ,
{ provide : HAMMER_GESTURE_CONFIG , useClass : HammerGestureConfig } ,
{ provide : DomRootRenderer , useClass : DomRootRenderer_ } ,
{ provide : RootRenderer , useExisting : DomRootRenderer } ,
{ provide : SharedStylesHost , useExisting : DomSharedStylesHost } ,
{ provide : AnimationDriver , useFactory : _resolveDefaultAnimationDriver } , DomSharedStylesHost ,
Testability , EventManager , ELEMENT_PROBE_PROVIDERS
2016-06-30 13:07:17 -07:00
] ,
2016-07-18 03:50:31 -07:00
exports : [ CommonModule , ApplicationModule ]
2016-06-30 13:07:17 -07:00
} )
export class BrowserModule {
2016-08-18 13:34:28 -07:00
constructor ( @Optional ( ) @SkipSelf ( ) parentModule : BrowserModule ) {
if ( parentModule ) {
2016-08-25 00:50:16 -07:00
throw new Error (
2016-08-18 13:34:28 -07:00
` BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead. ` ) ;
}
}
2016-06-30 13:07:17 -07:00
}