style(lint): re-format modules/@angular

This commit is contained in:
Alex Eagle
2016-06-08 16:38:52 -07:00
parent bbed364e7b
commit f39c9c9e75
589 changed files with 21829 additions and 24259 deletions

View File

@ -1,45 +1,29 @@
import {
PLATFORM_INITIALIZER,
PLATFORM_DIRECTIVES,
PLATFORM_PIPES,
ExceptionHandler,
RootRenderer,
APPLICATION_COMMON_PROVIDERS,
PLATFORM_COMMON_PROVIDERS,
OpaqueToken,
Testability,
PlatformRef,
getPlatform,
createPlatform,
assertPlatform,
ReflectiveInjector,
coreLoadAndBootstrap,
Type,
ComponentRef
} from "@angular/core";
import {isBlank, isPresent} from "./facade/lang";
import {reflector, wtfInit, SanitizationService, ReflectionCapabilities, AnimationDriver, NoOpAnimationDriver} from '../core_private';
import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS, PlatformLocation} from '@angular/common';
import {COMPILER_PROVIDERS, XHR} from '@angular/compiler';
import {APPLICATION_COMMON_PROVIDERS, ComponentRef, ExceptionHandler, OpaqueToken, PLATFORM_COMMON_PROVIDERS, PLATFORM_DIRECTIVES, PLATFORM_INITIALIZER, PLATFORM_PIPES, PlatformRef, ReflectiveInjector, RootRenderer, Testability, Type, assertPlatform, coreLoadAndBootstrap, createPlatform, getPlatform} from '@angular/core';
import {AnimationDriver, NoOpAnimationDriver, ReflectionCapabilities, SanitizationService, reflector, wtfInit} from '../core_private';
import {WebAnimationsDriver} from '../src/dom/web_animations_driver';
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 {BrowserPlatformLocation} from "./browser/location/browser_platform_location";
import {COMPILER_PROVIDERS, XHR} from "@angular/compiler";
import {CachedXHR} from "./xhr/xhr_cache";
import {XHRImpl} from "./xhr/xhr_impl";
import {BrowserDomAdapter} from './browser/browser_adapter';
import {BrowserPlatformLocation} from './browser/location/browser_platform_location';
import {BrowserGetTestability} from './browser/testability';
import {ELEMENT_PROBE_PROVIDERS} from './dom/debug/ng_probe';
import {getDOM} from './dom/dom_adapter';
import {DomRootRenderer, DomRootRenderer_} from './dom/dom_renderer';
import {DOCUMENT} from './dom/dom_tokens';
import {DomEventsPlugin} from './dom/events/dom_events';
import {EVENT_MANAGER_PLUGINS, EventManager} from './dom/events/event_manager';
import {HAMMER_GESTURE_CONFIG, HammerGestureConfig, HammerGesturesPlugin} from './dom/events/hammer_gestures';
import {KeyEventsPlugin} from './dom/events/key_events';
import {DomSharedStylesHost, SharedStylesHost} from './dom/shared_styles_host';
import {isBlank, isPresent} from './facade/lang';
import {DomSanitizationService, DomSanitizationServiceImpl} from './security/dom_sanitization_service';
import {CachedXHR} from './xhr/xhr_cache';
import {XHRImpl} from './xhr/xhr_impl';
export const CACHED_TEMPLATE_PROVIDER: Array<any /*Type | Provider | any[]*/> =
[{provide: XHR, useClass: CachedXHR}];
[{provide: XHR, useClass: CachedXHR}];
const BROWSER_PLATFORM_MARKER = new OpaqueToken('BrowserPlatformMarker');
@ -49,8 +33,7 @@ const BROWSER_PLATFORM_MARKER = new OpaqueToken('BrowserPlatformMarker');
* Used automatically by `bootstrap`, or can be passed to {@link platform}.
*/
export const BROWSER_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [
{provide: BROWSER_PLATFORM_MARKER, useValue: true},
PLATFORM_COMMON_PROVIDERS,
{provide: BROWSER_PLATFORM_MARKER, useValue: true}, PLATFORM_COMMON_PROVIDERS,
{provide: PLATFORM_INITIALIZER, useValue: initDomAdapter, multi: true},
{provide: PlatformLocation, useClass: BrowserPlatformLocation}
];
@ -65,34 +48,27 @@ export const BROWSER_SANITIZATION_PROVIDERS: Array<any> = [
*
* Used automatically by `bootstrap`, or can be passed to {@link PlatformRef.application}.
*/
export const BROWSER_APP_PROVIDERS: Array<any /*Type | Provider | any[]*/> =
[
APPLICATION_COMMON_PROVIDERS,
FORM_PROVIDERS,
BROWSER_SANITIZATION_PROVIDERS,
{provide: PLATFORM_PIPES, useValue: COMMON_PIPES, multi: true},
{provide: PLATFORM_DIRECTIVES, useValue: COMMON_DIRECTIVES, multi: true},
{provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []},
{provide: DOCUMENT, useFactory: _document, deps: []},
{provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true},
{provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig},
{provide: DomRootRenderer, useClass: DomRootRenderer_},
{provide: RootRenderer, useExisting: DomRootRenderer},
{provide: SharedStylesHost, useExisting: DomSharedStylesHost},
{provide: AnimationDriver, useFactory: _resolveDefaultAnimationDriver},
DomSharedStylesHost,
Testability,
EventManager,
ELEMENT_PROBE_PROVIDERS
];
export const BROWSER_APP_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [
APPLICATION_COMMON_PROVIDERS, FORM_PROVIDERS, BROWSER_SANITIZATION_PROVIDERS,
{provide: PLATFORM_PIPES, useValue: COMMON_PIPES, multi: true},
{provide: PLATFORM_DIRECTIVES, useValue: COMMON_DIRECTIVES, multi: true},
{provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []},
{provide: DOCUMENT, useFactory: _document, deps: []},
{provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true},
{provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig},
{provide: DomRootRenderer, useClass: DomRootRenderer_},
{provide: RootRenderer, useExisting: DomRootRenderer},
{provide: SharedStylesHost, useExisting: DomSharedStylesHost},
{provide: AnimationDriver, useFactory: _resolveDefaultAnimationDriver}, DomSharedStylesHost,
Testability, EventManager, ELEMENT_PROBE_PROVIDERS
];
export const BROWSER_APP_COMPILER_PROVIDERS: Array<any /*Type | Provider | any[]*/> =
[
COMPILER_PROVIDERS,
{provide: XHR, useClass: XHRImpl},
];
export const BROWSER_APP_COMPILER_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [
COMPILER_PROVIDERS,
{provide: XHR, useClass: XHRImpl},
];
export function browserPlatform(): PlatformRef {
if (isBlank(getPlatform())) {
@ -170,12 +146,11 @@ export function browserPlatform(): PlatformRef {
* Returns a `Promise` of {@link ComponentRef}.
*/
export function bootstrap(
appComponentType: Type,
customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> {
appComponentType: Type,
customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> {
reflector.reflectionCapabilities = new ReflectionCapabilities();
let providers = [
BROWSER_APP_PROVIDERS,
BROWSER_APP_COMPILER_PROVIDERS,
BROWSER_APP_PROVIDERS, BROWSER_APP_COMPILER_PROVIDERS,
isPresent(customProviders) ? customProviders : []
];
var appInjector = ReflectiveInjector.resolveAndCreate(providers, browserPlatform().injector);

View File

@ -1,7 +1,8 @@
import {ListWrapper} from '../facade/collection';
import {isBlank, isPresent, isFunction, global, setValueOnPath, DateWrapper} from '../facade/lang';
import {GenericBrowserDomAdapter} from './generic_browser_adapter';
import {setRootDomAdapter} from '../dom/dom_adapter';
import {ListWrapper} from '../facade/collection';
import {DateWrapper, global, isBlank, isFunction, isPresent, setValueOnPath} from '../facade/lang';
import {GenericBrowserDomAdapter} from './generic_browser_adapter';
var _attrToPropMap = {
'class': 'className',
@ -58,7 +59,7 @@ var _chromeNumKeyPadMap = {
*/
/* tslint:disable:requireParameterType */
export class BrowserDomAdapter extends GenericBrowserDomAdapter {
parse(templateHtml: string) { throw new Error("parse not implemented"); }
parse(templateHtml: string) { throw new Error('parse not implemented'); }
static makeCurrent() { setRootDomAdapter(new BrowserDomAdapter()); }
hasProperty(element: any /** TODO #9100 */, name: string): boolean { return name in element; }
setProperty(el: /*element*/ any, name: string, value: any) { el[name] = value; }
@ -96,10 +97,18 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
get attrToPropMap(): any { return _attrToPropMap; }
query(selector: string): any { return document.querySelector(selector); }
querySelector(el: any /** TODO #9100 */, selector: string): HTMLElement { return el.querySelector(selector); }
querySelectorAll(el: any /** TODO #9100 */, selector: string): any[] { return el.querySelectorAll(selector); }
on(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */) { el.addEventListener(evt, listener, false); }
onAndCancel(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */): Function {
querySelector(el: any /** TODO #9100 */, selector: string): HTMLElement {
return el.querySelector(selector);
}
querySelectorAll(el: any /** TODO #9100 */, selector: string): any[] {
return el.querySelectorAll(selector);
}
on(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */) {
el.addEventListener(evt, listener, false);
}
onAndCancel(
el: any /** TODO #9100 */, evt: any /** TODO #9100 */,
listener: any /** TODO #9100 */): Function {
el.addEventListener(evt, listener, false);
// Needed to follow Dart's subscription semantic, until fix of
// https://code.google.com/p/dart/issues/detail?id=17406
@ -132,7 +141,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
nodeValue(node: Node): string { return node.nodeValue; }
type(node: HTMLInputElement): string { return node.type; }
content(node: Node): Node {
if (this.hasProperty(node, "content")) {
if (this.hasProperty(node, 'content')) {
return (<any>node).content;
} else {
return node;
@ -157,16 +166,24 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
}
appendChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { el.appendChild(node); }
removeChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { el.removeChild(node); }
replaceChild(el: Node, newChild: any /** TODO #9100 */, oldChild: any /** TODO #9100 */) { el.replaceChild(newChild, oldChild); }
replaceChild(el: Node, newChild: any /** TODO #9100 */, oldChild: any /** TODO #9100 */) {
el.replaceChild(newChild, oldChild);
}
remove(node: any /** TODO #9100 */): Node {
if (node.parentNode) {
node.parentNode.removeChild(node);
}
return node;
}
insertBefore(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { el.parentNode.insertBefore(node, el); }
insertAllBefore(el: any /** TODO #9100 */, nodes: any /** TODO #9100 */) { nodes.forEach((n: any /** TODO #9100 */) => el.parentNode.insertBefore(n, el)); }
insertAfter(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { el.parentNode.insertBefore(node, el.nextSibling); }
insertBefore(el: any /** TODO #9100 */, node: any /** TODO #9100 */) {
el.parentNode.insertBefore(node, el);
}
insertAllBefore(el: any /** TODO #9100 */, nodes: any /** TODO #9100 */) {
nodes.forEach((n: any /** TODO #9100 */) => el.parentNode.insertBefore(n, el));
}
insertAfter(el: any /** TODO #9100 */, node: any /** TODO #9100 */) {
el.parentNode.insertBefore(node, el.nextSibling);
}
setInnerHTML(el: any /** TODO #9100 */, value: any /** TODO #9100 */) { el.innerHTML = value; }
getText(el: any /** TODO #9100 */): string { return el.textContent; }
// TODO(vicb): removed Element type because it does not support StyleElement
@ -181,8 +198,13 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
t.innerHTML = html;
return t;
}
createElement(tagName: any /** TODO #9100 */, doc = document): HTMLElement { return doc.createElement(tagName); }
createElementNS(ns: any /** TODO #9100 */, tagName: any /** TODO #9100 */, doc = document): Element { return doc.createElementNS(ns, tagName); }
createElement(tagName: any /** TODO #9100 */, doc = document): HTMLElement {
return doc.createElement(tagName);
}
createElementNS(ns: any /** TODO #9100 */, tagName: any /** TODO #9100 */, doc = document):
Element {
return doc.createElementNS(ns, tagName);
}
createTextNode(text: string, doc = document): Text { return doc.createTextNode(text); }
createScriptTag(attrName: string, attrValue: string, doc = document): HTMLScriptElement {
var el = <HTMLScriptElement>doc.createElement('SCRIPT');
@ -204,15 +226,25 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
getElementsByTagName(element: any /** TODO #9100 */, name: string): HTMLElement[] {
return element.getElementsByTagName(name);
}
classList(element: any /** TODO #9100 */): any[] { return <any[]>Array.prototype.slice.call(element.classList, 0); }
classList(element: any /** TODO #9100 */): any[] {
return <any[]>Array.prototype.slice.call(element.classList, 0);
}
addClass(element: any /** TODO #9100 */, className: string) { element.classList.add(className); }
removeClass(element: any /** TODO #9100 */, className: string) { element.classList.remove(className); }
hasClass(element: any /** TODO #9100 */, className: string): boolean { return element.classList.contains(className); }
removeClass(element: any /** TODO #9100 */, className: string) {
element.classList.remove(className);
}
hasClass(element: any /** TODO #9100 */, className: string): boolean {
return element.classList.contains(className);
}
setStyle(element: any /** TODO #9100 */, styleName: string, styleValue: string) {
element.style[styleName] = styleValue;
}
removeStyle(element: any /** TODO #9100 */, stylename: string) { element.style[stylename] = null; }
getStyle(element: any /** TODO #9100 */, stylename: string): string { return element.style[stylename]; }
removeStyle(element: any /** TODO #9100 */, stylename: string) {
element.style[stylename] = null;
}
getStyle(element: any /** TODO #9100 */, stylename: string): string {
return element.style[stylename];
}
hasStyle(element: any /** TODO #9100 */, styleName: string, styleValue: string = null): boolean {
var value = this.getStyle(element, styleName) || '';
return styleValue ? value == styleValue : value.length > 0;
@ -227,21 +259,33 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
}
return res;
}
hasAttribute(element: any /** TODO #9100 */, attribute: string): boolean { return element.hasAttribute(attribute); }
hasAttribute(element: any /** TODO #9100 */, attribute: string): boolean {
return element.hasAttribute(attribute);
}
hasAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): boolean {
return element.hasAttributeNS(ns, attribute);
}
getAttribute(element: any /** TODO #9100 */, attribute: string): string { return element.getAttribute(attribute); }
getAttribute(element: any /** TODO #9100 */, attribute: string): string {
return element.getAttribute(attribute);
}
getAttributeNS(element: any /** TODO #9100 */, ns: string, name: string): string {
return element.getAttributeNS(ns, name);
}
setAttribute(element: any /** TODO #9100 */, name: string, value: string) { element.setAttribute(name, value); }
setAttribute(element: any /** TODO #9100 */, name: string, value: string) {
element.setAttribute(name, value);
}
setAttributeNS(element: any /** TODO #9100 */, ns: string, name: string, value: string) {
element.setAttributeNS(ns, name, value);
}
removeAttribute(element: any /** TODO #9100 */, attribute: string) { element.removeAttribute(attribute); }
removeAttributeNS(element: any /** TODO #9100 */, ns: string, name: string) { element.removeAttributeNS(ns, name); }
templateAwareRoot(el: any /** TODO #9100 */): any { return this.isTemplateElement(el) ? this.content(el) : el; }
removeAttribute(element: any /** TODO #9100 */, attribute: string) {
element.removeAttribute(attribute);
}
removeAttributeNS(element: any /** TODO #9100 */, ns: string, name: string) {
element.removeAttributeNS(ns, name);
}
templateAwareRoot(el: any /** TODO #9100 */): any {
return this.isTemplateElement(el) ? this.content(el) : el;
}
createHtmlDocument(): HTMLDocument {
return document.implementation.createHTMLDocument('fakeTitle');
}
@ -269,12 +313,14 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
return matches;
}
isTemplateElement(el: any): boolean {
return el instanceof HTMLElement && el.nodeName == "TEMPLATE";
return el instanceof HTMLElement && el.nodeName == 'TEMPLATE';
}
isTextNode(node: Node): boolean { return node.nodeType === Node.TEXT_NODE; }
isCommentNode(node: Node): boolean { return node.nodeType === Node.COMMENT_NODE; }
isElementNode(node: Node): boolean { return node.nodeType === Node.ELEMENT_NODE; }
hasShadowRoot(node: any /** TODO #9100 */): boolean { return node instanceof HTMLElement && isPresent(node.shadowRoot); }
hasShadowRoot(node: any /** TODO #9100 */): boolean {
return node instanceof HTMLElement && isPresent(node.shadowRoot);
}
isShadowRoot(node: any /** TODO #9100 */): boolean { return node instanceof DocumentFragment; }
importIntoDoc(node: Node): any {
var toImport = node;
@ -312,11 +358,11 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
return key;
}
getGlobalEventTarget(target: string): EventTarget {
if (target == "window") {
if (target == 'window') {
return window;
} else if (target == "document") {
} else if (target == 'document') {
return document;
} else if (target == "body") {
} else if (target == 'body') {
return document.body;
}
}
@ -334,13 +380,19 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
setData(element: any /** TODO #9100 */, name: string, value: string) {
this.setAttribute(element, 'data-' + name, value);
}
getData(element: any /** TODO #9100 */, name: string): string { return this.getAttribute(element, 'data-' + name); }
getData(element: any /** TODO #9100 */, name: string): string {
return this.getAttribute(element, 'data-' + name);
}
getComputedStyle(element: any /** TODO #9100 */): any { return getComputedStyle(element); }
// TODO(tbosch): move this into a separate environment class once we have it
setGlobalVar(path: string, value: any) { setValueOnPath(global, path, value); }
requestAnimationFrame(callback: any /** TODO #9100 */): number { return window.requestAnimationFrame(callback); }
requestAnimationFrame(callback: any /** TODO #9100 */): number {
return window.requestAnimationFrame(callback);
}
cancelAnimationFrame(id: number) { window.cancelAnimationFrame(id); }
supportsWebAnimation(): boolean { return isFunction((document as any /** TODO #9100 */).body['animate']); }
supportsWebAnimation(): boolean {
return isFunction((document as any /** TODO #9100 */).body['animate']);
}
performanceNow(): number {
// performance.now() is not available in all browsers, see
// http://caniuse.com/#search=performance.now
@ -353,9 +405,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
supportsCookies(): boolean { return true; }
getCookie(name: string): string {
return parseCookieValue(document.cookie, name);
}
getCookie(name: string): string { return parseCookieValue(document.cookie, name); }
setCookie(name: string, value: string) {
// document.cookie is magical, assigning into it assigns/overrides one cookie value, but does
@ -380,7 +430,7 @@ function getBaseElementHref(): string {
var urlParsingNode: any /** TODO #9100 */ = null;
function relativePath(url: any /** TODO #9100 */): string {
if (isBlank(urlParsingNode)) {
urlParsingNode = document.createElement("a");
urlParsingNode = document.createElement('a');
}
urlParsingNode.setAttribute('href', url);
return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :

View File

@ -1,6 +1,7 @@
import {StringMapWrapper} from '../facade/collection';
import {isPresent, isFunction, Type} from '../facade/lang';
import {DomAdapter} from '../dom/dom_adapter';
import {StringMapWrapper} from '../facade/collection';
import {Type, isFunction, isPresent} from '../facade/lang';
/**
@ -50,9 +51,9 @@ export abstract class GenericBrowserDomAdapter extends DomAdapter {
return isFunction((<any>this.defaultDoc().body).createShadowRoot);
}
getAnimationPrefix(): string {
return isPresent(this._animationPrefix) ? this._animationPrefix : "";
return isPresent(this._animationPrefix) ? this._animationPrefix : '';
}
getTransitionEnd(): string { return isPresent(this._transitionEnd) ? this._transitionEnd : ""; }
getTransitionEnd(): string { return isPresent(this._transitionEnd) ? this._transitionEnd : ''; }
supportsAnimation(): boolean {
return isPresent(this._animationPrefix) && isPresent(this._transitionEnd);
}

View File

@ -1,10 +1,13 @@
import {PlatformLocation, UrlChangeListener} from '@angular/common';
import {Injectable} from '@angular/core';
import {History, Location} from '../../facade/browser';
import {UrlChangeListener, PlatformLocation} from '@angular/common';
import {getDOM} from '../../dom/dom_adapter';
import {History, Location} from '../../facade/browser';
import {supportsState} from './history';
/**
* `PlatformLocation` encapsulates all of the direct calls to platform APIs.
* This class should not be used directly by an application developer. Instead, use
@ -46,7 +49,7 @@ export class BrowserPlatformLocation extends PlatformLocation {
set pathname(newPath: string) { this._location.pathname = newPath; }
pushState(state: any, title: string, url: string): void {
if(supportsState()) {
if (supportsState()) {
this._history.pushState(state, title, url);
} else {
this._location.hash = url;
@ -54,7 +57,7 @@ export class BrowserPlatformLocation extends PlatformLocation {
}
replaceState(state: any, title: string, url: string): void {
if(supportsState()) {
if (supportsState()) {
this._history.replaceState(state, title, url);
} else {
this._location.hash = url;

View File

@ -1,3 +1,3 @@
export function supportsState(): boolean {
return !!window.history.pushState;
return !!window.history.pushState;
}

View File

@ -1,14 +1,8 @@
import {
Injectable,
TestabilityRegistry,
Testability,
GetTestability,
setTestabilityGetter
} from '@angular/core';
import {GetTestability, Injectable, Testability, TestabilityRegistry, setTestabilityGetter} from '@angular/core';
import {getDOM} from '../dom/dom_adapter';
import {ListWrapper} from '../facade/collection';
import {global, isPresent} from '../facade/lang';
import {getDOM} from '../dom/dom_adapter';
@ -61,7 +55,9 @@ export class BrowserGetTestability implements GetTestability {
callback(didWork);
}
};
testabilities.forEach(function(testability: any /** TODO #9100 */) { testability.whenStable(decrement); });
testabilities.forEach(function(testability: any /** TODO #9100 */) {
testability.whenStable(decrement);
});
};
if (!global.frameworkStabilizers) {
@ -70,8 +66,8 @@ export class BrowserGetTestability implements GetTestability {
global.frameworkStabilizers.push(whenAllStable);
}
findTestabilityInTree(registry: TestabilityRegistry, elem: any,
findInAncestors: boolean): Testability {
findTestabilityInTree(registry: TestabilityRegistry, elem: any, findInAncestors: boolean):
Testability {
if (elem == null) {
return null;
}

View File

@ -1,7 +1,8 @@
import {ApplicationRef, ComponentRef} from '@angular/core';
import {isPresent, NumberWrapper} from '../../facade/lang';
import {window} from '../../facade/browser';
import {getDOM} from '../../dom/dom_adapter';
import {window} from '../../facade/browser';
import {NumberWrapper, isPresent} from '../../facade/lang';
export class ChangeDetectionPerfRecord {

View File

@ -1,7 +1,9 @@
import {DebugElement} from '@angular/core';
import {Type, isPresent} from '../../facade/lang';
import {Predicate} from '../../facade/collection';
import {getDOM} from '../../dom/dom_adapter';
import {Predicate} from '../../facade/collection';
import {Type, isPresent} from '../../facade/lang';
/**
@ -27,8 +29,8 @@ export class By {
static css(selector: string): Predicate<DebugElement> {
return (debugElement) => {
return isPresent(debugElement.nativeElement) ?
getDOM().elementMatches(debugElement.nativeElement, selector) :
false;
getDOM().elementMatches(debugElement.nativeElement, selector) :
false;
};
}

View File

@ -1,17 +1,15 @@
import {
DebugNode,
getDebugNode,
RootRenderer,
NgZone,
ApplicationRef
} from '@angular/core';
import {ApplicationRef, DebugNode, NgZone, RootRenderer, getDebugNode} from '@angular/core';
import {DebugDomRootRenderer} from '../../../core_private';
import {assertionsEnabled} from '../../facade/lang';
import {getDOM} from '../dom_adapter';
import {DomRootRenderer} from '../dom_renderer';
const CORE_TOKENS = {'ApplicationRef': ApplicationRef, 'NgZone': NgZone};
const CORE_TOKENS = {
'ApplicationRef': ApplicationRef,
'NgZone': NgZone
};
const INSPECT_GLOBAL_NAME = 'ng.probe';
const CORE_TOKENS_GLOBAL_NAME = 'ng.coreTokens';
@ -41,18 +39,8 @@ function _createRootRenderer(rootRenderer: any /** TODO #9100 */) {
/**
* Providers which support debugging Angular applications (e.g. via `ng.probe`).
*/
export const ELEMENT_PROBE_PROVIDERS: any[] = [
{
provide: RootRenderer,
useFactory: _createConditionalRootRenderer,
deps: [DomRootRenderer]
}
];
export const ELEMENT_PROBE_PROVIDERS: any[] =
[{provide: RootRenderer, useFactory: _createConditionalRootRenderer, deps: [DomRootRenderer]}];
export const ELEMENT_PROBE_PROVIDERS_PROD_MODE: any[] = [
{
provide: RootRenderer,
useFactory: _createRootRenderer,
deps: [DomRootRenderer]
}
];
export const ELEMENT_PROBE_PROVIDERS_PROD_MODE: any[] =
[{provide: RootRenderer, useFactory: _createRootRenderer, deps: [DomRootRenderer]}];

View File

@ -1,4 +1,4 @@
import {isBlank, Type} from '../facade/lang';
import {Type, isBlank} from '../facade/lang';
var _DOM: DomAdapter = null;
@ -48,9 +48,14 @@ export abstract class DomAdapter {
abstract query(selector: string): any;
abstract querySelector(el: any /** TODO #9100 */, selector: string): HTMLElement;
abstract querySelectorAll(el: any /** TODO #9100 */, selector: string): any[];
abstract on(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */): any /** TODO #9100 */;
abstract onAndCancel(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */): Function;
abstract dispatchEvent(el: any /** TODO #9100 */, evt: any /** TODO #9100 */): any /** TODO #9100 */;
abstract on(
el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract onAndCancel(
el: any /** TODO #9100 */, evt: any /** TODO #9100 */,
listener: any /** TODO #9100 */): Function;
abstract dispatchEvent(el: any /** TODO #9100 */, evt: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract createMouseEvent(eventType: any /** TODO #9100 */): any;
abstract createEvent(eventType: string): any;
abstract preventDefault(evt: any /** TODO #9100 */): any /** TODO #9100 */;
@ -69,14 +74,22 @@ export abstract class DomAdapter {
abstract childNodes(el: any /** TODO #9100 */): Node[];
abstract childNodesAsList(el: any /** TODO #9100 */): Node[];
abstract clearNodes(el: any /** TODO #9100 */): any /** TODO #9100 */;
abstract appendChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any /** TODO #9100 */;
abstract removeChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any /** TODO #9100 */;
abstract replaceChild(el: any /** TODO #9100 */, newNode: any /** TODO #9100 */, oldNode: any /** TODO #9100 */): any /** TODO #9100 */;
abstract appendChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract removeChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract replaceChild(
el: any /** TODO #9100 */, newNode: any /** TODO #9100 */,
oldNode: any /** TODO #9100 */): any /** TODO #9100 */;
abstract remove(el: any /** TODO #9100 */): Node;
abstract insertBefore(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any /** TODO #9100 */;
abstract insertAllBefore(el: any /** TODO #9100 */, nodes: any /** TODO #9100 */): any /** TODO #9100 */;
abstract insertAfter(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any /** TODO #9100 */;
abstract setInnerHTML(el: any /** TODO #9100 */, value: any /** TODO #9100 */): any /** TODO #9100 */;
abstract insertBefore(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract insertAllBefore(el: any /** TODO #9100 */, nodes: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract insertAfter(el: any /** TODO #9100 */, node: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract setInnerHTML(el: any /** TODO #9100 */, value: any /** TODO #9100 */): any
/** TODO #9100 */;
abstract getText(el: any /** TODO #9100 */): string;
abstract setText(el: any /** TODO #9100 */, value: string): any /** TODO #9100 */;
abstract getValue(el: any /** TODO #9100 */): string;
@ -88,7 +101,8 @@ export abstract class DomAdapter {
abstract createElement(tagName: any /** TODO #9100 */, doc?: any /** TODO #9100 */): HTMLElement;
abstract createElementNS(ns: string, tagName: string, doc?: any /** TODO #9100 */): Element;
abstract createTextNode(text: string, doc?: any /** TODO #9100 */): Text;
abstract createScriptTag(attrName: string, attrValue: string, doc?: any /** TODO #9100 */): HTMLElement;
abstract createScriptTag(attrName: string, attrValue: string, doc?: any /** TODO #9100 */):
HTMLElement;
abstract createStyleElement(css: string, doc?: any /** TODO #9100 */): HTMLStyleElement;
abstract createShadowRoot(el: any /** TODO #9100 */): any;
abstract getShadowRoot(el: any /** TODO #9100 */): any;
@ -101,20 +115,26 @@ export abstract class DomAdapter {
abstract addClass(element: any /** TODO #9100 */, className: string): any /** TODO #9100 */;
abstract removeClass(element: any /** TODO #9100 */, className: string): any /** TODO #9100 */;
abstract hasClass(element: any /** TODO #9100 */, className: string): boolean;
abstract setStyle(element: any /** TODO #9100 */, styleName: string, styleValue: string): any /** TODO #9100 */;
abstract setStyle(element: any /** TODO #9100 */, styleName: string, styleValue: string): any
/** TODO #9100 */;
abstract removeStyle(element: any /** TODO #9100 */, styleName: string): any /** TODO #9100 */;
abstract getStyle(element: any /** TODO #9100 */, styleName: string): string;
abstract hasStyle(element: any /** TODO #9100 */, styleName: string, styleValue?: string): boolean;
abstract hasStyle(element: any /** TODO #9100 */, styleName: string, styleValue?: string):
boolean;
abstract tagName(element: any /** TODO #9100 */): string;
abstract attributeMap(element: any /** TODO #9100 */): Map<string, string>;
abstract hasAttribute(element: any /** TODO #9100 */, attribute: string): boolean;
abstract hasAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): boolean;
abstract getAttribute(element: any /** TODO #9100 */, attribute: string): string;
abstract getAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): string;
abstract setAttribute(element: any /** TODO #9100 */, name: string, value: string): any /** TODO #9100 */;
abstract setAttributeNS(element: any /** TODO #9100 */, ns: string, name: string, value: string): any /** TODO #9100 */;
abstract removeAttribute(element: any /** TODO #9100 */, attribute: string): any /** TODO #9100 */;
abstract removeAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): any /** TODO #9100 */;
abstract setAttribute(element: any /** TODO #9100 */, name: string, value: string): any
/** TODO #9100 */;
abstract setAttributeNS(element: any /** TODO #9100 */, ns: string, name: string, value: string):
any /** TODO #9100 */;
abstract removeAttribute(element: any /** TODO #9100 */, attribute: string): any
/** TODO #9100 */;
abstract removeAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): any
/** TODO #9100 */;
abstract templateAwareRoot(el: any /** TODO #9100 */): any /** TODO #9100 */;
abstract createHtmlDocument(): HTMLDocument;
abstract defaultDoc(): HTMLDocument;
@ -132,7 +152,8 @@ export abstract class DomAdapter {
abstract adoptNode /*<T extends Node>*/ (node: Node /*T*/): Node /*T*/;
abstract getHref(element: any /** TODO #9100 */): string;
abstract getEventKey(event: any /** TODO #9100 */): string;
abstract resolveAndSetHref(element: any /** TODO #9100 */, baseUrl: string, href: string): any /** TODO #9100 */;
abstract resolveAndSetHref(element: any /** TODO #9100 */, baseUrl: string, href: string): any
/** TODO #9100 */;
abstract supportsDOMEvents(): boolean;
abstract supportsNativeShadowDOM(): boolean;
abstract getGlobalEventTarget(target: string): any;
@ -141,7 +162,8 @@ export abstract class DomAdapter {
abstract getBaseHref(): string;
abstract resetBaseElement(): void;
abstract getUserAgent(): string;
abstract setData(element: any /** TODO #9100 */, name: string, value: string): any /** TODO #9100 */;
abstract setData(element: any /** TODO #9100 */, name: string, value: string): any
/** TODO #9100 */;
abstract getComputedStyle(element: any /** TODO #9100 */): any;
abstract getData(element: any /** TODO #9100 */, name: string): string;
abstract setGlobalVar(name: string, value: any): any /** TODO #9100 */;

View File

@ -1,52 +1,31 @@
import {
Inject,
Injectable,
OpaqueToken,
Renderer,
RootRenderer,
RenderComponentType,
ViewEncapsulation
} from '@angular/core';
import {
isPresent,
isBlank,
Json,
RegExpWrapper,
stringify,
StringWrapper,
isArray,
isString
} from '../facade/lang';
import {Inject, Injectable, OpaqueToken, RenderComponentType, Renderer, RootRenderer, ViewEncapsulation} from '@angular/core';
import {StringMapWrapper} from '../facade/collection';
import {BaseException} from '../facade/exceptions';
import {Json, RegExpWrapper, StringWrapper, isArray, isBlank, isPresent, isString, stringify} from '../facade/lang';
import {DomSharedStylesHost} from './shared_styles_host';
import {
AnimationKeyframe,
AnimationStyles,
AnimationPlayer,
AnimationDriver,
RenderDebugInfo,
} from '../../core_private';
import {AnimationKeyframe, AnimationStyles, AnimationPlayer, AnimationDriver, RenderDebugInfo,} from '../../core_private';
import {EventManager} from './events/event_manager';
import {DOCUMENT} from './dom_tokens';
import {getDOM} from './dom_adapter';
import {camelCaseToDashCase} from './util';
const NAMESPACE_URIS =
{'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg'};
const NAMESPACE_URIS = {
'xlink': 'http://www.w3.org/1999/xlink',
'svg': 'http://www.w3.org/2000/svg'
};
const TEMPLATE_COMMENT_TEXT = 'template bindings={}';
var TEMPLATE_BINDINGS_EXP = /^template bindings=(.*)$/g;
export abstract class DomRootRenderer implements RootRenderer {
protected registeredComponents: Map<string, DomRenderer> = new Map<string, DomRenderer>();
constructor(public document: any, public eventManager: EventManager,
public sharedStylesHost: DomSharedStylesHost,
public animationDriver: AnimationDriver) {}
constructor(
public document: any, public eventManager: EventManager,
public sharedStylesHost: DomSharedStylesHost, public animationDriver: AnimationDriver) {}
renderComponent(componentProto: RenderComponentType): Renderer {
var renderer = this.registeredComponents.get(componentProto.id);
@ -60,9 +39,9 @@ export abstract class DomRootRenderer implements RootRenderer {
@Injectable()
export class DomRootRenderer_ extends DomRootRenderer {
constructor(@Inject(DOCUMENT) _document: any, _eventManager: EventManager,
sharedStylesHost: DomSharedStylesHost,
animationDriver: AnimationDriver) {
constructor(
@Inject(DOCUMENT) _document: any, _eventManager: EventManager,
sharedStylesHost: DomSharedStylesHost, animationDriver: AnimationDriver) {
super(_document, _eventManager, sharedStylesHost, animationDriver);
}
}
@ -72,8 +51,9 @@ export class DomRenderer implements Renderer {
private _hostAttr: string;
private _styles: string[];
constructor(private _rootRenderer: DomRootRenderer, private componentProto: RenderComponentType,
private _animationDriver: AnimationDriver) {
constructor(
private _rootRenderer: DomRootRenderer, private componentProto: RenderComponentType,
private _animationDriver: AnimationDriver) {
this._styles = _flattenStyles(componentProto.id, componentProto.styles, []);
if (componentProto.encapsulation !== ViewEncapsulation.Native) {
this._rootRenderer.sharedStylesHost.addStyles(this._styles);
@ -87,7 +67,7 @@ export class DomRenderer implements Renderer {
}
}
selectRootElement(selectorOrNode: string | any, debugInfo: RenderDebugInfo): Element {
selectRootElement(selectorOrNode: string|any, debugInfo: RenderDebugInfo): Element {
var el: any /** TODO #9100 */;
if (isString(selectorOrNode)) {
el = getDOM().querySelector(this._rootRenderer.document, selectorOrNode);
@ -104,8 +84,9 @@ export class DomRenderer implements Renderer {
createElement(parent: Element, name: string, debugInfo: RenderDebugInfo): Node {
var nsAndName = splitNamespace(name);
var el = isPresent(nsAndName[0]) ?
getDOM().createElementNS((NAMESPACE_URIS as any /** TODO #9100 */)[nsAndName[0]], nsAndName[1]) :
getDOM().createElement(nsAndName[1]);
getDOM().createElementNS(
(NAMESPACE_URIS as any /** TODO #9100 */)[nsAndName[0]], nsAndName[1]) :
getDOM().createElement(nsAndName[1]);
if (isPresent(this._contentAttr)) {
getDOM().setAttribute(el, this._contentAttr, '');
}
@ -153,9 +134,7 @@ export class DomRenderer implements Renderer {
appendNodes(parentElement, nodes);
}
attachViewAfter(node: any, viewRootNodes: any[]) {
moveNodesAfterSibling(node, viewRootNodes);
}
attachViewAfter(node: any, viewRootNodes: any[]) { moveNodesAfterSibling(node, viewRootNodes); }
detachView(viewRootNodes: any[]) {
for (var i = 0; i < viewRootNodes.length; i++) {
@ -170,13 +149,13 @@ export class DomRenderer implements Renderer {
}
listen(renderElement: any, name: string, callback: Function): Function {
return this._rootRenderer.eventManager.addEventListener(renderElement, name,
decoratePreventDefault(callback));
return this._rootRenderer.eventManager.addEventListener(
renderElement, name, decoratePreventDefault(callback));
}
listenGlobal(target: string, name: string, callback: Function): Function {
return this._rootRenderer.eventManager.addGlobalEventListener(target, name,
decoratePreventDefault(callback));
return this._rootRenderer.eventManager.addGlobalEventListener(
target, name, decoratePreventDefault(callback));
}
setElementProperty(renderElement: any, propertyName: string, propertyValue: any): void {
@ -213,8 +192,9 @@ export class DomRenderer implements Renderer {
StringWrapper.replaceAll(getDOM().getText(renderElement), /\n/g, ''));
var parsedBindings = Json.parse(existingBindings[1]);
(parsedBindings as any /** TODO #9100 */)[dashCasedPropertyName] = propertyValue;
getDOM().setText(renderElement, StringWrapper.replace(TEMPLATE_COMMENT_TEXT, '{}',
Json.stringify(parsedBindings)));
getDOM().setText(
renderElement,
StringWrapper.replace(TEMPLATE_COMMENT_TEXT, '{}', Json.stringify(parsedBindings)));
} else {
this.setElementAttribute(renderElement, propertyName, propertyValue);
}
@ -242,11 +222,11 @@ export class DomRenderer implements Renderer {
setText(renderNode: any, text: string): void { getDOM().setText(renderNode, text); }
animate(element: any,
startingStyles: AnimationStyles,
keyframes: AnimationKeyframe[], duration: number, delay: number,
easing: string): AnimationPlayer {
return this._animationDriver.animate(element, startingStyles, keyframes, duration, delay, easing);
animate(
element: any, startingStyles: AnimationStyles, keyframes: AnimationKeyframe[],
duration: number, delay: number, easing: string): AnimationPlayer {
return this._animationDriver.animate(
element, startingStyles, keyframes, duration, delay, easing);
}
}
@ -295,7 +275,7 @@ function _shimHostAttribute(componentShortId: string): string {
return StringWrapper.replaceAll(HOST_ATTR, COMPONENT_REGEX, componentShortId);
}
function _flattenStyles(compId: string, styles: Array<any | any[]>, target: string[]): string[] {
function _flattenStyles(compId: string, styles: Array<any|any[]>, target: string[]): string[] {
for (var i = 0; i < styles.length; i++) {
var style = styles[i];
if (isArray(style)) {

View File

@ -1,10 +1,10 @@
import {Injectable, Inject, OpaqueToken, NgZone} from '@angular/core';
import {Inject, Injectable, NgZone, OpaqueToken} from '@angular/core';
import {BaseException} from '../../facade/exceptions';
import {ListWrapper} from '../../facade/collection';
import {BaseException} from '../../facade/exceptions';
export const EVENT_MANAGER_PLUGINS: OpaqueToken = new OpaqueToken("EventManagerPlugins");
export const EVENT_MANAGER_PLUGINS: OpaqueToken = new OpaqueToken('EventManagerPlugins');
@Injectable()
export class EventManager {
@ -47,10 +47,10 @@ export class EventManagerPlugin {
supports(eventName: string): boolean { return false; }
addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {
throw "not implemented";
throw 'not implemented';
}
addGlobalEventListener(element: string, eventName: string, handler: Function): Function {
throw "not implemented";
throw 'not implemented';
}
}

View File

@ -1,6 +1,7 @@
import {EventManagerPlugin} from './event_manager';
import {StringMapWrapper} from '../../facade/collection';
import {EventManagerPlugin} from './event_manager';
var _eventNames = {
// pan
'pan': true,

View File

@ -1,9 +1,11 @@
import {Injectable, Inject, OpaqueToken} from '@angular/core';
import {isPresent} from '../../facade/lang';
import {Inject, Injectable, OpaqueToken} from '@angular/core';
import {BaseException} from '../../facade/exceptions';
import {isPresent} from '../../facade/lang';
import {HammerGesturesPluginCommon} from './hammer_common';
export const HAMMER_GESTURE_CONFIG: OpaqueToken = new OpaqueToken("HammerGestureConfig");
export const HAMMER_GESTURE_CONFIG: OpaqueToken = new OpaqueToken('HammerGestureConfig');
export interface HammerInstance {
on(eventName: string, callback: Function): void;
@ -51,7 +53,9 @@ export class HammerGesturesPlugin extends HammerGesturesPluginCommon {
return zone.runOutsideAngular(() => {
// Creating the manager bind events, must be done outside of angular
var mc = this._config.buildHammer(element);
var callback = function(eventObj: any /** TODO #???? */) { zone.runGuarded(function() { handler(eventObj); }); };
var callback = function(eventObj: any /** TODO #???? */) {
zone.runGuarded(function() { handler(eventObj); });
};
mc.on(eventName, callback);
return () => { mc.off(eventName, callback); };
});

View File

@ -1,8 +1,6 @@
import {NgZone, Injectable} from '@angular/core';
import {
isPresent,
StringWrapper,
} from '../../facade/lang';
import {Injectable, NgZone} from '@angular/core';
import {isPresent, StringWrapper,} from '../../facade/lang';
import {StringMapWrapper, ListWrapper} from '../../facade/collection';
import {getDOM} from '../dom_adapter';
@ -32,8 +30,8 @@ export class KeyEventsPlugin extends EventManagerPlugin {
element, StringMapWrapper.get(parsedEvent, 'fullKey'), handler, this.manager.getZone());
return this.manager.getZone().runOutsideAngular(() => {
return getDOM().onAndCancel(element, StringMapWrapper.get(parsedEvent, 'domEventName'),
outsideHandler);
return getDOM().onAndCancel(
element, StringMapWrapper.get(parsedEvent, 'domEventName'), outsideHandler);
});
}
@ -89,8 +87,8 @@ export class KeyEventsPlugin extends EventManagerPlugin {
return fullKey;
}
static eventCallback(element: HTMLElement, fullKey: any, handler: Function,
zone: NgZone): Function {
static eventCallback(element: HTMLElement, fullKey: any, handler: Function, zone: NgZone):
Function {
return (event: any /** TODO #9100 */) => {
if (StringWrapper.equals(KeyEventsPlugin.getEventFullKey(event), fullKey)) {
zone.runGuarded(() => handler(event));

View File

@ -5,11 +5,11 @@ var DASH_CASE_REGEXP = /-([a-z])/g;
export function camelCaseToDashCase(input: string): string {
return StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP,
(m: any /** TODO #9100 */) => { return '-' + m[1].toLowerCase(); });
return StringWrapper.replaceAllMapped(
input, CAMEL_CASE_REGEXP, (m: any /** TODO #9100 */) => { return '-' + m[1].toLowerCase(); });
}
export function dashCaseToCamelCase(input: string): string {
return StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP,
(m: any /** TODO #9100 */) => { return m[1].toUpperCase(); });
return StringWrapper.replaceAllMapped(
input, DASH_CASE_REGEXP, (m: any /** TODO #9100 */) => { return m[1].toUpperCase(); });
}

View File

@ -1,27 +1,20 @@
import {AUTO_STYLE, BaseException} from '@angular/core';
import {AnimationDriver, AnimationKeyframe, AnimationPlayer, AnimationStyles, NoOpAnimationPlayer} from '../../core_private';
import {StringMapWrapper} from '../facade/collection';
import {isPresent, isNumber, StringWrapper} from '../facade/lang';
import {BaseException, AUTO_STYLE} from '@angular/core';
import {
AnimationDriver,
AnimationPlayer,
NoOpAnimationPlayer,
AnimationKeyframe,
AnimationStyles
} from '../../core_private';
import {WebAnimationsPlayer} from './web_animations_player';
import {StringWrapper, isNumber, isPresent} from '../facade/lang';
import {getDOM} from './dom_adapter';
import {WebAnimationsPlayer} from './web_animations_player';
export class WebAnimationsDriver implements AnimationDriver {
animate(element: any, startingStyles: AnimationStyles, keyframes: AnimationKeyframe[], duration: number, delay: number,
easing: string): AnimationPlayer {
animate(
element: any, startingStyles: AnimationStyles, keyframes: AnimationKeyframe[],
duration: number, delay: number, easing: string): AnimationPlayer {
var anyElm = <any>element;
var formattedSteps: any[] /** TODO #9100 */ = [];
var startingStyleLookup: {[key: string]: string|number}= {};
var startingStyleLookup: {[key: string]: string | number} = {};
if (isPresent(startingStyles) && startingStyles.styles.length > 0) {
startingStyleLookup = _populateStyles(anyElm, startingStyles, {});
startingStyleLookup['offset'] = 0;
@ -52,20 +45,22 @@ export class WebAnimationsDriver implements AnimationDriver {
}
}
function _populateStyles(element: any, styles: AnimationStyles, defaultStyles: {[key: string]: string|number}) {
function _populateStyles(
element: any, styles: AnimationStyles, defaultStyles: {[key: string]: string | number}) {
var data = {};
styles.styles.forEach((entry) => {
StringMapWrapper.forEach(entry, (val: any /** TODO #9100 */, prop: any /** TODO #9100 */) => {
(data as any /** TODO #9100 */)[prop] = val == AUTO_STYLE
? _computeStyle(element, prop)
: val.toString() + _resolveStyleUnit(val, prop);
(data as any /** TODO #9100 */)[prop] = val == AUTO_STYLE ?
_computeStyle(element, prop) :
val.toString() + _resolveStyleUnit(val, prop);
});
});
StringMapWrapper.forEach(defaultStyles, (value: any /** TODO #9100 */, prop: any /** TODO #9100 */) => {
if (!isPresent((data as any /** TODO #9100 */)[prop])) {
(data as any /** TODO #9100 */)[prop] = value;
}
});
StringMapWrapper.forEach(
defaultStyles, (value: any /** TODO #9100 */, prop: any /** TODO #9100 */) => {
if (!isPresent((data as any /** TODO #9100 */)[prop])) {
(data as any /** TODO #9100 */)[prop] = value;
}
});
return data;
}

View File

@ -1,5 +1,6 @@
import {isPresent} from '../facade/lang';
import {AnimationPlayer} from '../../core_private';
import {isPresent} from '../facade/lang';
import {DomAnimatePlayer} from './dom_animate_player';
export class WebAnimationsPlayer implements AnimationPlayer {
@ -47,11 +48,7 @@ export class WebAnimationsPlayer implements AnimationPlayer {
this._onFinish();
}
setPosition(p: any /** TODO #9100 */): void {
this._player.currentTime = p * this.totalTime;
}
setPosition(p: any /** TODO #9100 */): void { this._player.currentTime = p * this.totalTime; }
getPosition(): number {
return this._player.currentTime / this.totalTime;
}
getPosition(): number { return this._player.currentTime / this.totalTime; }
}

View File

@ -1,13 +1,14 @@
import {Injectable} from '@angular/core';
import {SecurityContext, SanitizationService} from '../../core_private';
import {SanitizationService, SecurityContext} from '../../core_private';
import {sanitizeHtml} from './html_sanitizer';
import {sanitizeUrl} from './url_sanitizer';
import {sanitizeStyle} from './style_sanitizer';
import {sanitizeUrl} from './url_sanitizer';
export {SecurityContext};
/** Marker interface for a value that's safe to use in a particular context. */
export interface SafeValue {}
/** Marker interface for a value that's safe to use as HTML. */

View File

@ -1,8 +1,9 @@
import {getDOM, DomAdapter} from '../dom/dom_adapter';
import {DomAdapter, getDOM} from '../dom/dom_adapter';
import {assertionsEnabled} from '../facade/lang';
import {sanitizeUrl} from './url_sanitizer';
/** A <body> element that can be safely used to parse untrusted HTML. Lazily initialized below. */
let inertElement: HTMLElement = null;
/** Lazily initialized to make sure the DOM adapter gets set before use. */
@ -36,7 +37,7 @@ function tagSet(tags: string): {[k: string]: boolean} {
return res;
}
function merge(...sets: { [k: string]: boolean }[]): {[k: string]: boolean} {
function merge(...sets: {[k: string]: boolean}[]): {[k: string]: boolean} {
let res: {[k: string]: boolean} = {};
for (let s of sets) {
for (let v in s) {
@ -72,9 +73,10 @@ const BLOCK_ELEMENTS = merge(
// Inline Elements - HTML5
const INLINE_ELEMENTS = merge(
OPTIONAL_END_TAG_INLINE_ELEMENTS,
tagSet('a,abbr,acronym,b,' +
'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +
'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));
tagSet(
'a,abbr,acronym,b,' +
'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +
'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));
const VALID_ELEMENTS =
merge(VOID_ELEMENTS, BLOCK_ELEMENTS, INLINE_ELEMENTS, OPTIONAL_END_TAG_ELEMENTS);
@ -82,12 +84,12 @@ const VALID_ELEMENTS =
// Attributes that have href and hence need to be sanitized
const URI_ATTRS = tagSet('background,cite,href,longdesc,src,xlink:href');
const HTML_ATTRS =
tagSet('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
'valign,value,vspace,width');
const HTML_ATTRS = tagSet(
'abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
'valign,value,vspace,width');
// NB: This currently conciously doesn't support SVG. SVG sanitization has had several security
// issues in the past, so it seems safer to leave it out if possible. If support for binding SVG via
@ -183,14 +185,16 @@ const NON_ALPHANUMERIC_REGEXP = /([^\#-~ |!])/g;
*/
function encodeEntities(value: any /** TODO #9100 */) {
return value.replace(/&/g, '&amp;')
.replace(SURROGATE_PAIR_REGEXP,
function(match: any /** TODO #9100 */) {
let hi = match.charCodeAt(0);
let low = match.charCodeAt(1);
return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
})
.replace(NON_ALPHANUMERIC_REGEXP,
function(match: any /** TODO #9100 */) { return '&#' + match.charCodeAt(0) + ';'; })
.replace(
SURROGATE_PAIR_REGEXP,
function(match: any /** TODO #9100 */) {
let hi = match.charCodeAt(0);
let low = match.charCodeAt(1);
return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
})
.replace(
NON_ALPHANUMERIC_REGEXP,
function(match: any /** TODO #9100 */) { return '&#' + match.charCodeAt(0) + ';'; })
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;');
}

View File

@ -30,7 +30,8 @@ import {assertionsEnabled} from '../facade/lang';
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
/** A pattern that matches safe data URLs. Only matches image and video types. */
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm));base64,[a-z0-9+\/]+=*$/i;
const DATA_URL_PATTERN =
/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm));base64,[a-z0-9+\/]+=*$/i;
export function sanitizeUrl(url: string): string {
url = String(url);

View File

@ -1,15 +1,12 @@
import {MessageBus} from './message_bus';
import {print, isPresent, DateWrapper, stringify, StringWrapper} from '../../facade/lang';
import {
PromiseCompleter,
PromiseWrapper,
ObservableWrapper,
EventEmitter
} from '../../facade/async';
import {StringMapWrapper} from '../../facade/collection';
import {Serializer} from './serializer';
import {Injectable, Type} from '@angular/core';
import {EventEmitter, ObservableWrapper, PromiseCompleter, PromiseWrapper} from '../../facade/async';
import {StringMapWrapper} from '../../facade/collection';
import {DateWrapper, StringWrapper, isPresent, print, stringify} from '../../facade/lang';
import {MessageBus} from './message_bus';
import {Serializer} from './serializer';
export abstract class ClientMessageBrokerFactory {
/**
* Initializes the given channel and attaches a new {@link ClientMessageBroker} to it.
@ -45,13 +42,14 @@ export class ClientMessageBroker_ extends ClientMessageBroker {
/** @internal */
public _serializer: Serializer;
constructor(messageBus: MessageBus, _serializer: Serializer, public channel: any /** TODO #9100 */) {
constructor(
messageBus: MessageBus, _serializer: Serializer, public channel: any /** TODO #9100 */) {
super();
this._sink = messageBus.to(channel);
this._serializer = _serializer;
var source = messageBus.from(channel);
ObservableWrapper.subscribe(source,
(message: {[key: string]: any}) => this._handleMessage(message));
ObservableWrapper.subscribe(
source, (message: {[key: string]: any}) => this._handleMessage(message));
}
private _generateMessageId(name: string): string {
@ -112,10 +110,10 @@ export class ClientMessageBroker_ extends ClientMessageBroker {
private _handleMessage(message: {[key: string]: any}): void {
var data = new MessageData(message);
// TODO(jteplitz602): replace these strings with messaging constants #3685
if (StringWrapper.equals(data.type, "result") || StringWrapper.equals(data.type, "error")) {
if (StringWrapper.equals(data.type, 'result') || StringWrapper.equals(data.type, 'error')) {
var id = data.id;
if (this._pending.has(id)) {
if (StringWrapper.equals(data.type, "result")) {
if (StringWrapper.equals(data.type, 'result')) {
this._pending.get(id).resolve(data.value);
} else {
this._pending.get(id).reject(data.value, null);
@ -132,9 +130,9 @@ class MessageData {
id: string;
constructor(data: {[key: string]: any}) {
this.type = StringMapWrapper.get(data, "type");
this.id = this._getValueIfPresent(data, "id");
this.value = this._getValueIfPresent(data, "value");
this.type = StringMapWrapper.get(data, 'type');
this.id = this._getValueIfPresent(data, 'id');
this.value = this._getValueIfPresent(data, 'value');
}
/**

View File

@ -1,6 +1,8 @@
import {EventEmitter} from '../../facade/async';
import {NgZone} from '@angular/core';
import {EventEmitter} from '../../facade/async';
/**
* Message Bus is a low level API used to communicate between the UI and the background.
* Communication is based on a channel abstraction. Messages published in a

View File

@ -2,6 +2,6 @@
* All channels used by angular's WebWorker components are listed here.
* You should not use these channels in your application code.
*/
export const RENDERER_CHANNEL = "ng-Renderer";
export const EVENT_CHANNEL = "ng-Events";
export const ROUTER_CHANNEL = "ng-Router";
export const RENDERER_CHANNEL = 'ng-Renderer';
export const EVENT_CHANNEL = 'ng-Events';
export const ROUTER_CHANNEL = 'ng-Router';

View File

@ -1,11 +1,16 @@
import {MessageBus, MessageBusSource, MessageBusSink} from './message_bus';
import {BaseException} from '../../facade/exceptions';
import {EventEmitter, ObservableWrapper} from '../../facade/async';
import {StringMapWrapper} from '../../facade/collection';
import {Injectable, NgZone} from '@angular/core';
import {EventEmitter, ObservableWrapper} from '../../facade/async';
import {StringMapWrapper} from '../../facade/collection';
import {BaseException} from '../../facade/exceptions';
import {MessageBus, MessageBusSink, MessageBusSource} from './message_bus';
// TODO(jteplitz602) Replace this with the definition in lib.webworker.d.ts(#3492)
export interface PostMessageTarget { postMessage: (message: any, transfer?:[ArrayBuffer]) => void; }
export interface PostMessageTarget {
postMessage: (message: any, transfer?: [ArrayBuffer]) => void;
}
export class PostMessageBusSink implements MessageBusSink {
private _zone: NgZone;
@ -63,11 +68,11 @@ export class PostMessageBusSource implements MessageBusSource {
constructor(eventTarget?: EventTarget) {
if (eventTarget) {
eventTarget.addEventListener("message", (ev: MessageEvent) => this._handleMessages(ev));
eventTarget.addEventListener('message', (ev: MessageEvent) => this._handleMessages(ev));
} else {
// if no eventTarget is given we assume we're in a WebWorker and listen on the global scope
const workerScope = <EventTarget>self;
workerScope.addEventListener("message", (ev: MessageEvent) => this._handleMessages(ev));
workerScope.addEventListener('message', (ev: MessageEvent) => this._handleMessages(ev));
}
}

View File

@ -1,7 +1,8 @@
// This file contains interface versions of browser types that can be serialized to Plain Old
// JavaScript Objects
export class LocationType {
constructor(public href: string, public protocol: string, public host: string,
public hostname: string, public port: string, public pathname: string,
public search: string, public hash: string, public origin: string) {}
constructor(
public href: string, public protocol: string, public host: string, public hostname: string,
public port: string, public pathname: string, public search: string, public hash: string,
public origin: string) {}
}

View File

@ -1,11 +1,14 @@
import {Type, isArray, isPresent, serializeEnum} from '../../facade/lang';
import {BaseException} from '../../facade/exceptions';
import {Map, StringMapWrapper, MapWrapper} from '../../facade/collection';
import {RenderComponentType, Injectable, ViewEncapsulation} from '@angular/core';
import {Injectable, RenderComponentType, ViewEncapsulation} from '@angular/core';
import {VIEW_ENCAPSULATION_VALUES} from '../../../core_private';
import {Map, MapWrapper, StringMapWrapper} from '../../facade/collection';
import {BaseException} from '../../facade/exceptions';
import {Type, isArray, isPresent, serializeEnum} from '../../facade/lang';
import {RenderStore} from './render_store';
import {LocationType} from './serialized_types';
// PRIMITIVE is any type that does not need to be serialized (string, number, boolean)
// We set it to String so that it is considered a Type.
export const PRIMITIVE: Type = String;
@ -33,7 +36,7 @@ export class Serializer {
} else if (type === LocationType) {
return this._serializeLocation(obj);
} else {
throw new BaseException("No serializer for " + type.toString());
throw new BaseException('No serializer for ' + type.toString());
}
}
@ -59,7 +62,7 @@ export class Serializer {
} else if (type === LocationType) {
return this._deserializeLocation(map);
} else {
throw new BaseException("No deserializer for " + type.toString());
throw new BaseException('No deserializer for ' + type.toString());
}
}
@ -78,8 +81,9 @@ export class Serializer {
}
private _deserializeLocation(loc: {[key: string]: any}): LocationType {
return new LocationType(loc['href'], loc['protocol'], loc['host'], loc['hostname'], loc['port'],
loc['pathname'], loc['search'], loc['hash'], loc['origin']);
return new LocationType(
loc['href'], loc['protocol'], loc['host'], loc['hostname'], loc['port'], loc['pathname'],
loc['search'], loc['hash'], loc['origin']);
}
private _serializeRenderComponentType(obj: RenderComponentType): Object {
@ -93,9 +97,10 @@ export class Serializer {
}
private _deserializeRenderComponentType(map: {[key: string]: any}): RenderComponentType {
return new RenderComponentType(map['id'], map['templateUrl'], map['slotCount'],
this.deserialize(map['encapsulation'], ViewEncapsulation),
this.deserialize(map['styles'], PRIMITIVE));
return new RenderComponentType(
map['id'], map['templateUrl'], map['slotCount'],
this.deserialize(map['encapsulation'], ViewEncapsulation),
this.deserialize(map['styles'], PRIMITIVE));
}
}

View File

@ -1,9 +1,10 @@
import {Injectable} from '@angular/core';
import {EventEmitter, ObservableWrapper, PromiseWrapper} from '../../facade/async';
import {ListWrapper, Map} from '../../facade/collection';
import {Serializer} from '../shared/serializer';
import {isPresent, Type, FunctionWrapper} from '../../facade/lang';
import {FunctionWrapper, Type, isPresent} from '../../facade/lang';
import {MessageBus} from '../shared/message_bus';
import {EventEmitter, PromiseWrapper, ObservableWrapper} from '../../facade/async';
import {Serializer} from '../shared/serializer';
export abstract class ServiceMessageBrokerFactory {
/**
@ -29,8 +30,8 @@ export class ServiceMessageBrokerFactory_ extends ServiceMessageBrokerFactory {
}
export abstract class ServiceMessageBroker {
abstract registerMethod(methodName: string, signature: Type[], method: Function,
returnType?: Type): void;
abstract registerMethod(
methodName: string, signature: Type[], method: Function, returnType?: Type): void;
}
/**
@ -43,15 +44,18 @@ export class ServiceMessageBroker_ extends ServiceMessageBroker {
private _sink: EventEmitter<any>;
private _methods: Map<string, Function> = new Map<string, Function>();
constructor(messageBus: MessageBus, private _serializer: Serializer, public channel: any /** TODO #9100 */) {
constructor(
messageBus: MessageBus, private _serializer: Serializer,
public channel: any /** TODO #9100 */) {
super();
this._sink = messageBus.to(channel);
var source = messageBus.from(channel);
ObservableWrapper.subscribe(source, (message) => this._handleMessage(message));
}
registerMethod(methodName: string, signature: Type[], method: (..._: any[]) => Promise<any>| void,
returnType?: Type): void {
registerMethod(
methodName: string, signature: Type[], method: (..._: any[]) => Promise<any>| void,
returnType?: Type): void {
this._methods.set(methodName, (message: ReceivedMessage) => {
var serializedArgs = message.args;
let numArgs = signature === null ? 0 : signature.length;

View File

@ -1,13 +1,8 @@
import {Serializer, RenderStoreObject} from '../shared/serializer';
import {
serializeMouseEvent,
serializeKeyboardEvent,
serializeGenericEvent,
serializeEventWithTarget,
serializeTransitionEvent
} from './event_serializer';
import {BaseException} from '../../facade/exceptions';
import {EventEmitter, ObservableWrapper} from '../../facade/async';
import {BaseException} from '../../facade/exceptions';
import {RenderStoreObject, Serializer} from '../shared/serializer';
import {serializeEventWithTarget, serializeGenericEvent, serializeKeyboardEvent, serializeMouseEvent, serializeTransitionEvent} from './event_serializer';
export class EventDispatcher {
constructor(private _sink: EventEmitter<any>, private _serializer: Serializer) {}
@ -16,90 +11,90 @@ export class EventDispatcher {
var serializedEvent: any /** TODO #9100 */;
// TODO (jteplitz602): support custom events #3350
switch (event.type) {
case "click":
case "mouseup":
case "mousedown":
case "dblclick":
case "contextmenu":
case "mouseenter":
case "mouseleave":
case "mousemove":
case "mouseout":
case "mouseover":
case "show":
case 'click':
case 'mouseup':
case 'mousedown':
case 'dblclick':
case 'contextmenu':
case 'mouseenter':
case 'mouseleave':
case 'mousemove':
case 'mouseout':
case 'mouseover':
case 'show':
serializedEvent = serializeMouseEvent(event);
break;
case "keydown":
case "keypress":
case "keyup":
case 'keydown':
case 'keypress':
case 'keyup':
serializedEvent = serializeKeyboardEvent(event);
break;
case "input":
case "change":
case "blur":
case 'input':
case 'change':
case 'blur':
serializedEvent = serializeEventWithTarget(event);
break;
case "abort":
case "afterprint":
case "beforeprint":
case "cached":
case "canplay":
case "canplaythrough":
case "chargingchange":
case "chargingtimechange":
case "close":
case "dischargingtimechange":
case "DOMContentLoaded":
case "downloading":
case "durationchange":
case "emptied":
case "ended":
case "error":
case "fullscreenchange":
case "fullscreenerror":
case "invalid":
case "languagechange":
case "levelfchange":
case "loadeddata":
case "loadedmetadata":
case "obsolete":
case "offline":
case "online":
case "open":
case "orientatoinchange":
case "pause":
case "pointerlockchange":
case "pointerlockerror":
case "play":
case "playing":
case "ratechange":
case "readystatechange":
case "reset":
case "scroll":
case "seeked":
case "seeking":
case "stalled":
case "submit":
case "success":
case "suspend":
case "timeupdate":
case "updateready":
case "visibilitychange":
case "volumechange":
case "waiting":
case 'abort':
case 'afterprint':
case 'beforeprint':
case 'cached':
case 'canplay':
case 'canplaythrough':
case 'chargingchange':
case 'chargingtimechange':
case 'close':
case 'dischargingtimechange':
case 'DOMContentLoaded':
case 'downloading':
case 'durationchange':
case 'emptied':
case 'ended':
case 'error':
case 'fullscreenchange':
case 'fullscreenerror':
case 'invalid':
case 'languagechange':
case 'levelfchange':
case 'loadeddata':
case 'loadedmetadata':
case 'obsolete':
case 'offline':
case 'online':
case 'open':
case 'orientatoinchange':
case 'pause':
case 'pointerlockchange':
case 'pointerlockerror':
case 'play':
case 'playing':
case 'ratechange':
case 'readystatechange':
case 'reset':
case 'scroll':
case 'seeked':
case 'seeking':
case 'stalled':
case 'submit':
case 'success':
case 'suspend':
case 'timeupdate':
case 'updateready':
case 'visibilitychange':
case 'volumechange':
case 'waiting':
serializedEvent = serializeGenericEvent(event);
break;
case "transitionend":
case 'transitionend':
serializedEvent = serializeTransitionEvent(event);
break;
default:
throw new BaseException(eventName + " not supported on WebWorkers");
throw new BaseException(eventName + ' not supported on WebWorkers');
}
ObservableWrapper.callEmit(this._sink, {
"element": this._serializer.serialize(element, RenderStoreObject),
"eventName": eventName,
"eventTarget": eventTarget,
"event": serializedEvent
'element': this._serializer.serialize(element, RenderStoreObject),
'eventName': eventName,
'eventTarget': eventTarget,
'event': serializedEvent
});
// TODO(kegluneq): Eventually, we want the user to indicate from the UI side whether the event

View File

@ -2,34 +2,13 @@ import {Set} from '../../facade/collection';
import {isPresent} from '../../facade/lang';
const MOUSE_EVENT_PROPERTIES = [
"altKey",
"button",
"clientX",
"clientY",
"metaKey",
"movementX",
"movementY",
"offsetX",
"offsetY",
"region",
"screenX",
"screenY",
"shiftKey"
'altKey', 'button', 'clientX', 'clientY', 'metaKey', 'movementX', 'movementY', 'offsetX',
'offsetY', 'region', 'screenX', 'screenY', 'shiftKey'
];
const KEYBOARD_EVENT_PROPERTIES = [
'altkey',
'charCode',
'code',
'ctrlKey',
'isComposing',
'key',
'keyCode',
'location',
'metaKey',
'repeat',
'shiftKey',
'which'
'altkey', 'charCode', 'code', 'ctrlKey', 'isComposing', 'key', 'keyCode', 'location', 'metaKey',
'repeat', 'shiftKey', 'which'
];
const TRANSITION_EVENT_PROPERTIES = ['propertyName', 'elapsedTime', 'pseudoElement'];
@ -37,7 +16,7 @@ const TRANSITION_EVENT_PROPERTIES = ['propertyName', 'elapsedTime', 'pseudoEleme
const EVENT_PROPERTIES = ['type', 'bubbles', 'cancelable'];
const NODES_WITH_VALUE = new Set(
["input", "select", "option", "button", "li", "meter", "progress", "param", "textarea"]);
['input', 'select', 'option', 'button', 'li', 'meter', 'progress', 'param', 'textarea']);
export function serializeGenericEvent(e: Event): {[key: string]: any} {
return serializeEvent(e, EVENT_PROPERTIES);

View File

@ -1,14 +1,16 @@
import {MessageBasedPlatformLocation} from './platform_location';
import {BrowserPlatformLocation} from '../../browser/location/browser_platform_location';
import {APP_INITIALIZER, Injector, NgZone} from '@angular/core';
import {BrowserPlatformLocation} from '../../browser/location/browser_platform_location';
import {MessageBasedPlatformLocation} from './platform_location';
/**
* A list of {@link Provider}s. To use the router in a Worker enabled application you must
* include these providers when setting up the render thread.
*/
export const WORKER_RENDER_LOCATION_PROVIDERS = [
MessageBasedPlatformLocation,
BrowserPlatformLocation,
MessageBasedPlatformLocation, BrowserPlatformLocation,
{provide: APP_INITIALIZER, useFactory: initUiLocation, multi: true, deps: [Injector]}
];

View File

@ -1,22 +1,24 @@
import {BrowserPlatformLocation} from '../../browser/location/browser_platform_location';
import {UrlChangeListener} from '@angular/common';
import {Injectable} from '@angular/core';
import {ROUTER_CHANNEL} from '../shared/messaging_api';
import {ServiceMessageBrokerFactory, ServiceMessageBroker} from '../shared/service_message_broker';
import {PRIMITIVE, Serializer} from '../shared/serializer';
import {LocationType} from '../shared/serialized_types';
import {MessageBus} from '../shared/message_bus';
import {BrowserPlatformLocation} from '../../browser/location/browser_platform_location';
import {EventEmitter, ObservableWrapper, PromiseWrapper} from '../../facade/async';
import {FunctionWrapper} from '../../facade/lang';
import {MessageBus} from '../shared/message_bus';
import {ROUTER_CHANNEL} from '../shared/messaging_api';
import {LocationType} from '../shared/serialized_types';
import {PRIMITIVE, Serializer} from '../shared/serializer';
import {ServiceMessageBroker, ServiceMessageBrokerFactory} from '../shared/service_message_broker';
@Injectable()
export class MessageBasedPlatformLocation {
private _channelSink: EventEmitter<Object>;
private _broker: ServiceMessageBroker;
constructor(private _brokerFactory: ServiceMessageBrokerFactory,
private _platformLocation: BrowserPlatformLocation, bus: MessageBus,
private _serializer: Serializer) {
constructor(
private _brokerFactory: ServiceMessageBrokerFactory,
private _platformLocation: BrowserPlatformLocation, bus: MessageBus,
private _serializer: Serializer) {
this._platformLocation.onPopState(
<UrlChangeListener>FunctionWrapper.bind(this._sendUrlChangeEvent, this));
this._platformLocation.onHashChange(
@ -26,21 +28,21 @@ export class MessageBasedPlatformLocation {
}
start(): void {
this._broker.registerMethod("getLocation", null, FunctionWrapper.bind(this._getLocation, this),
LocationType);
this._broker.registerMethod("setPathname", [PRIMITIVE],
FunctionWrapper.bind(this._setPathname, this));
this._broker.registerMethod(
"pushState", [PRIMITIVE, PRIMITIVE, PRIMITIVE],
'getLocation', null, FunctionWrapper.bind(this._getLocation, this), LocationType);
this._broker.registerMethod(
'setPathname', [PRIMITIVE], FunctionWrapper.bind(this._setPathname, this));
this._broker.registerMethod(
'pushState', [PRIMITIVE, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._platformLocation.pushState, this._platformLocation));
this._broker.registerMethod(
"replaceState", [PRIMITIVE, PRIMITIVE, PRIMITIVE],
'replaceState', [PRIMITIVE, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._platformLocation.replaceState, this._platformLocation));
this._broker.registerMethod(
"forward", null,
'forward', null,
FunctionWrapper.bind(this._platformLocation.forward, this._platformLocation));
this._broker.registerMethod(
"back", null, FunctionWrapper.bind(this._platformLocation.back, this._platformLocation));
'back', null, FunctionWrapper.bind(this._platformLocation.back, this._platformLocation));
}
private _getLocation(): Promise<Location> {

View File

@ -1,75 +1,88 @@
import {Injectable, RootRenderer, Renderer, RenderComponentType} from '@angular/core';
import {MessageBus} from '../shared/message_bus';
import {Serializer, PRIMITIVE, RenderStoreObject} from '../shared/serializer';
import {EVENT_CHANNEL, RENDERER_CHANNEL} from '../shared/messaging_api';
import {EventDispatcher} from '../ui/event_dispatcher';
import {RenderStore} from '../shared/render_store';
import {ServiceMessageBrokerFactory} from '../shared/service_message_broker';
import {Injectable, RenderComponentType, Renderer, RootRenderer} from '@angular/core';
import {FunctionWrapper} from '../../facade/lang';
import {MessageBus} from '../shared/message_bus';
import {EVENT_CHANNEL, RENDERER_CHANNEL} from '../shared/messaging_api';
import {RenderStore} from '../shared/render_store';
import {PRIMITIVE, RenderStoreObject, Serializer} from '../shared/serializer';
import {ServiceMessageBrokerFactory} from '../shared/service_message_broker';
import {EventDispatcher} from '../ui/event_dispatcher';
@Injectable()
export class MessageBasedRenderer {
private _eventDispatcher: EventDispatcher;
constructor(private _brokerFactory: ServiceMessageBrokerFactory, private _bus: MessageBus,
private _serializer: Serializer, private _renderStore: RenderStore,
private _rootRenderer: RootRenderer) {}
constructor(
private _brokerFactory: ServiceMessageBrokerFactory, private _bus: MessageBus,
private _serializer: Serializer, private _renderStore: RenderStore,
private _rootRenderer: RootRenderer) {}
start(): void {
var broker = this._brokerFactory.createMessageBroker(RENDERER_CHANNEL);
this._bus.initChannel(EVENT_CHANNEL);
this._eventDispatcher = new EventDispatcher(this._bus.to(EVENT_CHANNEL), this._serializer);
broker.registerMethod("renderComponent", [RenderComponentType, PRIMITIVE],
FunctionWrapper.bind(this._renderComponent, this));
broker.registerMethod(
'renderComponent', [RenderComponentType, PRIMITIVE],
FunctionWrapper.bind(this._renderComponent, this));
broker.registerMethod("selectRootElement", [RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._selectRootElement, this));
broker.registerMethod("createElement",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._createElement, this));
broker.registerMethod("createViewRoot", [RenderStoreObject, RenderStoreObject, PRIMITIVE],
FunctionWrapper.bind(this._createViewRoot, this));
broker.registerMethod("createTemplateAnchor", [RenderStoreObject, RenderStoreObject, PRIMITIVE],
FunctionWrapper.bind(this._createTemplateAnchor, this));
broker.registerMethod("createText",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._createText, this));
broker.registerMethod("projectNodes", [RenderStoreObject, RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._projectNodes, this));
broker.registerMethod("attachViewAfter",
[RenderStoreObject, RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._attachViewAfter, this));
broker.registerMethod("detachView", [RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._detachView, this));
broker.registerMethod("destroyView", [RenderStoreObject, RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._destroyView, this));
broker.registerMethod("setElementProperty",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementProperty, this));
broker.registerMethod("setElementAttribute",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementAttribute, this));
broker.registerMethod("setBindingDebugInfo",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setBindingDebugInfo, this));
broker.registerMethod("setElementClass",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementClass, this));
broker.registerMethod("setElementStyle",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementStyle, this));
broker.registerMethod("invokeElementMethod",
[RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._invokeElementMethod, this));
broker.registerMethod("setText", [RenderStoreObject, RenderStoreObject, PRIMITIVE],
FunctionWrapper.bind(this._setText, this));
broker.registerMethod("listen", [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._listen, this));
broker.registerMethod("listenGlobal", [RenderStoreObject, PRIMITIVE, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._listenGlobal, this));
broker.registerMethod("listenDone", [RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._listenDone, this));
broker.registerMethod(
'selectRootElement', [RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._selectRootElement, this));
broker.registerMethod(
'createElement', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._createElement, this));
broker.registerMethod(
'createViewRoot', [RenderStoreObject, RenderStoreObject, PRIMITIVE],
FunctionWrapper.bind(this._createViewRoot, this));
broker.registerMethod(
'createTemplateAnchor', [RenderStoreObject, RenderStoreObject, PRIMITIVE],
FunctionWrapper.bind(this._createTemplateAnchor, this));
broker.registerMethod(
'createText', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._createText, this));
broker.registerMethod(
'projectNodes', [RenderStoreObject, RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._projectNodes, this));
broker.registerMethod(
'attachViewAfter', [RenderStoreObject, RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._attachViewAfter, this));
broker.registerMethod(
'detachView', [RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._detachView, this));
broker.registerMethod(
'destroyView', [RenderStoreObject, RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._destroyView, this));
broker.registerMethod(
'setElementProperty', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementProperty, this));
broker.registerMethod(
'setElementAttribute', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementAttribute, this));
broker.registerMethod(
'setBindingDebugInfo', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setBindingDebugInfo, this));
broker.registerMethod(
'setElementClass', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementClass, this));
broker.registerMethod(
'setElementStyle', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._setElementStyle, this));
broker.registerMethod(
'invokeElementMethod', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._invokeElementMethod, this));
broker.registerMethod(
'setText', [RenderStoreObject, RenderStoreObject, PRIMITIVE],
FunctionWrapper.bind(this._setText, this));
broker.registerMethod(
'listen', [RenderStoreObject, RenderStoreObject, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._listen, this));
broker.registerMethod(
'listenGlobal', [RenderStoreObject, PRIMITIVE, PRIMITIVE, PRIMITIVE],
FunctionWrapper.bind(this._listenGlobal, this));
broker.registerMethod(
'listenDone', [RenderStoreObject, RenderStoreObject],
FunctionWrapper.bind(this._listenDone, this));
}
private _renderComponent(renderComponentType: RenderComponentType, rendererId: number) {
@ -119,33 +132,33 @@ export class MessageBasedRenderer {
}
}
private _setElementProperty(renderer: Renderer, renderElement: any, propertyName: string,
propertyValue: any) {
private _setElementProperty(
renderer: Renderer, renderElement: any, propertyName: string, propertyValue: any) {
renderer.setElementProperty(renderElement, propertyName, propertyValue);
}
private _setElementAttribute(renderer: Renderer, renderElement: any, attributeName: string,
attributeValue: string) {
private _setElementAttribute(
renderer: Renderer, renderElement: any, attributeName: string, attributeValue: string) {
renderer.setElementAttribute(renderElement, attributeName, attributeValue);
}
private _setBindingDebugInfo(renderer: Renderer, renderElement: any, propertyName: string,
propertyValue: string) {
private _setBindingDebugInfo(
renderer: Renderer, renderElement: any, propertyName: string, propertyValue: string) {
renderer.setBindingDebugInfo(renderElement, propertyName, propertyValue);
}
private _setElementClass(renderer: Renderer, renderElement: any, className: string,
isAdd: boolean) {
private _setElementClass(
renderer: Renderer, renderElement: any, className: string, isAdd: boolean) {
renderer.setElementClass(renderElement, className, isAdd);
}
private _setElementStyle(renderer: Renderer, renderElement: any, styleName: string,
styleValue: string) {
private _setElementStyle(
renderer: Renderer, renderElement: any, styleName: string, styleValue: string) {
renderer.setElementStyle(renderElement, styleName, styleValue);
}
private _invokeElementMethod(renderer: Renderer, renderElement: any, methodName: string,
args: any[]) {
private _invokeElementMethod(
renderer: Renderer, renderElement: any, methodName: string, args: any[]) {
renderer.invokeElementMethod(renderElement, methodName, args);
}
@ -154,17 +167,19 @@ export class MessageBasedRenderer {
}
private _listen(renderer: Renderer, renderElement: any, eventName: string, unlistenId: number) {
var unregisterCallback = renderer.listen(renderElement, eventName,
(event: any /** TODO #9100 */) => this._eventDispatcher.dispatchRenderEvent(
renderElement, null, eventName, event));
var unregisterCallback = renderer.listen(
renderElement, eventName,
(event: any /** TODO #9100 */) =>
this._eventDispatcher.dispatchRenderEvent(renderElement, null, eventName, event));
this._renderStore.store(unregisterCallback, unlistenId);
}
private _listenGlobal(renderer: Renderer, eventTarget: string, eventName: string,
unlistenId: number) {
private _listenGlobal(
renderer: Renderer, eventTarget: string, eventName: string, unlistenId: number) {
var unregisterCallback = renderer.listenGlobal(
eventTarget, eventName,
(event: any /** TODO #9100 */) => this._eventDispatcher.dispatchRenderEvent(null, eventTarget, eventName, event));
(event: any /** TODO #9100 */) =>
this._eventDispatcher.dispatchRenderEvent(null, eventTarget, eventName, event));
this._renderStore.store(unregisterCallback, unlistenId);
}

View File

@ -1,6 +1,6 @@
// no deserialization is necessary in TS.
// This is only here to match dart interface
export function deserializeGenericEvent(
serializedEvent: {[key: string]: any}): {[key: string]: any} {
export function deserializeGenericEvent(serializedEvent: {[key: string]: any}):
{[key: string]: any} {
return serializedEvent;
}

View File

@ -1,18 +1,23 @@
import {NgZone, APP_INITIALIZER} from '@angular/core';
import {PlatformLocation} from '@angular/common';
import {APP_INITIALIZER, NgZone} from '@angular/core';
import {WebWorkerPlatformLocation} from './platform_location';
/**
* Those providers should be added when the router is used in a worker context in addition to the
* {@link ROUTER_PROVIDERS} and after them.
*/
export const WORKER_APP_LOCATION_PROVIDERS = [
{provide: PlatformLocation, useClass: WebWorkerPlatformLocation},
{provide: APP_INITIALIZER, useFactory: appInitFnFactory, multi: true, deps: [PlatformLocation, NgZone]}
{provide: PlatformLocation, useClass: WebWorkerPlatformLocation}, {
provide: APP_INITIALIZER,
useFactory: appInitFnFactory,
multi: true,
deps: [PlatformLocation, NgZone]
}
];
function appInitFnFactory(platformLocation: WebWorkerPlatformLocation, zone: NgZone): () => Promise<boolean> {
return () => {
return zone.runGuarded(() => platformLocation.init());
};
function appInitFnFactory(platformLocation: WebWorkerPlatformLocation, zone: NgZone): () =>
Promise<boolean> {
return () => { return zone.runGuarded(() => platformLocation.init()); };
}

View File

@ -1,19 +1,16 @@
import {Injectable} from '@angular/core';
import {
FnArg,
UiArguments,
ClientMessageBroker,
ClientMessageBrokerFactory
} from '../shared/client_message_broker';
import {PlatformLocation, UrlChangeListener} from '@angular/common';
import {Injectable} from '@angular/core';
import {EventEmitter, ObservableWrapper, PromiseWrapper} from '../../facade/async';
import {StringMapWrapper} from '../../facade/collection';
import {BaseException} from '../../facade/exceptions';
import {StringWrapper} from '../../facade/lang';
import {ClientMessageBroker, ClientMessageBrokerFactory, FnArg, UiArguments} from '../shared/client_message_broker';
import {MessageBus} from '../shared/message_bus';
import {ROUTER_CHANNEL} from '../shared/messaging_api';
import {LocationType} from '../shared/serialized_types';
import {PromiseWrapper, EventEmitter, ObservableWrapper} from '../../facade/async';
import {BaseException} from '../../facade/exceptions';
import {PRIMITIVE, Serializer} from '../shared/serializer';
import {MessageBus} from '../shared/message_bus';
import {StringMapWrapper} from '../../facade/collection';
import {StringWrapper} from '../../facade/lang';
import {deserializeGenericEvent} from './event_deserializer';
@Injectable()
@ -24,8 +21,8 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
private _location: LocationType = null;
private _channelSource: EventEmitter<Object>;
constructor(brokerFactory: ClientMessageBrokerFactory, bus: MessageBus,
private _serializer: Serializer) {
constructor(
brokerFactory: ClientMessageBrokerFactory, bus: MessageBus, private _serializer: Serializer) {
super();
this._broker = brokerFactory.createMessageBroker(ROUTER_CHANNEL);
@ -34,9 +31,9 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
var listeners: Array<Function> = null;
if (StringMapWrapper.contains(msg, 'event')) {
let type: string = msg['event']['type'];
if (StringWrapper.equals(type, "popstate")) {
if (StringWrapper.equals(type, 'popstate')) {
listeners = this._popStateListeners;
} else if (StringWrapper.equals(type, "hashchange")) {
} else if (StringWrapper.equals(type, 'hashchange')) {
listeners = this._hashChangeListeners;
}
@ -52,18 +49,21 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
/** @internal **/
init(): Promise<boolean> {
var args: UiArguments = new UiArguments("getLocation");
var args: UiArguments = new UiArguments('getLocation');
var locationPromise: Promise<LocationType> = this._broker.runOnService(args, LocationType);
return PromiseWrapper.then(locationPromise, (val: LocationType): boolean => {
this._location = val;
return true;
}, (err): boolean => { throw new BaseException(err); });
return PromiseWrapper.then(
locationPromise, (val: LocationType):
boolean => {
this._location = val;
return true;
},
(err): boolean => { throw new BaseException(err); });
}
getBaseHrefFromDOM(): string {
throw new BaseException(
"Attempt to get base href from DOM from WebWorker. You must either provide a value for the APP_BASE_HREF token through DI or use the hash location strategy.");
'Attempt to get base href from DOM from WebWorker. You must either provide a value for the APP_BASE_HREF token through DI or use the hash location strategy.');
}
onPopState(fn: UrlChangeListener): void { this._popStateListeners.push(fn); }
@ -96,37 +96,37 @@ export class WebWorkerPlatformLocation extends PlatformLocation {
set pathname(newPath: string) {
if (this._location === null) {
throw new BaseException("Attempt to set pathname before value is obtained from UI");
throw new BaseException('Attempt to set pathname before value is obtained from UI');
}
this._location.pathname = newPath;
var fnArgs = [new FnArg(newPath, PRIMITIVE)];
var args = new UiArguments("setPathname", fnArgs);
var args = new UiArguments('setPathname', fnArgs);
this._broker.runOnService(args, null);
}
pushState(state: any, title: string, url: string): void {
var fnArgs =
[new FnArg(state, PRIMITIVE), new FnArg(title, PRIMITIVE), new FnArg(url, PRIMITIVE)];
var args = new UiArguments("pushState", fnArgs);
var args = new UiArguments('pushState', fnArgs);
this._broker.runOnService(args, null);
}
replaceState(state: any, title: string, url: string): void {
var fnArgs =
[new FnArg(state, PRIMITIVE), new FnArg(title, PRIMITIVE), new FnArg(url, PRIMITIVE)];
var args = new UiArguments("replaceState", fnArgs);
var args = new UiArguments('replaceState', fnArgs);
this._broker.runOnService(args, null);
}
forward(): void {
var args = new UiArguments("forward");
var args = new UiArguments('forward');
this._broker.runOnService(args, null);
}
back(): void {
var args = new UiArguments("back");
var args = new UiArguments('back');
this._broker.runOnService(args, null);
}
}

View File

@ -1,22 +1,16 @@
import {
Renderer,
RootRenderer,
RenderComponentType,
Injectable,
ViewEncapsulation
} from '@angular/core';
import {ClientMessageBrokerFactory, FnArg, UiArguments} from '../shared/client_message_broker';
import {isPresent, isBlank} from '../../facade/lang';
import {ListWrapper} from '../../facade/collection';
import {RenderStore} from '../shared/render_store';
import {RENDERER_CHANNEL, EVENT_CHANNEL} from '../shared/messaging_api';
import {Serializer, RenderStoreObject} from '../shared/serializer';
import {MessageBus} from '../shared/message_bus';
import {ObservableWrapper} from '../../facade/async';
import {deserializeGenericEvent} from './event_deserializer';
import {Injectable, RenderComponentType, Renderer, RootRenderer, ViewEncapsulation} from '@angular/core';
import {AnimationKeyframe, AnimationPlayer, AnimationStyles, RenderDebugInfo} from '../../../core_private';
import {ObservableWrapper} from '../../facade/async';
import {ListWrapper} from '../../facade/collection';
import {isBlank, isPresent} from '../../facade/lang';
import {ClientMessageBrokerFactory, FnArg, UiArguments} from '../shared/client_message_broker';
import {MessageBus} from '../shared/message_bus';
import {EVENT_CHANNEL, RENDERER_CHANNEL} from '../shared/messaging_api';
import {RenderStore} from '../shared/render_store';
import {RenderStoreObject, Serializer} from '../shared/serializer';
import {deserializeGenericEvent} from './event_deserializer';
@Injectable()
export class WebWorkerRootRenderer implements RootRenderer {
@ -25,8 +19,9 @@ export class WebWorkerRootRenderer implements RootRenderer {
private _componentRenderers: Map<string, WebWorkerRenderer> =
new Map<string, WebWorkerRenderer>();
constructor(messageBrokerFactory: ClientMessageBrokerFactory, bus: MessageBus,
private _serializer: Serializer, private _renderStore: RenderStore) {
constructor(
messageBrokerFactory: ClientMessageBrokerFactory, bus: MessageBus,
private _serializer: Serializer, private _renderStore: RenderStore) {
this._messageBroker = messageBrokerFactory.createMessageBroker(RENDERER_CHANNEL);
bus.initChannel(EVENT_CHANNEL);
var source = bus.from(EVENT_CHANNEL);
@ -83,8 +78,8 @@ export class WebWorkerRootRenderer implements RootRenderer {
}
export class WebWorkerRenderer implements Renderer, RenderStoreObject {
constructor(private _rootRenderer: WebWorkerRootRenderer,
private _componentType: RenderComponentType) {}
constructor(
private _rootRenderer: WebWorkerRootRenderer, private _componentType: RenderComponentType) {}
private _runOnService(fnName: string, fnArgs: FnArg[]) {
var fnArgsWithRenderer = [new FnArg(this, RenderStoreObject)].concat(fnArgs);
@ -93,16 +88,15 @@ export class WebWorkerRenderer implements Renderer, RenderStoreObject {
selectRootElement(selectorOrNode: string, debugInfo?: RenderDebugInfo): any {
var node = this._rootRenderer.allocateNode();
this._runOnService('selectRootElement',
[new FnArg(selectorOrNode, null), new FnArg(node, RenderStoreObject)]);
this._runOnService(
'selectRootElement', [new FnArg(selectorOrNode, null), new FnArg(node, RenderStoreObject)]);
return node;
}
createElement(parentElement: any, name: string, debugInfo?: RenderDebugInfo): any {
var node = this._rootRenderer.allocateNode();
this._runOnService('createElement', [
new FnArg(parentElement, RenderStoreObject),
new FnArg(name, null),
new FnArg(parentElement, RenderStoreObject), new FnArg(name, null),
new FnArg(node, RenderStoreObject)
]);
return node;
@ -110,8 +104,8 @@ export class WebWorkerRenderer implements Renderer, RenderStoreObject {
createViewRoot(hostElement: any): any {
var viewRoot = this._componentType.encapsulation === ViewEncapsulation.Native ?
this._rootRenderer.allocateNode() :
hostElement;
this._rootRenderer.allocateNode() :
hostElement;
this._runOnService(
'createViewRoot',
[new FnArg(hostElement, RenderStoreObject), new FnArg(viewRoot, RenderStoreObject)]);
@ -129,8 +123,7 @@ export class WebWorkerRenderer implements Renderer, RenderStoreObject {
createText(parentElement: any, value: string, debugInfo?: RenderDebugInfo): any {
var node = this._rootRenderer.allocateNode();
this._runOnService('createText', [
new FnArg(parentElement, RenderStoreObject),
new FnArg(value, null),
new FnArg(parentElement, RenderStoreObject), new FnArg(value, null),
new FnArg(node, RenderStoreObject)
]);
return node;
@ -161,63 +154,56 @@ export class WebWorkerRenderer implements Renderer, RenderStoreObject {
setElementProperty(renderElement: any, propertyName: string, propertyValue: any) {
this._runOnService('setElementProperty', [
new FnArg(renderElement, RenderStoreObject),
new FnArg(propertyName, null),
new FnArg(renderElement, RenderStoreObject), new FnArg(propertyName, null),
new FnArg(propertyValue, null)
]);
}
setElementAttribute(renderElement: any, attributeName: string, attributeValue: string) {
this._runOnService('setElementAttribute', [
new FnArg(renderElement, RenderStoreObject),
new FnArg(attributeName, null),
new FnArg(renderElement, RenderStoreObject), new FnArg(attributeName, null),
new FnArg(attributeValue, null)
]);
}
setBindingDebugInfo(renderElement: any, propertyName: string, propertyValue: string) {
this._runOnService('setBindingDebugInfo', [
new FnArg(renderElement, RenderStoreObject),
new FnArg(propertyName, null),
new FnArg(renderElement, RenderStoreObject), new FnArg(propertyName, null),
new FnArg(propertyValue, null)
]);
}
setElementClass(renderElement: any, className: string, isAdd: boolean) {
this._runOnService('setElementClass', [
new FnArg(renderElement, RenderStoreObject),
new FnArg(className, null),
new FnArg(renderElement, RenderStoreObject), new FnArg(className, null),
new FnArg(isAdd, null)
]);
}
setElementStyle(renderElement: any, styleName: string, styleValue: string) {
this._runOnService('setElementStyle', [
new FnArg(renderElement, RenderStoreObject),
new FnArg(styleName, null),
new FnArg(renderElement, RenderStoreObject), new FnArg(styleName, null),
new FnArg(styleValue, null)
]);
}
invokeElementMethod(renderElement: any, methodName: string, args?: any[]) {
this._runOnService('invokeElementMethod', [
new FnArg(renderElement, RenderStoreObject),
new FnArg(methodName, null),
new FnArg(renderElement, RenderStoreObject), new FnArg(methodName, null),
new FnArg(args, null)
]);
}
setText(renderNode: any, text: string) {
this._runOnService('setText',
[new FnArg(renderNode, RenderStoreObject), new FnArg(text, null)]);
this._runOnService(
'setText', [new FnArg(renderNode, RenderStoreObject), new FnArg(text, null)]);
}
listen(renderElement: WebWorkerRenderNode, name: string, callback: Function): Function {
renderElement.events.listen(name, callback);
var unlistenCallbackId = this._rootRenderer.allocateId();
this._runOnService('listen', [
new FnArg(renderElement, RenderStoreObject),
new FnArg(name, null),
new FnArg(renderElement, RenderStoreObject), new FnArg(name, null),
new FnArg(unlistenCallbackId, null)
]);
return () => {
@ -238,10 +224,11 @@ export class WebWorkerRenderer implements Renderer, RenderStoreObject {
};
}
animate(element: any, startingStyles: AnimationStyles, keyframes: AnimationKeyframe[], duration: number, delay: number,
easing: string): AnimationPlayer {
// TODO
return null;
animate(
element: any, startingStyles: AnimationStyles, keyframes: AnimationKeyframe[],
duration: number, delay: number, easing: string): AnimationPlayer {
// TODO
return null;
}
}

View File

@ -1,5 +1,6 @@
import {Type} from '../../facade/lang';
import {DomAdapter, setRootDomAdapter} from '../../dom/dom_adapter';
import {Type} from '../../facade/lang';
/**
* This adapter is required to log error messages.
@ -34,127 +35,170 @@ export class WorkerDomAdapter extends DomAdapter {
}
}
hasProperty(element: any /** TODO #9100 */, name: string): boolean { throw "not implemented"; }
setProperty(el: Element, name: string, value: any) { throw "not implemented"; }
getProperty(el: Element, name: string): any { throw "not implemented"; }
invoke(el: Element, methodName: string, args: any[]): any { throw "not implemented"; }
hasProperty(element: any /** TODO #9100 */, name: string): boolean { throw 'not implemented'; }
setProperty(el: Element, name: string, value: any) { throw 'not implemented'; }
getProperty(el: Element, name: string): any { throw 'not implemented'; }
invoke(el: Element, methodName: string, args: any[]): any { throw 'not implemented'; }
getXHR(): Type { throw "not implemented"; }
getXHR(): Type { throw 'not implemented'; }
get attrToPropMap(): {[key: string]: string} { throw "not implemented"; }
set attrToPropMap(value: {[key: string]: string}) { throw "not implemented"; }
get attrToPropMap(): {[key: string]: string} { throw 'not implemented'; }
set attrToPropMap(value: {[key: string]: string}) { throw 'not implemented'; }
parse(templateHtml: string) { throw "not implemented"; }
query(selector: string): any { throw "not implemented"; }
querySelector(el: any /** TODO #9100 */, selector: string): HTMLElement { throw "not implemented"; }
querySelectorAll(el: any /** TODO #9100 */, selector: string): any[] { throw "not implemented"; }
on(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */) { throw "not implemented"; }
onAndCancel(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */): Function { throw "not implemented"; }
dispatchEvent(el: any /** TODO #9100 */, evt: any /** TODO #9100 */) { throw "not implemented"; }
createMouseEvent(eventType: any /** TODO #9100 */): any { throw "not implemented"; }
createEvent(eventType: string): any { throw "not implemented"; }
preventDefault(evt: any /** TODO #9100 */) { throw "not implemented"; }
isPrevented(evt: any /** TODO #9100 */): boolean { throw "not implemented"; }
getInnerHTML(el: any /** TODO #9100 */): string { throw "not implemented"; }
getTemplateContent(el: any /** TODO #9100 */): any { throw "not implemented"; }
getOuterHTML(el: any /** TODO #9100 */): string { throw "not implemented"; }
nodeName(node: any /** TODO #9100 */): string { throw "not implemented"; }
nodeValue(node: any /** TODO #9100 */): string { throw "not implemented"; }
type(node: any /** TODO #9100 */): string { throw "not implemented"; }
content(node: any /** TODO #9100 */): any { throw "not implemented"; }
firstChild(el: any /** TODO #9100 */): Node { throw "not implemented"; }
nextSibling(el: any /** TODO #9100 */): Node { throw "not implemented"; }
parentElement(el: any /** TODO #9100 */): Node { throw "not implemented"; }
childNodes(el: any /** TODO #9100 */): Node[] { throw "not implemented"; }
childNodesAsList(el: any /** TODO #9100 */): Node[] { throw "not implemented"; }
clearNodes(el: any /** TODO #9100 */) { throw "not implemented"; }
appendChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw "not implemented"; }
removeChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw "not implemented"; }
replaceChild(el: any /** TODO #9100 */, newNode: any /** TODO #9100 */, oldNode: any /** TODO #9100 */) { throw "not implemented"; }
remove(el: any /** TODO #9100 */): Node { throw "not implemented"; }
insertBefore(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw "not implemented"; }
insertAllBefore(el: any /** TODO #9100 */, nodes: any /** TODO #9100 */) { throw "not implemented"; }
insertAfter(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw "not implemented"; }
setInnerHTML(el: any /** TODO #9100 */, value: any /** TODO #9100 */) { throw "not implemented"; }
getText(el: any /** TODO #9100 */): string { throw "not implemented"; }
setText(el: any /** TODO #9100 */, value: string) { throw "not implemented"; }
getValue(el: any /** TODO #9100 */): string { throw "not implemented"; }
setValue(el: any /** TODO #9100 */, value: string) { throw "not implemented"; }
getChecked(el: any /** TODO #9100 */): boolean { throw "not implemented"; }
setChecked(el: any /** TODO #9100 */, value: boolean) { throw "not implemented"; }
createComment(text: string): any { throw "not implemented"; }
createTemplate(html: any /** TODO #9100 */): HTMLElement { throw "not implemented"; }
createElement(tagName: any /** TODO #9100 */, doc?: any /** TODO #9100 */): HTMLElement { throw "not implemented"; }
createElementNS(ns: string, tagName: string, doc?: any /** TODO #9100 */): Element { throw "not implemented"; }
createTextNode(text: string, doc?: any /** TODO #9100 */): Text { throw "not implemented"; }
createScriptTag(attrName: string, attrValue: string, doc?: any /** TODO #9100 */): HTMLElement {
throw "not implemented";
parse(templateHtml: string) { throw 'not implemented'; }
query(selector: string): any { throw 'not implemented'; }
querySelector(el: any /** TODO #9100 */, selector: string): HTMLElement {
throw 'not implemented';
}
createStyleElement(css: string, doc?: any /** TODO #9100 */): HTMLStyleElement { throw "not implemented"; }
createShadowRoot(el: any /** TODO #9100 */): any { throw "not implemented"; }
getShadowRoot(el: any /** TODO #9100 */): any { throw "not implemented"; }
getHost(el: any /** TODO #9100 */): any { throw "not implemented"; }
getDistributedNodes(el: any /** TODO #9100 */): Node[] { throw "not implemented"; }
clone(node: Node): Node { throw "not implemented"; }
getElementsByClassName(element: any /** TODO #9100 */, name: string): HTMLElement[] { throw "not implemented"; }
getElementsByTagName(element: any /** TODO #9100 */, name: string): HTMLElement[] { throw "not implemented"; }
classList(element: any /** TODO #9100 */): any[] { throw "not implemented"; }
addClass(element: any /** TODO #9100 */, className: string) { throw "not implemented"; }
removeClass(element: any /** TODO #9100 */, className: string) { throw "not implemented"; }
hasClass(element: any /** TODO #9100 */, className: string): boolean { throw "not implemented"; }
setStyle(element: any /** TODO #9100 */, styleName: string, styleValue: string) { throw "not implemented"; }
removeStyle(element: any /** TODO #9100 */, styleName: string) { throw "not implemented"; }
getStyle(element: any /** TODO #9100 */, styleName: string): string { throw "not implemented"; }
hasStyle(element: any /** TODO #9100 */, styleName: string, styleValue?: string): boolean { throw "not implemented"; }
tagName(element: any /** TODO #9100 */): string { throw "not implemented"; }
attributeMap(element: any /** TODO #9100 */): Map<string, string> { throw "not implemented"; }
hasAttribute(element: any /** TODO #9100 */, attribute: string): boolean { throw "not implemented"; }
hasAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): boolean { throw "not implemented"; }
getAttribute(element: any /** TODO #9100 */, attribute: string): string { throw "not implemented"; }
getAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): string { throw "not implemented"; }
setAttribute(element: any /** TODO #9100 */, name: string, value: string) { throw "not implemented"; }
setAttributeNS(element: any /** TODO #9100 */, ns: string, name: string, value: string) { throw "not implemented"; }
removeAttribute(element: any /** TODO #9100 */, attribute: string) { throw "not implemented"; }
removeAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string) { throw "not implemented"; }
templateAwareRoot(el: any /** TODO #9100 */) { throw "not implemented"; }
createHtmlDocument(): HTMLDocument { throw "not implemented"; }
defaultDoc(): HTMLDocument { throw "not implemented"; }
getBoundingClientRect(el: any /** TODO #9100 */) { throw "not implemented"; }
getTitle(): string { throw "not implemented"; }
setTitle(newTitle: string) { throw "not implemented"; }
elementMatches(n: any /** TODO #9100 */, selector: string): boolean { throw "not implemented"; }
isTemplateElement(el: any): boolean { throw "not implemented"; }
isTextNode(node: any /** TODO #9100 */): boolean { throw "not implemented"; }
isCommentNode(node: any /** TODO #9100 */): boolean { throw "not implemented"; }
isElementNode(node: any /** TODO #9100 */): boolean { throw "not implemented"; }
hasShadowRoot(node: any /** TODO #9100 */): boolean { throw "not implemented"; }
isShadowRoot(node: any /** TODO #9100 */): boolean { throw "not implemented"; }
importIntoDoc(node: Node): Node { throw "not implemented"; }
adoptNode(node: Node): Node { throw "not implemented"; }
getHref(element: any /** TODO #9100 */): string { throw "not implemented"; }
getEventKey(event: any /** TODO #9100 */): string { throw "not implemented"; }
resolveAndSetHref(element: any /** TODO #9100 */, baseUrl: string, href: string) { throw "not implemented"; }
supportsDOMEvents(): boolean { throw "not implemented"; }
supportsNativeShadowDOM(): boolean { throw "not implemented"; }
getGlobalEventTarget(target: string): any { throw "not implemented"; }
getHistory(): History { throw "not implemented"; }
getLocation(): Location { throw "not implemented"; }
getBaseHref(): string { throw "not implemented"; }
resetBaseElement(): void { throw "not implemented"; }
getUserAgent(): string { throw "not implemented"; }
setData(element: any /** TODO #9100 */, name: string, value: string) { throw "not implemented"; }
getComputedStyle(element: any /** TODO #9100 */): any { throw "not implemented"; }
getData(element: any /** TODO #9100 */, name: string): string { throw "not implemented"; }
setGlobalVar(name: string, value: any) { throw "not implemented"; }
requestAnimationFrame(callback: any /** TODO #9100 */): number { throw "not implemented"; }
cancelAnimationFrame(id: any /** TODO #9100 */) { throw "not implemented"; }
performanceNow(): number { throw "not implemented"; }
getAnimationPrefix(): string { throw "not implemented"; }
getTransitionEnd(): string { throw "not implemented"; }
supportsAnimation(): boolean { throw "not implemented"; }
supportsWebAnimation(): boolean { throw "not implemented"; }
querySelectorAll(el: any /** TODO #9100 */, selector: string): any[] { throw 'not implemented'; }
on(el: any /** TODO #9100 */, evt: any /** TODO #9100 */, listener: any /** TODO #9100 */) {
throw 'not implemented';
}
onAndCancel(
el: any /** TODO #9100 */, evt: any /** TODO #9100 */,
listener: any /** TODO #9100 */): Function {
throw 'not implemented';
}
dispatchEvent(el: any /** TODO #9100 */, evt: any /** TODO #9100 */) { throw 'not implemented'; }
createMouseEvent(eventType: any /** TODO #9100 */): any { throw 'not implemented'; }
createEvent(eventType: string): any { throw 'not implemented'; }
preventDefault(evt: any /** TODO #9100 */) { throw 'not implemented'; }
isPrevented(evt: any /** TODO #9100 */): boolean { throw 'not implemented'; }
getInnerHTML(el: any /** TODO #9100 */): string { throw 'not implemented'; }
getTemplateContent(el: any /** TODO #9100 */): any { throw 'not implemented'; }
getOuterHTML(el: any /** TODO #9100 */): string { throw 'not implemented'; }
nodeName(node: any /** TODO #9100 */): string { throw 'not implemented'; }
nodeValue(node: any /** TODO #9100 */): string { throw 'not implemented'; }
type(node: any /** TODO #9100 */): string { throw 'not implemented'; }
content(node: any /** TODO #9100 */): any { throw 'not implemented'; }
firstChild(el: any /** TODO #9100 */): Node { throw 'not implemented'; }
nextSibling(el: any /** TODO #9100 */): Node { throw 'not implemented'; }
parentElement(el: any /** TODO #9100 */): Node { throw 'not implemented'; }
childNodes(el: any /** TODO #9100 */): Node[] { throw 'not implemented'; }
childNodesAsList(el: any /** TODO #9100 */): Node[] { throw 'not implemented'; }
clearNodes(el: any /** TODO #9100 */) { throw 'not implemented'; }
appendChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw 'not implemented'; }
removeChild(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw 'not implemented'; }
replaceChild(
el: any /** TODO #9100 */, newNode: any /** TODO #9100 */, oldNode: any /** TODO #9100 */) {
throw 'not implemented';
}
remove(el: any /** TODO #9100 */): Node { throw 'not implemented'; }
insertBefore(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw 'not implemented'; }
insertAllBefore(el: any /** TODO #9100 */, nodes: any /** TODO #9100 */) {
throw 'not implemented';
}
insertAfter(el: any /** TODO #9100 */, node: any /** TODO #9100 */) { throw 'not implemented'; }
setInnerHTML(el: any /** TODO #9100 */, value: any /** TODO #9100 */) { throw 'not implemented'; }
getText(el: any /** TODO #9100 */): string { throw 'not implemented'; }
setText(el: any /** TODO #9100 */, value: string) { throw 'not implemented'; }
getValue(el: any /** TODO #9100 */): string { throw 'not implemented'; }
setValue(el: any /** TODO #9100 */, value: string) { throw 'not implemented'; }
getChecked(el: any /** TODO #9100 */): boolean { throw 'not implemented'; }
setChecked(el: any /** TODO #9100 */, value: boolean) { throw 'not implemented'; }
createComment(text: string): any { throw 'not implemented'; }
createTemplate(html: any /** TODO #9100 */): HTMLElement { throw 'not implemented'; }
createElement(tagName: any /** TODO #9100 */, doc?: any /** TODO #9100 */): HTMLElement {
throw 'not implemented';
}
createElementNS(ns: string, tagName: string, doc?: any /** TODO #9100 */): Element {
throw 'not implemented';
}
createTextNode(text: string, doc?: any /** TODO #9100 */): Text { throw 'not implemented'; }
createScriptTag(attrName: string, attrValue: string, doc?: any /** TODO #9100 */): HTMLElement {
throw 'not implemented';
}
createStyleElement(css: string, doc?: any /** TODO #9100 */): HTMLStyleElement {
throw 'not implemented';
}
createShadowRoot(el: any /** TODO #9100 */): any { throw 'not implemented'; }
getShadowRoot(el: any /** TODO #9100 */): any { throw 'not implemented'; }
getHost(el: any /** TODO #9100 */): any { throw 'not implemented'; }
getDistributedNodes(el: any /** TODO #9100 */): Node[] { throw 'not implemented'; }
clone(node: Node): Node { throw 'not implemented'; }
getElementsByClassName(element: any /** TODO #9100 */, name: string): HTMLElement[] {
throw 'not implemented';
}
getElementsByTagName(element: any /** TODO #9100 */, name: string): HTMLElement[] {
throw 'not implemented';
}
classList(element: any /** TODO #9100 */): any[] { throw 'not implemented'; }
addClass(element: any /** TODO #9100 */, className: string) { throw 'not implemented'; }
removeClass(element: any /** TODO #9100 */, className: string) { throw 'not implemented'; }
hasClass(element: any /** TODO #9100 */, className: string): boolean { throw 'not implemented'; }
setStyle(element: any /** TODO #9100 */, styleName: string, styleValue: string) {
throw 'not implemented';
}
removeStyle(element: any /** TODO #9100 */, styleName: string) { throw 'not implemented'; }
getStyle(element: any /** TODO #9100 */, styleName: string): string { throw 'not implemented'; }
hasStyle(element: any /** TODO #9100 */, styleName: string, styleValue?: string): boolean {
throw 'not implemented';
}
tagName(element: any /** TODO #9100 */): string { throw 'not implemented'; }
attributeMap(element: any /** TODO #9100 */): Map<string, string> { throw 'not implemented'; }
hasAttribute(element: any /** TODO #9100 */, attribute: string): boolean {
throw 'not implemented';
}
hasAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): boolean {
throw 'not implemented';
}
getAttribute(element: any /** TODO #9100 */, attribute: string): string {
throw 'not implemented';
}
getAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string): string {
throw 'not implemented';
}
setAttribute(element: any /** TODO #9100 */, name: string, value: string) {
throw 'not implemented';
}
setAttributeNS(element: any /** TODO #9100 */, ns: string, name: string, value: string) {
throw 'not implemented';
}
removeAttribute(element: any /** TODO #9100 */, attribute: string) { throw 'not implemented'; }
removeAttributeNS(element: any /** TODO #9100 */, ns: string, attribute: string) {
throw 'not implemented';
}
templateAwareRoot(el: any /** TODO #9100 */) { throw 'not implemented'; }
createHtmlDocument(): HTMLDocument { throw 'not implemented'; }
defaultDoc(): HTMLDocument { throw 'not implemented'; }
getBoundingClientRect(el: any /** TODO #9100 */) { throw 'not implemented'; }
getTitle(): string { throw 'not implemented'; }
setTitle(newTitle: string) { throw 'not implemented'; }
elementMatches(n: any /** TODO #9100 */, selector: string): boolean { throw 'not implemented'; }
isTemplateElement(el: any): boolean { throw 'not implemented'; }
isTextNode(node: any /** TODO #9100 */): boolean { throw 'not implemented'; }
isCommentNode(node: any /** TODO #9100 */): boolean { throw 'not implemented'; }
isElementNode(node: any /** TODO #9100 */): boolean { throw 'not implemented'; }
hasShadowRoot(node: any /** TODO #9100 */): boolean { throw 'not implemented'; }
isShadowRoot(node: any /** TODO #9100 */): boolean { throw 'not implemented'; }
importIntoDoc(node: Node): Node { throw 'not implemented'; }
adoptNode(node: Node): Node { throw 'not implemented'; }
getHref(element: any /** TODO #9100 */): string { throw 'not implemented'; }
getEventKey(event: any /** TODO #9100 */): string { throw 'not implemented'; }
resolveAndSetHref(element: any /** TODO #9100 */, baseUrl: string, href: string) {
throw 'not implemented';
}
supportsDOMEvents(): boolean { throw 'not implemented'; }
supportsNativeShadowDOM(): boolean { throw 'not implemented'; }
getGlobalEventTarget(target: string): any { throw 'not implemented'; }
getHistory(): History { throw 'not implemented'; }
getLocation(): Location { throw 'not implemented'; }
getBaseHref(): string { throw 'not implemented'; }
resetBaseElement(): void { throw 'not implemented'; }
getUserAgent(): string { throw 'not implemented'; }
setData(element: any /** TODO #9100 */, name: string, value: string) { throw 'not implemented'; }
getComputedStyle(element: any /** TODO #9100 */): any { throw 'not implemented'; }
getData(element: any /** TODO #9100 */, name: string): string { throw 'not implemented'; }
setGlobalVar(name: string, value: any) { throw 'not implemented'; }
requestAnimationFrame(callback: any /** TODO #9100 */): number { throw 'not implemented'; }
cancelAnimationFrame(id: any /** TODO #9100 */) { throw 'not implemented'; }
performanceNow(): number { throw 'not implemented'; }
getAnimationPrefix(): string { throw 'not implemented'; }
getTransitionEnd(): string { throw 'not implemented'; }
supportsAnimation(): boolean { throw 'not implemented'; }
supportsWebAnimation(): boolean { throw 'not implemented'; }
supportsCookies(): boolean { return false; }
getCookie(name: string): string { throw "not implemented"; }
setCookie(name: string, value: string) { throw "not implemented"; }
getCookie(name: string): string { throw 'not implemented'; }
setCookie(name: string, value: string) { throw 'not implemented'; }
}

View File

@ -1,36 +1,19 @@
import {WebWorkerRootRenderer} from "./web_workers/worker/renderer";
import {print, isBlank, isPresent} from "./facade/lang";
import {
PLATFORM_DIRECTIVES,
PLATFORM_PIPES,
ExceptionHandler,
APPLICATION_COMMON_PROVIDERS,
PLATFORM_COMMON_PROVIDERS,
OpaqueToken,
RootRenderer,
PlatformRef,
getPlatform,
createPlatform,
assertPlatform,
ReflectiveInjector,
APP_INITIALIZER,
NgZone,
Type,
ComponentRef,
coreLoadAndBootstrap
} from "@angular/core";
import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from "@angular/common";
import {ClientMessageBrokerFactory, ClientMessageBrokerFactory_} from "./web_workers/shared/client_message_broker";
import {ServiceMessageBrokerFactory, ServiceMessageBrokerFactory_} from "./web_workers/shared/service_message_broker";
import {Serializer} from "./web_workers/shared/serializer";
import {ON_WEB_WORKER} from "./web_workers/shared/api";
import {RenderStore} from "./web_workers/shared/render_store";
import {BROWSER_SANITIZATION_PROVIDERS} from "./browser";
import {WorkerDomAdapter} from "./web_workers/worker/worker_adapter";
import {PostMessageBus, PostMessageBusSink, PostMessageBusSource} from "./web_workers/shared/post_message_bus";
import {MessageBus} from "./web_workers/shared/message_bus";
import {COMPILER_PROVIDERS, XHR} from "@angular/compiler";
import {XHRImpl} from "./xhr/xhr_impl";
import {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from '@angular/common';
import {COMPILER_PROVIDERS, XHR} from '@angular/compiler';
import {APPLICATION_COMMON_PROVIDERS, APP_INITIALIZER, ComponentRef, ExceptionHandler, NgZone, OpaqueToken, PLATFORM_COMMON_PROVIDERS, PLATFORM_DIRECTIVES, PLATFORM_PIPES, PlatformRef, ReflectiveInjector, RootRenderer, Type, assertPlatform, coreLoadAndBootstrap, createPlatform, getPlatform} from '@angular/core';
import {BROWSER_SANITIZATION_PROVIDERS} from './browser';
import {isBlank, isPresent, print} from './facade/lang';
import {ON_WEB_WORKER} from './web_workers/shared/api';
import {ClientMessageBrokerFactory, ClientMessageBrokerFactory_} from './web_workers/shared/client_message_broker';
import {MessageBus} from './web_workers/shared/message_bus';
import {PostMessageBus, PostMessageBusSink, PostMessageBusSource} from './web_workers/shared/post_message_bus';
import {RenderStore} from './web_workers/shared/render_store';
import {Serializer} from './web_workers/shared/serializer';
import {ServiceMessageBrokerFactory, ServiceMessageBrokerFactory_} from './web_workers/shared/service_message_broker';
import {WebWorkerRootRenderer} from './web_workers/worker/renderer';
import {WorkerDomAdapter} from './web_workers/worker/worker_adapter';
import {XHRImpl} from './xhr/xhr_impl';
class PrintLogger {
log = print;
@ -42,29 +25,20 @@ class PrintLogger {
const WORKER_APP_PLATFORM_MARKER = new OpaqueToken('WorkerAppPlatformMarker');
export const WORKER_APP_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> =
[
PLATFORM_COMMON_PROVIDERS,
{provide: WORKER_APP_PLATFORM_MARKER, useValue: true}
];
[PLATFORM_COMMON_PROVIDERS, {provide: WORKER_APP_PLATFORM_MARKER, useValue: true}];
export const WORKER_APP_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> =
[
APPLICATION_COMMON_PROVIDERS,
FORM_PROVIDERS,
BROWSER_SANITIZATION_PROVIDERS,
Serializer,
{provide: PLATFORM_PIPES, useValue: COMMON_PIPES, multi: true},
{provide: PLATFORM_DIRECTIVES, useValue: COMMON_DIRECTIVES, multi: true},
{provide: ClientMessageBrokerFactory, useClass: ClientMessageBrokerFactory_},
{provide: ServiceMessageBrokerFactory, useClass: ServiceMessageBrokerFactory_},
WebWorkerRootRenderer,
{provide: RootRenderer, useExisting: WebWorkerRootRenderer},
{provide: ON_WEB_WORKER, useValue: true},
RenderStore,
{provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []},
{provide: MessageBus, useFactory: createMessageBus, deps: [NgZone]},
{provide: APP_INITIALIZER, useValue: setupWebWorker, multi: true}
];
export const WORKER_APP_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [
APPLICATION_COMMON_PROVIDERS, FORM_PROVIDERS, BROWSER_SANITIZATION_PROVIDERS, Serializer,
{provide: PLATFORM_PIPES, useValue: COMMON_PIPES, multi: true},
{provide: PLATFORM_DIRECTIVES, useValue: COMMON_DIRECTIVES, multi: true},
{provide: ClientMessageBrokerFactory, useClass: ClientMessageBrokerFactory_},
{provide: ServiceMessageBrokerFactory, useClass: ServiceMessageBrokerFactory_},
WebWorkerRootRenderer, {provide: RootRenderer, useExisting: WebWorkerRootRenderer},
{provide: ON_WEB_WORKER, useValue: true}, RenderStore,
{provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []},
{provide: MessageBus, useFactory: createMessageBus, deps: [NgZone]},
{provide: APP_INITIALIZER, useValue: setupWebWorker, multi: true}
];
export function workerAppPlatform(): PlatformRef {
if (isBlank(getPlatform())) {
@ -74,14 +48,14 @@ export function workerAppPlatform(): PlatformRef {
}
export function bootstrapApp(
appComponentType: Type,
customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> {
var appInjector = ReflectiveInjector.resolveAndCreate([
WORKER_APP_APPLICATION_PROVIDERS,
COMPILER_PROVIDERS,
{provide: XHR, useClass: XHRImpl},
isPresent(customProviders) ? customProviders : []],
workerAppPlatform().injector);
appComponentType: Type,
customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef<any>> {
var appInjector = ReflectiveInjector.resolveAndCreate(
[
WORKER_APP_APPLICATION_PROVIDERS, COMPILER_PROVIDERS, {provide: XHR, useClass: XHRImpl},
isPresent(customProviders) ? customProviders : []
],
workerAppPlatform().injector);
return coreLoadAndBootstrap(appComponentType, appInjector);
}
@ -92,7 +66,7 @@ function _exceptionHandler(): ExceptionHandler {
// TODO(jteplitz602) remove this and compile with lib.webworker.d.ts (#3492)
let _postMessage = {
postMessage: (message: any, transferrables?:[ArrayBuffer]) => {
postMessage: (message: any, transferrables?: [ArrayBuffer]) => {
(<any>postMessage)(message, transferrables);
}
};

View File

@ -1,45 +1,29 @@
import {isBlank, isPresent} from "./facade/lang";
import {MessageBus} from "./web_workers/shared/message_bus";
import {
NgZone,
Injector,
OpaqueToken,
Testability,
ExceptionHandler,
APPLICATION_COMMON_PROVIDERS,
PLATFORM_COMMON_PROVIDERS,
RootRenderer,
PLATFORM_INITIALIZER,
PlatformRef,
getPlatform,
createPlatform,
assertPlatform,
ReflectiveInjector,
Injectable,
APP_INITIALIZER,
ApplicationRef
} from "@angular/core";
import {wtfInit, AnimationDriver, NoOpAnimationDriver} from '../core_private';
import {getDOM} from "./dom/dom_adapter";
import {DomEventsPlugin} from "./dom/events/dom_events";
import {KeyEventsPlugin} from "./dom/events/key_events";
import {HammerGesturesPlugin, HAMMER_GESTURE_CONFIG, HammerGestureConfig} from "./dom/events/hammer_gestures";
import {DOCUMENT} from "./dom/dom_tokens";
import {DomRootRenderer, DomRootRenderer_} from "./dom/dom_renderer";
import {DomSharedStylesHost, SharedStylesHost} from "./dom/shared_styles_host";
import {BrowserGetTestability} from "./browser/testability";
import {BrowserDomAdapter} from "./browser/browser_adapter";
import {MessageBasedRenderer} from "./web_workers/ui/renderer";
import {ServiceMessageBrokerFactory, ServiceMessageBrokerFactory_} from "./web_workers/shared/service_message_broker";
import {ClientMessageBrokerFactory, ClientMessageBrokerFactory_} from "./web_workers/shared/client_message_broker";
import {Serializer} from "./web_workers/shared/serializer";
import {ON_WEB_WORKER} from "./web_workers/shared/api";
import {RenderStore} from "./web_workers/shared/render_store";
import {EventManager, EVENT_MANAGER_PLUGINS} from "./dom/events/event_manager";
import {BROWSER_SANITIZATION_PROVIDERS, BROWSER_APP_COMPILER_PROVIDERS} from "./browser";
import {PostMessageBus, PostMessageBusSink, PostMessageBusSource} from "./web_workers/shared/post_message_bus";
import {BaseException} from "./facade/exceptions";
import {PromiseWrapper} from "./facade/async";
import {APPLICATION_COMMON_PROVIDERS, APP_INITIALIZER, ApplicationRef, ExceptionHandler, Injectable, Injector, NgZone, OpaqueToken, PLATFORM_COMMON_PROVIDERS, PLATFORM_INITIALIZER, PlatformRef, ReflectiveInjector, RootRenderer, Testability, assertPlatform, createPlatform, getPlatform} from '@angular/core';
import {AnimationDriver, NoOpAnimationDriver, wtfInit} from '../core_private';
import {BROWSER_APP_COMPILER_PROVIDERS, BROWSER_SANITIZATION_PROVIDERS} from './browser';
import {BrowserDomAdapter} from './browser/browser_adapter';
import {BrowserGetTestability} from './browser/testability';
import {getDOM} from './dom/dom_adapter';
import {DomRootRenderer, DomRootRenderer_} from './dom/dom_renderer';
import {DOCUMENT} from './dom/dom_tokens';
import {DomEventsPlugin} from './dom/events/dom_events';
import {EVENT_MANAGER_PLUGINS, EventManager} from './dom/events/event_manager';
import {HAMMER_GESTURE_CONFIG, HammerGestureConfig, HammerGesturesPlugin} from './dom/events/hammer_gestures';
import {KeyEventsPlugin} from './dom/events/key_events';
import {DomSharedStylesHost, SharedStylesHost} from './dom/shared_styles_host';
import {PromiseWrapper} from './facade/async';
import {BaseException} from './facade/exceptions';
import {isBlank, isPresent} from './facade/lang';
import {ON_WEB_WORKER} from './web_workers/shared/api';
import {ClientMessageBrokerFactory, ClientMessageBrokerFactory_} from './web_workers/shared/client_message_broker';
import {MessageBus} from './web_workers/shared/message_bus';
import {PostMessageBus, PostMessageBusSink, PostMessageBusSource} from './web_workers/shared/post_message_bus';
import {RenderStore} from './web_workers/shared/render_store';
import {Serializer} from './web_workers/shared/serializer';
import {ServiceMessageBrokerFactory, ServiceMessageBrokerFactory_} from './web_workers/shared/service_message_broker';
import {MessageBasedRenderer} from './web_workers/ui/renderer';
const WORKER_RENDER_PLATFORM_MARKER = new OpaqueToken('WorkerRenderPlatformMarker');
@ -59,7 +43,7 @@ export class WebWorkerInstance {
}
}
export const WORKER_SCRIPT: OpaqueToken = new OpaqueToken("WebWorkerScript");
export const WORKER_SCRIPT: OpaqueToken = new OpaqueToken('WebWorkerScript');
/**
* A multiple providers used to automatically call the `start()` method after the service is
@ -67,44 +51,47 @@ export const WORKER_SCRIPT: OpaqueToken = new OpaqueToken("WebWorkerScript");
*
* TODO(vicb): create an interface for startable services to implement
*/
export const WORKER_RENDER_STARTABLE_MESSAGING_SERVICE = new OpaqueToken('WorkerRenderStartableMsgService');
export const WORKER_RENDER_STARTABLE_MESSAGING_SERVICE =
new OpaqueToken('WorkerRenderStartableMsgService');
export const WORKER_RENDER_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [
PLATFORM_COMMON_PROVIDERS,
{provide: WORKER_RENDER_PLATFORM_MARKER, useValue: true},
PLATFORM_COMMON_PROVIDERS, {provide: WORKER_RENDER_PLATFORM_MARKER, useValue: true},
{provide: PLATFORM_INITIALIZER, useValue: initWebWorkerRenderPlatform, multi: true}
];
export const WORKER_RENDER_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> =
[
APPLICATION_COMMON_PROVIDERS,
MessageBasedRenderer,
{provide: WORKER_RENDER_STARTABLE_MESSAGING_SERVICE, useExisting: MessageBasedRenderer, multi: true},
BROWSER_SANITIZATION_PROVIDERS,
{provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []},
{provide: DOCUMENT, useFactory: _document, deps: []},
// TODO(jteplitz602): Investigate if we definitely need EVENT_MANAGER on the render thread
// #5298
{provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true},
{provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig},
{provide: DomRootRenderer, useClass: DomRootRenderer_},
{provide: RootRenderer, useExisting: DomRootRenderer},
{provide: SharedStylesHost, useExisting: DomSharedStylesHost},
{provide: ServiceMessageBrokerFactory, useClass: ServiceMessageBrokerFactory_},
{provide: ClientMessageBrokerFactory, useClass: ClientMessageBrokerFactory_},
{provide: AnimationDriver, useFactory: _resolveDefaultAnimationDriver},
Serializer,
{provide: ON_WEB_WORKER, useValue: false},
RenderStore,
DomSharedStylesHost,
Testability,
EventManager,
WebWorkerInstance,
{ provide: APP_INITIALIZER, useFactory: initWebWorkerAppFn, multi: true, deps: [Injector] },
{ provide: MessageBus, useFactory: messageBusFactory, deps: [WebWorkerInstance] }
];
export const WORKER_RENDER_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = [
APPLICATION_COMMON_PROVIDERS,
MessageBasedRenderer,
{
provide: WORKER_RENDER_STARTABLE_MESSAGING_SERVICE,
useExisting: MessageBasedRenderer,
multi: true
},
BROWSER_SANITIZATION_PROVIDERS,
{provide: ExceptionHandler, useFactory: _exceptionHandler, deps: []},
{provide: DOCUMENT, useFactory: _document, deps: []},
// TODO(jteplitz602): Investigate if we definitely need EVENT_MANAGER on the render thread
// #5298
{provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: KeyEventsPlugin, multi: true},
{provide: EVENT_MANAGER_PLUGINS, useClass: HammerGesturesPlugin, multi: true},
{provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig},
{provide: DomRootRenderer, useClass: DomRootRenderer_},
{provide: RootRenderer, useExisting: DomRootRenderer},
{provide: SharedStylesHost, useExisting: DomSharedStylesHost},
{provide: ServiceMessageBrokerFactory, useClass: ServiceMessageBrokerFactory_},
{provide: ClientMessageBrokerFactory, useClass: ClientMessageBrokerFactory_},
{provide: AnimationDriver, useFactory: _resolveDefaultAnimationDriver},
Serializer,
{provide: ON_WEB_WORKER, useValue: false},
RenderStore,
DomSharedStylesHost,
Testability,
EventManager,
WebWorkerInstance,
{provide: APP_INITIALIZER, useFactory: initWebWorkerAppFn, multi: true, deps: [Injector]},
{provide: MessageBus, useFactory: messageBusFactory, deps: [WebWorkerInstance]}
];
export function initializeGenericWorkerRenderer(injector: Injector) {
var bus = injector.get(MessageBus);
@ -117,16 +104,15 @@ export function initializeGenericWorkerRenderer(injector: Injector) {
}
export function bootstrapRender(
workerScriptUri: string,
customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ApplicationRef> {
workerScriptUri: string,
customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ApplicationRef> {
var app = ReflectiveInjector.resolveAndCreate(
[
WORKER_RENDER_APPLICATION_PROVIDERS,
BROWSER_APP_COMPILER_PROVIDERS,
{provide: WORKER_SCRIPT, useValue: workerScriptUri},
isPresent(customProviders) ? customProviders : []
],
workerRenderPlatform().injector);
[
WORKER_RENDER_APPLICATION_PROVIDERS, BROWSER_APP_COMPILER_PROVIDERS,
{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...
@ -165,7 +151,7 @@ function initWebWorkerAppFn(injector: Injector): () => void {
scriptUri = injector.get(WORKER_SCRIPT);
} catch (e) {
throw new BaseException(
"You must provide your WebWorker's initialization script with the WORKER_SCRIPT token");
'You must provide your WebWorker\'s initialization script with the WORKER_SCRIPT token');
}
let instance = injector.get(WebWorkerInstance);

View File

@ -1,10 +1,11 @@
import {XHR} from '@angular/compiler';
import {PromiseWrapper, PromiseCompleter} from '../facade/promise';
import {isPresent} from '../facade/lang';
import {PromiseCompleter, PromiseWrapper} from '../facade/promise';
export class XHRImpl extends XHR {
get(url: string): Promise<string> {
var completer: PromiseCompleter <string> = PromiseWrapper.completer();
var completer: PromiseCompleter<string> = PromiseWrapper.completer();
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'text';