refactor(browser): merge static & dynamic platforms
This commit is contained in:
		
							parent
							
								
									6c99746f0b
								
							
						
					
					
						commit
						54f8308999
					
				
							
								
								
									
										1
									
								
								build.sh
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								build.sh
									
									
									
									
									
								
							| @ -43,7 +43,6 @@ for PACKAGE in \ | |||||||
|   compiler \ |   compiler \ | ||||||
|   common \ |   common \ | ||||||
|   platform-browser \ |   platform-browser \ | ||||||
|   platform-browser-dynamic \ |  | ||||||
|   platform-server \ |   platform-server \ | ||||||
|   http \ |   http \ | ||||||
|   router \ |   router \ | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ module.exports = function(config) { | |||||||
|       'test-main.js', |       'test-main.js', | ||||||
|       {pattern: 'dist/all/empty.*', included: false, watched: false}, |       {pattern: 'dist/all/empty.*', included: false, watched: false}, | ||||||
|       {pattern: 'modules/@angular/platform-browser/test/static_assets/**', included: false, watched: false}, |       {pattern: 'modules/@angular/platform-browser/test/static_assets/**', included: false, watched: false}, | ||||||
|       {pattern: 'modules/@angular/platform-browser-dynamic/test/browser/static_assets/**', included: false, watched: false} |       {pattern: 'modules/@angular/platform-browser/test/browser/static_assets/**', included: false, watched: false} | ||||||
|     ], |     ], | ||||||
| 
 | 
 | ||||||
|     exclude: [ |     exclude: [ | ||||||
|  | |||||||
| @ -48,7 +48,7 @@ let _PLACEHOLDER_EXPANDED_REGEXP = RegExpWrapper.create(`\\<ph(\\s)+name=("(\\w) | |||||||
|  * Partitioning transforms an array of HtmlAst into an array of Part. |  * Partitioning transforms an array of HtmlAst into an array of Part. | ||||||
|  * A part can optionally contain a root element or a root text node. And it can also contain |  * A part can optionally contain a root element or a root text node. And it can also contain | ||||||
|  * children. |  * children. | ||||||
|  * A part can contain i18n property, in which case it needs to be transalted. |  * A part can contain i18n property, in which case it needs to be translated. | ||||||
|  * |  * | ||||||
|  * Example: |  * Example: | ||||||
|  * |  * | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {provide} from '@angular/core'; | import {provide} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import {UrlResolver} from '@angular/compiler'; | import {UrlResolver} from '@angular/compiler'; | ||||||
| 
 | 
 | ||||||
| var MyApp: any; | var MyApp: any; | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import {NG_VALIDATORS} from '@angular/common'; | import {NG_VALIDATORS} from '@angular/common'; | ||||||
| import {Provider} from '@angular/core'; | import {Provider} from '@angular/core'; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide} from '@angular/core'; | import {Component, provide} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import {Observable, Subscriber} from 'rxjs/Rx'; | import {Observable, Subscriber} from 'rxjs/Rx'; | ||||||
| 
 | 
 | ||||||
| // #docregion AsyncPipe
 | // #docregion AsyncPipe
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide} from '@angular/core'; | import {Component, provide} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| 
 | 
 | ||||||
| // #docregion DatePipe
 | // #docregion DatePipe
 | ||||||
| @Component({ | @Component({ | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide} from '@angular/core'; | import {Component, provide} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| 
 | 
 | ||||||
| // #docregion JsonPipe
 | // #docregion JsonPipe
 | ||||||
| @Component({ | @Component({ | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide} from '@angular/core'; | import {Component, provide} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| 
 | 
 | ||||||
| // #docregion LowerUpperPipe
 | // #docregion LowerUpperPipe
 | ||||||
| @Component({ | @Component({ | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide} from '@angular/core'; | import {Component, provide} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| 
 | 
 | ||||||
| // #docregion NumberPipe
 | // #docregion NumberPipe
 | ||||||
| @Component({ | @Component({ | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide} from '@angular/core'; | import {Component, provide} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| 
 | 
 | ||||||
| // #docregion SlicePipe_string
 | // #docregion SlicePipe_string
 | ||||||
| @Component({ | @Component({ | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component} from '@angular/core'; | import {Component} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| 
 | 
 | ||||||
| // #docregion bootstrap
 | // #docregion bootstrap
 | ||||||
| @Component({selector: 'my-app', template: 'Hello {{ name }}!'}) | @Component({selector: 'my-app', template: 'Hello {{ name }}!'}) | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, createPlatform, coreLoadAndBootstrap, ReflectiveInjector} from '@angular/core'; | import {Component, createPlatform, coreLoadAndBootstrap, ReflectiveInjector} from '@angular/core'; | ||||||
| import {BROWSER_PROVIDERS, BROWSER_APP_STATIC_PROVIDERS} from '@angular/platform-browser'; | import {BROWSER_PLATFORM_PROVIDERS, BROWSER_APP_STATIC_PROVIDERS} from '@angular/platform-browser'; | ||||||
| 
 | 
 | ||||||
| var appProviders: any[] = []; | var appProviders: any[] = []; | ||||||
| 
 | 
 | ||||||
| @ -8,7 +8,7 @@ var appProviders: any[] = []; | |||||||
| class MyApp { | class MyApp { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var platform = createPlatform(ReflectiveInjector.resolveAndCreate(BROWSER_PROVIDERS)); | var platform = createPlatform(ReflectiveInjector.resolveAndCreate(BROWSER_PLATFORM_PROVIDERS)); | ||||||
| var appInjector = ReflectiveInjector.resolveAndCreate([BROWSER_APP_STATIC_PROVIDERS, appProviders], | var appInjector = ReflectiveInjector.resolveAndCreate([BROWSER_APP_STATIC_PROVIDERS, appProviders], | ||||||
|                                                       platform.injector); |                                                       platform.injector); | ||||||
| coreLoadAndBootstrap(appInjector, MyApp); | coreLoadAndBootstrap(appInjector, MyApp); | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| // #docregion enableProdMode
 | // #docregion enableProdMode
 | ||||||
| import {enableProdMode} from '@angular/core'; | import {enableProdMode} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import {MyComponent} from './my_component'; | import {MyComponent} from './my_component'; | ||||||
| 
 | 
 | ||||||
| enableProdMode(); | enableProdMode(); | ||||||
|  | |||||||
| @ -1,6 +1,5 @@ | |||||||
| import {Component} from '@angular/core'; | import {Component} from "@angular/core"; | ||||||
| import {ELEMENT_PROBE_PROVIDERS} from '@angular/platform-browser'; | import {ELEMENT_PROBE_PROVIDERS, bootstrap} from "@angular/platform-browser"; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; |  | ||||||
| 
 | 
 | ||||||
| @Component({selector: 'my-component'}) | @Component({selector: 'my-component'}) | ||||||
| class MyAppComponent { | class MyAppComponent { | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {provide, Component, ComponentRef} from '@angular/core'; | import {provide, Component, ComponentRef} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import { | import { | ||||||
|   CanActivate, |   CanActivate, | ||||||
|   RouteConfig, |   RouteConfig, | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {provide, Component, ComponentRef} from '@angular/core'; | import {provide, Component, ComponentRef} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import { | import { | ||||||
|   CanDeactivate, |   CanDeactivate, | ||||||
|   RouteConfig, |   RouteConfig, | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide, ComponentRef} from '@angular/core'; | import {Component, provide, ComponentRef} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import { | import { | ||||||
|   OnActivate, |   OnActivate, | ||||||
|   ComponentInstruction, |   ComponentInstruction, | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, Injectable, provide, ComponentRef} from '@angular/core'; | import {Component, Injectable, provide, ComponentRef} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import { | import { | ||||||
|   OnDeactivate, |   OnDeactivate, | ||||||
|   ComponentInstruction, |   ComponentInstruction, | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import {Component, provide, ComponentRef} from '@angular/core'; | import {Component, provide, ComponentRef} from '@angular/core'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import { | import { | ||||||
|   RouteConfig, |   RouteConfig, | ||||||
|   ComponentInstruction, |   ComponentInstruction, | ||||||
|  | |||||||
| @ -366,85 +366,80 @@ var CORE_TESTING: string[] = [ | |||||||
| 
 | 
 | ||||||
| var PLATFORM_BROWSER: string[] = [ | var PLATFORM_BROWSER: string[] = [ | ||||||
|   '__platform_browser_private__', |   '__platform_browser_private__', | ||||||
|   'BROWSER_APP_STATIC_PROVIDERS', |   'AngularEntrypoint:dart', | ||||||
|   'BROWSER_PROVIDERS', |   'bootstrap', | ||||||
|   'BROWSER_APP_COMMON_PROVIDERS', |   'bootstrapApp', | ||||||
|   'BROWSER_SANITIZATION_PROVIDERS', |   'bootstrapRender', | ||||||
|   'DOCUMENT', |  | ||||||
|   'ELEMENT_PROBE_PROVIDERS', |  | ||||||
|   'DomEventsPlugin', |  | ||||||
|   'KeyEventsPlugin', |  | ||||||
|   'EVENT_MANAGER_PLUGINS', |  | ||||||
|   'EventManager', |  | ||||||
|   'HAMMER_GESTURE_CONFIG', |  | ||||||
|   'HammerGestureConfig', |  | ||||||
|   'bootstrapStatic', |   'bootstrapStatic', | ||||||
|  |   'bootstrapStaticApp', | ||||||
|  |   'bootstrapStaticRender', | ||||||
|  |   'BROWSER_APP_COMMON_PROVIDERS', | ||||||
|  |   'BROWSER_APP_PROVIDERS', | ||||||
|  |   'BROWSER_APP_STATIC_PROVIDERS', | ||||||
|  |   'BROWSER_PLATFORM_PROVIDERS', | ||||||
|  |   'BROWSER_SANITIZATION_PROVIDERS', | ||||||
|   'browserPlatform', |   'browserPlatform', | ||||||
|   'BrowserPlatformLocation', |   'BrowserPlatformLocation', | ||||||
|   'AngularEntrypoint:dart', |  | ||||||
|   'By', |   'By', | ||||||
|   'DomSanitizationService', |   'CACHED_TEMPLATE_PROVIDER', | ||||||
|   'SecurityContext', |  | ||||||
|   'Title', |  | ||||||
|   'disableDebugTools', |  | ||||||
|   'enableDebugTools', |  | ||||||
|   'ClientMessageBroker', |   'ClientMessageBroker', | ||||||
|   'ClientMessageBrokerFactory', |   'ClientMessageBrokerFactory', | ||||||
|  |   'disableDebugTools', | ||||||
|  |   'DOCUMENT', | ||||||
|  |   'DomEventsPlugin', | ||||||
|  |   'DomSanitizationService', | ||||||
|  |   'ELEMENT_PROBE_PROVIDERS', | ||||||
|  |   'enableDebugTools', | ||||||
|  |   'EVENT_MANAGER_PLUGINS', | ||||||
|  |   'EventManager', | ||||||
|   'FnArg', |   'FnArg', | ||||||
|  |   'HAMMER_GESTURE_CONFIG', | ||||||
|  |   'HammerGestureConfig', | ||||||
|  |   'initializeGenericWorkerRenderer', | ||||||
|  |   'KeyEventsPlugin', | ||||||
|   'MessageBus', |   'MessageBus', | ||||||
|   'PRIMITIVE', |   'PRIMITIVE', | ||||||
|   'ReceivedMessage', |   'ReceivedMessage', | ||||||
|  |   'SecurityContext', | ||||||
|   'ServiceMessageBroker', |   'ServiceMessageBroker', | ||||||
|   'ServiceMessageBrokerFactory', |   'ServiceMessageBrokerFactory', | ||||||
|  |   'Title', | ||||||
|   'UiArguments', |   'UiArguments', | ||||||
|  |   'UrlChangeEvent:dart', | ||||||
|  |   'UrlChangeListener:dart', | ||||||
|  |   'WebWorkerInstance', | ||||||
|   'WORKER_APP_APPLICATION_COMMON_PROVIDERS', |   'WORKER_APP_APPLICATION_COMMON_PROVIDERS', | ||||||
|   'WORKER_APP_APPLICATION_PROVIDERS', |   'WORKER_APP_APPLICATION_PROVIDERS', | ||||||
|  |   'WORKER_APP_LOCATION_PROVIDERS', | ||||||
|   'WORKER_APP_PLATFORM_PROVIDERS', |   'WORKER_APP_PLATFORM_PROVIDERS', | ||||||
|  |   'WORKER_APP_STATIC_APPLICATION_PROVIDERS', | ||||||
|   'WORKER_RENDER_APPLICATION_COMMON_PROVIDERS', |   'WORKER_RENDER_APPLICATION_COMMON_PROVIDERS', | ||||||
|   'WORKER_RENDER_APPLICATION_PROVIDERS', |   'WORKER_RENDER_APPLICATION_PROVIDERS', | ||||||
|  |   'WORKER_RENDER_APPLICATION_PROVIDERS', | ||||||
|  |   'WORKER_RENDER_LOCATION_PROVIDERS', | ||||||
|   'WORKER_RENDER_PLATFORM_PROVIDERS', |   'WORKER_RENDER_PLATFORM_PROVIDERS', | ||||||
|   'WORKER_RENDER_STARTABLE_MESSAGING_SERVICE', |   'WORKER_RENDER_STARTABLE_MESSAGING_SERVICE', | ||||||
|  |   'WORKER_RENDER_STATIC_APPLICATION_PROVIDERS', | ||||||
|   'WORKER_SCRIPT', |   'WORKER_SCRIPT', | ||||||
|   'WORKER_APP_LOCATION_PROVIDERS', |  | ||||||
|   'WORKER_RENDER_LOCATION_PROVIDERS', |  | ||||||
|   'workerAppPlatform', |   'workerAppPlatform', | ||||||
|   'workerRenderPlatform', |   'workerRenderPlatform' | ||||||
|   'WebWorkerInstance', |  | ||||||
|   'bootstrapStaticApp', |  | ||||||
|   'bootstrapStaticRender', |  | ||||||
|   'initializeGenericWorkerRenderer' |  | ||||||
| ]; | ]; | ||||||
| 
 | 
 | ||||||
| var PLATFORM_BROWSER_TESTING: string[] = [ | var PLATFORM_BROWSER_TESTING: string[] = [ | ||||||
|   'TEST_BROWSER_STATIC_APPLICATION_PROVIDERS', |  | ||||||
|   'TEST_BROWSER_STATIC_PLATFORM_PROVIDERS', |  | ||||||
|   'ADDITIONAL_TEST_BROWSER_PROVIDERS',  // This should be made private
 |   'ADDITIONAL_TEST_BROWSER_PROVIDERS',  // This should be made private
 | ||||||
|  |   'ADDITIONAL_TEST_BROWSER_STATIC_PROVIDERS',  // This should be made private
 | ||||||
|   'BrowserDetection', |   'BrowserDetection', | ||||||
|   'browserDetection', |   'browserDetection', | ||||||
|   'dispatchEvent', |   'dispatchEvent', | ||||||
|  |   'DOMTestComponentRenderer', | ||||||
|   'el', |   'el', | ||||||
|   'expect', |   'expect', | ||||||
|   'normalizeCSS', |   'normalizeCSS', | ||||||
|   'stringifyElement' |   'stringifyElement', | ||||||
| ]; |   'TEST_BROWSER_APPLICATION_PROVIDERS', | ||||||
| 
 |   'TEST_BROWSER_PLATFORM_PROVIDERS', | ||||||
| var PLATFORM_BROWSER_DYNAMIC: string[] = [ |   'TEST_BROWSER_STATIC_APPLICATION_PROVIDERS', | ||||||
|   'BROWSER_APP_DYNAMIC_PROVIDERS', |   'TEST_BROWSER_STATIC_PLATFORM_PROVIDERS' | ||||||
|   'CACHED_TEMPLATE_PROVIDER', |  | ||||||
|   'bootstrap', |  | ||||||
|   'UrlChangeEvent:dart', |  | ||||||
|   'UrlChangeListener:dart', |  | ||||||
|   'WORKER_APP_DYNAMIC_APPLICATION_PROVIDERS', |  | ||||||
|   'WORKER_RENDER_DYNAMIC_APPLICATION_PROVIDERS', |  | ||||||
|   'bootstrapApp', |  | ||||||
|   'bootstrapRender' |  | ||||||
| ]; |  | ||||||
| 
 |  | ||||||
| var PLATFORM_BROWSER_DYNAMIC_TESTING: string[] = [ |  | ||||||
|   'TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS', |  | ||||||
|   'TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS', |  | ||||||
|   'ADDITIONAL_DYNAMIC_TEST_BROWSER_PROVIDERS', |  | ||||||
|   'DOMTestComponentRenderer' |  | ||||||
| ]; | ]; | ||||||
| 
 | 
 | ||||||
| var PLATFORM_SERVER: string[] = ['Parse5DomAdapter']; | var PLATFORM_SERVER: string[] = ['Parse5DomAdapter']; | ||||||
| @ -547,8 +542,6 @@ var API = { | |||||||
|   'upgrade': UPGRADE, |   'upgrade': UPGRADE, | ||||||
|   'platform-browser': PLATFORM_BROWSER, |   'platform-browser': PLATFORM_BROWSER, | ||||||
|   'platform-browser/testing': PLATFORM_BROWSER_TESTING, |   'platform-browser/testing': PLATFORM_BROWSER_TESTING, | ||||||
|   'platform-browser-dynamic': PLATFORM_BROWSER_DYNAMIC, |  | ||||||
|   'platform-browser-dynamic/testing': PLATFORM_BROWSER_DYNAMIC_TESTING, |  | ||||||
|   'platform-server': PLATFORM_SERVER, |   'platform-server': PLATFORM_SERVER, | ||||||
|   'platform-server/testing': PLATFORM_SERVER_TESTING |   'platform-server/testing': PLATFORM_SERVER_TESTING | ||||||
| }; | }; | ||||||
| @ -578,8 +571,6 @@ export function main() { | |||||||
|       'upgrade', |       'upgrade', | ||||||
|       'platform-browser', |       'platform-browser', | ||||||
|       'platform-browser/testing', |       'platform-browser/testing', | ||||||
|       'platform-browser-dynamic', |  | ||||||
|       'platform-browser-dynamic/testing', |  | ||||||
|       'platform-server', |       'platform-server', | ||||||
|       'platform-server/testing' |       'platform-server/testing' | ||||||
|     ]; |     ]; | ||||||
|  | |||||||
| @ -14,8 +14,6 @@ import * as router_testing from '@angular/router/testing'; | |||||||
| import * as upgrade from '@angular/upgrade'; | import * as upgrade from '@angular/upgrade'; | ||||||
| import * as platformBrowser from '@angular/platform-browser'; | import * as platformBrowser from '@angular/platform-browser'; | ||||||
| import * as platformBrowser_testing from '@angular/platform-browser/testing'; | import * as platformBrowser_testing from '@angular/platform-browser/testing'; | ||||||
| import * as platformBrowserDynamic from '@angular/platform-browser-dynamic'; |  | ||||||
| import * as platformBrowserDynamic_testing from '@angular/platform-browser-dynamic/testing'; |  | ||||||
| import * as platformServer from '@angular/platform-server'; | import * as platformServer from '@angular/platform-server'; | ||||||
| import * as platformServer_testing from '@angular/platform-server/testing'; | import * as platformServer_testing from '@angular/platform-server/testing'; | ||||||
| 
 | 
 | ||||||
| @ -36,8 +34,6 @@ const LIB_MAP = { | |||||||
|   'upgrade': upgrade, |   'upgrade': upgrade, | ||||||
|   'platform-browser': platformBrowser, |   'platform-browser': platformBrowser, | ||||||
|   'platform-browser/testing': platformBrowser_testing, |   'platform-browser/testing': platformBrowser_testing, | ||||||
|   'platform-browser-dynamic': platformBrowserDynamic, |  | ||||||
|   'platform-browser-dynamic/testing': platformBrowserDynamic_testing, |  | ||||||
|   'platform-server': platformServer, |   'platform-server': platformServer, | ||||||
|   'platform-server/testing': platformServer_testing |   'platform-server/testing': platformServer_testing | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -1 +0,0 @@ | |||||||
| export '../core/private_export.dart'; |  | ||||||
| @ -1,4 +0,0 @@ | |||||||
| import {__core_private__ as r, __core_private_types__ as t} from '@angular/core'; |  | ||||||
| 
 |  | ||||||
| export type ReflectionCapabilities = t.ReflectionCapabilities; |  | ||||||
| export var ReflectionCapabilities: typeof t.ReflectionCapabilities = r.ReflectionCapabilities; |  | ||||||
| @ -1,4 +0,0 @@ | |||||||
| export * from './src/platform_browser_dynamic'; |  | ||||||
| 
 |  | ||||||
| export * from './src/worker_render'; |  | ||||||
| export * from './src/worker_app'; |  | ||||||
| @ -1,20 +0,0 @@ | |||||||
| { |  | ||||||
|   "name": "@angular/platform-browser-dynamic", |  | ||||||
|   "version": "$$ANGULAR_VERSION$$", |  | ||||||
|   "description": "", |  | ||||||
|   "main": "index.js", |  | ||||||
|   "jsnext:main": "esm/index.js", |  | ||||||
|   "typings": "index.d.ts", |  | ||||||
|   "author": "angular", |  | ||||||
|   "license": "MIT", |  | ||||||
|   "peerDependencies": { |  | ||||||
|     "@angular/core": "$$ANGULAR_VERSION$$", |  | ||||||
|     "@angular/common": "$$ANGULAR_VERSION$$", |  | ||||||
|     "@angular/compiler": "$$ANGULAR_VERSION$$", |  | ||||||
|     "@angular/platform-browser": "$$ANGULAR_VERSION$$" |  | ||||||
|   }, |  | ||||||
|   "repository": { |  | ||||||
|     "type": "git", |  | ||||||
|     "url": "https://github.com/angular/angular.git" |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1 +0,0 @@ | |||||||
| export '../core/private_export.dart'; |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| import {__platform_browser_private__ as _} from '@angular/platform-browser'; |  | ||||||
| 
 |  | ||||||
| export type DomAdapter = _.DomAdapter; |  | ||||||
| export function getDOM(): _.DomAdapter { |  | ||||||
|   return _.getDOM() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @ -1,20 +0,0 @@ | |||||||
| 
 |  | ||||||
| export default { |  | ||||||
|   entry: '../../../dist/packages-dist/platform-browser-dynamic/esm/index.js', |  | ||||||
|   dest: '../../../dist/packages-dist/platform-browser-dynamic/esm/platform-browser-dynamic.umd.js', |  | ||||||
|   format: 'umd', |  | ||||||
|   moduleName: 'ng.platformBrowserDynamic', |  | ||||||
|   globals: { |  | ||||||
|     '@angular/core': 'ng.core', |  | ||||||
|     '@angular/common': 'ng.common', |  | ||||||
|     '@angular/compiler': 'ng.compiler', |  | ||||||
|     '@angular/platform-browser': 'ng.platformBrowser', |  | ||||||
|     'rxjs/Subject': 'Rx', |  | ||||||
|     'rxjs/observable/PromiseObservable': 'Rx', // this is wrong, but this stuff has changed in rxjs b.6 so we need to fix it when we update.
 |  | ||||||
|     'rxjs/operator/toPromise': 'Rx.Observable.prototype', |  | ||||||
|     'rxjs/Observable': 'Rx' |  | ||||||
|   }, |  | ||||||
|   plugins: [ |  | ||||||
| //    nodeResolve({ jsnext: true, main: true }),
 |  | ||||||
|   ] |  | ||||||
| } |  | ||||||
| @ -1 +0,0 @@ | |||||||
| ../../facade/src |  | ||||||
| @ -1,5 +0,0 @@ | |||||||
| /** |  | ||||||
|  * All channels used by angular's WebWorker components are listed here. |  | ||||||
|  * You should not use these channels in your application code. |  | ||||||
|  */ |  | ||||||
| export const XHR_CHANNEL = "ng-XHR"; |  | ||||||
| @ -1,48 +0,0 @@ | |||||||
| library angular2.src.services.xhr_cache; |  | ||||||
| 
 |  | ||||||
| import 'dart:async' show Future; |  | ||||||
| import 'dart:html'; |  | ||||||
| import 'dart:js' as js; |  | ||||||
| import 'package:angular2/core.dart'; |  | ||||||
| import 'package:angular2/src/compiler/xhr.dart'; |  | ||||||
| import 'package:angular2/src/facade/exceptions.dart' show BaseException; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * An implementation of XHR that uses a template cache to avoid doing an actual |  | ||||||
|  * XHR. |  | ||||||
|  * |  | ||||||
|  * The template cache needs to be built and loaded into window.$templateCache |  | ||||||
|  * via a separate mechanism. |  | ||||||
|  */ |  | ||||||
| @Injectable() |  | ||||||
| class CachedXHR extends XHR { |  | ||||||
|   js.JsObject _cache; |  | ||||||
|   String _baseUri; |  | ||||||
| 
 |  | ||||||
|   CachedXHR() { |  | ||||||
|     if (js.context.hasProperty(r'$templateCache')) { |  | ||||||
|       this._cache = js.context[r'$templateCache']; |  | ||||||
|     } else { |  | ||||||
|       throw new BaseException( |  | ||||||
|         r'CachedXHR: Template cache was not found in $templateCache.'); |  | ||||||
|     } |  | ||||||
|     this._baseUri = window.location.protocol + |  | ||||||
|       '//' + |  | ||||||
|       window.location.host + |  | ||||||
|       window.location.pathname; |  | ||||||
|     int lastSlash = this._baseUri.lastIndexOf('/'); |  | ||||||
|     this._baseUri = this._baseUri.substring(0, lastSlash + 1); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Future<String> get(String url) { |  | ||||||
|     if (url.startsWith(this._baseUri)) { |  | ||||||
|       url = url.substring(this._baseUri.length); |  | ||||||
|     } |  | ||||||
|     if (this._cache.hasProperty(url)) { |  | ||||||
|       return new Future.value(this._cache[url]); |  | ||||||
|     } else { |  | ||||||
|       return new Future.error( |  | ||||||
|         'CachedXHR: Did not find cached template for ' + url); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,14 +0,0 @@ | |||||||
| library angular2.src.services.xhr_impl; |  | ||||||
| 
 |  | ||||||
| import 'dart:async' show Future; |  | ||||||
| import 'dart:html' show HttpRequest; |  | ||||||
| import 'package:angular2/core.dart'; |  | ||||||
| import 'package:angular2/src/compiler/xhr.dart'; |  | ||||||
| 
 |  | ||||||
| @Injectable() |  | ||||||
| class XHRImpl extends XHR { |  | ||||||
|   Future<String> get(String url) { |  | ||||||
|     return HttpRequest.request(url).then((HttpRequest req) => req.responseText, |  | ||||||
|         onError: (_) => new Future.error('Failed to load $url')); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,46 +0,0 @@ | |||||||
| "use strict"; |  | ||||||
| var __extends = (this && this.__extends) || function (d, b) { |  | ||||||
|     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; |  | ||||||
|     function __() { this.constructor = d; } |  | ||||||
|     d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); |  | ||||||
| }; |  | ||||||
| var compiler_1 = require('@angular/compiler'); |  | ||||||
| var promise_1 = require('../../src/facade/promise'); |  | ||||||
| var lang_1 = require('../../src/facade/lang'); |  | ||||||
| var XHRImpl = (function (_super) { |  | ||||||
|     __extends(XHRImpl, _super); |  | ||||||
|     function XHRImpl() { |  | ||||||
|         _super.apply(this, arguments); |  | ||||||
|     } |  | ||||||
|     XHRImpl.prototype.get = function (url) { |  | ||||||
|         var completer = promise_1.PromiseWrapper.completer(); |  | ||||||
|         var xhr = new XMLHttpRequest(); |  | ||||||
|         xhr.open('GET', url, true); |  | ||||||
|         xhr.responseType = 'text'; |  | ||||||
|         xhr.onload = function () { |  | ||||||
|             // responseText is the old-school way of retrieving response (supported by IE8 & 9)
 |  | ||||||
|             // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
 |  | ||||||
|             var response = lang_1.isPresent(xhr.response) ? xhr.response : xhr.responseText; |  | ||||||
|             // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
 |  | ||||||
|             var status = xhr.status === 1223 ? 204 : xhr.status; |  | ||||||
|             // fix status code when it is 0 (0 status is undocumented).
 |  | ||||||
|             // Occurs when accessing file resources or on Android 4.1 stock browser
 |  | ||||||
|             // while retrieving files from application cache.
 |  | ||||||
|             if (status === 0) { |  | ||||||
|                 status = response ? 200 : 0; |  | ||||||
|             } |  | ||||||
|             if (200 <= status && status <= 300) { |  | ||||||
|                 completer.resolve(response); |  | ||||||
|             } |  | ||||||
|             else { |  | ||||||
|                 completer.reject("Failed to load " + url, null); |  | ||||||
|             } |  | ||||||
|         }; |  | ||||||
|         xhr.onerror = function () { completer.reject("Failed to load " + url, null); }; |  | ||||||
|         xhr.send(); |  | ||||||
|         return completer.promise; |  | ||||||
|     }; |  | ||||||
|     return XHRImpl; |  | ||||||
| }(compiler_1.XHR)); |  | ||||||
| exports.XHRImpl = XHRImpl; |  | ||||||
| //# sourceMappingURL=xhr_impl.js.map
 |  | ||||||
| @ -1 +0,0 @@ | |||||||
| <span>from external template</span> |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| library angular2.test.testing.testing_browser_pec; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * This is intentionally left blank. The public test lib is only for TS/JS |  | ||||||
|  * apps. |  | ||||||
|  */ |  | ||||||
| main() {} |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| import 'dart:js' as js; |  | ||||||
| 
 |  | ||||||
| void setTemplateCache(Map cache) { |  | ||||||
|   if (cache == null) { |  | ||||||
|     if (js.context.hasProperty(r'$templateCache')) { |  | ||||||
|       js.context.deleteProperty(r'$templateCache'); |  | ||||||
|     } |  | ||||||
|     return; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   js.JsObject jsMap = new js.JsObject(js.context['Object']); |  | ||||||
|   for (String key in cache.keys) { |  | ||||||
|     jsMap[key] = cache[key]; |  | ||||||
|   } |  | ||||||
|   js.context[r'$templateCache'] = jsMap; |  | ||||||
| } |  | ||||||
| @ -1,2 +0,0 @@ | |||||||
| export * from './testing/browser'; |  | ||||||
| export * from './testing/dom_test_component_renderer'; |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| { |  | ||||||
|   "angularCompilerOptions": { |  | ||||||
|     "skipTemplateCodegen": true |  | ||||||
|   }, |  | ||||||
|   "compilerOptions": { |  | ||||||
|     "baseUrl": ".", |  | ||||||
|     "declaration": true, |  | ||||||
|     "emitDecoratorMetadata": true, |  | ||||||
|     "experimentalDecorators": true, |  | ||||||
|     "module": "es2015", |  | ||||||
|     "moduleResolution": "node", |  | ||||||
|     "outDir": "../../../dist/packages-dist/platform-browser-dynamic/esm", |  | ||||||
|     "paths": { |  | ||||||
|       "@angular/common": ["../../../dist/packages-dist/common/"], |  | ||||||
|       "@angular/compiler": ["../../../dist/packages-dist/compiler/"], |  | ||||||
|       "@angular/compiler/testing": ["../../../dist/packages-dist/compiler/testing"], |  | ||||||
|       "@angular/core": ["../../../dist/packages-dist/core/"], |  | ||||||
|       "@angular/platform-browser": ["../../../dist/packages-dist/platform-browser"], |  | ||||||
|       "@angular/platform-browser/testing": ["../../../dist/packages-dist/platform-browser/testing"] |  | ||||||
|     }, |  | ||||||
|     "rootDir": ".", |  | ||||||
|     "sourceMap": true, |  | ||||||
|     "inlineSources": true, |  | ||||||
|     "target": "es2015" |  | ||||||
|   }, |  | ||||||
|   "files": [ |  | ||||||
|     "index.ts", |  | ||||||
|     "testing.ts", |  | ||||||
|     "../typings/hammerjs/hammerjs.d.ts", |  | ||||||
|     "../typings/jasmine/jasmine.d.ts", |  | ||||||
|     "../../../node_modules/zone.js/dist/zone.js.d.ts" |  | ||||||
|   ] |  | ||||||
| } |  | ||||||
| @ -1,36 +0,0 @@ | |||||||
| { |  | ||||||
|   "angularCompilerOptions": { |  | ||||||
|     "skipTemplateCodegen": true |  | ||||||
|   }, |  | ||||||
|   "compilerOptions": { |  | ||||||
|     "baseUrl": ".", |  | ||||||
|     "declaration": true, |  | ||||||
|     "emitDecoratorMetadata": true, |  | ||||||
|     "experimentalDecorators": true, |  | ||||||
|     "module": "commonjs", |  | ||||||
|     "moduleResolution": "node", |  | ||||||
|     "outDir": "../../../dist/packages-dist/platform-browser-dynamic/", |  | ||||||
|     "paths": { |  | ||||||
|       "@angular/core": ["../../../dist/packages-dist/core"], |  | ||||||
|       "@angular/common": ["../../../dist/packages-dist/common"], |  | ||||||
|       "@angular/compiler": ["../../../dist/packages-dist/compiler"], |  | ||||||
|       "@angular/compiler/testing": ["../../../dist/packages-dist/compiler/testing"], |  | ||||||
|       "@angular/platform-browser": ["../../../dist/packages-dist/platform-browser"], |  | ||||||
|       "@angular/platform-browser/testing": ["../../../dist/packages-dist/platform-browser/testing"] |  | ||||||
|     }, |  | ||||||
|     "rootDir": ".", |  | ||||||
|     "sourceMap": true, |  | ||||||
|     "inlineSources": true, |  | ||||||
|     "target": "es5" |  | ||||||
|   }, |  | ||||||
|   "files": [ |  | ||||||
|     "index.ts", |  | ||||||
|     "testing.ts", |  | ||||||
|     "../typings/es6-collections/es6-collections.d.ts", |  | ||||||
|     "../typings/es6-promise/es6-promise.d.ts", |  | ||||||
|     "../manual_typings/globals.d.ts", |  | ||||||
|     "../typings/hammerjs/hammerjs.d.ts", |  | ||||||
|     "../typings/jasmine/jasmine.d.ts", |  | ||||||
|     "../../../node_modules/zone.js/dist/zone.js.d.ts" |  | ||||||
|   ] |  | ||||||
| } |  | ||||||
| @ -1 +0,0 @@ | |||||||
| export '../core/private_export.dart'; |  | ||||||
| @ -1,6 +1,52 @@ | |||||||
| export * from './src/platform_browser'; | export {DomEventsPlugin} from './src/dom/events/dom_events'; | ||||||
|  | export {KeyEventsPlugin} from './src/dom/events/key_events'; | ||||||
|  | export {EventManager, EVENT_MANAGER_PLUGINS} from './src/dom/events/event_manager'; | ||||||
|  | export {HAMMER_GESTURE_CONFIG, HammerGestureConfig} from './src/dom/events/hammer_gestures'; | ||||||
|  | export {ELEMENT_PROBE_PROVIDERS} from './src/dom/debug/ng_probe'; | ||||||
|  | export {By} from './src/dom/debug/by'; | ||||||
|  | export {DOCUMENT} from './src/dom/dom_tokens'; | ||||||
| 
 | 
 | ||||||
| export * from './src/worker_render'; | export {BrowserPlatformLocation} from './src/browser/location/browser_platform_location'; | ||||||
| export * from './src/worker_app'; | export {Title} from './src/browser/title'; | ||||||
|  | export {enableDebugTools, disableDebugTools} from './src/browser/tools/tools'; | ||||||
|  | 
 | ||||||
|  | export { | ||||||
|  |   DomSanitizationService, | ||||||
|  |   SafeHtml, | ||||||
|  |   SafeScript, | ||||||
|  |   SafeStyle, | ||||||
|  |   SafeUrl, | ||||||
|  |   SafeResourceUrl, | ||||||
|  |   SecurityContext | ||||||
|  | } from './src/security/dom_sanitization_service'; | ||||||
|  | 
 | ||||||
|  | export * from './src/platform/common/browser'; | ||||||
|  | export * from './src/platform/static/browser'; | ||||||
|  | export * from './src/platform/dynamic/browser'; | ||||||
|  | 
 | ||||||
|  | // Web Workers
 | ||||||
|  | export { | ||||||
|  |   ClientMessageBroker, | ||||||
|  |   ClientMessageBrokerFactory, | ||||||
|  |   FnArg, | ||||||
|  |   UiArguments | ||||||
|  | } from './src/web_workers/shared/client_message_broker'; | ||||||
|  | export { | ||||||
|  |   ReceivedMessage, | ||||||
|  |   ServiceMessageBroker, | ||||||
|  |   ServiceMessageBrokerFactory | ||||||
|  | } from './src/web_workers/shared/service_message_broker'; | ||||||
|  | export {PRIMITIVE} from './src/web_workers/shared/serializer'; | ||||||
|  | export * from './src/web_workers/shared/message_bus'; | ||||||
|  | export {WORKER_APP_LOCATION_PROVIDERS} from './src/web_workers/worker/location_providers'; | ||||||
|  | export {WORKER_RENDER_LOCATION_PROVIDERS} from './src/web_workers/ui/location_providers'; | ||||||
|  | 
 | ||||||
|  | export * from './src/platform/common/worker_render'; | ||||||
|  | export * from './src/platform/common/worker_app'; | ||||||
|  | export * from './src/platform/dynamic/worker_render'; | ||||||
|  | export * from './src/platform/dynamic/worker_app'; | ||||||
|  | export * from './src/platform/static/worker_render'; | ||||||
|  | export * from './src/platform/static/worker_app'; | ||||||
| 
 | 
 | ||||||
| export * from './private_export'; | export * from './private_export'; | ||||||
|  | 
 | ||||||
|  | |||||||
| @ -1,6 +0,0 @@ | |||||||
| export './src/dom/dom_adapter.dart' show DomAdapter, setRootDomAdapter; |  | ||||||
| export '../src/animate/animation_builder' show AnimationBuilder, Animation; |  | ||||||
| export '../src/animate/css_animation_builder' show CssAnimationBuilder; |  | ||||||
| export '../src/animate/browser_details' show BrowserDetails; |  | ||||||
| export './src/animate/css_animation_options' show CssAnimationOptions; |  | ||||||
| export './src/animate/animation' show Animation; |  | ||||||
| @ -5,7 +5,7 @@ import * as css_animation_options from './src/animate/css_animation_options'; | |||||||
| import * as animation from './src/animate/animation'; | import * as animation from './src/animate/animation'; | ||||||
| import * as dom_adapter from './src/dom/dom_adapter'; | import * as dom_adapter from './src/dom/dom_adapter'; | ||||||
| import * as browser_adapter from './src/browser/browser_adapter'; | import * as browser_adapter from './src/browser/browser_adapter'; | ||||||
| import * as browser_common from './src/browser_common'; | import * as browser_common from './src/platform/common/browser'; | ||||||
| 
 | 
 | ||||||
| export namespace __platform_browser_private__ { | export namespace __platform_browser_private__ { | ||||||
|   export type DomAdapter = dom_adapter.DomAdapter; |   export type DomAdapter = dom_adapter.DomAdapter; | ||||||
| @ -13,25 +13,5 @@ export namespace __platform_browser_private__ { | |||||||
| 
 | 
 | ||||||
|   export function getDOM(): DomAdapter { return dom_adapter.getDOM(); } |   export function getDOM(): DomAdapter { return dom_adapter.getDOM(); } | ||||||
| 
 | 
 | ||||||
|   export function setDOM(adapter: DomAdapter) { return dom_adapter.setDOM(adapter); } |  | ||||||
| 
 |  | ||||||
|   export var setRootDomAdapter = dom_adapter.setRootDomAdapter; |   export var setRootDomAdapter = dom_adapter.setRootDomAdapter; | ||||||
| 
 |  | ||||||
|   export type BrowserDomAdapter = browser_adapter.BrowserDomAdapter; |  | ||||||
|   export var BrowserDomAdapter = browser_adapter.BrowserDomAdapter; |  | ||||||
| 
 |  | ||||||
|   export type AnimationBuilder = animation_builder.AnimationBuilder; |  | ||||||
|   export var AnimationBuilder = animation_builder.AnimationBuilder; |  | ||||||
| 
 |  | ||||||
|   export type CssAnimationBuilder = css_animation_builder.CssAnimationBuilder; |  | ||||||
|   export var CssAnimationBuilder = css_animation_builder.CssAnimationBuilder; |  | ||||||
| 
 |  | ||||||
|   export type CssAnimationOptions = css_animation_options.CssAnimationOptions; |  | ||||||
|   export var CssAnimationOptions = css_animation_options.CssAnimationOptions; |  | ||||||
| 
 |  | ||||||
|   export type Animation = animation.Animation; |  | ||||||
|   export var Animation = animation.Animation; |  | ||||||
| 
 |  | ||||||
|   export type BrowserDetails = browser_details.BrowserDetails; |  | ||||||
|   export var BrowserDetails = browser_details.BrowserDetails; |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,536 +0,0 @@ | |||||||
| library angular.core.facade.dom; |  | ||||||
| 
 |  | ||||||
| import 'dart:html'; |  | ||||||
| import 'package:angular2/platform/common_dom.dart' show setRootDomAdapter; |  | ||||||
| import 'generic_browser_adapter.dart' show GenericBrowserDomAdapter; |  | ||||||
| import 'package:angular2/src/facade/browser.dart'; |  | ||||||
| import 'package:angular2/src/facade/lang.dart' show isBlank, isPresent; |  | ||||||
| import 'dart:js' as js; |  | ||||||
| 
 |  | ||||||
| // WARNING: Do not expose outside this class. Parsing HTML using this |  | ||||||
| // sanitizer is a security risk. |  | ||||||
| class _IdentitySanitizer implements NodeTreeSanitizer { |  | ||||||
|   void sanitizeTree(Node node) {} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| final _identitySanitizer = new _IdentitySanitizer(); |  | ||||||
| 
 |  | ||||||
| final _keyCodeToKeyMap = const { |  | ||||||
|   8: 'Backspace', |  | ||||||
|   9: 'Tab', |  | ||||||
|   12: 'Clear', |  | ||||||
|   13: 'Enter', |  | ||||||
|   16: 'Shift', |  | ||||||
|   17: 'Control', |  | ||||||
|   18: 'Alt', |  | ||||||
|   19: 'Pause', |  | ||||||
|   20: 'CapsLock', |  | ||||||
|   27: 'Escape', |  | ||||||
|   32: ' ', |  | ||||||
|   33: 'PageUp', |  | ||||||
|   34: 'PageDown', |  | ||||||
|   35: 'End', |  | ||||||
|   36: 'Home', |  | ||||||
|   37: 'ArrowLeft', |  | ||||||
|   38: 'ArrowUp', |  | ||||||
|   39: 'ArrowRight', |  | ||||||
|   40: 'ArrowDown', |  | ||||||
|   45: 'Insert', |  | ||||||
|   46: 'Delete', |  | ||||||
|   65: 'a', |  | ||||||
|   66: 'b', |  | ||||||
|   67: 'c', |  | ||||||
|   68: 'd', |  | ||||||
|   69: 'e', |  | ||||||
|   70: 'f', |  | ||||||
|   71: 'g', |  | ||||||
|   72: 'h', |  | ||||||
|   73: 'i', |  | ||||||
|   74: 'j', |  | ||||||
|   75: 'k', |  | ||||||
|   76: 'l', |  | ||||||
|   77: 'm', |  | ||||||
|   78: 'n', |  | ||||||
|   79: 'o', |  | ||||||
|   80: 'p', |  | ||||||
|   81: 'q', |  | ||||||
|   82: 'r', |  | ||||||
|   83: 's', |  | ||||||
|   84: 't', |  | ||||||
|   85: 'u', |  | ||||||
|   86: 'v', |  | ||||||
|   87: 'w', |  | ||||||
|   88: 'x', |  | ||||||
|   89: 'y', |  | ||||||
|   90: 'z', |  | ||||||
|   91: 'OS', |  | ||||||
|   93: 'ContextMenu', |  | ||||||
|   96: '0', |  | ||||||
|   97: '1', |  | ||||||
|   98: '2', |  | ||||||
|   99: '3', |  | ||||||
|   100: '4', |  | ||||||
|   101: '5', |  | ||||||
|   102: '6', |  | ||||||
|   103: '7', |  | ||||||
|   104: '8', |  | ||||||
|   105: '9', |  | ||||||
|   106: '*', |  | ||||||
|   107: '+', |  | ||||||
|   109: '-', |  | ||||||
|   110: '.', |  | ||||||
|   111: '/', |  | ||||||
|   112: 'F1', |  | ||||||
|   113: 'F2', |  | ||||||
|   114: 'F3', |  | ||||||
|   115: 'F4', |  | ||||||
|   116: 'F5', |  | ||||||
|   117: 'F6', |  | ||||||
|   118: 'F7', |  | ||||||
|   119: 'F8', |  | ||||||
|   120: 'F9', |  | ||||||
|   121: 'F10', |  | ||||||
|   122: 'F11', |  | ||||||
|   123: 'F12', |  | ||||||
|   144: 'NumLock', |  | ||||||
|   145: 'ScrollLock' |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| final bool _supportsTemplateElement = () { |  | ||||||
|   try { |  | ||||||
|     return new TemplateElement().content != null; |  | ||||||
|   } catch (_) { |  | ||||||
|     return false; |  | ||||||
|   } |  | ||||||
| }(); |  | ||||||
| 
 |  | ||||||
| class BrowserDomAdapter extends GenericBrowserDomAdapter { |  | ||||||
|   js.JsFunction _setProperty; |  | ||||||
|   js.JsFunction _getProperty; |  | ||||||
|   js.JsFunction _hasProperty; |  | ||||||
|   Map<String, bool> _hasPropertyCache; |  | ||||||
|   BrowserDomAdapter() { |  | ||||||
|     _hasPropertyCache = new Map(); |  | ||||||
|     _setProperty = js.context.callMethod( |  | ||||||
|         'eval', ['(function(el, prop, value) { el[prop] = value; })']); |  | ||||||
|     _getProperty = js.context |  | ||||||
|         .callMethod('eval', ['(function(el, prop) { return el[prop]; })']); |  | ||||||
|     _hasProperty = js.context |  | ||||||
|         .callMethod('eval', ['(function(el, prop) { return prop in el; })']); |  | ||||||
|   } |  | ||||||
|   static void makeCurrent() { |  | ||||||
|     setRootDomAdapter(new BrowserDomAdapter()); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool hasProperty(Element element, String name) { |  | ||||||
|     // Always return true as the serverside version html_adapter.dart does so. |  | ||||||
|     // TODO: change this once we have schema support. |  | ||||||
|     // Note: This nees to kept in sync with html_adapter.dart! |  | ||||||
|     return true; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void setProperty(Element element, String name, Object value) { |  | ||||||
|     var cacheKey = "${element.tagName}.${name}"; |  | ||||||
|     var hasProperty = this._hasPropertyCache[cacheKey]; |  | ||||||
|     if (hasProperty == null) { |  | ||||||
|       hasProperty = this._hasProperty.apply([element, name]); |  | ||||||
|       this._hasPropertyCache[cacheKey] = hasProperty; |  | ||||||
|     } |  | ||||||
|     if (hasProperty) { |  | ||||||
|       _setProperty.apply([element, name, value]); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getProperty(Element element, String name) => |  | ||||||
|       _getProperty.apply([element, name]); |  | ||||||
| 
 |  | ||||||
|   invoke(Element element, String methodName, List args) => |  | ||||||
|       this.getProperty(element, methodName).apply(args, thisArg: element); |  | ||||||
| 
 |  | ||||||
|   // TODO(tbosch): move this into a separate environment class once we have it |  | ||||||
|   logError(error) { |  | ||||||
|     window.console.error(error); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   log(error) { |  | ||||||
|     window.console.log(error); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   logGroup(error) { |  | ||||||
|     window.console.group(error); |  | ||||||
|     this.logError(error); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   logGroupEnd() { |  | ||||||
|     window.console.groupEnd(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   Map<String, String> get attrToPropMap => const <String, String>{ |  | ||||||
|         'class': 'className', |  | ||||||
|         'innerHtml': 'innerHTML', |  | ||||||
|         'readonly': 'readOnly', |  | ||||||
|         'tabindex': 'tabIndex', |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|   Element query(String selector) => document.querySelector(selector); |  | ||||||
| 
 |  | ||||||
|   Element querySelector(el, String selector) => el.querySelector(selector); |  | ||||||
| 
 |  | ||||||
|   ElementList querySelectorAll(el, String selector) => |  | ||||||
|       el.querySelectorAll(selector); |  | ||||||
| 
 |  | ||||||
|   void on(EventTarget element, String event, callback(arg)) { |  | ||||||
|     // due to https://code.google.com/p/dart/issues/detail?id=17406 |  | ||||||
|     // addEventListener misses zones so we use element.on. |  | ||||||
|     element.on[event].listen(callback); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Function onAndCancel(EventTarget element, String event, callback(arg)) { |  | ||||||
|     // due to https://code.google.com/p/dart/issues/detail?id=17406 |  | ||||||
|     // addEventListener misses zones so we use element.on. |  | ||||||
|     var subscription = element.on[event].listen(callback); |  | ||||||
|     return subscription.cancel; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void dispatchEvent(EventTarget el, Event evt) { |  | ||||||
|     el.dispatchEvent(evt); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   MouseEvent createMouseEvent(String eventType) => |  | ||||||
|       new MouseEvent(eventType, canBubble: true); |  | ||||||
|   Event createEvent(String eventType) => new Event(eventType, canBubble: true); |  | ||||||
|   void preventDefault(Event evt) { |  | ||||||
|     evt.preventDefault(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool isPrevented(Event evt) { |  | ||||||
|     return evt.defaultPrevented; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getInnerHTML(Element el) => el.innerHtml; |  | ||||||
|   String getOuterHTML(Element el) => el.outerHtml; |  | ||||||
|   void setInnerHTML(Element el, String value) { |  | ||||||
|     el.innerHtml = value; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String nodeName(Node el) => el.nodeName; |  | ||||||
|   String nodeValue(Node el) => el.nodeValue; |  | ||||||
|   String type(InputElement el) => el.type; |  | ||||||
|   Node content(TemplateElement el) => |  | ||||||
|       _supportsTemplateElement ? el.content : el; |  | ||||||
|   Node firstChild(el) => el.firstChild; |  | ||||||
|   Node nextSibling(Node el) => el.nextNode; |  | ||||||
|   Element parentElement(Node el) => el.parentNode; |  | ||||||
|   List<Node> childNodes(Node el) => el.childNodes; |  | ||||||
|   List childNodesAsList(Node el) => childNodes(el).toList(); |  | ||||||
|   void clearNodes(Node el) { |  | ||||||
|     el.nodes = const []; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void appendChild(Node el, Node node) { |  | ||||||
|     el.append(node); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void removeChild(el, Node node) { |  | ||||||
|     node.remove(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void replaceChild(Node el, Node newNode, Node oldNode) { |  | ||||||
|     oldNode.replaceWith(newNode); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   ChildNode remove(ChildNode el) { |  | ||||||
|     return el..remove(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void insertBefore(Node el, node) { |  | ||||||
|     el.parentNode.insertBefore(node, el); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void insertAllBefore(Node el, Iterable<Node> nodes) { |  | ||||||
|     el.parentNode.insertAllBefore(nodes, el); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void insertAfter(Node el, Node node) { |  | ||||||
|     el.parentNode.insertBefore(node, el.nextNode); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getText(Node el) => el.text; |  | ||||||
|   void setText(Node el, String value) { |  | ||||||
|     el.text = value; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getValue(el) => el.value; |  | ||||||
|   void setValue(el, String value) { |  | ||||||
|     el.value = value; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool getChecked(InputElement el) => el.checked; |  | ||||||
|   void setChecked(InputElement el, bool isChecked) { |  | ||||||
|     el.checked = isChecked; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Comment createComment(String text) { |  | ||||||
|     return new Comment(text); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   TemplateElement createTemplate(String html) { |  | ||||||
|     var t = new TemplateElement(); |  | ||||||
|     // We do not sanitize because templates are part of the application code |  | ||||||
|     // not user code. |  | ||||||
|     t.setInnerHtml(html, treeSanitizer: _identitySanitizer); |  | ||||||
|     return t; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Element createElement(String tagName, [HtmlDocument doc = null]) { |  | ||||||
|     if (doc == null) doc = document; |  | ||||||
|     return doc.createElement(tagName); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Element createElementNS(String ns, String tagName, [HtmlDocument doc = null]) { |  | ||||||
|     if (doc == null) doc = document; |  | ||||||
|     return doc.createElementNS(ns, tagName); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Text createTextNode(String text, [HtmlDocument doc = null]) { |  | ||||||
|     return new Text(text); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   createScriptTag(String attrName, String attrValue, |  | ||||||
|       [HtmlDocument doc = null]) { |  | ||||||
|     if (doc == null) doc = document; |  | ||||||
|     var el = doc.createElement('SCRIPT'); |  | ||||||
|     el.setAttribute(attrName, attrValue); |  | ||||||
|     return el; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   StyleElement createStyleElement(String css, [HtmlDocument doc = null]) { |  | ||||||
|     if (doc == null) doc = document; |  | ||||||
|     var el = doc.createElement('STYLE'); |  | ||||||
|     el.text = css; |  | ||||||
|     return el; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   ShadowRoot createShadowRoot(Element el) => el.createShadowRoot(); |  | ||||||
|   ShadowRoot getShadowRoot(Element el) => el.shadowRoot; |  | ||||||
|   Element getHost(Element el) => (el as ShadowRoot).host; |  | ||||||
|   clone(Node node) => node.clone(true); |  | ||||||
|   List<Node> getElementsByClassName(Element element, String name) => |  | ||||||
|       element.getElementsByClassName(name); |  | ||||||
|   List<Node> getElementsByTagName(Element element, String name) => |  | ||||||
|       element.querySelectorAll(name); |  | ||||||
|   List<String> classList(Element element) => element.classes.toList(); |  | ||||||
|   void addClass(Element element, String className) { |  | ||||||
|     element.classes.add(className); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void removeClass(Element element, String className) { |  | ||||||
|     element.classes.remove(className); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool hasClass(Element element, String className) => |  | ||||||
|       element.classes.contains(className); |  | ||||||
| 
 |  | ||||||
|   void setStyle(Element element, String styleName, String styleValue) { |  | ||||||
|     element.style.setProperty(styleName, styleValue); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool hasStyle(Element element, String styleName, [String styleValue]) { |  | ||||||
|     var value = this.getStyle(element, styleName); |  | ||||||
|     return isPresent(styleValue) ? value == styleValue : value.length > 0; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void removeStyle(Element element, String styleName) { |  | ||||||
|     element.style.removeProperty(styleName); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getStyle(Element element, String styleName) { |  | ||||||
|     return element.style.getPropertyValue(styleName); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String tagName(Element element) => element.tagName; |  | ||||||
| 
 |  | ||||||
|   Map<String, String> attributeMap(Element element) { |  | ||||||
|     var result = {}; |  | ||||||
|     result.addAll(element.attributes); |  | ||||||
|     // TODO(tbosch): element.getNamespacedAttributes() somehow does not return the attribute value |  | ||||||
|     var xlinkHref = element.getAttributeNS('http://www.w3.org/1999/xlink', 'href'); |  | ||||||
|     if (xlinkHref != null) { |  | ||||||
|       result['xlink:href'] = xlinkHref; |  | ||||||
|     } |  | ||||||
|     return result; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool hasAttribute(Element element, String attribute) => |  | ||||||
|       element.attributes.containsKey(attribute); |  | ||||||
| 
 |  | ||||||
|   bool hasAttributeNS(Element element, String ns, String attribute) => |  | ||||||
|       element.getAttributeNS(ns, attribute) != null; |  | ||||||
| 
 |  | ||||||
|   String getAttribute(Element element, String attribute) => |  | ||||||
|       element.getAttribute(attribute); |  | ||||||
| 
 |  | ||||||
|   String getAttributeNS(Element element, String ns, String attribute) => |  | ||||||
|       element.getAttributeNS(ns, attribute); |  | ||||||
| 
 |  | ||||||
|   void setAttribute(Element element, String name, String value) { |  | ||||||
|     element.setAttribute(name, value); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void setAttributeNS(Element element, String ns, String name, String value) { |  | ||||||
|     element.setAttributeNS(ns, name, value); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void removeAttribute(Element element, String name) { |  | ||||||
|     //there is no removeAttribute method as of now in Dart: |  | ||||||
|     //https://code.google.com/p/dart/issues/detail?id=19934 |  | ||||||
|     element.attributes.remove(name); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void removeAttributeNS(Element element, String ns, String name) { |  | ||||||
|     element.getNamespacedAttributes(ns).remove(name); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Node templateAwareRoot(Element el) => el is TemplateElement ? el.content : el; |  | ||||||
| 
 |  | ||||||
|   HtmlDocument createHtmlDocument() => |  | ||||||
|       document.implementation.createHtmlDocument('fakeTitle'); |  | ||||||
| 
 |  | ||||||
|   HtmlDocument defaultDoc() => document; |  | ||||||
|   Rectangle getBoundingClientRect(el) => el.getBoundingClientRect(); |  | ||||||
|   String getTitle() => document.title; |  | ||||||
|   void setTitle(String newTitle) { |  | ||||||
|     document.title = newTitle; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool elementMatches(n, String selector) => |  | ||||||
|       n is Element && n.matches(selector); |  | ||||||
|   bool isTemplateElement(Element el) => el is TemplateElement; |  | ||||||
|   bool isTextNode(Node node) => node.nodeType == Node.TEXT_NODE; |  | ||||||
|   bool isCommentNode(Node node) => node.nodeType == Node.COMMENT_NODE; |  | ||||||
|   bool isElementNode(Node node) => node.nodeType == Node.ELEMENT_NODE; |  | ||||||
|   bool hasShadowRoot(Node node) { |  | ||||||
|     return node is Element && node.shadowRoot != null; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool isShadowRoot(Node node) { |  | ||||||
|     return node is ShadowRoot; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Node importIntoDoc(Node node) { |  | ||||||
|     return document.importNode(node, true); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Node adoptNode(Node node) { |  | ||||||
|     return document.adoptNode(node); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getHref(AnchorElement element) { |  | ||||||
|     return element.href; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getEventKey(KeyboardEvent event) { |  | ||||||
|     int keyCode = event.keyCode; |  | ||||||
|     return _keyCodeToKeyMap.containsKey(keyCode) |  | ||||||
|         ? _keyCodeToKeyMap[keyCode] |  | ||||||
|         : 'Unidentified'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getGlobalEventTarget(String target) { |  | ||||||
|     if (target == "window") { |  | ||||||
|       return window; |  | ||||||
|     } else if (target == "document") { |  | ||||||
|       return document; |  | ||||||
|     } else if (target == "body") { |  | ||||||
|       return document.body; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getHistory() { |  | ||||||
|     return window.history; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getLocation() { |  | ||||||
|     return window.location; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getBaseHref() { |  | ||||||
|     var href = getBaseElementHref(); |  | ||||||
|     if (href == null) { |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
|     return _relativePath(href); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   resetBaseElement() { |  | ||||||
|     baseElement = null; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getUserAgent() { |  | ||||||
|     return window.navigator.userAgent; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void setData(Element element, String name, String value) { |  | ||||||
|     element.dataset[name] = value; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getData(Element element, String name) { |  | ||||||
|     return element.dataset[name]; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getComputedStyle(elem) => elem.getComputedStyle(); |  | ||||||
| 
 |  | ||||||
|   // TODO(tbosch): move this into a separate environment class once we have it |  | ||||||
|   setGlobalVar(String path, value) { |  | ||||||
|     var parts = path.split('.'); |  | ||||||
|     var obj = js.context; |  | ||||||
|     while (parts.length > 1) { |  | ||||||
|       var name = parts.removeAt(0); |  | ||||||
|       if (obj.hasProperty(name)) { |  | ||||||
|         obj = obj[name]; |  | ||||||
|       } else { |  | ||||||
|         obj = obj[name] = new js.JsObject(js.context['Object']); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     obj[parts.removeAt(0)] = value; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   requestAnimationFrame(callback) { |  | ||||||
|     return window.requestAnimationFrame(callback); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   cancelAnimationFrame(id) { |  | ||||||
|     window.cancelAnimationFrame(id); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   num performanceNow() { |  | ||||||
|     return window.performance.now(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   parse(s) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var baseElement = null; |  | ||||||
| String getBaseElementHref() { |  | ||||||
|   if (baseElement == null) { |  | ||||||
|     baseElement = document.querySelector('base'); |  | ||||||
|     if (baseElement == null) { |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return baseElement.getAttribute('href'); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // based on urlUtils.js in AngularJS 1 |  | ||||||
| AnchorElement _urlParsingNode = null; |  | ||||||
| String _relativePath(String url) { |  | ||||||
|   if (_urlParsingNode == null) { |  | ||||||
|     _urlParsingNode = new AnchorElement(); |  | ||||||
|   } |  | ||||||
|   _urlParsingNode.href = url; |  | ||||||
|   var pathname = _urlParsingNode.pathname; |  | ||||||
|   return (pathname[0] == '/') ? pathname : '/${pathname}'; |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| import {PromiseWrapper} from '../../src/facade/async'; |  | ||||||
| import {DomAdapter} from '@angular/platform-browser/src/dom/dom_adapter'; |  | ||||||
| import {ElementRef} from '@angular/core/src/linker/element_ref'; |  | ||||||
| 
 |  | ||||||
| export class Rectangle { |  | ||||||
|   left; |  | ||||||
|   right; |  | ||||||
|   top; |  | ||||||
|   bottom; |  | ||||||
|   height; |  | ||||||
|   width; |  | ||||||
|   constructor(left, top, width, height) { |  | ||||||
|     this.left = left; |  | ||||||
|     this.right = left + width; |  | ||||||
|     this.top = top; |  | ||||||
|     this.bottom = top + height; |  | ||||||
|     this.height = height; |  | ||||||
|     this.width = width; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export class Ruler { |  | ||||||
|   domAdapter: DomAdapter; |  | ||||||
|   constructor(domAdapter: DomAdapter) { this.domAdapter = domAdapter; } |  | ||||||
| 
 |  | ||||||
|   measure(el: ElementRef): Promise<Rectangle> { |  | ||||||
|     var clntRect = <any>this.domAdapter.getBoundingClientRect(el.nativeElement); |  | ||||||
| 
 |  | ||||||
|     // even if getBoundingClientRect is synchronous we use async API in preparation for further
 |  | ||||||
|     // changes
 |  | ||||||
|     return PromiseWrapper.resolve( |  | ||||||
|         new Rectangle(clntRect.left, clntRect.top, clntRect.width, clntRect.height)); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,188 +0,0 @@ | |||||||
| library testability.browser_testability; |  | ||||||
| 
 |  | ||||||
| import 'package:angular2/core.dart'; |  | ||||||
| import 'package:angular2/platform/common_dom.dart'; |  | ||||||
| 
 |  | ||||||
| import 'dart:html'; |  | ||||||
| import 'dart:js' as js; |  | ||||||
| 
 |  | ||||||
| // Work around http://dartbug.com/17752, copied from |  | ||||||
| // https://github.com/angular/angular.dart/blob/master/lib/introspection.dart |  | ||||||
| // Proxies a Dart function that accepts up to 10 parameters. |  | ||||||
| js.JsFunction _jsFunction(Function fn) { |  | ||||||
|   const Object X = __varargSentinel; |  | ||||||
|   return new js.JsFunction.withThis((thisArg, |  | ||||||
|       [o1 = X, |  | ||||||
|       o2 = X, |  | ||||||
|       o3 = X, |  | ||||||
|       o4 = X, |  | ||||||
|       o5 = X, |  | ||||||
|       o6 = X, |  | ||||||
|       o7 = X, |  | ||||||
|       o8 = X, |  | ||||||
|       o9 = X, |  | ||||||
|       o10 = X]) { |  | ||||||
|     return __invokeFn(fn, o1, o2, o3, o4, o5, o6, o7, o8, o9, o10); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| const Object __varargSentinel = const Object(); |  | ||||||
| 
 |  | ||||||
| __invokeFn(fn, o1, o2, o3, o4, o5, o6, o7, o8, o9, o10) { |  | ||||||
|   var args = [o1, o2, o3, o4, o5, o6, o7, o8, o9, o10]; |  | ||||||
|   while (args.length > 0 && identical(args.last, __varargSentinel)) { |  | ||||||
|     args.removeLast(); |  | ||||||
|   } |  | ||||||
|   return _jsify(Function.apply(fn, args)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Helper function to JSify a Dart object.  While this is *required* to JSify |  | ||||||
| // the result of a scope.eval(), other uses are not required and are used to |  | ||||||
| // work around http://dartbug.com/17752 in a convenient way (that bug affects |  | ||||||
| // dart2js in checked mode.) |  | ||||||
| _jsify(var obj) { |  | ||||||
|   if (obj == null || obj is js.JsObject) { |  | ||||||
|     return obj; |  | ||||||
|   } |  | ||||||
|   if (obj is _JsObjectProxyable) { |  | ||||||
|     return obj._toJsObject(); |  | ||||||
|   } |  | ||||||
|   if (obj is Function) { |  | ||||||
|     return _jsFunction(obj); |  | ||||||
|   } |  | ||||||
|   if ((obj is Map) || (obj is Iterable)) { |  | ||||||
|     var mappedObj = (obj is Map) |  | ||||||
|         ? new Map.fromIterables(obj.keys, obj.values.map(_jsify)) |  | ||||||
|         : obj.map(_jsify); |  | ||||||
|     if (obj is List) { |  | ||||||
|       return new js.JsArray.from(mappedObj); |  | ||||||
|     } else { |  | ||||||
|       return new js.JsObject.jsify(mappedObj); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return obj; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| abstract class _JsObjectProxyable { |  | ||||||
|   js.JsObject _toJsObject(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class PublicTestability implements _JsObjectProxyable { |  | ||||||
|   Testability _testability; |  | ||||||
|   PublicTestability(Testability testability) { |  | ||||||
|     this._testability = testability; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool isStable() { |  | ||||||
|     return this._testability.isStable(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   whenStable(Function callback) { |  | ||||||
|     return this._testability.whenStable(callback); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   findBindings(Element elem, String binding, bool exactMatch) { |  | ||||||
|     return this._testability.findBindings(elem, binding, exactMatch); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   js.JsObject _toJsObject() { |  | ||||||
|     return _jsify({ |  | ||||||
|       'findBindings': (bindingString, [exactMatch, allowNonElementNodes]) => |  | ||||||
|           findBindings(bindingString, exactMatch, allowNonElementNodes), |  | ||||||
|       'isStable': () => isStable(), |  | ||||||
|       'whenStable': (callback) => whenStable((didWork) => callback.apply([didWork])) |  | ||||||
|     })..['_dart_'] = this; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class BrowserGetTestability implements GetTestability { |  | ||||||
|   const BrowserGetTestability(); |  | ||||||
| 
 |  | ||||||
|   static init() { |  | ||||||
|     setTestabilityGetter(const BrowserGetTestability()); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void addToWindow(TestabilityRegistry registry) { |  | ||||||
|     var jsRegistry = js.context['ngTestabilityRegistries']; |  | ||||||
|     if (jsRegistry == null) { |  | ||||||
|       js.context['ngTestabilityRegistries'] = jsRegistry = new js.JsArray(); |  | ||||||
|       js.context['getAngularTestability'] = |  | ||||||
|           _jsify((Element elem, [bool findInAncestors = true]) { |  | ||||||
|             var registry = js.context['ngTestabilityRegistries']; |  | ||||||
|             for (int i = 0; i < registry.length; i++) { |  | ||||||
|               var result = registry[i] |  | ||||||
|                   .callMethod('getAngularTestability', [elem, findInAncestors]); |  | ||||||
|               if (result != null) return result; |  | ||||||
|             } |  | ||||||
|             throw 'Could not find testability for element.'; |  | ||||||
|           }); |  | ||||||
|       var getAllAngularTestabilities = () { |  | ||||||
|         var registry = js.context['ngTestabilityRegistries']; |  | ||||||
|         var result = []; |  | ||||||
|         for (int i = 0; i < registry.length; i++) { |  | ||||||
|           var testabilities = |  | ||||||
|               registry[i].callMethod('getAllAngularTestabilities'); |  | ||||||
|           if (testabilities != null) result.addAll(testabilities); |  | ||||||
|         } |  | ||||||
|         return _jsify(result); |  | ||||||
|       }; |  | ||||||
|       js.context['getAllAngularTestabilities'] = |  | ||||||
|           _jsify(getAllAngularTestabilities); |  | ||||||
| 
 |  | ||||||
|       var whenAllStable = _jsify((callback) { |  | ||||||
|         var testabilities = getAllAngularTestabilities(); |  | ||||||
|         var count = testabilities.length; |  | ||||||
|         var didWork = false; |  | ||||||
|         var decrement = _jsify((bool didWork_) { |  | ||||||
|           didWork = didWork || didWork_; |  | ||||||
|           count--; |  | ||||||
|           if (count == 0) { |  | ||||||
|             callback.apply([didWork]); |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|         testabilities.forEach((testability) { |  | ||||||
|           testability.callMethod('whenStable', [decrement]); |  | ||||||
|         }); |  | ||||||
|       }); |  | ||||||
|       if (js.context['frameworkStabilizers'] == null) { |  | ||||||
|         js.context['frameworkStabilizers'] = new js.JsArray(); |  | ||||||
|       } |  | ||||||
|       js.context['frameworkStabilizers'].add(whenAllStable); |  | ||||||
|     } |  | ||||||
|     jsRegistry.add(this._createRegistry(registry)); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   findTestabilityInTree(TestabilityRegistry registry, dynamic elem, bool findInAncestors) { |  | ||||||
|     if (elem == null) { |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
|     var t = registry.getTestability(elem); |  | ||||||
|     if (t != null) { |  | ||||||
|       return t; |  | ||||||
|     } else if (!findInAncestors) { |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
|     if (getDOM().isShadowRoot(elem)) { |  | ||||||
|       return this.findTestabilityInTree(registry, getDOM().getHost(elem), true); |  | ||||||
|     } |  | ||||||
|     return this.findTestabilityInTree(registry, getDOM().parentElement(elem), true); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   js.JsObject _createRegistry(TestabilityRegistry registry) { |  | ||||||
|     var object = new js.JsObject(js.context['Object']); |  | ||||||
|     object['getAngularTestability'] = |  | ||||||
|         _jsify((Element elem, bool findInAncestors) { |  | ||||||
|           var testability = registry.findTestabilityInTree(elem, findInAncestors); |  | ||||||
|           return testability == null |  | ||||||
|               ? null |  | ||||||
|               : _jsify(new PublicTestability(testability)); |  | ||||||
|         }); |  | ||||||
|     object['getAllAngularTestabilities'] = _jsify(() { |  | ||||||
|       var publicTestabilities = registry |  | ||||||
|           .getAllTestabilities() |  | ||||||
|           .map((testability) => new PublicTestability(testability)); |  | ||||||
|       return _jsify(publicTestabilities); |  | ||||||
|     }); |  | ||||||
|     return object; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,114 +0,0 @@ | |||||||
| library angular.events; |  | ||||||
| 
 |  | ||||||
| import 'dart:html'; |  | ||||||
| import './hammer_common.dart'; |  | ||||||
| import 'package:angular2/src/facade/exceptions.dart' show BaseException; |  | ||||||
| import "package:angular2/src/core/di.dart" show Injectable, Inject, OpaqueToken; |  | ||||||
| 
 |  | ||||||
| import 'dart:js' as js; |  | ||||||
| 
 |  | ||||||
| const OpaqueToken HAMMER_GESTURE_CONFIG = const OpaqueToken("HammerGestureConfig"); |  | ||||||
| 
 |  | ||||||
| overrideDefault(js.JsObject mc, String eventName, Object config) { |  | ||||||
|   var jsObj = mc.callMethod('get', [eventName]); |  | ||||||
|   jsObj.callMethod('set', [ |  | ||||||
|     new js.JsObject.jsify(config) |  | ||||||
|   ]); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @Injectable() |  | ||||||
| class HammerGestureConfig { |  | ||||||
|   List<String> events = []; |  | ||||||
|   Map overrides = {}; |  | ||||||
| 
 |  | ||||||
|   buildHammer(Element element) { |  | ||||||
|     var mc = new js.JsObject(js.context['Hammer'], [element]); |  | ||||||
|     overrideDefault(mc, 'pinch', {'enable': true}); |  | ||||||
|     overrideDefault(mc, 'rotate', {'enable': true}); |  | ||||||
|     this.overrides.forEach((Object config, String eventName) => overrideDefault(mc, eventName, config)); |  | ||||||
|     return mc; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @Injectable() |  | ||||||
| class HammerGesturesPlugin extends HammerGesturesPluginCommon { |  | ||||||
|   HammerGestureConfig _config; |  | ||||||
| 
 |  | ||||||
|   HammerGesturesPlugin(@Inject(HAMMER_GESTURE_CONFIG) this._config) {} |  | ||||||
| 
 |  | ||||||
|   bool supports(String eventName) { |  | ||||||
|     if (!super.supports(eventName) && !this.isCustomEvent(eventName)) return false; |  | ||||||
| 
 |  | ||||||
|     if (!js.context.hasProperty('Hammer')) { |  | ||||||
|       throw new BaseException( |  | ||||||
|           'Hammer.js is not loaded, can not bind ${eventName} event'); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return true; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   addEventListener(Element element, String eventName, Function handler) { |  | ||||||
|     var zone = this.manager.getZone(); |  | ||||||
|     eventName = eventName.toLowerCase(); |  | ||||||
| 
 |  | ||||||
|     zone.runOutsideAngular(() { |  | ||||||
|       // Creating the manager bind events, must be done outside of angular |  | ||||||
|       var mc = this._config.buildHammer(element); |  | ||||||
| 
 |  | ||||||
|       mc.callMethod('on', [ |  | ||||||
|         eventName, |  | ||||||
|         (eventObj) { |  | ||||||
|           zone.runGuarded(() { |  | ||||||
|             var dartEvent = new HammerEvent._fromJsEvent(eventObj); |  | ||||||
|             handler(dartEvent); |  | ||||||
|           }); |  | ||||||
|         } |  | ||||||
|       ]); |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   isCustomEvent(String eventName) { return this._config.events.indexOf(eventName) > -1; } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class HammerEvent { |  | ||||||
|   num angle; |  | ||||||
|   num centerX; |  | ||||||
|   num centerY; |  | ||||||
|   int deltaTime; |  | ||||||
|   int deltaX; |  | ||||||
|   int deltaY; |  | ||||||
|   int direction; |  | ||||||
|   int distance; |  | ||||||
|   num rotation; |  | ||||||
|   num scale; |  | ||||||
|   Node target; |  | ||||||
|   int timeStamp; |  | ||||||
|   String type; |  | ||||||
|   num velocity; |  | ||||||
|   num velocityX; |  | ||||||
|   num velocityY; |  | ||||||
|   js.JsObject jsEvent; |  | ||||||
| 
 |  | ||||||
|   HammerEvent._fromJsEvent(js.JsObject event) { |  | ||||||
|     angle = event['angle']; |  | ||||||
|     var center = event['center']; |  | ||||||
|     centerX = center['x']; |  | ||||||
|     centerY = center['y']; |  | ||||||
|     deltaTime = event['deltaTime']; |  | ||||||
|     deltaX = event['deltaX']; |  | ||||||
|     deltaY = event['deltaY']; |  | ||||||
|     direction = event['direction']; |  | ||||||
|     distance = event['distance']; |  | ||||||
|     rotation = event['rotation']; |  | ||||||
|     scale = event['scale']; |  | ||||||
|     target = event['target']; |  | ||||||
|     timeStamp = event['timeStamp']; |  | ||||||
|     type = event['type']; |  | ||||||
|     velocity = event['velocity']; |  | ||||||
|     velocityX = event['velocityX']; |  | ||||||
|     velocityY = event['velocityY']; |  | ||||||
|     jsEvent = event; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -7,42 +7,33 @@ import { | |||||||
|   APPLICATION_COMMON_PROVIDERS, |   APPLICATION_COMMON_PROVIDERS, | ||||||
|   PLATFORM_COMMON_PROVIDERS, |   PLATFORM_COMMON_PROVIDERS, | ||||||
|   OpaqueToken, |   OpaqueToken, | ||||||
|   Testability |   Testability, | ||||||
| } from '@angular/core'; |   PlatformRef, | ||||||
| import {wtfInit, SanitizationService} from '../core_private'; |   getPlatform, | ||||||
| import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from '@angular/common'; |   createPlatform, | ||||||
| import { |   assertPlatform, | ||||||
|   DomSanitizationService, |   ReflectiveInjector | ||||||
|   DomSanitizationServiceImpl | } from "@angular/core"; | ||||||
| } from './security/dom_sanitization_service'; | import {isBlank} from "../../facade/lang"; | ||||||
|  | import {wtfInit, SanitizationService} from "../../../core_private"; | ||||||
|  | import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS, PlatformLocation} from "@angular/common"; | ||||||
|  | import {DomSanitizationService, DomSanitizationServiceImpl} from "../../security/dom_sanitization_service"; | ||||||
|  | import {BrowserDomAdapter} from "../../browser/browser_adapter"; | ||||||
|  | import {BrowserGetTestability} from "../../browser/testability"; | ||||||
|  | import {getDOM} from "../../dom/dom_adapter"; | ||||||
|  | import {DOCUMENT} from "../../dom/dom_tokens"; | ||||||
|  | import {EVENT_MANAGER_PLUGINS, EventManager} from "../../dom/events/event_manager"; | ||||||
|  | import {DomRootRenderer, DomRootRenderer_} from "../../dom/dom_renderer"; | ||||||
|  | import {SharedStylesHost, DomSharedStylesHost} from "../../dom/shared_styles_host"; | ||||||
|  | import {KeyEventsPlugin} from "../../dom/events/key_events"; | ||||||
|  | import {ELEMENT_PROBE_PROVIDERS} from "../../dom/debug/ng_probe"; | ||||||
|  | import {DomEventsPlugin} from "../../dom/events/dom_events"; | ||||||
|  | import {HAMMER_GESTURE_CONFIG, HammerGestureConfig, HammerGesturesPlugin} from "../../dom/events/hammer_gestures"; | ||||||
|  | import {AnimationBuilder} from "../../animate/animation_builder"; | ||||||
|  | import {BrowserDetails} from "../../animate/browser_details"; | ||||||
|  | import {BrowserPlatformLocation} from "../../browser/location/browser_platform_location"; | ||||||
| 
 | 
 | ||||||
| import {IS_DART} from './facade/lang'; | const BROWSER_PLATFORM_MARKER = | ||||||
| import {BrowserDomAdapter} from './browser/browser_adapter'; |  | ||||||
| import {BrowserGetTestability} from './browser/testability'; |  | ||||||
| import {getDOM} from './dom/dom_adapter'; |  | ||||||
| import {DOCUMENT} from './dom/dom_tokens'; |  | ||||||
| import {EVENT_MANAGER_PLUGINS, EventManager} from './dom/events/event_manager'; |  | ||||||
| import {DomRootRenderer, DomRootRenderer_} from './dom/dom_renderer'; |  | ||||||
| import {SharedStylesHost} from './dom/shared_styles_host'; |  | ||||||
| import {KeyEventsPlugin} from './dom/events/key_events'; |  | ||||||
| import {ELEMENT_PROBE_PROVIDERS} from './dom/debug/ng_probe'; |  | ||||||
| import {DomEventsPlugin} from './dom/events/dom_events'; |  | ||||||
| import { |  | ||||||
|   HAMMER_GESTURE_CONFIG, |  | ||||||
|   HammerGestureConfig, |  | ||||||
|   HammerGesturesPlugin |  | ||||||
| } from './dom/events/hammer_gestures'; |  | ||||||
| import {DomSharedStylesHost} from './dom/shared_styles_host'; |  | ||||||
| import {AnimationBuilder} from './animate/animation_builder'; |  | ||||||
| import {BrowserDetails} from './animate/browser_details'; |  | ||||||
| import {PlatformLocation} from '@angular/common'; |  | ||||||
| import {BrowserPlatformLocation} from './browser/location/browser_platform_location'; |  | ||||||
| export {Title} from './browser/title'; |  | ||||||
| export {BrowserDomAdapter} from './browser/browser_adapter'; |  | ||||||
| export {enableDebugTools, disableDebugTools} from './browser/tools/tools'; |  | ||||||
| export {By} from './dom/debug/by'; |  | ||||||
| 
 |  | ||||||
| export const BROWSER_PLATFORM_MARKER = |  | ||||||
|     /*@ts2dart_const*/ new OpaqueToken('BrowserPlatformMarker'); |     /*@ts2dart_const*/ new OpaqueToken('BrowserPlatformMarker'); | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -50,23 +41,13 @@ export const BROWSER_PLATFORM_MARKER = | |||||||
|  * |  * | ||||||
|  * Used automatically by `bootstrap`, or can be passed to {@link platform}. |  * Used automatically by `bootstrap`, or can be passed to {@link platform}. | ||||||
|  */ |  */ | ||||||
| export const BROWSER_PROVIDERS: Array<any /*Type | Provider | any[]*/> = /*@ts2dart_const*/[ | export const BROWSER_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = /*@ts2dart_const*/[ | ||||||
|   /*@ts2dart_Provider*/ {provide: BROWSER_PLATFORM_MARKER, useValue: true}, |   /*@ts2dart_Provider*/ {provide: BROWSER_PLATFORM_MARKER, useValue: true}, | ||||||
|   PLATFORM_COMMON_PROVIDERS, |   PLATFORM_COMMON_PROVIDERS, | ||||||
|   /*@ts2dart_Provider*/ {provide: PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true}, |   /*@ts2dart_Provider*/ {provide: PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true}, | ||||||
|   /*@ts2dart_Provider*/ {provide: PlatformLocation, useClass: BrowserPlatformLocation} |   /*@ts2dart_Provider*/ {provide: PlatformLocation, useClass: BrowserPlatformLocation} | ||||||
| ]; | ]; | ||||||
| 
 | 
 | ||||||
| function _exceptionHandler(): ExceptionHandler { |  | ||||||
|   // !IS_DART is required because we must rethrow exceptions in JS,
 |  | ||||||
|   // but must not rethrow exceptions in Dart
 |  | ||||||
|   return new ExceptionHandler(getDOM(), !IS_DART); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function _document(): any { |  | ||||||
|   return getDOM().defaultDoc(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export const BROWSER_SANITIZATION_PROVIDERS: Array<any> = /*@ts2dart_const*/[ | export const BROWSER_SANITIZATION_PROVIDERS: Array<any> = /*@ts2dart_const*/[ | ||||||
|   /* @ts2dart_Provider */ {provide: SanitizationService, useExisting: DomSanitizationService}, |   /* @ts2dart_Provider */ {provide: SanitizationService, useExisting: DomSanitizationService}, | ||||||
|   /* @ts2dart_Provider */ {provide: DomSanitizationService, useClass: DomSanitizationServiceImpl}, |   /* @ts2dart_Provider */ {provide: DomSanitizationService, useClass: DomSanitizationServiceImpl}, | ||||||
| @ -101,11 +82,23 @@ export const BROWSER_APP_COMMON_PROVIDERS: Array<any /*Type | Provider | any[]*/ | |||||||
|       ELEMENT_PROBE_PROVIDERS |       ELEMENT_PROBE_PROVIDERS | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|  | export function browserPlatform(): PlatformRef { | ||||||
|  |   if (isBlank(getPlatform())) { | ||||||
|  |     createPlatform(ReflectiveInjector.resolveAndCreate(BROWSER_PLATFORM_PROVIDERS)); | ||||||
|  |   } | ||||||
|  |   return assertPlatform(BROWSER_PLATFORM_MARKER); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| export {HAMMER_GESTURE_CONFIG, HammerGestureConfig} from '../src/dom/events/hammer_gestures'; | function initDomAdapter() { | ||||||
| 
 |  | ||||||
| export function initDomAdapter() { |  | ||||||
|   BrowserDomAdapter.makeCurrent(); |   BrowserDomAdapter.makeCurrent(); | ||||||
|   wtfInit(); |   wtfInit(); | ||||||
|   BrowserGetTestability.init(); |   BrowserGetTestability.init(); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | function _exceptionHandler(): ExceptionHandler { | ||||||
|  |   return new ExceptionHandler(getDOM()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function _document(): any { | ||||||
|  |   return getDOM().defaultDoc(); | ||||||
|  | } | ||||||
| @ -1,5 +1,5 @@ | |||||||
| import {WebWorkerRootRenderer} from '../web_workers/worker/renderer'; | import {WebWorkerRootRenderer} from '../../web_workers/worker/renderer'; | ||||||
| import {print} from '../../src/facade/lang'; | import {print, isBlank} from '../../../src/facade/lang'; | ||||||
| import { | import { | ||||||
|   PLATFORM_DIRECTIVES, |   PLATFORM_DIRECTIVES, | ||||||
|   PLATFORM_PIPES, |   PLATFORM_PIPES, | ||||||
| @ -7,21 +7,26 @@ import { | |||||||
|   APPLICATION_COMMON_PROVIDERS, |   APPLICATION_COMMON_PROVIDERS, | ||||||
|   PLATFORM_COMMON_PROVIDERS, |   PLATFORM_COMMON_PROVIDERS, | ||||||
|   OpaqueToken, |   OpaqueToken, | ||||||
|   RootRenderer |   RootRenderer, | ||||||
|  |   PlatformRef, | ||||||
|  |   getPlatform, | ||||||
|  |   createPlatform, | ||||||
|  |   assertPlatform, | ||||||
|  |   ReflectiveInjector | ||||||
| } from '@angular/core'; | } from '@angular/core'; | ||||||
| import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from '@angular/common'; | import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from '@angular/common'; | ||||||
| import { | import { | ||||||
|   ClientMessageBrokerFactory, |   ClientMessageBrokerFactory, | ||||||
|   ClientMessageBrokerFactory_ |   ClientMessageBrokerFactory_ | ||||||
| } from '../web_workers/shared/client_message_broker'; | } from '../../web_workers/shared/client_message_broker'; | ||||||
| import { | import { | ||||||
|   ServiceMessageBrokerFactory, |   ServiceMessageBrokerFactory, | ||||||
|   ServiceMessageBrokerFactory_ |   ServiceMessageBrokerFactory_ | ||||||
| } from '../web_workers/shared/service_message_broker'; | } from '../../web_workers/shared/service_message_broker'; | ||||||
| import {Serializer} from '../web_workers/shared/serializer'; | import {Serializer} from '../../web_workers/shared/serializer'; | ||||||
| import {ON_WEB_WORKER} from '../web_workers/shared/api'; | import {ON_WEB_WORKER} from '../../web_workers/shared/api'; | ||||||
| import {RenderStore} from '../web_workers/shared/render_store'; | import {RenderStore} from '../../web_workers/shared/render_store'; | ||||||
| import {BROWSER_SANITIZATION_PROVIDERS} from '../browser_common'; | import {BROWSER_SANITIZATION_PROVIDERS} from './browser'; | ||||||
| 
 | 
 | ||||||
| class PrintLogger { | class PrintLogger { | ||||||
|   log = print; |   log = print; | ||||||
| @ -30,7 +35,7 @@ class PrintLogger { | |||||||
|   logGroupEnd() {} |   logGroupEnd() {} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export const WORKER_APP_PLATFORM_MARKER = | const WORKER_APP_PLATFORM_MARKER = | ||||||
|     /*@ts2dart_const*/ new OpaqueToken('WorkerAppPlatformMarker'); |     /*@ts2dart_const*/ new OpaqueToken('WorkerAppPlatformMarker'); | ||||||
| 
 | 
 | ||||||
| export const WORKER_APP_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | export const WORKER_APP_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | ||||||
| @ -57,6 +62,13 @@ export const WORKER_APP_APPLICATION_COMMON_PROVIDERS: Array<any /*Type | Provide | |||||||
|       /* @ts2dart_Provider */ {provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []} |       /* @ts2dart_Provider */ {provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []} | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|  | export function workerAppPlatform(): PlatformRef { | ||||||
|  |   if (isBlank(getPlatform())) { | ||||||
|  |     createPlatform(ReflectiveInjector.resolveAndCreate(WORKER_APP_PLATFORM_PROVIDERS)); | ||||||
|  |   } | ||||||
|  |   return assertPlatform(WORKER_APP_PLATFORM_MARKER); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function _exceptionHandler(): ExceptionHandler { | function _exceptionHandler(): ExceptionHandler { | ||||||
|   return new ExceptionHandler(new PrintLogger()); |   return new ExceptionHandler(new PrintLogger()); | ||||||
| } | } | ||||||
| @ -1,40 +1,47 @@ | |||||||
| import {IS_DART} from '../../src/facade/lang'; | import {isBlank} from "../../../src/facade/lang"; | ||||||
| import {MessageBus} from '../web_workers/shared/message_bus'; | import {MessageBus} from "../../web_workers/shared/message_bus"; | ||||||
| import {NgZone, Provider, Injector, OpaqueToken, Testability} from '@angular/core'; |  | ||||||
| import {wtfInit} from '../../core_private'; |  | ||||||
| import { | import { | ||||||
|  |   NgZone, | ||||||
|  |   Injector, | ||||||
|  |   OpaqueToken, | ||||||
|  |   Testability, | ||||||
|   ExceptionHandler, |   ExceptionHandler, | ||||||
|   APPLICATION_COMMON_PROVIDERS, |   APPLICATION_COMMON_PROVIDERS, | ||||||
|   PLATFORM_COMMON_PROVIDERS, |   PLATFORM_COMMON_PROVIDERS, | ||||||
|   RootRenderer, |   RootRenderer, | ||||||
|   PLATFORM_INITIALIZER |   PLATFORM_INITIALIZER, | ||||||
| } from '@angular/core'; |   PlatformRef, | ||||||
| import {getDOM} from '../dom/dom_adapter'; |   getPlatform, | ||||||
| import {DomEventsPlugin} from '../dom/events/dom_events'; |   createPlatform, | ||||||
| import {KeyEventsPlugin} from '../dom/events/key_events'; |   assertPlatform, | ||||||
| import {HammerGesturesPlugin} from '../dom/events/hammer_gestures'; |   ReflectiveInjector | ||||||
| import {DOCUMENT} from '../dom/dom_tokens'; | } from "@angular/core"; | ||||||
| import {DomRootRenderer, DomRootRenderer_} from '../dom/dom_renderer'; | import {wtfInit} from "../../../core_private"; | ||||||
| import {DomSharedStylesHost, SharedStylesHost} from '../dom/shared_styles_host'; | import {getDOM} from "../../dom/dom_adapter"; | ||||||
| import {BrowserDetails} from '../animate/browser_details'; | import {DomEventsPlugin} from "../../dom/events/dom_events"; | ||||||
| import {AnimationBuilder} from '../animate/animation_builder'; | import {KeyEventsPlugin} from "../../dom/events/key_events"; | ||||||
| import {BrowserGetTestability} from '../browser/testability'; | import {HammerGesturesPlugin, HAMMER_GESTURE_CONFIG, HammerGestureConfig} from "../../dom/events/hammer_gestures"; | ||||||
| import {BrowserDomAdapter} from '../browser/browser_adapter'; | import {DOCUMENT} from "../../dom/dom_tokens"; | ||||||
| import {MessageBasedRenderer} from '../web_workers/ui/renderer'; | import {DomRootRenderer, DomRootRenderer_} from "../../dom/dom_renderer"; | ||||||
|  | import {DomSharedStylesHost, SharedStylesHost} from "../../dom/shared_styles_host"; | ||||||
|  | import {BrowserDetails} from "../../animate/browser_details"; | ||||||
|  | import {AnimationBuilder} from "../../animate/animation_builder"; | ||||||
|  | import {BrowserGetTestability} from "../../browser/testability"; | ||||||
|  | import {BrowserDomAdapter} from "../../browser/browser_adapter"; | ||||||
|  | import {MessageBasedRenderer} from "../../web_workers/ui/renderer"; | ||||||
| import { | import { | ||||||
|   ServiceMessageBrokerFactory, |   ServiceMessageBrokerFactory, | ||||||
|   ServiceMessageBrokerFactory_ |   ServiceMessageBrokerFactory_ | ||||||
| } from '../web_workers/shared/service_message_broker'; | } from "../../web_workers/shared/service_message_broker"; | ||||||
| import { | import {ClientMessageBrokerFactory, ClientMessageBrokerFactory_} from "../../web_workers/shared/client_message_broker"; | ||||||
|   ClientMessageBrokerFactory, | import {Serializer} from "../../web_workers/shared/serializer"; | ||||||
|   ClientMessageBrokerFactory_ | import {ON_WEB_WORKER} from "../../web_workers/shared/api"; | ||||||
| } from '../web_workers/shared/client_message_broker'; | import {RenderStore} from "../../web_workers/shared/render_store"; | ||||||
| import {Serializer} from '../web_workers/shared/serializer'; | import {EventManager, EVENT_MANAGER_PLUGINS} from "../../dom/events/event_manager"; | ||||||
| import {ON_WEB_WORKER} from '../web_workers/shared/api'; | import {BROWSER_SANITIZATION_PROVIDERS} from "../common/browser"; | ||||||
| import {RenderStore} from '../web_workers/shared/render_store'; | 
 | ||||||
| import {HAMMER_GESTURE_CONFIG, HammerGestureConfig} from '../dom/events/hammer_gestures'; | const WORKER_RENDER_PLATFORM_MARKER = | ||||||
| import {EventManager, EVENT_MANAGER_PLUGINS} from '../dom/events/event_manager'; |   /*@ts2dart_const*/ new OpaqueToken('WorkerRenderPlatformMarker'); | ||||||
| import {BROWSER_SANITIZATION_PROVIDERS} from '../browser_common'; |  | ||||||
| 
 | 
 | ||||||
| export const WORKER_SCRIPT: OpaqueToken = /*@ts2dart_const*/ new OpaqueToken("WebWorkerScript"); | export const WORKER_SCRIPT: OpaqueToken = /*@ts2dart_const*/ new OpaqueToken("WebWorkerScript"); | ||||||
| 
 | 
 | ||||||
| @ -47,9 +54,6 @@ export const WORKER_SCRIPT: OpaqueToken = /*@ts2dart_const*/ new OpaqueToken("We | |||||||
| export const WORKER_RENDER_STARTABLE_MESSAGING_SERVICE = | export const WORKER_RENDER_STARTABLE_MESSAGING_SERVICE = | ||||||
|     /*@ts2dart_const*/ new OpaqueToken('WorkerRenderStartableMsgService'); |     /*@ts2dart_const*/ new OpaqueToken('WorkerRenderStartableMsgService'); | ||||||
| 
 | 
 | ||||||
| export const WORKER_RENDER_PLATFORM_MARKER = |  | ||||||
|     /*@ts2dart_const*/ new OpaqueToken('WorkerRenderPlatformMarker'); |  | ||||||
| 
 |  | ||||||
| export const WORKER_RENDER_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = /*@ts2dart_const*/[ | export const WORKER_RENDER_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = /*@ts2dart_const*/[ | ||||||
|   PLATFORM_COMMON_PROVIDERS, |   PLATFORM_COMMON_PROVIDERS, | ||||||
|   /*@ts2dart_const*/ (/* @ts2dart_Provider */ {provide: WORKER_RENDER_PLATFORM_MARKER, useValue: true}), |   /*@ts2dart_const*/ (/* @ts2dart_Provider */ {provide: WORKER_RENDER_PLATFORM_MARKER, useValue: true}), | ||||||
| @ -95,14 +99,21 @@ export function initializeGenericWorkerRenderer(injector: Injector) { | |||||||
|   zone.runGuarded(() => { services.forEach((svc) => { svc.start(); }); }); |   zone.runGuarded(() => { services.forEach((svc) => { svc.start(); }); }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function initWebWorkerRenderPlatform(): void { | function initWebWorkerRenderPlatform(): void { | ||||||
|   BrowserDomAdapter.makeCurrent(); |   BrowserDomAdapter.makeCurrent(); | ||||||
|   wtfInit(); |   wtfInit(); | ||||||
|   BrowserGetTestability.init(); |   BrowserGetTestability.init(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export function workerRenderPlatform(): PlatformRef { | ||||||
|  |   if (isBlank(getPlatform())) { | ||||||
|  |     createPlatform(ReflectiveInjector.resolveAndCreate(WORKER_RENDER_PLATFORM_PROVIDERS)); | ||||||
|  |   } | ||||||
|  |   return assertPlatform(WORKER_RENDER_PLATFORM_MARKER); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| function _exceptionHandler(): ExceptionHandler { | function _exceptionHandler(): ExceptionHandler { | ||||||
|   return new ExceptionHandler(getDOM(), !IS_DART); |   return new ExceptionHandler(getDOM()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function _document(): any { | function _document(): any { | ||||||
| @ -7,14 +7,12 @@ import { | |||||||
| } from '@angular/core'; | } from '@angular/core'; | ||||||
| 
 | 
 | ||||||
| import {COMPILER_PROVIDERS, XHR} from '@angular/compiler'; | import {COMPILER_PROVIDERS, XHR} from '@angular/compiler'; | ||||||
| import {CachedXHR} from '../src/xhr/xhr_cache'; | import {CachedXHR} from '../../../src/xhr/xhr_cache'; | ||||||
| import {isPresent} from '../src/facade/lang'; | import {isPresent} from '../../../src/facade/lang'; | ||||||
| import {XHRImpl} from '../src/xhr/xhr_impl'; | import {XHRImpl} from '../../../src/xhr/xhr_impl'; | ||||||
| import { | import {browserPlatform, BROWSER_APP_COMMON_PROVIDERS} from '../common/browser'; | ||||||
|   browserPlatform, | 
 | ||||||
|   BROWSER_APP_COMMON_PROVIDERS, | import {ReflectionCapabilities} from '../../../core_private'; | ||||||
| } from '@angular/platform-browser'; |  | ||||||
| import {ReflectionCapabilities} from '../core_private'; |  | ||||||
| 
 | 
 | ||||||
| export const CACHED_TEMPLATE_PROVIDER: Array<any /*Type | Provider | any[]*/> = | export const CACHED_TEMPLATE_PROVIDER: Array<any /*Type | Provider | any[]*/> = | ||||||
|     /*@ts2dart_const*/[{provide: XHR, useClass: CachedXHR}]; |     /*@ts2dart_const*/[{provide: XHR, useClass: CachedXHR}]; | ||||||
| @ -22,7 +20,7 @@ export const CACHED_TEMPLATE_PROVIDER: Array<any /*Type | Provider | any[]*/> = | |||||||
| /** | /** | ||||||
|  * An array of providers that should be passed into `application()` when bootstrapping a component. |  * An array of providers that should be passed into `application()` when bootstrapping a component. | ||||||
|  */ |  */ | ||||||
| export const BROWSER_APP_DYNAMIC_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | export const BROWSER_APP_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | ||||||
|     /*@ts2dart_const*/[ |     /*@ts2dart_const*/[ | ||||||
|       BROWSER_APP_COMMON_PROVIDERS, |       BROWSER_APP_COMMON_PROVIDERS, | ||||||
|       COMPILER_PROVIDERS, |       COMPILER_PROVIDERS, | ||||||
| @ -102,7 +100,7 @@ export function bootstrap( | |||||||
|     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> { |     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> { | ||||||
|   reflector.reflectionCapabilities = new ReflectionCapabilities(); |   reflector.reflectionCapabilities = new ReflectionCapabilities(); | ||||||
|   var appInjector = ReflectiveInjector.resolveAndCreate( |   var appInjector = ReflectiveInjector.resolveAndCreate( | ||||||
|       [BROWSER_APP_DYNAMIC_PROVIDERS, isPresent(customProviders) ? customProviders : []], |       [BROWSER_APP_PROVIDERS, isPresent(customProviders) ? customProviders : []], | ||||||
|       browserPlatform().injector); |       browserPlatform().injector); | ||||||
|   return coreLoadAndBootstrap(appInjector, appComponentType); |   return coreLoadAndBootstrap(appInjector, appComponentType); | ||||||
| } | } | ||||||
| @ -1,18 +1,18 @@ | |||||||
| import {WORKER_APP_APPLICATION_PROVIDERS, workerAppPlatform} from '@angular/platform-browser'; | import {WORKER_APP_STATIC_APPLICATION_PROVIDERS} from '../static/worker_app'; | ||||||
|  | import {workerAppPlatform} from '../common/worker_app'; | ||||||
| import {COMPILER_PROVIDERS, XHR} from '@angular/compiler'; | import {COMPILER_PROVIDERS, XHR} from '@angular/compiler'; | ||||||
| import {WebWorkerXHRImpl} from './web_workers/worker/xhr_impl'; | import {WebWorkerXHRImpl} from '../../web_workers/worker/xhr_impl'; | ||||||
| import {isPresent} from './facade/lang'; | import {isPresent} from '../../facade/lang'; | ||||||
| 
 | 
 | ||||||
| import { | import { | ||||||
|   PlatformRef, |  | ||||||
|   Type, |   Type, | ||||||
|   ComponentRef, |   ComponentRef, | ||||||
|   ReflectiveInjector, |   ReflectiveInjector, | ||||||
|   coreLoadAndBootstrap, |   coreLoadAndBootstrap, | ||||||
| } from '@angular/core'; | } from '@angular/core'; | ||||||
| 
 | 
 | ||||||
| export const WORKER_APP_DYNAMIC_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | export const WORKER_APP_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | ||||||
|   WORKER_APP_APPLICATION_PROVIDERS, |   WORKER_APP_STATIC_APPLICATION_PROVIDERS, | ||||||
|   COMPILER_PROVIDERS, |   COMPILER_PROVIDERS, | ||||||
|   WebWorkerXHRImpl, |   WebWorkerXHRImpl, | ||||||
|   /* @ts2dart_Provider */ {provide: XHR, useExisting: WebWorkerXHRImpl} |   /* @ts2dart_Provider */ {provide: XHR, useExisting: WebWorkerXHRImpl} | ||||||
| @ -22,7 +22,7 @@ export function bootstrapApp( | |||||||
|     appComponentType: Type, |     appComponentType: Type, | ||||||
|     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> { |     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> { | ||||||
|   var appInjector = ReflectiveInjector.resolveAndCreate( |   var appInjector = ReflectiveInjector.resolveAndCreate( | ||||||
|       [WORKER_APP_DYNAMIC_APPLICATION_PROVIDERS, isPresent(customProviders) ? customProviders : []], |       [WORKER_APP_APPLICATION_PROVIDERS, isPresent(customProviders) ? customProviders : []], | ||||||
|       workerAppPlatform().injector); |       workerAppPlatform().injector); | ||||||
|   return coreLoadAndBootstrap(appInjector, appComponentType); |   return coreLoadAndBootstrap(appInjector, appComponentType); | ||||||
| } | } | ||||||
| @ -1,21 +1,14 @@ | |||||||
| import {XHR} from "@angular/compiler"; | import {XHR} from "@angular/compiler"; | ||||||
| import {XHRImpl} from "./xhr/xhr_impl"; | import {XHRImpl} from "../../xhr/xhr_impl"; | ||||||
| import {MessageBasedXHRImpl} from "./web_workers/ui/xhr_impl"; | import {MessageBasedXHRImpl} from "../../web_workers/ui/xhr_impl"; | ||||||
| import { | import {WORKER_RENDER_STATIC_APPLICATION_PROVIDERS} from "../static/worker_render"; | ||||||
|   WORKER_RENDER_APPLICATION_PROVIDERS, | import {ApplicationRef, ReflectiveInjector} from "@angular/core"; | ||||||
|   WORKER_RENDER_STARTABLE_MESSAGING_SERVICE | import {workerRenderPlatform, WORKER_SCRIPT, WORKER_RENDER_STARTABLE_MESSAGING_SERVICE} from "../common/worker_render"; | ||||||
| } from '@angular/platform-browser'; | import {isPresent} from "../../facade/lang"; | ||||||
| import { | import {PromiseWrapper} from "../../facade/async"; | ||||||
|   ApplicationRef, |  | ||||||
|   PlatformRef, |  | ||||||
|   ReflectiveInjector, |  | ||||||
| } from '@angular/core'; |  | ||||||
| import {workerRenderPlatform, WORKER_SCRIPT} from '@angular/platform-browser'; |  | ||||||
| import {isPresent} from './facade/lang'; |  | ||||||
| import {PromiseWrapper} from './facade/async'; |  | ||||||
| 
 | 
 | ||||||
| export const WORKER_RENDER_DYNAMIC_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | export const WORKER_RENDER_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | ||||||
|   WORKER_RENDER_APPLICATION_PROVIDERS, |   WORKER_RENDER_STATIC_APPLICATION_PROVIDERS, | ||||||
|   /* @ts2dart_Provider */ {provide: XHR, useClass: XHRImpl}, |   /* @ts2dart_Provider */ {provide: XHR, useClass: XHRImpl}, | ||||||
|   MessageBasedXHRImpl, |   MessageBasedXHRImpl, | ||||||
|   /* @ts2dart_Provider */ {provide: WORKER_RENDER_STARTABLE_MESSAGING_SERVICE, useExisting: MessageBasedXHRImpl, multi: true}, |   /* @ts2dart_Provider */ {provide: WORKER_RENDER_STARTABLE_MESSAGING_SERVICE, useExisting: MessageBasedXHRImpl, multi: true}, | ||||||
| @ -26,7 +19,7 @@ export function bootstrapRender( | |||||||
|     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ApplicationRef> { |     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ApplicationRef> { | ||||||
|   var app = ReflectiveInjector.resolveAndCreate( |   var app = ReflectiveInjector.resolveAndCreate( | ||||||
|       [ |       [ | ||||||
|         WORKER_RENDER_DYNAMIC_APPLICATION_PROVIDERS, |         WORKER_RENDER_APPLICATION_PROVIDERS, | ||||||
|         /* @ts2dart_Provider */ {provide: WORKER_SCRIPT, useValue: workerScriptUri}, |         /* @ts2dart_Provider */ {provide: WORKER_SCRIPT, useValue: workerScriptUri}, | ||||||
|         isPresent(customProviders) ? customProviders : [] |         isPresent(customProviders) ? customProviders : [] | ||||||
|       ], |       ], | ||||||
| @ -1,43 +1,21 @@ | |||||||
| import { | import { | ||||||
|   ComponentRef, |   ComponentRef, | ||||||
|   coreLoadAndBootstrap, |   coreLoadAndBootstrap, | ||||||
|   ReflectiveInjector, |   ReflectiveInjector | ||||||
|   PlatformRef, |  | ||||||
|   getPlatform, |  | ||||||
|   createPlatform, |  | ||||||
|   assertPlatform |  | ||||||
| } from '@angular/core'; | } from '@angular/core'; | ||||||
| 
 | import {Type, isPresent} from '../../facade/lang'; | ||||||
| import {Type, isPresent, isBlank} from './facade/lang'; |  | ||||||
| import { | import { | ||||||
|   BROWSER_APP_COMMON_PROVIDERS, |   BROWSER_APP_COMMON_PROVIDERS, | ||||||
|   BROWSER_PROVIDERS, |   browserPlatform | ||||||
|   BROWSER_PLATFORM_MARKER | } from '../common/browser'; | ||||||
| } from './browser_common'; |  | ||||||
| export {ELEMENT_PROBE_PROVIDERS} from './dom/debug/ng_probe'; |  | ||||||
| export {BrowserPlatformLocation} from './browser/location/browser_platform_location'; |  | ||||||
| export { |  | ||||||
|   BROWSER_PROVIDERS, |  | ||||||
|   By, |  | ||||||
|   Title, |  | ||||||
|   enableDebugTools, |  | ||||||
|   disableDebugTools, |  | ||||||
| } from './browser_common'; |  | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * An array of providers that should be passed into `application()` when bootstrapping a component |  * An array of providers that should be passed into `application()` when bootstrapping a component | ||||||
|  * when all templates have been precompiled offline. |  * when all templates have been pre-compiled. | ||||||
|  */ |  */ | ||||||
| export const BROWSER_APP_STATIC_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | export const BROWSER_APP_STATIC_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | ||||||
|     /*@ts2dart_const*/ BROWSER_APP_COMMON_PROVIDERS; |     /*@ts2dart_const*/ BROWSER_APP_COMMON_PROVIDERS; | ||||||
| 
 | 
 | ||||||
| export function browserPlatform(): PlatformRef { |  | ||||||
|   if (isBlank(getPlatform())) { |  | ||||||
|     createPlatform(ReflectiveInjector.resolveAndCreate(BROWSER_PROVIDERS)); |  | ||||||
|   } |  | ||||||
|   return assertPlatform(BROWSER_PLATFORM_MARKER); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** | /** | ||||||
|  * See {@link bootstrap} for more information. |  * See {@link bootstrap} for more information. | ||||||
|  */ |  */ | ||||||
| @ -0,0 +1,45 @@ | |||||||
|  | import {APP_INITIALIZER, NgZone, ReflectiveInjector, ComponentRef, coreLoadAndBootstrap} from '@angular/core'; | ||||||
|  | import {Type, isPresent} from '../../../src/facade/lang'; | ||||||
|  | import {workerAppPlatform} from '../common/worker_app'; | ||||||
|  | import {WorkerDomAdapter} from '../../web_workers/worker/worker_adapter'; | ||||||
|  | import { | ||||||
|  |   PostMessageBus, | ||||||
|  |   PostMessageBusSink, | ||||||
|  |   PostMessageBusSource | ||||||
|  | } from '../../web_workers/shared/post_message_bus'; | ||||||
|  | import {WORKER_APP_APPLICATION_COMMON_PROVIDERS} from '../common/worker_app'; | ||||||
|  | import {MessageBus} from '../../web_workers/shared/message_bus'; | ||||||
|  | 
 | ||||||
|  | // TODO(jteplitz602) remove this and compile with lib.webworker.d.ts (#3492)
 | ||||||
|  | let _postMessage = { | ||||||
|  |   postMessage: (message: any, transferrables?:[ArrayBuffer]) => { | ||||||
|  |     (<any>postMessage)(message, transferrables); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export const WORKER_APP_STATIC_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ | ||||||
|  |   WORKER_APP_APPLICATION_COMMON_PROVIDERS, | ||||||
|  |   /* @ts2dart_Provider */ {provide: MessageBus, useFactory: createMessageBus, deps: [NgZone]}, | ||||||
|  |   /* @ts2dart_Provider */ {provide: APP_INITIALIZER, useValue: setupWebWorker, multi: true} | ||||||
|  | ]; | ||||||
|  | 
 | ||||||
|  | export function bootstrapStaticApp( | ||||||
|  |   appComponentType: Type, | ||||||
|  |   customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> { | ||||||
|  |   var appInjector = ReflectiveInjector.resolveAndCreate( | ||||||
|  |     [WORKER_APP_STATIC_APPLICATION_PROVIDERS, isPresent(customProviders) ? customProviders : []], | ||||||
|  |     workerAppPlatform().injector); | ||||||
|  |   return coreLoadAndBootstrap(appInjector, appComponentType); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function createMessageBus(zone: NgZone): MessageBus { | ||||||
|  |   let sink = new PostMessageBusSink(_postMessage); | ||||||
|  |   let source = new PostMessageBusSource(); | ||||||
|  |   let bus = new PostMessageBus(sink, source); | ||||||
|  |   bus.attachToZone(zone); | ||||||
|  |   return bus; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function setupWebWorker(): void { | ||||||
|  |   WorkerDomAdapter.makeCurrent(); | ||||||
|  | } | ||||||
| @ -2,17 +2,24 @@ import { | |||||||
|   PostMessageBus, |   PostMessageBus, | ||||||
|   PostMessageBusSink, |   PostMessageBusSink, | ||||||
|   PostMessageBusSource |   PostMessageBusSource | ||||||
| } from '../web_workers/shared/post_message_bus'; | } from '../../web_workers/shared/post_message_bus'; | ||||||
| import {MessageBus} from '../web_workers/shared/message_bus'; | import {MessageBus} from '../../web_workers/shared/message_bus'; | ||||||
| import {Injector, Injectable, APP_INITIALIZER} from '@angular/core'; | import {Injector, Injectable, APP_INITIALIZER} from '@angular/core'; | ||||||
| import { | import { | ||||||
|   WORKER_RENDER_APPLICATION_COMMON_PROVIDERS, |   WORKER_RENDER_APPLICATION_COMMON_PROVIDERS, | ||||||
|   WORKER_SCRIPT, |   WORKER_SCRIPT, | ||||||
|   initializeGenericWorkerRenderer |   initializeGenericWorkerRenderer | ||||||
| } from './worker_render_common'; | } from '../common/worker_render'; | ||||||
| import {BaseException} from '../../src/facade/exceptions'; | import {BaseException} from '../../../src/facade/exceptions'; | ||||||
| 
 | 
 | ||||||
| export {WORKER_RENDER_STARTABLE_MESSAGING_SERVICE} from './worker_render_common'; | 
 | ||||||
|  | import {isPresent} from '../../facade/lang'; | ||||||
|  | import {PromiseWrapper} from '../../facade/async'; | ||||||
|  | import { | ||||||
|  |   ApplicationRef, | ||||||
|  |   ReflectiveInjector, | ||||||
|  | } from '@angular/core'; | ||||||
|  | import {workerRenderPlatform} from '../common/worker_render'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Wrapper class that exposes the Worker |  * Wrapper class that exposes the Worker | ||||||
| @ -33,7 +40,7 @@ export class WebWorkerInstance { | |||||||
| /** | /** | ||||||
|  * An array of providers that should be passed into `application()` when initializing a new Worker. |  * An array of providers that should be passed into `application()` when initializing a new Worker. | ||||||
|  */ |  */ | ||||||
| export const WORKER_RENDER_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = /*@ts2dart_const*/[ | export const WORKER_RENDER_STATIC_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = /*@ts2dart_const*/[ | ||||||
|   WORKER_RENDER_APPLICATION_COMMON_PROVIDERS, WebWorkerInstance, |   WORKER_RENDER_APPLICATION_COMMON_PROVIDERS, WebWorkerInstance, | ||||||
|   /*@ts2dart_Provider*/ { |   /*@ts2dart_Provider*/ { | ||||||
|     provide: APP_INITIALIZER, |     provide: APP_INITIALIZER, | ||||||
| @ -48,6 +55,23 @@ export const WORKER_RENDER_APPLICATION_PROVIDERS: Array<any /*Type | Provider | | |||||||
|   } |   } | ||||||
| ]; | ]; | ||||||
| 
 | 
 | ||||||
|  | export function bootstrapStaticRender( | ||||||
|  |   workerScriptUri: string, | ||||||
|  |   customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ApplicationRef> { | ||||||
|  |   var app = ReflectiveInjector.resolveAndCreate( | ||||||
|  |     [ | ||||||
|  |       WORKER_RENDER_STATIC_APPLICATION_PROVIDERS, | ||||||
|  |       /* @ts2dart_Provider */ {provide: WORKER_SCRIPT, useValue: workerScriptUri}, | ||||||
|  |       isPresent(customProviders) ? customProviders : [] | ||||||
|  |     ], | ||||||
|  |     workerRenderPlatform().injector); | ||||||
|  |   // Return a promise so that we keep the same semantics as Dart,
 | ||||||
|  |   // and we might want to wait for the app side to come up
 | ||||||
|  |   // in the future...
 | ||||||
|  |   return PromiseWrapper.resolve(app.get(ApplicationRef)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| function initWebWorkerApplication(injector: Injector): void { | function initWebWorkerApplication(injector: Injector): void { | ||||||
|   var scriptUri: string; |   var scriptUri: string; | ||||||
|   try { |   try { | ||||||
| @ -1,35 +0,0 @@ | |||||||
| export {DomEventsPlugin} from './dom/events/dom_events'; |  | ||||||
| export {KeyEventsPlugin} from './dom/events/key_events'; |  | ||||||
| 
 |  | ||||||
| export {EventManager, EVENT_MANAGER_PLUGINS} from './dom/events/event_manager'; |  | ||||||
| export {ELEMENT_PROBE_PROVIDERS} from './dom/debug/ng_probe'; |  | ||||||
| export { |  | ||||||
|   BROWSER_APP_COMMON_PROVIDERS, |  | ||||||
|   BROWSER_SANITIZATION_PROVIDERS, |  | ||||||
|   BROWSER_PROVIDERS, |  | ||||||
|   By, |  | ||||||
|   Title, |  | ||||||
|   enableDebugTools, |  | ||||||
|   disableDebugTools, |  | ||||||
|   HAMMER_GESTURE_CONFIG, |  | ||||||
|   HammerGestureConfig |  | ||||||
| } from './browser_common'; |  | ||||||
| 
 |  | ||||||
| export {DOCUMENT} from './dom/dom_tokens'; |  | ||||||
| 
 |  | ||||||
| export { |  | ||||||
|   DomSanitizationService, |  | ||||||
|   SafeHtml, |  | ||||||
|   SafeScript, |  | ||||||
|   SafeStyle, |  | ||||||
|   SafeUrl, |  | ||||||
|   SafeResourceUrl, |  | ||||||
|   SecurityContext |  | ||||||
| } from './security/dom_sanitization_service'; |  | ||||||
| 
 |  | ||||||
| export { |  | ||||||
|   bootstrapStatic, |  | ||||||
|   browserPlatform, |  | ||||||
|   BROWSER_APP_STATIC_PROVIDERS, |  | ||||||
|   BrowserPlatformLocation |  | ||||||
| } from './platform_browser_static'; |  | ||||||
| @ -1,223 +0,0 @@ | |||||||
| library angular2.src.web_workers.debug_tools.multi_client_server_message_bus; |  | ||||||
| 
 |  | ||||||
| import 'dart:io'; |  | ||||||
| import 'dart:convert' show JSON; |  | ||||||
| import 'dart:async'; |  | ||||||
| import 'package:angular2/src/web_workers/shared/messaging_api.dart'; |  | ||||||
| import 'package:angular2/src/web_workers/shared/generic_message_bus.dart'; |  | ||||||
| 
 |  | ||||||
| // TODO(jteplitz602): Remove hard coded result type and |  | ||||||
| // clear messageHistory once app is done with it #3859 |  | ||||||
| class MultiClientServerMessageBus extends GenericMessageBus { |  | ||||||
|   bool hasPrimary = false; |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   MultiClientServerMessageBusSink get sink => super.sink; |  | ||||||
|   @override |  | ||||||
|   MultiClientServerMessageBusSource get source => super.source; |  | ||||||
| 
 |  | ||||||
|   MultiClientServerMessageBus(MultiClientServerMessageBusSink sink, |  | ||||||
|       MultiClientServerMessageBusSource source) |  | ||||||
|       : super(sink, source); |  | ||||||
| 
 |  | ||||||
|   MultiClientServerMessageBus.fromHttpServer(HttpServer server) |  | ||||||
|       : super(new MultiClientServerMessageBusSink(), |  | ||||||
|             new MultiClientServerMessageBusSource()) { |  | ||||||
|     source.onResult.listen(_resultReceived); |  | ||||||
|     server.listen((HttpRequest request) { |  | ||||||
|       if (request.uri.path == "/ws") { |  | ||||||
|         WebSocketTransformer.upgrade(request).then((WebSocket socket) { |  | ||||||
|           var wrapper = new WebSocketWrapper( |  | ||||||
|               sink.messageHistory, sink.resultMarkers, socket); |  | ||||||
|           if (!hasPrimary) { |  | ||||||
|             wrapper.setPrimary(true); |  | ||||||
|             hasPrimary = true; |  | ||||||
|           } |  | ||||||
|           sink.addConnection(wrapper); |  | ||||||
|           source.addConnection(wrapper); |  | ||||||
| 
 |  | ||||||
|           wrapper.stream.listen(null, onDone: _handleDisconnect(wrapper)); |  | ||||||
|         }); |  | ||||||
|       } |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void _resultReceived(_) { |  | ||||||
|     sink.resultReceived(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Function _handleDisconnect(WebSocketWrapper wrapper) { |  | ||||||
|     return () { |  | ||||||
|       sink.removeConnection(wrapper); |  | ||||||
|       if (wrapper.isPrimary) { |  | ||||||
|         hasPrimary = false; |  | ||||||
|       } |  | ||||||
|     }; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class WebSocketWrapper { |  | ||||||
|   WebSocket _socket; |  | ||||||
|   Stream stream; |  | ||||||
|   int _numResultsReceived = 0; |  | ||||||
|   bool _isPrimary = false; |  | ||||||
|   bool caughtUp = false; |  | ||||||
|   List<String> _messageHistory; |  | ||||||
|   List<int> _resultMarkers; |  | ||||||
|   StreamController<String> _sendStream; |  | ||||||
| 
 |  | ||||||
|   WebSocketWrapper(this._messageHistory, this._resultMarkers, this._socket) { |  | ||||||
|     stream = _socket.asBroadcastStream(); |  | ||||||
|     stream.listen((encodedMessage) { |  | ||||||
|       var messages = JSON.decode(encodedMessage); |  | ||||||
|       messages.forEach((data) { |  | ||||||
|         var message = data['message']; |  | ||||||
|         if (message is Map && message.containsKey("type")) { |  | ||||||
|           if (message['type'] == 'result') { |  | ||||||
|             resultReceived(); |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       }); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     _sendStream = new StreamController<String>(); |  | ||||||
|     _socket.addStream(_sendStream.stream); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void send(String data) { |  | ||||||
|     _sendStream.add(data); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool get isPrimary => _isPrimary; |  | ||||||
| 
 |  | ||||||
|   void resultReceived() { |  | ||||||
|     if (!isPrimary && !caughtUp) { |  | ||||||
|       _numResultsReceived++; |  | ||||||
|       sendToMarker(_numResultsReceived); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void setPrimary(bool primary) { |  | ||||||
|     _isPrimary = primary; |  | ||||||
|     if (primary) { |  | ||||||
|       caughtUp = true; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // Sends up to the given result marker |  | ||||||
|   void sendToMarker(int markerIndex) { |  | ||||||
|     int numMessages; |  | ||||||
|     int curr; |  | ||||||
|     if (markerIndex >= _resultMarkers.length) { |  | ||||||
|       // we're past the final result marker so send all messages in history |  | ||||||
|       curr = (_resultMarkers.length > 0) |  | ||||||
|           ? _resultMarkers[_resultMarkers.length - 1] |  | ||||||
|           : 0; |  | ||||||
|       numMessages = _messageHistory.length - curr; |  | ||||||
|       caughtUp = true; |  | ||||||
|     } else { |  | ||||||
|       curr = (markerIndex == 0) ? 0 : _resultMarkers[markerIndex - 1]; |  | ||||||
|       var end = _resultMarkers[markerIndex]; |  | ||||||
|       numMessages = end - curr; |  | ||||||
|     } |  | ||||||
|     while (numMessages > 0) { |  | ||||||
|       send(_messageHistory[curr]); |  | ||||||
|       curr++; |  | ||||||
|       numMessages--; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class MultiClientServerMessageBusSink extends GenericMessageBusSink { |  | ||||||
|   final List<String> messageHistory = new List<String>(); |  | ||||||
|   final Set<WebSocketWrapper> openConnections = new Set<WebSocketWrapper>(); |  | ||||||
|   final List<int> resultMarkers = new List<int>(); |  | ||||||
| 
 |  | ||||||
|   void resultReceived() { |  | ||||||
|     resultMarkers.add(messageHistory.length); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void addConnection(WebSocketWrapper webSocket) { |  | ||||||
|     openConnections.add(webSocket); |  | ||||||
|     // send messages up to the first result marker to this socket |  | ||||||
|     webSocket.sendToMarker(0); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void removeConnection(WebSocketWrapper webSocket) { |  | ||||||
|     openConnections.remove(webSocket); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   void sendMessages(List<dynamic> messages) { |  | ||||||
|     String encodedMessages = JSON.encode(messages); |  | ||||||
|     openConnections.forEach((WebSocketWrapper webSocket) { |  | ||||||
|       if (webSocket.caughtUp) { |  | ||||||
|         webSocket.send(encodedMessages); |  | ||||||
|       } |  | ||||||
|     }); |  | ||||||
|     messageHistory.add(encodedMessages); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class MultiClientServerMessageBusSource extends GenericMessageBusSource { |  | ||||||
|   Function onResultReceived; |  | ||||||
|   final StreamController mainController; |  | ||||||
|   final StreamController resultController = new StreamController(); |  | ||||||
| 
 |  | ||||||
|   MultiClientServerMessageBusSource._(controller) |  | ||||||
|       : mainController = controller, |  | ||||||
|         super(controller.stream); |  | ||||||
| 
 |  | ||||||
|   factory MultiClientServerMessageBusSource() { |  | ||||||
|     return new MultiClientServerMessageBusSource._( |  | ||||||
|         new StreamController.broadcast()); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Stream get onResult => resultController.stream; |  | ||||||
| 
 |  | ||||||
|   void addConnection(WebSocketWrapper webSocket) { |  | ||||||
|     if (webSocket.isPrimary) { |  | ||||||
|       webSocket.stream.listen((encodedMessages) { |  | ||||||
|         var decodedMessages = _decodeMessages(encodedMessages); |  | ||||||
|         decodedMessages.forEach((decodedMessage) { |  | ||||||
|           var message = decodedMessage['message']; |  | ||||||
|           if (message is Map && message.containsKey("type")) { |  | ||||||
|             if (message['type'] == 'result') { |  | ||||||
|               // tell the bus that a result was received on the primary |  | ||||||
|               resultController.add(message); |  | ||||||
|             } |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|         mainController.add(decodedMessages); |  | ||||||
|       }); |  | ||||||
|     } else { |  | ||||||
|       webSocket.stream.listen((encodedMessages) { |  | ||||||
|         // handle events from non-primary connection. |  | ||||||
|         var decodedMessages = _decodeMessages(encodedMessages); |  | ||||||
|         var eventMessages = new List<Map<String, dynamic>>(); |  | ||||||
|         decodedMessages.forEach((decodedMessage) { |  | ||||||
|           var channel = decodedMessage['channel']; |  | ||||||
|           if (channel == EVENT_CHANNEL) { |  | ||||||
|             eventMessages.add(decodedMessage); |  | ||||||
|           } |  | ||||||
|         }); |  | ||||||
|         if (eventMessages.length > 0) { |  | ||||||
|           mainController.add(eventMessages); |  | ||||||
|         } |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   List<dynamic> _decodeMessages(dynamic messages) { |  | ||||||
|     return JSON.decode(messages); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // This is a noop for the MultiClientBus because it has to decode the JSON messages before |  | ||||||
|   // the generic bus receives them in order to check for results and forward events |  | ||||||
|   // from the non-primary connection. |  | ||||||
|   @override |  | ||||||
|   List<dynamic> decodeMessages(dynamic messages) { |  | ||||||
|     return messages; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,88 +0,0 @@ | |||||||
| library angular2.src.web_workers.debug_tools.single_client_server_message_bus; |  | ||||||
| 
 |  | ||||||
| import 'dart:io'; |  | ||||||
| import 'dart:convert' show JSON; |  | ||||||
| import 'package:angular2/src/web_workers/shared/generic_message_bus.dart'; |  | ||||||
| 
 |  | ||||||
| class SingleClientServerMessageBus extends GenericMessageBus { |  | ||||||
|   bool connected = false; |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   SingleClientServerMessageBusSink get sink => super.sink; |  | ||||||
|   @override |  | ||||||
|   SingleClientServerMessageBusSource get source => super.source; |  | ||||||
| 
 |  | ||||||
|   SingleClientServerMessageBus(SingleClientServerMessageBusSink sink, |  | ||||||
|       SingleClientServerMessageBusSource source) |  | ||||||
|       : super(sink, source); |  | ||||||
| 
 |  | ||||||
|   SingleClientServerMessageBus.fromHttpServer(HttpServer server) |  | ||||||
|       : super(new SingleClientServerMessageBusSink(), |  | ||||||
|             new SingleClientServerMessageBusSource()) { |  | ||||||
|     server.listen((HttpRequest request) { |  | ||||||
|       if (request.uri.path == "/ws") { |  | ||||||
|         if (!connected) { |  | ||||||
|           WebSocketTransformer.upgrade(request).then((WebSocket socket) { |  | ||||||
|             sink.setConnection(socket); |  | ||||||
| 
 |  | ||||||
|             var stream = socket.asBroadcastStream(); |  | ||||||
|             source.attachTo(stream); |  | ||||||
|             stream.listen(null, onDone: _handleDisconnect); |  | ||||||
|           }).catchError((error) { |  | ||||||
|             throw error; |  | ||||||
|             connected = false; |  | ||||||
|           }); |  | ||||||
|           connected = true; |  | ||||||
|         } else { |  | ||||||
|           // refuse additional clients |  | ||||||
|           request.response.statusCode = HttpStatus.SERVICE_UNAVAILABLE; |  | ||||||
|           request.response.write("Maximum number of clients connected."); |  | ||||||
|           request.response.close(); |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void _handleDisconnect() { |  | ||||||
|     sink.removeConnection(); |  | ||||||
|     connected = false; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class SingleClientServerMessageBusSink extends GenericMessageBusSink { |  | ||||||
|   final List<String> _messageBuffer = new List<String>(); |  | ||||||
|   WebSocket _socket = null; |  | ||||||
| 
 |  | ||||||
|   void setConnection(WebSocket webSocket) { |  | ||||||
|     _socket = webSocket; |  | ||||||
|     _sendBufferedMessages(); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void removeConnection() { |  | ||||||
|     _socket = null; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   void sendMessages(List<dynamic> message) { |  | ||||||
|     String encodedMessages = JSON.encode(message); |  | ||||||
|     if (_socket != null) { |  | ||||||
|       _socket.add(encodedMessages); |  | ||||||
|     } else { |  | ||||||
|       _messageBuffer.add(encodedMessages); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void _sendBufferedMessages() { |  | ||||||
|     _messageBuffer.forEach((message) => _socket.add(message)); |  | ||||||
|     _messageBuffer.clear(); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class SingleClientServerMessageBusSource extends GenericMessageBusSource { |  | ||||||
|   SingleClientServerMessageBusSource() : super(null); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   List<dynamic> decodeMessages(dynamic messages) { |  | ||||||
|     return JSON.decode(messages); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| library angular2.src.web_workers.worker.web_socket_message_bus; |  | ||||||
| 
 |  | ||||||
| import 'dart:html'; |  | ||||||
| import 'dart:convert' show JSON; |  | ||||||
| import 'package:angular2/src/web_workers/shared/generic_message_bus.dart'; |  | ||||||
| 
 |  | ||||||
| class WebSocketMessageBus extends GenericMessageBus { |  | ||||||
|   WebSocketMessageBus( |  | ||||||
|       WebSocketMessageBusSink sink, WebSocketMessageBusSource source) |  | ||||||
|       : super(sink, source); |  | ||||||
| 
 |  | ||||||
|   WebSocketMessageBus.fromWebSocket(WebSocket webSocket) |  | ||||||
|       : super(new WebSocketMessageBusSink(webSocket), |  | ||||||
|             new WebSocketMessageBusSource(webSocket)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class WebSocketMessageBusSink extends GenericMessageBusSink { |  | ||||||
|   final WebSocket _webSocket; |  | ||||||
| 
 |  | ||||||
|   WebSocketMessageBusSink(this._webSocket); |  | ||||||
| 
 |  | ||||||
|   void sendMessages(List<dynamic> messages) { |  | ||||||
|     _webSocket.send(JSON.encode(messages)); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class WebSocketMessageBusSource extends GenericMessageBusSource { |  | ||||||
|   WebSocketMessageBusSource(WebSocket webSocket) : super(webSocket.onMessage); |  | ||||||
| 
 |  | ||||||
|   List<dynamic> decodeMessages(MessageEvent event) { |  | ||||||
|     var messages = event.data; |  | ||||||
|     return JSON.decode(messages); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,156 +0,0 @@ | |||||||
| library angular2.src.web_workers.shared.generic_message_bus; |  | ||||||
| 
 |  | ||||||
| import 'dart:async'; |  | ||||||
| import 'package:angular2/src/facade/async.dart' show EventEmitter; |  | ||||||
| import 'package:angular2/src/web_workers/shared/message_bus.dart' |  | ||||||
|     show MessageBus, MessageBusSink, MessageBusSource; |  | ||||||
| import 'package:angular2/src/core/zone/ng_zone.dart'; |  | ||||||
| import 'package:angular2/src/facade/lang.dart'; |  | ||||||
| import 'package:angular2/src/facade/exceptions.dart'; |  | ||||||
| 
 |  | ||||||
| class GenericMessageBus implements MessageBus { |  | ||||||
|   final MessageBusSink _sink; |  | ||||||
|   final MessageBusSource _source; |  | ||||||
| 
 |  | ||||||
|   MessageBusSink get sink => _sink; |  | ||||||
|   MessageBusSource get source => _source; |  | ||||||
| 
 |  | ||||||
|   GenericMessageBus(MessageBusSink sink, MessageBusSource source) |  | ||||||
|       : _sink = sink, |  | ||||||
|         _source = source; |  | ||||||
| 
 |  | ||||||
|   void attachToZone(NgZone zone) { |  | ||||||
|     _sink.attachToZone(zone); |  | ||||||
|     _source.attachToZone(zone); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void initChannel(String channel, [bool runInZone = true]) { |  | ||||||
|     _sink.initChannel(channel, runInZone); |  | ||||||
|     _source.initChannel(channel, runInZone); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   EventEmitter from(String channel) { |  | ||||||
|     return _source.from(channel); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   EventEmitter to(String channel) { |  | ||||||
|     return _sink.to(channel); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| abstract class GenericMessageBusSink implements MessageBusSink { |  | ||||||
|   NgZone _zone; |  | ||||||
|   final _channels = new Map<String, _Channel>(); |  | ||||||
|   final _messageBuffer = new List<dynamic>(); |  | ||||||
| 
 |  | ||||||
|   void attachToZone(NgZone zone) { |  | ||||||
|     _zone = zone; |  | ||||||
|     _zone.runOutsideAngular(() { |  | ||||||
|       _zone.onStable.listen((_) { |  | ||||||
|         if (_messageBuffer.length > 0) { |  | ||||||
|           sendMessages(_messageBuffer); |  | ||||||
|           _messageBuffer.clear(); |  | ||||||
|         } |  | ||||||
|       }); |  | ||||||
|     }); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void initChannel(String channelName, [bool runInZone = true]) { |  | ||||||
|     if (_channels.containsKey(channelName)) { |  | ||||||
|       throw new BaseException("${channelName} has already been initialized."); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     var emitter = new EventEmitter(); |  | ||||||
|     var channel = new _Channel(emitter, runInZone); |  | ||||||
| 
 |  | ||||||
|     emitter.listen((data) { |  | ||||||
|       var message = {'channel': channelName, 'message': data}; |  | ||||||
|       if (runInZone) { |  | ||||||
|         _messageBuffer.add(message); |  | ||||||
|       } else { |  | ||||||
|         sendMessages([message]); |  | ||||||
|       } |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     _channels[channelName] = channel; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   EventEmitter to(String channelName) { |  | ||||||
|     if (_channels.containsKey(channelName)) { |  | ||||||
|       return _channels[channelName].emitter; |  | ||||||
|     } else { |  | ||||||
|       throw new BaseException( |  | ||||||
|           "${channelName} is not set up. Did you forget to call initChannel?"); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void sendMessages(List<dynamic> messages); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| abstract class GenericMessageBusSource implements MessageBusSource { |  | ||||||
|   Stream _stream; |  | ||||||
|   final _channels = new Map<String, _Channel>(); |  | ||||||
|   NgZone _zone; |  | ||||||
| 
 |  | ||||||
|   Stream get stream => _stream; |  | ||||||
| 
 |  | ||||||
|   GenericMessageBusSource(Stream stream) { |  | ||||||
|     attachTo(stream); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void attachTo(Stream stream) { |  | ||||||
|     _stream = stream; |  | ||||||
|     if (stream != null) { |  | ||||||
|       stream.listen((messages) { |  | ||||||
|         List<dynamic> decodedMessages = decodeMessages(messages); |  | ||||||
|         if (decodedMessages != null) { |  | ||||||
|           decodedMessages.forEach((message) => _handleMessage(message)); |  | ||||||
|         } |  | ||||||
|       }); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void attachToZone(NgZone zone) { |  | ||||||
|     _zone = zone; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void initChannel(String channelName, [bool runInZone = true]) { |  | ||||||
|     if (_channels.containsKey(channelName)) { |  | ||||||
|       throw new BaseException("${channelName} has already been initialized."); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     var emitter = new EventEmitter(); |  | ||||||
|     var channelInfo = new _Channel(emitter, runInZone); |  | ||||||
|     _channels[channelName] = channelInfo; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   EventEmitter from(String channelName) { |  | ||||||
|     if (_channels.containsKey(channelName)) { |  | ||||||
|       return _channels[channelName].emitter; |  | ||||||
|     } else { |  | ||||||
|       throw new BaseException( |  | ||||||
|           "${channelName} is not set up. Did you forget to call initChannel?"); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void _handleMessage(dynamic data) { |  | ||||||
|     var channelName = data['channel']; |  | ||||||
|     if (_channels.containsKey(channelName)) { |  | ||||||
|       var channelInfo = _channels[channelName]; |  | ||||||
|       if (channelInfo.runInZone) { |  | ||||||
|         _zone.run(() => channelInfo.emitter.add(data['message'])); |  | ||||||
|       } else { |  | ||||||
|         channelInfo.emitter.add(data['message']); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   List<dynamic> decodeMessages(dynamic message); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class _Channel { |  | ||||||
|   EventEmitter emitter; |  | ||||||
|   bool runInZone; |  | ||||||
| 
 |  | ||||||
|   _Channel(this.emitter, this.runInZone); |  | ||||||
| } |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| library angular2.src.web_workers.shared.isolate_message_bus; |  | ||||||
| 
 |  | ||||||
| import 'dart:isolate'; |  | ||||||
| import 'package:angular2/src/web_workers/shared/generic_message_bus.dart'; |  | ||||||
| 
 |  | ||||||
| class IsolateMessageBus extends GenericMessageBus { |  | ||||||
|   IsolateMessageBus(IsolateMessageBusSink sink, IsolateMessageBusSource source) |  | ||||||
|       : super(sink, source); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class IsolateMessageBusSink extends GenericMessageBusSink { |  | ||||||
|   final SendPort _port; |  | ||||||
| 
 |  | ||||||
|   IsolateMessageBusSink(SendPort port) : _port = port; |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   void sendMessages(List<dynamic> messages) { |  | ||||||
|     _port.send(messages); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class IsolateMessageBusSource extends GenericMessageBusSource { |  | ||||||
|   IsolateMessageBusSource(ReceivePort port) : super(port.asBroadcastStream()); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   List<dynamic> decodeMessages(dynamic messages) { |  | ||||||
|     if (messages is SendPort) { |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return messages; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -5,3 +5,4 @@ | |||||||
| export const RENDERER_CHANNEL = "ng-Renderer"; | export const RENDERER_CHANNEL = "ng-Renderer"; | ||||||
| export const EVENT_CHANNEL = "ng-Events"; | export const EVENT_CHANNEL = "ng-Events"; | ||||||
| export const ROUTER_CHANNEL = "ng-Router"; | export const ROUTER_CHANNEL = "ng-Router"; | ||||||
|  | export const XHR_CHANNEL = "ng-XHR"; | ||||||
|  | |||||||
| @ -1,3 +0,0 @@ | |||||||
| // PostMessageBus can't be implemented in dart since dart doesn't use postMessage |  | ||||||
| // This file is only here to prevent ts2dart from trying to transpile the PostMessageBus |  | ||||||
| library angular2.src.web_workers.shared.post_message_bus; |  | ||||||
| @ -1,108 +0,0 @@ | |||||||
| library angular2.src.web_workers.event_serializer; |  | ||||||
| 
 |  | ||||||
| import 'dart:core'; |  | ||||||
| import 'dart:html'; |  | ||||||
| 
 |  | ||||||
| // List of all elements with HTML value attribute. |  | ||||||
| // Taken from: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes |  | ||||||
| final Set<String> NODES_WITH_VALUE = new Set<String>.from([ |  | ||||||
|   "input", |  | ||||||
|   "select", |  | ||||||
|   "option", |  | ||||||
|   "button", |  | ||||||
|   "li", |  | ||||||
|   "meter", |  | ||||||
|   "progress", |  | ||||||
|   "param", |  | ||||||
|   "textarea" |  | ||||||
| ]); |  | ||||||
| 
 |  | ||||||
| Map<String, dynamic> serializeGenericEvent(dynamic e) { |  | ||||||
|   var serialized = new Map<String, dynamic>(); |  | ||||||
|   serialized['bubbles'] = e.bubbles; |  | ||||||
|   serialized['cancelable'] = e.cancelable; |  | ||||||
|   serialized['defaultPrevented'] = e.defaultPrevented; |  | ||||||
|   serialized['eventPhase'] = e.eventPhase; |  | ||||||
|   serialized['timeStamp'] = e.timeStamp; |  | ||||||
|   serialized['type'] = e.type; |  | ||||||
|   return serialized; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // TODO(jteplitz602): Allow users to specify the properties they need rather than always |  | ||||||
| // adding value #3374 |  | ||||||
| Map<String, dynamic> serializeEventWithTarget(dynamic e) { |  | ||||||
|   var serializedEvent = serializeGenericEvent(e); |  | ||||||
|   return addTarget(e, serializedEvent); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Map<String, dynamic> serializeMouseEvent(dynamic e) { |  | ||||||
|   var serialized = new Map<String, dynamic>(); |  | ||||||
|   serialized['altKey'] = e.altKey; |  | ||||||
|   serialized['bubbles'] = e.bubbles; |  | ||||||
|   serialized['button'] = e.button; |  | ||||||
|   serialized['cancelable'] = e.cancelable; |  | ||||||
|   serialized['client'] = serializePoint(e.client); |  | ||||||
|   serialized['ctrlKey'] = e.ctrlKey; |  | ||||||
|   serialized['defaultPrevented'] = e.defaultPrevented; |  | ||||||
|   serialized['detail'] = e.detail; |  | ||||||
|   serialized['eventPhase'] = e.eventPhase; |  | ||||||
|   serialized['layer'] = serializePoint(e.layer); |  | ||||||
|   serialized['metaKey'] = e.metaKey; |  | ||||||
|   serialized['offset'] = serializePoint(e.offset); |  | ||||||
|   serialized['page'] = serializePoint(e.page); |  | ||||||
|   serialized['region'] = e.region; |  | ||||||
|   serialized['screen'] = serializePoint(e.screen); |  | ||||||
|   serialized['shiftKey'] = e.shiftKey; |  | ||||||
|   serialized['timeStamp'] = e.timeStamp; |  | ||||||
|   serialized['type'] = e.type; |  | ||||||
|   return serialized; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Map<String, dynamic> serializePoint(Point point) { |  | ||||||
|   var serialized = new Map<String, dynamic>(); |  | ||||||
|   serialized['magnitude'] = point.magnitude; |  | ||||||
|   serialized['x'] = point.x; |  | ||||||
|   serialized['y'] = point.y; |  | ||||||
|   return serialized; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Map<String, dynamic> serializeKeyboardEvent(dynamic e) { |  | ||||||
|   var serialized = new Map<String, dynamic>(); |  | ||||||
|   serialized['altKey'] = e.altKey; |  | ||||||
|   serialized['bubbles'] = e.bubbles; |  | ||||||
|   serialized['cancelable'] = e.cancelable; |  | ||||||
|   serialized['charCode'] = e.charCode; |  | ||||||
|   serialized['ctrlKey'] = e.ctrlKey; |  | ||||||
|   serialized['defaultPrevented'] = e.defaultPrevented; |  | ||||||
|   serialized['detail'] = e.detail; |  | ||||||
|   serialized['eventPhase'] = e.eventPhase; |  | ||||||
|   serialized['keyCode'] = e.keyCode; |  | ||||||
|   serialized['keyLocation'] = e.keyLocation; |  | ||||||
|   serialized['location'] = e.location; |  | ||||||
|   serialized['repeat'] = e.repeat; |  | ||||||
|   serialized['shiftKey'] = e.shiftKey; |  | ||||||
|   serialized['timeStamp'] = e.timeStamp; |  | ||||||
|   serialized['type'] = e.type; |  | ||||||
|   //return addTarget(e, serialized); |  | ||||||
|   return serialized; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Map<String, dynamic> serializeTransitionEvent(dynamic e) { |  | ||||||
|   var serialized = serializeGenericEvent(e); |  | ||||||
|   serialized['propertyName'] = e.propertyName; |  | ||||||
|   serialized['elapsedTime'] = e.elapsedTime; |  | ||||||
|   serialized['pseudoElement'] = e.pseudoElement; |  | ||||||
|   return addTarget(e, serialized); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // TODO(jteplitz602): #3374. See above. |  | ||||||
| Map<String, dynamic> addTarget( |  | ||||||
|     dynamic e, Map<String, dynamic> serializedEvent) { |  | ||||||
|   if (NODES_WITH_VALUE.contains(e.target.tagName.toLowerCase())) { |  | ||||||
|     serializedEvent['target'] = {'value': e.target.value}; |  | ||||||
|     if (e.target is InputElement) { |  | ||||||
|       serializedEvent['target']['files'] = e.target.files; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   return serializedEvent; |  | ||||||
| } |  | ||||||
| @ -1,5 +1,6 @@ | |||||||
| import {Injectable} from '@angular/core'; | import {Injectable} from '@angular/core'; | ||||||
| import {PRIMITIVE, ServiceMessageBrokerFactory} from '@angular/platform-browser'; | import {PRIMITIVE} from '../shared/serializer'; | ||||||
|  | import {ServiceMessageBrokerFactory} from '../shared/service_message_broker'; | ||||||
| import {XHR_CHANNEL} from '../shared/messaging_api'; | import {XHR_CHANNEL} from '../shared/messaging_api'; | ||||||
| import {XHR} from '@angular/compiler'; | import {XHR} from '@angular/compiler'; | ||||||
| import {FunctionWrapper} from '../../facade/lang'; | import {FunctionWrapper} from '../../facade/lang'; | ||||||
| @ -1,73 +0,0 @@ | |||||||
| library angular2.src.web_workers.worker.event_deserializer; |  | ||||||
| 
 |  | ||||||
| class GenericEvent { |  | ||||||
|   Map<String, dynamic> properties; |  | ||||||
|   EventTarget _target = null; |  | ||||||
| 
 |  | ||||||
|   GenericEvent(this.properties); |  | ||||||
| 
 |  | ||||||
|   bool get bubbles => properties['bubbles']; |  | ||||||
|   bool get cancelable => properties['cancelable']; |  | ||||||
|   bool get defaultPrevented => properties['defaultPrevented']; |  | ||||||
|   int get eventPhase => properties['eventPhase']; |  | ||||||
|   int get timeStamp => properties['timeStamp']; |  | ||||||
|   String get type => properties['type']; |  | ||||||
|   bool get altKey => properties['altKey']; |  | ||||||
| 
 |  | ||||||
|   int get charCode => properties['charCode']; |  | ||||||
|   bool get ctrlKey => properties['ctrlKey']; |  | ||||||
|   int get detail => properties['detail']; |  | ||||||
|   int get keyCode => properties['keyCode']; |  | ||||||
|   int get keyLocation => properties['keyLocation']; |  | ||||||
|   Point get layer => _getPoint('layer'); |  | ||||||
|   int get location => properties['location']; |  | ||||||
|   bool get repeat => properties['repeat']; |  | ||||||
|   bool get shiftKey => properties['shiftKey']; |  | ||||||
| 
 |  | ||||||
|   int get button => properties['button']; |  | ||||||
|   Point get client => _getPoint('client'); |  | ||||||
|   bool get metaKey => properties['metaKey']; |  | ||||||
|   Point get offset => _getPoint('offset'); |  | ||||||
|   Point get page => _getPoint('page'); |  | ||||||
|   Point get screen => _getPoint('screen'); |  | ||||||
| 
 |  | ||||||
|   String get propertyName => properties['propertyName']; |  | ||||||
|   num get elapsedTime => properties['elapsedTime']; |  | ||||||
|   String get pseudoElement => properties['pseudoElement']; |  | ||||||
| 
 |  | ||||||
|   EventTarget get target { |  | ||||||
|     if (_target != null) { |  | ||||||
|       return _target; |  | ||||||
|     } else if (properties.containsKey("target")) { |  | ||||||
|       _target = new EventTarget(properties['target']); |  | ||||||
|       return _target; |  | ||||||
|     } else { |  | ||||||
|       return null; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   dynamic _getPoint(name) { |  | ||||||
|     Map<String, dynamic> point = properties[name]; |  | ||||||
|     return new Point(point['x'], point['y'], point['magnitude']); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class EventTarget { |  | ||||||
|   dynamic value; |  | ||||||
| 
 |  | ||||||
|   EventTarget(Map<String, dynamic> properties) { |  | ||||||
|     value = properties['value']; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class Point { |  | ||||||
|   int x; |  | ||||||
|   int y; |  | ||||||
|   double magnitude; |  | ||||||
| 
 |  | ||||||
|   Point(this.x, this.y, this.magnitude); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| GenericEvent deserializeGenericEvent(Map<String, dynamic> serializedEvent) { |  | ||||||
|   return new GenericEvent(serializedEvent); |  | ||||||
| } |  | ||||||
| @ -1,390 +0,0 @@ | |||||||
| library angular2.dom.webWorkerAdapter; |  | ||||||
| 
 |  | ||||||
| import 'abstract_html_adapter.dart'; |  | ||||||
| import 'package:angular2/platform/common_dom.dart'; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * This adapter is required to log error messages. |  | ||||||
|  * |  | ||||||
|  * Note: other methods all throw as the DOM is not accessible directly |  | ||||||
|  * in web worker context. |  | ||||||
|  */ |  | ||||||
| class WebWorkerDomAdapter implements DomAdapter { |  | ||||||
|   static void makeCurrent() { |  | ||||||
|     setRootDomAdapter(new WebWorkerDomAdapter()); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   logError(error) { |  | ||||||
|     print('${error}'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   log(error) { |  | ||||||
|     print('${error}'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   logGroup(error) { |  | ||||||
|     print('${error}'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   logGroupEnd() {} |  | ||||||
| 
 |  | ||||||
|   hasProperty(element, String name) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void setProperty(Element element, String name, Object value) => |  | ||||||
|       throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   getProperty(Element element, String name) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   invoke(Element element, String methodName, List args) => |  | ||||||
|       throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   get attrToPropMap => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   set attrToPropMap(value) { |  | ||||||
|     throw 'readonly'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getGlobalEventTarget(String target) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getTitle() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   setTitle(String newTitle) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getEventKey(event) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void replaceChild(el, newNode, oldNode) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   dynamic getBoundingClientRect(el) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Type getXHR() => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   Element parse(String templateHtml) => throw 'not implemented'; |  | ||||||
|   query(selector) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   querySelector(el, String selector) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   List querySelectorAll(el, String selector) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   on(el, evt, listener) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   Function onAndCancel(el, evt, listener) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   dispatchEvent(el, evt) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   createMouseEvent(eventType) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   createEvent(eventType) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   preventDefault(evt) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   isPrevented(evt) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getInnerHTML(el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   getOuterHTML(el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   String nodeName(node) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   String nodeValue(node) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   String type(node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   content(node) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   firstChild(el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   nextSibling(el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   parentElement(el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   List childNodes(el) => throw 'not implemented'; |  | ||||||
|   List childNodesAsList(el) => throw 'not implemented'; |  | ||||||
|   clearNodes(el) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   appendChild(el, node) => throw 'not implemented'; |  | ||||||
|   removeChild(el, node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   remove(el) => throw 'not implemented'; |  | ||||||
|   insertBefore(el, node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   insertAllBefore(el, nodes) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   insertAfter(el, node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   setInnerHTML(el, value) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getText(el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   setText(el, String value) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   getValue(el) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   setValue(el, String value) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getChecked(el) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   setChecked(el, bool value) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   createComment(String text) => throw 'not implemented'; |  | ||||||
|   createTemplate(String html) => throw 'not implemented'; |  | ||||||
|   createElement(tagName, [doc]) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   createElementNS(ns, tagName, [doc]) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   createTextNode(String text, [doc]) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   createScriptTag(String attrName, String attrValue, [doc]) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   createStyleElement(String css, [doc]) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   createShadowRoot(el) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getShadowRoot(el) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getHost(el) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   clone(node) => throw 'not implemented'; |  | ||||||
|   getElementsByClassName(element, String name) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getElementsByTagName(element, String name) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   List classList(element) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   addClass(element, String className) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   removeClass(element, String className) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   hasClass(element, String className) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   setStyle(element, String styleName, String styleValue) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool hasStyle(Element element, String styleName, [String styleValue]) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   removeStyle(element, String styleName) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getStyle(element, String styleName) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String tagName(element) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   attributeMap(element) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   hasAttribute(element, String attribute) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   hasAttributeNS(element, String ns, String attribute) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getAttribute(element, String attribute) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   getAttributeNS(element, String ns, String attribute) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   setAttribute(element, String name, String value) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   setAttributeNS(element, String ns, String name, String value) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   removeAttribute(element, String attribute) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   removeAttributeNS(element, String ns, String attribute) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   templateAwareRoot(el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   createHtmlDocument() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   defaultDoc() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool elementMatches(n, String selector) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool isTemplateElement(Element el) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   bool isTextNode(node) => throw 'not implemented'; |  | ||||||
|   bool isCommentNode(node) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   bool isElementNode(node) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   bool hasShadowRoot(node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool isShadowRoot(node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   importIntoDoc(node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   adoptNode(node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getHref(element) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   void resolveAndSetHref(element, baseUrl, href) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   List getDistributedNodes(Node) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   bool supportsDOMEvents() => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   bool supportsNativeShadowDOM() => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   getHistory() => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   getLocation() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getBaseHref() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   resetBaseElement() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getUserAgent() => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   void setData(Element element, String name, String value) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getComputedStyle(element) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   String getData(Element element, String name) => throw 'not implemented'; |  | ||||||
| 
 |  | ||||||
|   // TODO(tbosch): move this into a separate environment class once we have it |  | ||||||
|   setGlobalVar(String name, value) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   requestAnimationFrame(callback) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   cancelAnimationFrame(id) { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   performanceNow() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getAnimationPrefix() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   getTransitionEnd() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   supportsAnimation() { |  | ||||||
|     throw 'not implemented'; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -5,7 +5,7 @@ import { | |||||||
|   UiArguments, |   UiArguments, | ||||||
|   ClientMessageBroker, |   ClientMessageBroker, | ||||||
|   ClientMessageBrokerFactory |   ClientMessageBrokerFactory | ||||||
| } from '@angular/platform-browser'; | } from '../shared/client_message_broker'; | ||||||
| import {XHR_CHANNEL} from '../shared/messaging_api'; | import {XHR_CHANNEL} from '../shared/messaging_api'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -1,37 +0,0 @@ | |||||||
| library angular2.src.platform.worker_app; |  | ||||||
| 
 |  | ||||||
| import 'package:angular2/src/core/zone/ng_zone.dart'; |  | ||||||
| import 'package:angular2/src/platform/server/webworker_adapter.dart'; |  | ||||||
| import 'package:angular2/src/platform/worker_app_common.dart'; |  | ||||||
| import 'package:angular2/core.dart'; |  | ||||||
| import 'package:angular2/src/web_workers/shared/isolate_message_bus.dart'; |  | ||||||
| import 'package:angular2/src/web_workers/shared/message_bus.dart'; |  | ||||||
| import 'dart:isolate'; |  | ||||||
| 
 |  | ||||||
| const OpaqueToken RENDER_SEND_PORT = const OpaqueToken("RenderSendPort"); |  | ||||||
| 
 |  | ||||||
| const List<dynamic> WORKER_APP_APPLICATION_PROVIDERS = const [ |  | ||||||
|   WORKER_APP_APPLICATION_COMMON, |  | ||||||
|   const Provider(MessageBus, |  | ||||||
|       useFactory: createMessageBus, deps: const [NgZone, RENDER_SEND_PORT]), |  | ||||||
|   const Provider(APP_INITIALIZER, useValue: setupIsolate, multi: true) |  | ||||||
| ]; |  | ||||||
| 
 |  | ||||||
| MessageBus createMessageBus(NgZone zone, SendPort replyTo) { |  | ||||||
|   ReceivePort rPort = new ReceivePort(); |  | ||||||
|   var sink = new WebWorkerMessageBusSink(replyTo, rPort); |  | ||||||
|   var source = new IsolateMessageBusSource(rPort); |  | ||||||
|   var bus = new IsolateMessageBus(sink, source); |  | ||||||
|   bus.attachToZone(zone); |  | ||||||
|   return bus; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| setupIsolate() { |  | ||||||
|   WebWorkerDomAdapter.makeCurrent(); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class WebWorkerMessageBusSink extends IsolateMessageBusSink { |  | ||||||
|   WebWorkerMessageBusSink(SendPort sPort, ReceivePort rPort) : super(sPort) { |  | ||||||
|     sPort.send(rPort.sendPort); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| import {APP_INITIALIZER, NgZone} from '@angular/core'; |  | ||||||
| import {WorkerDomAdapter} from '../web_workers/worker/worker_adapter'; |  | ||||||
| import { |  | ||||||
|   PostMessageBus, |  | ||||||
|   PostMessageBusSink, |  | ||||||
|   PostMessageBusSource |  | ||||||
| } from '../web_workers/shared/post_message_bus'; |  | ||||||
| import {WORKER_APP_APPLICATION_COMMON_PROVIDERS} from './worker_app_common'; |  | ||||||
| import {MessageBus} from '../web_workers/shared/message_bus'; |  | ||||||
| 
 |  | ||||||
| // TODO(jteplitz602) remove this and compile with lib.webworker.d.ts (#3492)
 |  | ||||||
| let _postMessage = { |  | ||||||
|   postMessage: (message: any, transferrables?:[ArrayBuffer]) => { |  | ||||||
|     (<any>postMessage)(message, transferrables); |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| export const WORKER_APP_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [ |  | ||||||
|   WORKER_APP_APPLICATION_COMMON_PROVIDERS, |  | ||||||
|   /* @ts2dart_Provider */ {provide: MessageBus, useFactory: createMessageBus, deps: [NgZone]}, |  | ||||||
|   /* @ts2dart_Provider */ {provide: APP_INITIALIZER, useValue: setupWebWorker, multi: true} |  | ||||||
| ]; |  | ||||||
| 
 |  | ||||||
| function createMessageBus(zone: NgZone): MessageBus { |  | ||||||
|   let sink = new PostMessageBusSink(_postMessage); |  | ||||||
|   let source = new PostMessageBusSource(); |  | ||||||
|   let bus = new PostMessageBus(sink, source); |  | ||||||
|   bus.attachToZone(zone); |  | ||||||
|   return bus; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function setupWebWorker(): void { |  | ||||||
|   WorkerDomAdapter.makeCurrent(); |  | ||||||
| } |  | ||||||
| @ -1,64 +0,0 @@ | |||||||
| library angular2.src.platform.worker_render; |  | ||||||
| 
 |  | ||||||
| import 'package:angular2/src/platform/worker_render_common.dart' |  | ||||||
|     show |  | ||||||
|         WORKER_RENDER_APPLICATION_COMMON_PROVIDERS, |  | ||||||
|         WORKER_RENDER_MESSAGING_PROVIDERS, |  | ||||||
|         WORKER_SCRIPT, |  | ||||||
|         initializeGenericWorkerRenderer; |  | ||||||
| import 'package:angular2/src/web_workers/shared/isolate_message_bus.dart'; |  | ||||||
| import 'package:angular2/src/web_workers/shared/message_bus.dart'; |  | ||||||
| import 'package:angular2/core.dart'; |  | ||||||
| import 'package:angular2/src/core/di.dart'; |  | ||||||
| import 'dart:isolate'; |  | ||||||
| import 'dart:async'; |  | ||||||
| 
 |  | ||||||
| const WORKER_RENDER_APP_PROVIDERS = WORKER_RENDER_APPLICATION_COMMON_PROVIDERS; |  | ||||||
| 
 |  | ||||||
| Future<List> initIsolate(String scriptUri) async { |  | ||||||
|   var instance = await spawnIsolate(Uri.parse(scriptUri)); |  | ||||||
| 
 |  | ||||||
|   return [ |  | ||||||
|     WORKER_RENDER_APPLICATION_COMMON, |  | ||||||
|     new Provider(WebWorkerInstance, useValue: instance), |  | ||||||
|     new Provider(APP_INITIALIZER, |  | ||||||
|         useFactory: (injector) => () => initializeGenericWorkerRenderer(injector), |  | ||||||
|         multi: true, |  | ||||||
|         deps: [Injector]), |  | ||||||
|     new Provider(MessageBus, useValue: instance.bus) |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Spawns a new class and initializes the WebWorkerInstance |  | ||||||
|  */ |  | ||||||
| Future<WebWorkerInstance> spawnIsolate(Uri uri) async { |  | ||||||
|   var receivePort = new ReceivePort(); |  | ||||||
|   var isolateEndSendPort = receivePort.sendPort; |  | ||||||
|   var isolate = await Isolate.spawnUri(uri, const [], isolateEndSendPort); |  | ||||||
|   var source = new UIMessageBusSource(receivePort); |  | ||||||
|   var sendPort = await source.sink; |  | ||||||
|   var sink = new IsolateMessageBusSink(sendPort); |  | ||||||
|   var bus = new IsolateMessageBus(sink, source); |  | ||||||
| 
 |  | ||||||
|   return new WebWorkerInstance(isolate, bus); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class UIMessageBusSource extends IsolateMessageBusSource { |  | ||||||
|   UIMessageBusSource(ReceivePort port) : super(port); |  | ||||||
| 
 |  | ||||||
|   Future<SendPort> get sink => stream.firstWhere((message) { |  | ||||||
|         return message is SendPort; |  | ||||||
|       }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Wrapper class that exposes the Isolate |  | ||||||
|  * and underlying {@link MessageBus} for lower level message passing. |  | ||||||
|  */ |  | ||||||
| class WebWorkerInstance { |  | ||||||
|   Isolate worker; |  | ||||||
|   MessageBus bus; |  | ||||||
| 
 |  | ||||||
|   WebWorkerInstance(this.worker, this.bus); |  | ||||||
| } |  | ||||||
| @ -1,51 +0,0 @@ | |||||||
| library angular2.platform.worker_app; |  | ||||||
| 
 |  | ||||||
| import "package:angular2/src/platform/worker_app_common.dart"; |  | ||||||
| import "package:angular2/src/platform/worker_app.dart"; |  | ||||||
| import 'package:angular2/core.dart'; |  | ||||||
| import 'package:angular2/src/facade/lang.dart'; |  | ||||||
| import 'dart:isolate'; |  | ||||||
| import 'dart:async'; |  | ||||||
| 
 |  | ||||||
| export "package:angular2/src/platform/worker_app_common.dart" |  | ||||||
|     show WORKER_APP_PLATFORM_PROVIDERS, WORKER_APP_APPLICATION_COMMON_PROVIDERS; |  | ||||||
| export "package:angular2/src/core/angular_entrypoint.dart" |  | ||||||
|     show AngularEntrypoint; |  | ||||||
| export "package:angular2/src/platform/worker_app.dart" |  | ||||||
|     show WORKER_APP_APPLICATION_PROVIDERS, RENDER_SEND_PORT; |  | ||||||
| export 'package:angular2/src/web_workers/shared/client_message_broker.dart' |  | ||||||
|     show ClientMessageBroker, ClientMessageBrokerFactory, FnArg, UiArguments; |  | ||||||
| export 'package:angular2/src/web_workers/shared/service_message_broker.dart' |  | ||||||
|     show ReceivedMessage, ServiceMessageBroker, ServiceMessageBrokerFactory; |  | ||||||
| export 'package:angular2/src/web_workers/shared/serializer.dart' show PRIMITIVE; |  | ||||||
| export 'package:angular2/src/web_workers/shared/message_bus.dart'; |  | ||||||
| export 'package:angular2/src/web_workers/worker/location_providers.dart' |  | ||||||
|   show WORKER_APP_ROUTER; |  | ||||||
| 
 |  | ||||||
| PlatformRef _platform = null; |  | ||||||
| SendPort _renderSendPort = null; |  | ||||||
| 
 |  | ||||||
| PlatformRef workerAppPlatform(SendPort renderSendPort) { |  | ||||||
|   if (isBlank(getPlatform())) { |  | ||||||
|     createPlatform(ReflectiveInjector.resolveAndCreate([ |  | ||||||
|       WORKER_APP_PLATFORM_PROVIDERS, |  | ||||||
|       new Provider(RENDER_SEND_PORT, useValue: renderSendPort) |  | ||||||
|     ])); |  | ||||||
|   } |  | ||||||
|   var platform = assertPlatform(WORKER_APP_PLATFORM_MARKER); |  | ||||||
|   if (platform.injector.get(RENDER_SEND_PORT, null) != renderSendPort) { |  | ||||||
|     throw 'Platform has already been created with a different SendPort. Please destroy it first.'; |  | ||||||
|   } |  | ||||||
|   return platform; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Future<ComponentRef<dynamic>> bootstrapApp( |  | ||||||
|     SendPort renderSendPort, |  | ||||||
|     Type appComponentType, |  | ||||||
|     [List<dynamic /*Type | Provider | any[]*/> customProviders]) { |  | ||||||
|   var appInjector = ReflectiveInjector.resolveAndCreate([ |  | ||||||
|     WORKER_APP_APPLICATION_PROVIDERS, |  | ||||||
|     isPresent(customProviders) ? customProviders : [] |  | ||||||
|   ], workerAppPlatform(renderSendPort).injector); |  | ||||||
|   return coreLoadAndBootstrap(appInjector, appComponentType); |  | ||||||
| } |  | ||||||
| @ -1,52 +0,0 @@ | |||||||
| import {isPresent, isBlank} from './facade/lang'; |  | ||||||
| import { |  | ||||||
|   WORKER_APP_PLATFORM_PROVIDERS, |  | ||||||
|   WORKER_APP_PLATFORM_MARKER |  | ||||||
| } from './webworker/worker_app_common'; |  | ||||||
| import {WORKER_APP_APPLICATION_PROVIDERS} from './webworker/worker_app'; |  | ||||||
| import { |  | ||||||
|   PlatformRef, |  | ||||||
|   Type, |  | ||||||
|   ComponentRef, |  | ||||||
|   ReflectiveInjector, |  | ||||||
|   coreLoadAndBootstrap, |  | ||||||
|   getPlatform, |  | ||||||
|   createPlatform, |  | ||||||
|   assertPlatform |  | ||||||
| } from '@angular/core'; |  | ||||||
| 
 |  | ||||||
| export { |  | ||||||
|   WORKER_APP_PLATFORM_PROVIDERS, |  | ||||||
|   WORKER_APP_APPLICATION_COMMON_PROVIDERS |  | ||||||
| } from './webworker/worker_app_common'; |  | ||||||
| export {WORKER_APP_APPLICATION_PROVIDERS} from './webworker/worker_app'; |  | ||||||
| export { |  | ||||||
|   ClientMessageBroker, |  | ||||||
|   ClientMessageBrokerFactory, |  | ||||||
|   FnArg, |  | ||||||
|   UiArguments |  | ||||||
| } from './web_workers/shared/client_message_broker'; |  | ||||||
| export { |  | ||||||
|   ReceivedMessage, |  | ||||||
|   ServiceMessageBroker, |  | ||||||
|   ServiceMessageBrokerFactory |  | ||||||
| } from './web_workers/shared/service_message_broker'; |  | ||||||
| export {PRIMITIVE} from './web_workers/shared/serializer'; |  | ||||||
| export * from './web_workers/shared/message_bus'; |  | ||||||
| export {WORKER_APP_LOCATION_PROVIDERS} from './web_workers/worker/location_providers'; |  | ||||||
| 
 |  | ||||||
| export function workerAppPlatform(): PlatformRef { |  | ||||||
|   if (isBlank(getPlatform())) { |  | ||||||
|     createPlatform(ReflectiveInjector.resolveAndCreate(WORKER_APP_PLATFORM_PROVIDERS)); |  | ||||||
|   } |  | ||||||
|   return assertPlatform(WORKER_APP_PLATFORM_MARKER); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export function bootstrapStaticApp( |  | ||||||
|     appComponentType: Type, |  | ||||||
|     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> { |  | ||||||
|   var appInjector = ReflectiveInjector.resolveAndCreate( |  | ||||||
|       [WORKER_APP_APPLICATION_PROVIDERS, isPresent(customProviders) ? customProviders : []], |  | ||||||
|       workerAppPlatform().injector); |  | ||||||
|   return coreLoadAndBootstrap(appInjector, appComponentType); |  | ||||||
| } |  | ||||||
| @ -1,49 +0,0 @@ | |||||||
| library angular2.platform.worker_render; |  | ||||||
| 
 |  | ||||||
| import 'package:angular2/src/platform/worker_render.dart'; |  | ||||||
| import 'package:angular2/src/platform/worker_render_common.dart'; |  | ||||||
| import 'package:angular2/core.dart'; |  | ||||||
| import 'package:angular2/src/facade/lang.dart'; |  | ||||||
| import 'dart:async'; |  | ||||||
| 
 |  | ||||||
| export 'package:angular2/src/platform/worker_render_common.dart' |  | ||||||
|     show |  | ||||||
|         WORKER_SCRIPT, |  | ||||||
|         WORKER_RENDER_PLATFORM, |  | ||||||
|         WORKER_RENDER_APPLICATION_COMMON, |  | ||||||
|         initializeGenericWorkerRenderer; |  | ||||||
| 
 |  | ||||||
| export 'package:angular2/src/platform/worker_render.dart' |  | ||||||
|     show WebWorkerInstance; |  | ||||||
| 
 |  | ||||||
| export '../src/web_workers/shared/client_message_broker.dart' |  | ||||||
|     show ClientMessageBroker, ClientMessageBrokerFactory, FnArg, UiArguments; |  | ||||||
| 
 |  | ||||||
| export '../src/web_workers/shared/service_message_broker.dart' |  | ||||||
|     show ReceivedMessage, ServiceMessageBroker, ServiceMessageBrokerFactory; |  | ||||||
| 
 |  | ||||||
| export '../src/web_workers/shared/serializer.dart' show PRIMITIVE; |  | ||||||
| export '../src/web_workers/shared/message_bus.dart'; |  | ||||||
| export '../src/web_workers/ui/location_providers.dart' show WORKER_RENDER_ROUTER; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| const WORKER_RENDER_APP = WORKER_RENDER_APPLICATION_COMMON; |  | ||||||
| 
 |  | ||||||
| PlatformRef workerStaticRenderPlatform() { |  | ||||||
|   if (isBlank(getPlatform())) { |  | ||||||
|     createPlatform(ReflectiveInjector.resolveAndCreate(WORKER_RENDER_PLATFORM)); |  | ||||||
|   } |  | ||||||
|   return assertPlatform(WORKER_RENDER_PLATFORM_MARKER); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| Future<ApplicationRef> bootstrapStaticRender( |  | ||||||
|     String workerScriptUri, |  | ||||||
|     [List<dynamic /*Type | Provider | any[]*/> customProviders]) { |  | ||||||
|   return initIsolate(workerScriptUri).then( (appProviders) { |  | ||||||
|     var appInjector =  ReflectiveInjector.resolveAndCreate([ |  | ||||||
|       appProviders, |  | ||||||
|       isPresent(customProviders) ? customProviders : [] |  | ||||||
|     ], workerRenderPlatform().injector); |  | ||||||
|     return appInjector.get(ApplicationRef); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| @ -1,66 +0,0 @@ | |||||||
| import {isPresent, isBlank} from './facade/lang'; |  | ||||||
| import {PromiseWrapper} from './facade/async'; |  | ||||||
| import { |  | ||||||
|   ApplicationRef, |  | ||||||
|   PlatformRef, |  | ||||||
|   ReflectiveInjector, |  | ||||||
|   getPlatform, |  | ||||||
|   createPlatform, |  | ||||||
|   assertPlatform |  | ||||||
| } from '@angular/core'; |  | ||||||
| import {WORKER_RENDER_APPLICATION_PROVIDERS} from './webworker/worker_render'; |  | ||||||
| import { |  | ||||||
|   WORKER_SCRIPT, |  | ||||||
|   WORKER_RENDER_PLATFORM_PROVIDERS, |  | ||||||
|   WORKER_RENDER_PLATFORM_MARKER |  | ||||||
| } from './webworker/worker_render_common'; |  | ||||||
| 
 |  | ||||||
| export { |  | ||||||
|   WORKER_SCRIPT, |  | ||||||
|   WORKER_RENDER_PLATFORM_PROVIDERS, |  | ||||||
|   initializeGenericWorkerRenderer, |  | ||||||
|   WORKER_RENDER_APPLICATION_COMMON_PROVIDERS |  | ||||||
| } from './webworker/worker_render_common'; |  | ||||||
| export { |  | ||||||
|   WORKER_RENDER_APPLICATION_PROVIDERS, |  | ||||||
|   WORKER_RENDER_STARTABLE_MESSAGING_SERVICE, |  | ||||||
|   WebWorkerInstance |  | ||||||
| } from './webworker/worker_render'; |  | ||||||
| export { |  | ||||||
|   ClientMessageBroker, |  | ||||||
|   ClientMessageBrokerFactory, |  | ||||||
|   FnArg, |  | ||||||
|   UiArguments |  | ||||||
| } from './web_workers/shared/client_message_broker'; |  | ||||||
| export { |  | ||||||
|   ReceivedMessage, |  | ||||||
|   ServiceMessageBroker, |  | ||||||
|   ServiceMessageBrokerFactory |  | ||||||
| } from './web_workers/shared/service_message_broker'; |  | ||||||
| export {PRIMITIVE} from './web_workers/shared/serializer'; |  | ||||||
| export * from './web_workers/shared/message_bus'; |  | ||||||
| 
 |  | ||||||
| export {WORKER_RENDER_LOCATION_PROVIDERS} from '../src/web_workers/ui/location_providers'; |  | ||||||
| 
 |  | ||||||
| export function workerRenderPlatform(): PlatformRef { |  | ||||||
|   if (isBlank(getPlatform())) { |  | ||||||
|     createPlatform(ReflectiveInjector.resolveAndCreate(WORKER_RENDER_PLATFORM_PROVIDERS)); |  | ||||||
|   } |  | ||||||
|   return assertPlatform(WORKER_RENDER_PLATFORM_MARKER); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export function bootstrapStaticRender( |  | ||||||
|     workerScriptUri: string, |  | ||||||
|     customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ApplicationRef> { |  | ||||||
|   var app = ReflectiveInjector.resolveAndCreate( |  | ||||||
|       [ |  | ||||||
|         WORKER_RENDER_APPLICATION_PROVIDERS, |  | ||||||
|         /* @ts2dart_Provider */ {provide: WORKER_SCRIPT, useValue: workerScriptUri}, |  | ||||||
|         isPresent(customProviders) ? customProviders : [] |  | ||||||
|       ], |  | ||||||
|       workerRenderPlatform().injector); |  | ||||||
|   // Return a promise so that we keep the same semantics as Dart,
 |  | ||||||
|   // and we might want to wait for the app side to come up
 |  | ||||||
|   // in the future...
 |  | ||||||
|   return PromiseWrapper.resolve(app.get(ApplicationRef)); |  | ||||||
| } |  | ||||||
| @ -10,27 +10,21 @@ import { | |||||||
|   xdescribe, |   xdescribe, | ||||||
|   xit |   xit | ||||||
| } from '@angular/core/testing/testing_internal'; | } from '@angular/core/testing/testing_internal'; | ||||||
| import { | import {Log} from '@angular/core/testing'; | ||||||
|   fakeAsync, |  | ||||||
|   flushMicrotasks, |  | ||||||
|   Log, |  | ||||||
|   tick, |  | ||||||
| } from '@angular/core/testing'; |  | ||||||
| import {AsyncTestCompleter} from '@angular/core/testing/testing_internal'; | import {AsyncTestCompleter} from '@angular/core/testing/testing_internal'; | ||||||
| import {IS_DART, isPresent, stringify} from '../../src/facade/lang'; | import {stringify} from '../../src/facade/lang'; | ||||||
| import {BROWSER_PROVIDERS} from '@angular/platform-browser'; | import {BROWSER_PLATFORM_PROVIDERS} from '@angular/platform-browser'; | ||||||
| import {BROWSER_APP_DYNAMIC_PROVIDERS} from '@angular/platform-browser-dynamic'; | import {BROWSER_APP_PROVIDERS} from '@angular/platform-browser'; | ||||||
| import {bootstrap} from '@angular/platform-browser-dynamic'; | import {bootstrap} from '@angular/platform-browser'; | ||||||
| import {ApplicationRef, PlatformRef} from '@angular/core/src/application_ref'; | import {ApplicationRef} from '@angular/core/src/application_ref'; | ||||||
| import {Console} from '@angular/core/src/console'; | import {Console} from '@angular/core/src/console'; | ||||||
| import {Component, Directive, OnDestroy} from '@angular/core'; | import {Component, Directive, OnDestroy} from '@angular/core'; | ||||||
| import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; | import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; | ||||||
| import {DOCUMENT} from '@angular/platform-browser/src/dom/dom_tokens'; | import {DOCUMENT} from '@angular/platform-browser/src/dom/dom_tokens'; | ||||||
| import {PromiseWrapper, TimerWrapper} from '../../src/facade/async'; | import {PromiseWrapper} from '../../src/facade/async'; | ||||||
| import { | import { | ||||||
|   provide, |   provide, | ||||||
|   Inject, |   Inject, | ||||||
|   Injector, |  | ||||||
|   PLATFORM_INITIALIZER, |   PLATFORM_INITIALIZER, | ||||||
|   APP_INITIALIZER, |   APP_INITIALIZER, | ||||||
|   coreLoadAndBootstrap, |   coreLoadAndBootstrap, | ||||||
| @ -215,9 +209,9 @@ export function main() { | |||||||
| 
 | 
 | ||||||
|     it('should unregister change detectors when components are disposed', |     it('should unregister change detectors when components are disposed', | ||||||
|        inject([AsyncTestCompleter], (async) => { |        inject([AsyncTestCompleter], (async) => { | ||||||
|          var platform = createPlatform(ReflectiveInjector.resolveAndCreate(BROWSER_PROVIDERS)); |          var platform = createPlatform(ReflectiveInjector.resolveAndCreate(BROWSER_PLATFORM_PROVIDERS)); | ||||||
|          var app = |          var app = | ||||||
|              ReflectiveInjector.resolveAndCreate([BROWSER_APP_DYNAMIC_PROVIDERS, testProviders], |              ReflectiveInjector.resolveAndCreate([BROWSER_APP_PROVIDERS, testProviders], | ||||||
|                                                  platform.injector) |                                                  platform.injector) | ||||||
|                  .get(ApplicationRef); |                  .get(ApplicationRef); | ||||||
|          coreLoadAndBootstrap(app.injector, HelloRootCmp) |          coreLoadAndBootstrap(app.injector, HelloRootCmp) | ||||||
| @ -251,7 +245,7 @@ export function main() { | |||||||
| 
 | 
 | ||||||
|     it("should run platform initializers", inject([Log], (log: Log) => { |     it("should run platform initializers", inject([Log], (log: Log) => { | ||||||
|          let p = createPlatform(ReflectiveInjector.resolveAndCreate([ |          let p = createPlatform(ReflectiveInjector.resolveAndCreate([ | ||||||
|            BROWSER_PROVIDERS, |            BROWSER_PLATFORM_PROVIDERS, | ||||||
|            provide(PLATFORM_INITIALIZER, {useValue: log.fn("platform_init1"), multi: true}), |            provide(PLATFORM_INITIALIZER, {useValue: log.fn("platform_init1"), multi: true}), | ||||||
|            provide(PLATFORM_INITIALIZER, {useValue: log.fn("platform_init2"), multi: true}) |            provide(PLATFORM_INITIALIZER, {useValue: log.fn("platform_init2"), multi: true}) | ||||||
|          ])); |          ])); | ||||||
| @ -259,7 +253,7 @@ export function main() { | |||||||
|          log.clear(); |          log.clear(); | ||||||
|          var a = ReflectiveInjector.resolveAndCreate( |          var a = ReflectiveInjector.resolveAndCreate( | ||||||
|              [ |              [ | ||||||
|                BROWSER_APP_DYNAMIC_PROVIDERS, |                BROWSER_APP_PROVIDERS, | ||||||
|                provide(APP_INITIALIZER, {useValue: log.fn("app_init1"), multi: true}), |                provide(APP_INITIALIZER, {useValue: log.fn("app_init1"), multi: true}), | ||||||
|                provide(APP_INITIALIZER, {useValue: log.fn("app_init2"), multi: true}) |                provide(APP_INITIALIZER, {useValue: log.fn("app_init2"), multi: true}) | ||||||
|              ], |              ], | ||||||
|  | |||||||
| @ -1,5 +0,0 @@ | |||||||
| import 'dart:html'; |  | ||||||
| 
 |  | ||||||
| Rectangle createRectangle(left, top, width, height) { |  | ||||||
|   return new Rectangle(left, top, width, height); |  | ||||||
| } |  | ||||||
| @ -1,50 +0,0 @@ | |||||||
| import { |  | ||||||
|   inject, |  | ||||||
|   describe, |  | ||||||
|   it, |  | ||||||
|   expect, |  | ||||||
| } from '@angular/core/testing/testing_internal'; |  | ||||||
| import {AsyncTestCompleter, SpyObject} from '@angular/core/testing/testing_internal'; |  | ||||||
| import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; |  | ||||||
| import {Ruler, Rectangle} from '@angular/platform-browser/src/browser/ruler'; |  | ||||||
| import {createRectangle} from './rectangle_mock'; |  | ||||||
| import {SpyDomAdapter, SpyElementRef} from '@angular/core/test/spies'; |  | ||||||
| 
 |  | ||||||
| function assertDimensions(rect: Rectangle, left, right, top, bottom, width, height) { |  | ||||||
|   expect(rect.left).toEqual(left); |  | ||||||
|   expect(rect.right).toEqual(right); |  | ||||||
|   expect(rect.top).toEqual(top); |  | ||||||
|   expect(rect.bottom).toEqual(bottom); |  | ||||||
|   expect(rect.width).toEqual(width); |  | ||||||
|   expect(rect.height).toEqual(height); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export function main() { |  | ||||||
|   describe('ruler service', () => { |  | ||||||
| 
 |  | ||||||
|     it('should allow measuring ElementRefs', inject([AsyncTestCompleter], (async) => { |  | ||||||
|          var ruler = new Ruler(SpyObject.stub( |  | ||||||
|              new SpyDomAdapter(), {'getBoundingClientRect': createRectangle(10, 20, 200, 100)})); |  | ||||||
|          var elRef = <any>new SpyElementRef(); |  | ||||||
|          ruler.measure(elRef).then((rect) => { |  | ||||||
|            assertDimensions(rect, 10, 210, 20, 120, 200, 100); |  | ||||||
|            async.done(); |  | ||||||
|          }); |  | ||||||
|        })); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     it('should return 0 for all rectangle values while measuring elements in a document fragment', |  | ||||||
|        inject([AsyncTestCompleter], (async) => { |  | ||||||
|          var ruler = new Ruler(getDOM()); |  | ||||||
|          var elRef = <any>new SpyElementRef(); |  | ||||||
|          elRef.prop("nativeElement", getDOM().createElement('div')); |  | ||||||
|          ruler.measure(elRef).then((rect) => { |  | ||||||
|            // here we are using an element created in a doc fragment so all the measures will come
 |  | ||||||
|            // back as 0
 |  | ||||||
|            assertDimensions(rect, 0, 0, 0, 0, 0, 0); |  | ||||||
|            async.done(); |  | ||||||
|          }); |  | ||||||
|        })); |  | ||||||
| 
 |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| @ -1,5 +1,5 @@ | |||||||
| import {describe, it, iit, ddescribe, expect} from '@angular/core/testing'; | import {describe, it, iit, ddescribe, expect} from '@angular/core/testing'; | ||||||
| import {BrowserDetection} from '@angular/platform-browser/testing'; | import {BrowserDetection} from '../testing/browser_util'; | ||||||
| import {StringMapWrapper} from '../src/facade/collection'; | import {StringMapWrapper} from '../src/facade/collection'; | ||||||
| 
 | 
 | ||||||
| export function main() { | export function main() { | ||||||
|  | |||||||
| @ -25,7 +25,7 @@ import {ROUTER_DIRECTIVES, Routes, Route} from '@angular/router'; | |||||||
| import {Component, bind} from '@angular/core'; | import {Component, bind} from '@angular/core'; | ||||||
| import {PromiseWrapper} from '../src/facade/promise'; | import {PromiseWrapper} from '../src/facade/promise'; | ||||||
| import {XHR} from '@angular/compiler'; | import {XHR} from '@angular/compiler'; | ||||||
| import {XHRImpl} from '../../platform-browser-dynamic/src/xhr/xhr_impl'; | import {XHRImpl} from '../src/xhr/xhr_impl'; | ||||||
| import {TestComponentBuilder} from '@angular/compiler/testing'; | import {TestComponentBuilder} from '@angular/compiler/testing'; | ||||||
| 
 | 
 | ||||||
| // Components for the tests.
 | // Components for the tests.
 | ||||||
| @ -1,7 +0,0 @@ | |||||||
| library angular2.test.testing.testing_spec; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * This is intentionally left blank. The public test lib is only for TS/JS |  | ||||||
|  * apps. |  | ||||||
|  */ |  | ||||||
| main() {} |  | ||||||
| @ -1,29 +0,0 @@ | |||||||
| library angular2.test.web_workers.debug_tools.bootstrap; |  | ||||||
| 
 |  | ||||||
| import 'package:angular2/src/platform/server/html_adapter.dart'; |  | ||||||
| import "package:angular2/src/testing/testing_internal_core.dart"; |  | ||||||
| import "package:angular2/src/core/reflection/reflection_capabilities.dart"; |  | ||||||
| import "package:angular2/src/core/reflection/reflection.dart"; |  | ||||||
| import "package:angular2/src/platform/worker_app_common.dart" |  | ||||||
|     show WORKER_APP_APPLICATION_COMMON; |  | ||||||
| import "package:angular2/platform/worker_app.dart" show WORKER_APP_PLATFORM; |  | ||||||
| import "package:angular2/core.dart"; |  | ||||||
| import "../shared/web_worker_test_util.dart"; |  | ||||||
| import "dart:convert"; |  | ||||||
| 
 |  | ||||||
| main() { |  | ||||||
|   Html5LibDomAdapter.makeCurrent(); |  | ||||||
|   testSetup(); |  | ||||||
| 
 |  | ||||||
|   describe("WORKER_APP_COMMON_PROVIDERS", () { |  | ||||||
|     it("should be able to load in a Dart VM", () { |  | ||||||
|       reflector.reflectionCapabilities = new ReflectionCapabilities(); |  | ||||||
|       var buses = createPairedMessageBuses(); |  | ||||||
|       disposePlatform(); |  | ||||||
|       var platform = createPlatform(ReflectiveInjector.resolveAndCreate(WORKER_APP_PLATFORM)); |  | ||||||
|       var appInjector = ReflectiveInjector.resolveAndCreate(WORKER_APP_APPLICATION_COMMON, |  | ||||||
|           platform.injector); |  | ||||||
|       appInjector.get(ApplicationRef); |  | ||||||
|     }); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| @ -1,24 +0,0 @@ | |||||||
| library angular2.test.web_workers.debug_tools.message_bus_common; |  | ||||||
| 
 |  | ||||||
| import "dart:convert" show JSON; |  | ||||||
| import "package:angular2/src/web_workers/shared/message_bus.dart"; |  | ||||||
| import "package:angular2/src/testing/testing_internal_core.dart" |  | ||||||
|     show AsyncTestCompleter, expect, SpyObject; |  | ||||||
| 
 |  | ||||||
| var MESSAGE = const {'test': 10}; |  | ||||||
| const CHANNEL = "TEST_CHANNEL"; |  | ||||||
| 
 |  | ||||||
| void expectSinkSendsEncodedJson(SpyObject socket, MessageBusSink sink, |  | ||||||
|     String sendMethodName, AsyncTestCompleter async) { |  | ||||||
|   socket.spy(sendMethodName).andCallFake((message) { |  | ||||||
|     expectMessageEquality(message, MESSAGE, CHANNEL); |  | ||||||
|     async.done(); |  | ||||||
|   }); |  | ||||||
|   sink.to(CHANNEL).add(MESSAGE); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void expectMessageEquality(String message, Map expectedData, String channel) { |  | ||||||
|   expect(JSON.decode(message)).toEqual([ |  | ||||||
|     {'channel': channel, 'message': expectedData} |  | ||||||
|   ]); |  | ||||||
| } |  | ||||||
| @ -1,235 +0,0 @@ | |||||||
| library angular2.test.web_workers.debug_tools.multi_client_server_message_bus; |  | ||||||
| 
 |  | ||||||
| import "dart:io"; |  | ||||||
| import "dart:async"; |  | ||||||
| import "package:angular2/src/testing/testing_internal_core.dart" |  | ||||||
|     show |  | ||||||
|         AsyncTestCompleter, |  | ||||||
|         SpyObject, |  | ||||||
|         beforeEach, |  | ||||||
|         beforeEachProviders, |  | ||||||
|         describe, |  | ||||||
|         expect, |  | ||||||
|         iit, |  | ||||||
|         inject, |  | ||||||
|         it, |  | ||||||
|         proxy, |  | ||||||
|         testSetup; |  | ||||||
| import 'package:angular2/src/platform/server/html_adapter.dart'; |  | ||||||
| import "package:angular2/src/web_workers/debug_tools/multi_client_server_message_bus.dart"; |  | ||||||
| import "package:angular2/src/web_workers/shared/messaging_api.dart"; |  | ||||||
| import "./message_bus_common.dart"; |  | ||||||
| import "./spy_web_socket.dart"; |  | ||||||
| import "dart:convert" show JSON; |  | ||||||
| import 'dart:math'; |  | ||||||
| 
 |  | ||||||
| main() { |  | ||||||
|   Html5LibDomAdapter.makeCurrent(); |  | ||||||
|   testSetup(); |  | ||||||
| 
 |  | ||||||
|   List<String> messageHistory = new List<String>(); |  | ||||||
|   List<int> resultMarkers = new List<int>(); |  | ||||||
|   describe("MultiClientServerMessageBusSink", () { |  | ||||||
|     const CHANNEL = "TEST_CHANNEL"; |  | ||||||
|     var MESSAGE = const {'test': 10}; |  | ||||||
| 
 |  | ||||||
|     beforeEach(() { |  | ||||||
|       messageHistory.clear(); |  | ||||||
|       resultMarkers.clear(); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should send messages to all connected clients", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           const NUM_CLIENTS = 5; |  | ||||||
|           var sink = new MultiClientServerMessageBusSink(); |  | ||||||
|           sink.initChannel(CHANNEL, false); |  | ||||||
|           int numMessagesSent = 0; |  | ||||||
|           // initialize all the sockets |  | ||||||
|           var sockets = new List<WebSocketWrapper>(NUM_CLIENTS); |  | ||||||
|           for (var i = 0; i < sockets.length; i++) { |  | ||||||
|             var messageSent = |  | ||||||
|                 false; // ensure this socket only receives one message |  | ||||||
|             var socketWrapper = createSocket(messageHandler: (message) { |  | ||||||
|               expect(messageSent).toEqual(false); |  | ||||||
|               messageSent = true; |  | ||||||
|               expectMessageEquality(message, MESSAGE, CHANNEL); |  | ||||||
|               numMessagesSent++; |  | ||||||
|               if (numMessagesSent == NUM_CLIENTS) { |  | ||||||
|                 async.done(); |  | ||||||
|               } |  | ||||||
|             }); |  | ||||||
|             var socket = socketWrapper.socket; |  | ||||||
|             sockets[i] = |  | ||||||
|                 new WebSocketWrapper(messageHistory, resultMarkers, socket); |  | ||||||
|             sink.addConnection(sockets[i]); |  | ||||||
|           } |  | ||||||
|           sink.to(CHANNEL).add(MESSAGE); |  | ||||||
|         })); |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   describe("WebSocketWrapper", () { |  | ||||||
|     beforeEach(() { |  | ||||||
|       messageHistory.clear(); |  | ||||||
|       resultMarkers.clear(); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Generates the given number of random messages, inserts them into messageHistory, |  | ||||||
|      * and then returns a cloned version of messageHistory |  | ||||||
|      */ |  | ||||||
|     List<String> generateRandomMessages(int numMessages) { |  | ||||||
|       const MAX = 1 << 31; |  | ||||||
|       var random = new Random(); |  | ||||||
|       for (var i = 0; i < numMessages; i++) { |  | ||||||
|         var message = {'value': random.nextInt(MAX)}; |  | ||||||
|         messageHistory.add(JSON.encode([ |  | ||||||
|           {'channel': CHANNEL, 'message': message} |  | ||||||
|         ])); |  | ||||||
|       } |  | ||||||
|       // copy the message history to ensure the test fails if the wrapper modifies the list |  | ||||||
|       return new List.from(messageHistory); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should send all messages when there are no markers", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           const NUM_MESSAGES = 10; |  | ||||||
|           var messageHistoryClone = generateRandomMessages(NUM_MESSAGES); |  | ||||||
| 
 |  | ||||||
|           int numMessagesSent = 0; |  | ||||||
|           var socketWrapper = createSocket(messageHandler: (message) { |  | ||||||
|             expect(message).toEqual(messageHistoryClone[numMessagesSent]); |  | ||||||
|             //expectMessageEquality(message, expected, CHANNEL); |  | ||||||
|             numMessagesSent++; |  | ||||||
|             if (numMessagesSent == messageHistoryClone.length) { |  | ||||||
|               async.done(); |  | ||||||
|             } |  | ||||||
|           }); |  | ||||||
|           var wrapper = new WebSocketWrapper( |  | ||||||
|               messageHistory, resultMarkers, socketWrapper.socket); |  | ||||||
|           wrapper.sendToMarker(0); |  | ||||||
|         })); |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should send between two markers", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           const NUM_MESSAGES = 50; |  | ||||||
|           const FIRST_MARKER = 5; |  | ||||||
|           const SECOND_MARKER = 15; |  | ||||||
|           var messageHistoryClone = generateRandomMessages(NUM_MESSAGES); |  | ||||||
| 
 |  | ||||||
|           int numMessagesSent = 0; |  | ||||||
|           resultMarkers.add(FIRST_MARKER); |  | ||||||
|           resultMarkers.add(SECOND_MARKER); |  | ||||||
|           var socketWrapper = createSocket(messageHandler: (message) { |  | ||||||
|             expect(message) |  | ||||||
|                 .toEqual(messageHistoryClone[FIRST_MARKER + numMessagesSent]); |  | ||||||
|             numMessagesSent++; |  | ||||||
|             if (numMessagesSent == SECOND_MARKER - FIRST_MARKER) { |  | ||||||
|               async.done(); |  | ||||||
|             } |  | ||||||
|           }); |  | ||||||
|           var wrapper = new WebSocketWrapper( |  | ||||||
|               messageHistory, resultMarkers, socketWrapper.socket); |  | ||||||
|           wrapper.sendToMarker(1); |  | ||||||
|         })); |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   describe("MultiClientServerMessageBusSource", () { |  | ||||||
|     beforeEach(() { |  | ||||||
|       messageHistory.clear(); |  | ||||||
|       resultMarkers.clear(); |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
|     void sendMessage(StreamController controller, dynamic message) { |  | ||||||
|       controller.add(JSON.encode([message])); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     void testForwardingMessages(bool primary, bool events, Function done) { |  | ||||||
|       var result = createSocket(); |  | ||||||
|       var controller = result.controller; |  | ||||||
|       var socket = |  | ||||||
|           new WebSocketWrapper(messageHistory, resultMarkers, result.socket); |  | ||||||
|       socket.setPrimary(primary); |  | ||||||
| 
 |  | ||||||
|       var source = new MultiClientServerMessageBusSource(); |  | ||||||
|       source.addConnection(socket); |  | ||||||
| 
 |  | ||||||
|       var channel = events ? EVENT_CHANNEL : CHANNEL; |  | ||||||
|       source.initChannel(channel, false); |  | ||||||
|       source.from(channel).listen((message) { |  | ||||||
|         expect(message).toEqual(MESSAGE); |  | ||||||
|         done(); |  | ||||||
|       }); |  | ||||||
| 
 |  | ||||||
|       var message = {'channel': channel, 'message': MESSAGE}; |  | ||||||
|       sendMessage(controller, message); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should forward messages from the primary", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           testForwardingMessages(true, false, async.done); |  | ||||||
|         })); |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should forward event channel messages from non primaries", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           testForwardingMessages(false, true, async.done); |  | ||||||
|         })); |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should forward event channel messages from the primary", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           testForwardingMessages(true, true, async.done); |  | ||||||
|         })); |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should mark results from the primary", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           var result = createSocket(); |  | ||||||
|           var controller = result.controller; |  | ||||||
|           var socket = new WebSocketWrapper( |  | ||||||
|               messageHistory, resultMarkers, result.socket); |  | ||||||
|           socket.setPrimary(true); |  | ||||||
| 
 |  | ||||||
|           var source = new MultiClientServerMessageBusSource(); |  | ||||||
|           source.onResult.listen((result) => async.done()); |  | ||||||
|           source.initChannel(CHANNEL, false); |  | ||||||
|           source.addConnection(socket); |  | ||||||
| 
 |  | ||||||
|           var message = { |  | ||||||
|             'channel': CHANNEL, |  | ||||||
|             'message': {'type': 'result'} |  | ||||||
|           }; |  | ||||||
|           sendMessage(controller, message); |  | ||||||
|         })); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Returns a new SpyWebSocket that calls messageHandler when a new message is sent. |  | ||||||
|  * Also returns a StreamController instance that you can use to send messages to anything |  | ||||||
|  * that is subscribed to this socket. |  | ||||||
|  */ |  | ||||||
| SpySocketWrapper createSocket({Function messageHandler}) { |  | ||||||
|   var socket = new SpyWebSocket(); |  | ||||||
|   if (messageHandler != null) { |  | ||||||
|     socket.spy("add").andCallFake(messageHandler); |  | ||||||
|     socket |  | ||||||
|         .spy("addStream") |  | ||||||
|         .andCallFake((Stream stream) => stream.listen(messageHandler)); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   var controller = new StreamController<String>.broadcast(); |  | ||||||
|   socket.spy("asBroadcastStream").andCallFake(() => controller.stream); |  | ||||||
|   return new SpySocketWrapper(socket, controller); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| class SpySocketWrapper { |  | ||||||
|   SpyWebSocket socket; |  | ||||||
|   StreamController controller; |  | ||||||
| 
 |  | ||||||
|   SpySocketWrapper(this.socket, this.controller); |  | ||||||
| } |  | ||||||
| @ -1,106 +0,0 @@ | |||||||
| library angular2.test.web_workers.debug_tools.single_client_server_message_bus; |  | ||||||
| 
 |  | ||||||
| import "dart:io"; |  | ||||||
| import "dart:async"; |  | ||||||
| import "package:angular2/src/testing/testing_internal_core.dart" |  | ||||||
|     show |  | ||||||
|         AsyncTestCompleter, |  | ||||||
|         SpyObject, |  | ||||||
|         beforeEach, |  | ||||||
|         beforeEachProviders, |  | ||||||
|         describe, |  | ||||||
|         expect, |  | ||||||
|         inject, |  | ||||||
|         it, |  | ||||||
|         proxy, |  | ||||||
|         testSetup; |  | ||||||
| import 'package:angular2/src/platform/server/html_adapter.dart'; |  | ||||||
| import "package:angular2/src/web_workers/debug_tools/single_client_server_message_bus.dart"; |  | ||||||
| import "./message_bus_common.dart"; |  | ||||||
| import "./spy_web_socket.dart"; |  | ||||||
| import "dart:convert" show JSON; |  | ||||||
| 
 |  | ||||||
| main() { |  | ||||||
|   Html5LibDomAdapter.makeCurrent(); |  | ||||||
|   testSetup(); |  | ||||||
| 
 |  | ||||||
|   var MESSAGE = const {'test': 10}; |  | ||||||
|   const CHANNEL = "TEST_CHANNEL"; |  | ||||||
|   describe("SingleClientServerMessageBusSink", () { |  | ||||||
|     it( |  | ||||||
|         "should send JSON encoded data over the WebSocket", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           var socket = new SpyWebSocket(); |  | ||||||
|           var sink = new SingleClientServerMessageBusSink(); |  | ||||||
|           sink.initChannel(CHANNEL, false); |  | ||||||
| 
 |  | ||||||
|           sink.setConnection(socket); |  | ||||||
|           expectSinkSendsEncodedJson(socket, sink, "add", async); |  | ||||||
|         })); |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should buffer messages before connect", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           var sink = new SingleClientServerMessageBusSink(); |  | ||||||
|           sink.initChannel(CHANNEL, false); |  | ||||||
|           sink.to(CHANNEL).add(MESSAGE); |  | ||||||
| 
 |  | ||||||
|           var socket = new SpyWebSocket(); |  | ||||||
|           socket.spy("add").andCallFake((message) { |  | ||||||
|             expectMessageEquality(message, MESSAGE, CHANNEL); |  | ||||||
|             async.done(); |  | ||||||
|           }); |  | ||||||
|           sink.setConnection(socket); |  | ||||||
|         })); |  | ||||||
| 
 |  | ||||||
|     it( |  | ||||||
|         "should buffer messages in between disconnect and connect", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           var SECOND_MESSAGE = const {'test': 12, 'second': 'hi'}; |  | ||||||
|           var sink = new SingleClientServerMessageBusSink(); |  | ||||||
|           sink.initChannel(CHANNEL, false); |  | ||||||
| 
 |  | ||||||
|           sink.to(CHANNEL).add(MESSAGE); |  | ||||||
| 
 |  | ||||||
|           var socket = new SpyWebSocket(); |  | ||||||
|           sink.setConnection(socket); |  | ||||||
| 
 |  | ||||||
|           int numMessages = 0; |  | ||||||
| 
 |  | ||||||
|           socket.spy("add").andCallFake((message) { |  | ||||||
|             numMessages++; |  | ||||||
|             if (numMessages == 1) { |  | ||||||
|               expectMessageEquality(message, MESSAGE, CHANNEL); |  | ||||||
|             } else { |  | ||||||
|               expectMessageEquality(message, SECOND_MESSAGE, CHANNEL); |  | ||||||
|               async.done(); |  | ||||||
|             } |  | ||||||
|           }); |  | ||||||
| 
 |  | ||||||
|           sink.removeConnection(); |  | ||||||
|           sink.to(CHANNEL).add(SECOND_MESSAGE); |  | ||||||
|           sink.setConnection(socket); |  | ||||||
|         })); |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   describe("SingleClientServerMessageBusSource", () { |  | ||||||
|     it( |  | ||||||
|         "should decode JSON messages and emit them", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           StreamController<String> controller = |  | ||||||
|               new StreamController.broadcast(); |  | ||||||
| 
 |  | ||||||
|           var source = new SingleClientServerMessageBusSource(); |  | ||||||
|           source.initChannel(CHANNEL, false); |  | ||||||
|           source.attachTo(controller.stream); |  | ||||||
|           source.from(CHANNEL).listen((message) { |  | ||||||
|             expect(message).toEqual(MESSAGE); |  | ||||||
|             async.done(); |  | ||||||
|           }); |  | ||||||
| 
 |  | ||||||
|           controller.add(JSON.encode([ |  | ||||||
|             {'channel': CHANNEL, 'message': MESSAGE} |  | ||||||
|           ])); |  | ||||||
|         })); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| @ -1,15 +0,0 @@ | |||||||
| /** |  | ||||||
|  * Contains code shared between all server message bus tests |  | ||||||
|  */ |  | ||||||
| library angular2.test.web_workers.debug_tools.server_message_bus_common; |  | ||||||
| 
 |  | ||||||
| import "package:angular2/src/testing/testing_internal_core.dart"; |  | ||||||
| import "dart:io"; |  | ||||||
| 
 |  | ||||||
| @proxy |  | ||||||
| class SpyWebSocket extends SpyObject implements WebSocket { |  | ||||||
|   SpyWebSocket() : super(SpyWebSocket); |  | ||||||
|   noSuchMethod(m) { |  | ||||||
|     return super.noSuchMethod(m); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,67 +0,0 @@ | |||||||
| library angular2.test.web_workers.debug_tools.web_socket_server_message_bus; |  | ||||||
| 
 |  | ||||||
| import "package:angular2/testing_internal.dart" |  | ||||||
|     show |  | ||||||
|         AsyncTestCompleter, |  | ||||||
|         inject, |  | ||||||
|         describe, |  | ||||||
|         it, |  | ||||||
|         expect, |  | ||||||
|         beforeEach, |  | ||||||
|         beforeEachProviders, |  | ||||||
|         SpyObject; |  | ||||||
| import "package:angular2/src/web_workers/debug_tools/web_socket_message_bus.dart"; |  | ||||||
| import "dart:html" show WebSocket, MessageEvent; |  | ||||||
| import "./message_bus_common.dart"; |  | ||||||
| import "dart:async"; |  | ||||||
| import "dart:convert" show JSON; |  | ||||||
| 
 |  | ||||||
| main() { |  | ||||||
|   var MESSAGE = const {'test': 10}; |  | ||||||
|   const CHANNEL = "TEST_CHANNEL"; |  | ||||||
| 
 |  | ||||||
|   describe("WebSocketMessageBusSink", () { |  | ||||||
|     it( |  | ||||||
|         "should send JSON encoded data over the WebSocket", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           var socket = new SpyWebSocket(); |  | ||||||
|           var sink = new WebSocketMessageBusSink(socket); |  | ||||||
|           sink.initChannel(CHANNEL, false); |  | ||||||
|           expectSinkSendsEncodedJson(socket, sink, "send", async); |  | ||||||
|         })); |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   describe("WebSocketMessageBusSource", () { |  | ||||||
|     it( |  | ||||||
|         "should decode JSON messages and emit them", |  | ||||||
|         inject([AsyncTestCompleter], (async) { |  | ||||||
|           var socket = new SpyWebSocket(); |  | ||||||
|           StreamController<MessageEvent> controller = |  | ||||||
|               new StreamController.broadcast(); |  | ||||||
|           socket.spy("get:onMessage").andCallFake(() => controller.stream); |  | ||||||
|           var source = new WebSocketMessageBusSource(socket); |  | ||||||
|           source.initChannel(CHANNEL, false); |  | ||||||
| 
 |  | ||||||
|           source.from(CHANNEL).listen((message) { |  | ||||||
|             expect(message).toEqual(MESSAGE); |  | ||||||
|             async.done(); |  | ||||||
|           }); |  | ||||||
| 
 |  | ||||||
|           var event = new SpyMessageEvent(); |  | ||||||
|           event.spy("get:data").andCallFake(() => JSON.encode([ |  | ||||||
|                 {'channel': CHANNEL, 'message': MESSAGE} |  | ||||||
|               ])); |  | ||||||
|           controller.add(event); |  | ||||||
|         })); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @proxy |  | ||||||
| class SpyMessageEvent extends SpyObject implements MessageEvent { |  | ||||||
|   SpyMessageEvent() : super(SpyMessageEvent); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @proxy |  | ||||||
| class SpyWebSocket extends SpyObject implements WebSocket { |  | ||||||
|   SpyWebSocket() : super(SpyWebSocket); |  | ||||||
| } |  | ||||||
| @ -1,20 +0,0 @@ | |||||||
| library angular2.test.web_workers.shared.message_bus_util; |  | ||||||
| 
 |  | ||||||
| import 'dart:isolate'; |  | ||||||
| import 'package:angular2/src/web_workers/shared/message_bus.dart' |  | ||||||
|     show MessageBus; |  | ||||||
| import 'package:angular2/src/web_workers/shared/isolate_message_bus.dart'; |  | ||||||
| 
 |  | ||||||
| /* |  | ||||||
|  * Returns an IsolateMessageBus thats sink is connected to its own source. |  | ||||||
|  * Useful for testing the sink and source. |  | ||||||
|  */ |  | ||||||
| MessageBus createConnectedMessageBus() { |  | ||||||
|   var receivePort = new ReceivePort(); |  | ||||||
|   var sendPort = receivePort.sendPort; |  | ||||||
| 
 |  | ||||||
|   var sink = new IsolateMessageBusSink(sendPort); |  | ||||||
|   var source = new IsolateMessageBusSource(receivePort); |  | ||||||
| 
 |  | ||||||
|   return new IsolateMessageBus(sink, source); |  | ||||||
| } |  | ||||||
| @ -1,21 +0,0 @@ | |||||||
| library angular2.test.web_workers.worker.mock_event_emitter; |  | ||||||
| 
 |  | ||||||
| import 'dart:core'; |  | ||||||
| import 'dart:async'; |  | ||||||
| import "package:angular2/src/facade/async.dart"; |  | ||||||
| 
 |  | ||||||
| class MockEventEmitter<T> extends EventEmitter<T> { |  | ||||||
|   final controller = new StreamController.broadcast(sync: true); |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   StreamSubscription listen(void onData(dynamic line), |  | ||||||
|       {void onError(Error error), void onDone(), bool cancelOnError}) { |  | ||||||
|     return controller.stream.listen(onData, |  | ||||||
|         onError: onError, onDone: onDone, cancelOnError: cancelOnError); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   @override |  | ||||||
|   void add(value) { |  | ||||||
|     controller.add(value); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @ -1,7 +0,0 @@ | |||||||
| library web_workers.spies; |  | ||||||
| 
 |  | ||||||
| import 'package:angular2/src/web_workers/shared/client_message_broker.dart'; |  | ||||||
| import 'package:angular2/src/testing/testing_internal_core.dart'; |  | ||||||
| 
 |  | ||||||
| @proxy |  | ||||||
| class SpyMessageBroker extends SpyObject implements ClientMessageBroker {} |  | ||||||
| @ -2,7 +2,7 @@ import {inject, describe, it, expect} from '@angular/core/testing/testing_intern | |||||||
| import {AsyncTestCompleter} from '@angular/core/testing/testing_internal'; | import {AsyncTestCompleter} from '@angular/core/testing/testing_internal'; | ||||||
| 
 | 
 | ||||||
| import {SpyMessageBroker} from '@angular/platform-browser/test/web_workers/worker/spies'; | import {SpyMessageBroker} from '@angular/platform-browser/test/web_workers/worker/spies'; | ||||||
| import {WebWorkerXHRImpl} from '@angular/platform-browser-dynamic/src/web_workers/worker/xhr_impl'; | import {WebWorkerXHRImpl} from '@angular/platform-browser/src/web_workers/worker/xhr_impl'; | ||||||
| import {PromiseWrapper} from '../../../src/facade/async'; | import {PromiseWrapper} from '../../../src/facade/async'; | ||||||
| import { | import { | ||||||
|   MockMessageBrokerFactory, |   MockMessageBrokerFactory, | ||||||
| @ -6,9 +6,9 @@ import { | |||||||
|   iit, |   iit, | ||||||
|   inject, |   inject, | ||||||
|   it, |   it, | ||||||
|   xit |   xit, | ||||||
|  |   AsyncTestCompleter | ||||||
| } from '@angular/core/testing/testing_internal'; | } from '@angular/core/testing/testing_internal'; | ||||||
| import {AsyncTestCompleter} from '@angular/core/testing/testing_internal'; |  | ||||||
| import {XHRImpl} from '../../src/xhr/xhr_impl'; | import {XHRImpl} from '../../src/xhr/xhr_impl'; | ||||||
| import {PromiseWrapper} from '../../src/facade/async'; | import {PromiseWrapper} from '../../src/facade/async'; | ||||||
| import {IS_DART} from '../../src/facade/lang'; | import {IS_DART} from '../../src/facade/lang'; | ||||||
| @ -24,7 +24,7 @@ export function main() { | |||||||
|     // static_assets/200.html.
 |     // static_assets/200.html.
 | ||||||
|     // We currently have no way of detecting this.
 |     // We currently have no way of detecting this.
 | ||||||
|     var urlBase = IS_DART ? '' : '/base/modules/@angular/'; |     var urlBase = IS_DART ? '' : '/base/modules/@angular/'; | ||||||
|     var url200 = urlBase + 'platform-browser-dynamic/test/browser/static_assets/200.html'; |     var url200 = urlBase + 'platform-browser/test/browser/static_assets/200.html'; | ||||||
|     var url404 = '/bad/path/404.html'; |     var url404 = '/bad/path/404.html'; | ||||||
| 
 | 
 | ||||||
|     beforeEach(() => { xhr = new XHRImpl(); }); |     beforeEach(() => { xhr = new XHRImpl(); }); | ||||||
| @ -1,3 +1,5 @@ | |||||||
| export * from './testing/browser_util'; | export * from './testing/browser_util'; | ||||||
| export * from './testing/browser_static'; | export * from './testing/browser_static'; | ||||||
| export * from './testing/matchers'; | export * from './testing/matchers'; | ||||||
|  | export * from './testing/browser'; | ||||||
|  | export * from './testing/dom_test_component_renderer'; | ||||||
|  | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user