
This is used for setting property binding values as attributes on elements when running in dev mode. This implementation will also serialize binding information to template placeholder comment nodes. Closes #5227
100 lines
5.6 KiB
TypeScript
100 lines
5.6 KiB
TypeScript
import {Injectable} from 'angular2/src/core/di';
|
|
import {MessageBus} from 'angular2/src/web_workers/shared/message_bus';
|
|
import {Serializer, PRIMITIVE} from 'angular2/src/web_workers/shared/serializer';
|
|
import {
|
|
RenderViewRef,
|
|
RenderFragmentRef,
|
|
RenderProtoViewRef,
|
|
Renderer,
|
|
RenderTemplateCmd,
|
|
RenderComponentTemplate
|
|
} from 'angular2/src/core/render/api';
|
|
import {WebWorkerElementRef, WebWorkerTemplateCmd} from 'angular2/src/web_workers/shared/api';
|
|
import {EVENT_CHANNEL, RENDERER_CHANNEL} from 'angular2/src/web_workers/shared/messaging_api';
|
|
import {Type} from 'angular2/src/facade/lang';
|
|
import {bind} from './bind';
|
|
import {EventDispatcher} from 'angular2/src/web_workers/ui/event_dispatcher';
|
|
import {RenderProtoViewRefStore} from 'angular2/src/web_workers/shared/render_proto_view_ref_store';
|
|
import {
|
|
RenderViewWithFragmentsStore
|
|
} from 'angular2/src/web_workers/shared/render_view_with_fragments_store';
|
|
import {ServiceMessageBrokerFactory} from 'angular2/src/web_workers/shared/service_message_broker';
|
|
|
|
@Injectable()
|
|
export class MessageBasedRenderer {
|
|
constructor(private _brokerFactory: ServiceMessageBrokerFactory, private _bus: MessageBus,
|
|
private _serializer: Serializer,
|
|
private _renderProtoViewRefStore: RenderProtoViewRefStore,
|
|
private _renderViewWithFragmentsStore: RenderViewWithFragmentsStore,
|
|
private _renderer: Renderer) {}
|
|
|
|
start(): void {
|
|
var broker = this._brokerFactory.createMessageBroker(RENDERER_CHANNEL);
|
|
this._bus.initChannel(EVENT_CHANNEL);
|
|
|
|
broker.registerMethod("registerComponentTemplate", [RenderComponentTemplate],
|
|
bind(this._renderer.registerComponentTemplate, this._renderer));
|
|
broker.registerMethod("createProtoView", [PRIMITIVE, WebWorkerTemplateCmd, PRIMITIVE],
|
|
bind(this._createProtoView, this));
|
|
broker.registerMethod("createRootHostView",
|
|
[RenderProtoViewRef, PRIMITIVE, PRIMITIVE, PRIMITIVE],
|
|
bind(this._createRootHostView, this));
|
|
broker.registerMethod("createView", [RenderProtoViewRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._createView, this));
|
|
broker.registerMethod("destroyView", [RenderViewRef], bind(this._destroyView, this));
|
|
broker.registerMethod("attachFragmentAfterFragment", [RenderFragmentRef, RenderFragmentRef],
|
|
bind(this._renderer.attachFragmentAfterFragment, this._renderer));
|
|
broker.registerMethod("attachFragmentAfterElement", [WebWorkerElementRef, RenderFragmentRef],
|
|
bind(this._renderer.attachFragmentAfterElement, this._renderer));
|
|
broker.registerMethod("detachFragment", [RenderFragmentRef],
|
|
bind(this._renderer.detachFragment, this._renderer));
|
|
broker.registerMethod("hydrateView", [RenderViewRef],
|
|
bind(this._renderer.hydrateView, this._renderer));
|
|
broker.registerMethod("dehydrateView", [RenderViewRef],
|
|
bind(this._renderer.dehydrateView, this._renderer));
|
|
broker.registerMethod("setText", [RenderViewRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._renderer.setText, this._renderer));
|
|
broker.registerMethod("setElementProperty", [WebWorkerElementRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._renderer.setElementProperty, this._renderer));
|
|
broker.registerMethod("setElementAttribute", [WebWorkerElementRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._renderer.setElementAttribute, this._renderer));
|
|
broker.registerMethod("setBindingDebugInfo", [WebWorkerElementRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._renderer.setBindingDebugInfo, this._renderer));
|
|
broker.registerMethod("setElementClass", [WebWorkerElementRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._renderer.setElementClass, this._renderer));
|
|
broker.registerMethod("setElementStyle", [WebWorkerElementRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._renderer.setElementStyle, this._renderer));
|
|
broker.registerMethod("invokeElementMethod", [WebWorkerElementRef, PRIMITIVE, PRIMITIVE],
|
|
bind(this._renderer.invokeElementMethod, this._renderer));
|
|
broker.registerMethod("setEventDispatcher", [RenderViewRef],
|
|
bind(this._setEventDispatcher, this));
|
|
}
|
|
|
|
private _destroyView(viewRef: RenderViewRef): void {
|
|
this._renderer.destroyView(viewRef);
|
|
this._renderViewWithFragmentsStore.remove(viewRef);
|
|
}
|
|
|
|
private _createProtoView(componentTemplateId: string, cmds: RenderTemplateCmd[],
|
|
refIndex: number) {
|
|
var protoViewRef = this._renderer.createProtoView(componentTemplateId, cmds);
|
|
this._renderProtoViewRefStore.store(protoViewRef, refIndex);
|
|
}
|
|
|
|
private _createRootHostView(ref: RenderProtoViewRef, fragmentCount: number, selector: string,
|
|
startIndex: number) {
|
|
var renderViewWithFragments = this._renderer.createRootHostView(ref, fragmentCount, selector);
|
|
this._renderViewWithFragmentsStore.store(renderViewWithFragments, startIndex);
|
|
}
|
|
|
|
private _createView(ref: RenderProtoViewRef, fragmentCount: number, startIndex: number) {
|
|
var renderViewWithFragments = this._renderer.createView(ref, fragmentCount);
|
|
this._renderViewWithFragmentsStore.store(renderViewWithFragments, startIndex);
|
|
}
|
|
|
|
private _setEventDispatcher(viewRef: RenderViewRef) {
|
|
var dispatcher = new EventDispatcher(viewRef, this._bus.to(EVENT_CHANNEL), this._serializer);
|
|
this._renderer.setEventDispatcher(viewRef, dispatcher);
|
|
}
|
|
}
|