| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS, PlatformLocation} from '@angular/common'; | 
					
						
							|  |  |  | import {COMPILER_PROVIDERS, XHR} from '@angular/compiler'; | 
					
						
							|  |  |  | import {APPLICATION_COMMON_PROVIDERS, ComponentRef, ExceptionHandler, OpaqueToken, PLATFORM_COMMON_PROVIDERS, PLATFORM_DIRECTIVES, PLATFORM_INITIALIZER, PLATFORM_PIPES, PlatformRef, ReflectiveInjector, RootRenderer, Testability, Type, assertPlatform, coreLoadAndBootstrap, createPlatform, getPlatform} from '@angular/core'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import {AnimationDriver, NoOpAnimationDriver, ReflectionCapabilities, SanitizationService, reflector, wtfInit} from '../core_private'; | 
					
						
							| 
									
										
										
										
											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'; | 
					
						
							|  |  |  | import {isBlank, isPresent} from './facade/lang'; | 
					
						
							|  |  |  | import {DomSanitizationService, DomSanitizationServiceImpl} from './security/dom_sanitization_service'; | 
					
						
							|  |  |  | import {CachedXHR} from './xhr/xhr_cache'; | 
					
						
							|  |  |  | import {XHRImpl} from './xhr/xhr_impl'; | 
					
						
							| 
									
										
										
										
											2016-05-20 16:11:49 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | export const CACHED_TEMPLATE_PROVIDER: Array<any /*Type | Provider | any[]*/> = | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     [{provide: XHR, useClass: CachedXHR}]; | 
					
						
							| 
									
										
										
										
											2016-05-20 16:11:49 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | const BROWSER_PLATFORM_MARKER = new OpaqueToken('BrowserPlatformMarker'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * A set of providers to initialize the Angular platform in a web browser. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Used automatically by `bootstrap`, or can be passed to {@link platform}. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export const BROWSER_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |   {provide: BROWSER_PLATFORM_MARKER, useValue: true}, PLATFORM_COMMON_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2016-05-20 16:11:49 -07:00
										 |  |  |   {provide: PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true}, | 
					
						
							|  |  |  |   {provide: PlatformLocation, useClass: BrowserPlatformLocation} | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const BROWSER_SANITIZATION_PROVIDERS: Array<any> = [ | 
					
						
							|  |  |  |   {provide: SanitizationService, useExisting: DomSanitizationService}, | 
					
						
							|  |  |  |   {provide: DomSanitizationService, useClass: DomSanitizationServiceImpl}, | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * A set of providers to initialize an Angular application in a web browser. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Used automatically by `bootstrap`, or can be passed to {@link PlatformRef.application}. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | export const BROWSER_APP_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | 
					
						
							|  |  |  |   APPLICATION_COMMON_PROVIDERS, FORM_PROVIDERS, BROWSER_SANITIZATION_PROVIDERS, | 
					
						
							|  |  |  |   {provide: PLATFORM_PIPES, useValue: COMMON_PIPES, multi: true}, | 
					
						
							|  |  |  |   {provide: PLATFORM_DIRECTIVES, useValue: COMMON_DIRECTIVES, multi: true}, | 
					
						
							|  |  |  |   {provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []}, | 
					
						
							|  |  |  |   {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-05-20 16:11:49 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | export const BROWSER_APP_COMPILER_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | 
					
						
							|  |  |  |   COMPILER_PROVIDERS, | 
					
						
							|  |  |  |   {provide: XHR, useClass: XHRImpl}, | 
					
						
							|  |  |  | ]; | 
					
						
							| 
									
										
										
										
											2016-05-20 16:11:49 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | export function browserPlatform(): PlatformRef { | 
					
						
							|  |  |  |   if (isBlank(getPlatform())) { | 
					
						
							|  |  |  |     createPlatform(ReflectiveInjector.resolveAndCreate(BROWSER_PLATFORM_PROVIDERS)); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return assertPlatform(BROWSER_PLATFORM_MARKER); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Bootstrapping for Angular applications. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * You instantiate an Angular application by explicitly specifying a component to use | 
					
						
							|  |  |  |  * as the root component for your application via the `bootstrap()` method. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ## Simple Example | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Assuming this `index.html`: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ```html
 | 
					
						
							|  |  |  |  * <html> | 
					
						
							|  |  |  |  *   <!-- load Angular script tags here. --> | 
					
						
							|  |  |  |  *   <body> | 
					
						
							|  |  |  |  *     <my-app>loading...</my-app> | 
					
						
							|  |  |  |  *   </body> | 
					
						
							|  |  |  |  * </html> | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * An application is bootstrapped inside an existing browser DOM, typically `index.html`. | 
					
						
							|  |  |  |  * Unlike Angular 1, Angular 2 does not compile/process providers in `index.html`. This is | 
					
						
							|  |  |  |  * mainly for security reasons, as well as architectural changes in Angular 2. This means | 
					
						
							|  |  |  |  * that `index.html` can safely be processed using server-side technologies such as | 
					
						
							|  |  |  |  * providers. Bindings can thus use double-curly `{{ syntax }}` without collision from | 
					
						
							|  |  |  |  * Angular 2 component double-curly `{{ syntax }}`. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * We can use this script code: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * {@example core/ts/bootstrap/bootstrap.ts region='bootstrap'} | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * When the app developer invokes `bootstrap()` with the root component `MyApp` as its | 
					
						
							|  |  |  |  * argument, Angular performs the following tasks: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  1. It uses the component's `selector` property to locate the DOM element which needs | 
					
						
							|  |  |  |  *     to be upgraded into the angular component. | 
					
						
							|  |  |  |  *  2. It creates a new child injector (from the platform injector). Optionally, you can | 
					
						
							|  |  |  |  *     also override the injector configuration for an app by invoking `bootstrap` with the | 
					
						
							|  |  |  |  *     `componentInjectableBindings` argument. | 
					
						
							|  |  |  |  *  3. It creates a new `Zone` and connects it to the angular application's change detection | 
					
						
							|  |  |  |  *     domain instance. | 
					
						
							|  |  |  |  *  4. It creates an emulated or shadow DOM on the selected component's host element and loads the | 
					
						
							|  |  |  |  *     template into it. | 
					
						
							|  |  |  |  *  5. It instantiates the specified component. | 
					
						
							|  |  |  |  *  6. Finally, Angular performs change detection to apply the initial data providers for the | 
					
						
							|  |  |  |  *     application. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ## Bootstrapping Multiple Applications | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * When working within a browser window, there are many singleton resources: cookies, title, | 
					
						
							|  |  |  |  * location, and others. Angular services that represent these resources must likewise be | 
					
						
							|  |  |  |  * shared across all Angular applications that occupy the same browser window. For this | 
					
						
							|  |  |  |  * reason, Angular creates exactly one global platform object which stores all shared | 
					
						
							|  |  |  |  * services, and each angular application injector has the platform injector as its parent. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Each application has its own private injector as well. When there are multiple | 
					
						
							|  |  |  |  * applications on a page, Angular treats each application injector's services as private | 
					
						
							|  |  |  |  * to that application. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * ## API | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * - `appComponentType`: The root component which should act as the application. This is | 
					
						
							|  |  |  |  *   a reference to a `Type` which is annotated with `@Component(...)`. | 
					
						
							|  |  |  |  * - `customProviders`: An additional set of providers that can be added to the | 
					
						
							|  |  |  |  *   app injector to override default injection behavior. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns a `Promise` of {@link ComponentRef}. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export function bootstrap( | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     appComponentType: Type, | 
					
						
							|  |  |  |     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> { | 
					
						
							| 
									
										
										
										
											2016-05-20 16:11:49 -07:00
										 |  |  |   reflector.reflectionCapabilities = new ReflectionCapabilities(); | 
					
						
							|  |  |  |   let providers = [ | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     BROWSER_APP_PROVIDERS, BROWSER_APP_COMPILER_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2016-05-20 16:11:49 -07:00
										 |  |  |     isPresent(customProviders) ? customProviders : [] | 
					
						
							|  |  |  |   ]; | 
					
						
							|  |  |  |   var appInjector = ReflectiveInjector.resolveAndCreate(providers, browserPlatform().injector); | 
					
						
							|  |  |  |   return coreLoadAndBootstrap(appComponentType, appInjector); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function initDomAdapter() { | 
					
						
							|  |  |  |   BrowserDomAdapter.makeCurrent(); | 
					
						
							|  |  |  |   wtfInit(); | 
					
						
							|  |  |  |   BrowserGetTestability.init(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function _exceptionHandler(): ExceptionHandler { | 
					
						
							|  |  |  |   return new ExceptionHandler(getDOM()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function _document(): any { | 
					
						
							|  |  |  |   return getDOM().defaultDoc(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-05-25 12:46:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | function _resolveDefaultAnimationDriver(): AnimationDriver { | 
					
						
							|  |  |  |   if (getDOM().supportsWebAnimation()) { | 
					
						
							|  |  |  |     return new WebAnimationsDriver(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return new NoOpAnimationDriver(); | 
					
						
							|  |  |  | } |