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
}