Feat(WebWorker): Add WebWorker Image Filter Demo

This commit is contained in:
Jason Teplitz
2015-07-31 10:33:22 -07:00
committed by jteplitz
parent 2dcf714d2b
commit 84463cf0bd
29 changed files with 694 additions and 21 deletions

View File

@ -13,9 +13,10 @@ import 'package:angular2/src/web-workers/ui/impl.dart' show bootstrapUICommon;
* You instantiate a WebWorker application by calling bootstrap with the URI of your worker's index script
* Note: The WebWorker script must call bootstrapWebworker once it is set up to complete the bootstrapping process
*/
void bootstrap(String uri) {
spawnWorker(Uri.parse(uri)).then((bus) {
Future<MessageBus> bootstrap(String uri) {
return spawnWorker(Uri.parse(uri)).then((bus) {
bootstrapUICommon(bus);
return bus;
});
}

View File

@ -15,9 +15,10 @@ import {bootstrapUICommon} from "angular2/src/web-workers/ui/impl";
* Note: The WebWorker script must call bootstrapWebworker once it is set up to complete the
* bootstrapping process
*/
export function bootstrap(uri: string): void {
export function bootstrap(uri: string): MessageBus {
var messageBus = spawnWorker(uri);
bootstrapUICommon(messageBus);
return messageBus;
}
export function spawnWorker(uri: string): MessageBus {

View File

@ -80,9 +80,9 @@ Map<String, dynamic> serializeGenericEvent(dynamic e) {
// TODO(jteplitz602): Allow users to specify the properties they need rather than always
// adding value #3374
Map<String, dynamic> serializeEventWithValue(dynamic e) {
Map<String, dynamic> serializeEventWithTarget(dynamic e) {
var serializedEvent = serializeEvent(e, EVENT_PROPERTIES);
return addValue(e, serializedEvent);
return addTarget(e, serializedEvent);
}
Map<String, dynamic> serializeMouseEvent(dynamic e) {
@ -91,13 +91,16 @@ Map<String, dynamic> serializeMouseEvent(dynamic e) {
Map<String, dynamic> serializeKeyboardEvent(dynamic e) {
var serializedEvent = serializeEvent(e, KEYBOARD_EVENT_PROPERTIES);
return addValue(e, serializedEvent);
return addTarget(e, serializedEvent);
}
// TODO(jteplitz602): #3374. See above.
Map<String, dynamic> addValue(dynamic e, Map<String, dynamic> serializedEvent) {
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;
}

View File

@ -1,4 +1,5 @@
import {StringMap, Set} from 'angular2/src/facade/collection';
import {isPresent} from 'angular2/src/facade/lang';
const MOUSE_EVENT_PROPERTIES = [
"altKey",
@ -41,10 +42,10 @@ export function serializeGenericEvent(e: Event): StringMap<string, any> {
}
// TODO(jteplitz602): Allow users to specify the properties they need rather than always
// adding value #3374
export function serializeEventWithValue(e: Event): StringMap<string, any> {
// adding value and files #3374
export function serializeEventWithTarget(e: Event): StringMap<string, any> {
var serializedEvent = serializeEvent(e, EVENT_PROPERTIES);
return addValue(e, serializedEvent);
return addTarget(e, serializedEvent);
}
export function serializeMouseEvent(e: MouseEvent): StringMap<string, any> {
@ -53,13 +54,17 @@ export function serializeMouseEvent(e: MouseEvent): StringMap<string, any> {
export function serializeKeyboardEvent(e: KeyboardEvent): StringMap<string, any> {
var serializedEvent = serializeEvent(e, KEYBOARD_EVENT_PROPERTIES);
return addValue(e, serializedEvent);
return addTarget(e, serializedEvent);
}
// TODO(jteplitz602): #3374. See above.
function addValue(e: Event, serializedEvent: StringMap<string, any>): StringMap<string, any> {
function addTarget(e: Event, serializedEvent: StringMap<string, any>): StringMap<string, any> {
if (NODES_WITH_VALUE.has((<HTMLElement>e.target).tagName.toLowerCase())) {
serializedEvent['target'] = {'value': (<HTMLInputElement>e.target).value};
var target = <HTMLInputElement>e.target;
serializedEvent['target'] = {'value': target.value};
if (isPresent(target.files)) {
serializedEvent['target']['files'] = target.files;
}
}
return serializedEvent;
}

View File

@ -35,8 +35,9 @@ import {
serializeMouseEvent,
serializeKeyboardEvent,
serializeGenericEvent,
serializeEventWithValue
serializeEventWithTarget
} from 'angular2/src/web-workers/ui/event_serializer';
import {wtfInit} from 'angular2/src/profile/wtf_init';
/**
* Creates a zone, sets up the DI bindings
@ -45,6 +46,7 @@ import {
export function bootstrapUICommon(bus: MessageBus) {
BrowserDomAdapter.makeCurrent();
var zone = createNgZone();
wtfInit();
zone.run(() => {
var injector = createInjector(zone);
var webWorkerMain = injector.get(WebWorkerMain);
@ -259,7 +261,7 @@ class EventDispatcher implements RenderEventDispatcher {
case "input":
case "change":
case "blur":
serializedEvent = serializeEventWithValue(e);
serializedEvent = serializeEventWithTarget(e);
break;
case "abort":
case "afterprint":

View File

@ -11,6 +11,9 @@ import {bootstrapWebworkerCommon} from "angular2/src/web-workers/worker/applicat
import {ApplicationRef} from "angular2/src/core/application";
import {Injectable} from "angular2/di";
// TODO(jteplitz602) remove this and compile with lib.webworker.d.ts (#3492)
var _postMessage: (message: any, transferrables?:[ArrayBuffer]) => void = <any>postMessage;
/**
* Bootstrapping a Webworker Application
*
@ -41,7 +44,7 @@ export class WorkerMessageBus implements MessageBus {
}
export class WorkerMessageBusSink implements MessageBusSink {
public send(message: Object) { postMessage(message, null); }
public send(message: Object) { _postMessage(message); }
}
export class WorkerMessageBusSource implements MessageBusSource {

View File

@ -17,9 +17,13 @@ import {
ChangeDetection,
DynamicChangeDetection,
JitChangeDetection,
PreGeneratedChangeDetection,
Pipes,
defaultPipes,
PreGeneratedChangeDetection
IterableDiffers,
defaultIterableDiffers,
KeyValueDiffers,
defaultKeyValueDiffers
} from 'angular2/src/change_detection/change_detection';
import {StyleUrlResolver} from 'angular2/src/render/dom/compiler/style_url_resolver';
import {ExceptionHandler} from 'angular2/src/core/exception_handler';
@ -119,6 +123,8 @@ function _injectorBindings(appComponentType, bus: WorkerMessageBus,
CompilerCache,
ViewResolver,
defaultPipes,
bind(IterableDiffers).toValue(defaultIterableDiffers),
bind(KeyValueDiffers).toValue(defaultKeyValueDiffers),
bind(ChangeDetection).toClass(bestChangeDetection),
DirectiveResolver,
Parser,