refactor(core): introduce ViewRef
and ProtoViewRef
BREAKING CHANGES: - `NgElement` merged into `ElementRef` - `Compiler.compile…` returns `ProtoViewRef` - `ViewContainer` uses `ProtoViewRef`s and `ViewRef`s. - `ViewRef`/`ProtoViewRef` in renderer were renamed to `RenderViewRef`/`RenderProtoViewRef`. Related to #1477 Closes #1592
This commit is contained in:
48
modules/angular2/src/render/api.js
vendored
48
modules/angular2/src/render/api.js
vendored
@ -95,7 +95,7 @@ export class ProtoViewDto {
|
||||
// inside of a component view
|
||||
static get EMBEDDED_VIEW_TYPE() { return 1; }
|
||||
|
||||
render: ProtoViewRef;
|
||||
render: RenderProtoViewRef;
|
||||
elementBinders:List<ElementBinder>;
|
||||
variableBindings: Map<string, string>;
|
||||
type: number;
|
||||
@ -133,15 +133,15 @@ export class DirectiveMetadata {
|
||||
}
|
||||
|
||||
// An opaque reference to a RenderProtoView
|
||||
export class ProtoViewRef {}
|
||||
export class RenderProtoViewRef {}
|
||||
|
||||
// An opaque reference to a RenderView
|
||||
export class ViewRef {}
|
||||
export class RenderViewRef {}
|
||||
|
||||
export class RenderViewContainerRef {
|
||||
view:ViewRef;
|
||||
view:RenderViewRef;
|
||||
elementIndex:number;
|
||||
constructor(view:ViewRef, elementIndex: number) {
|
||||
constructor(view:RenderViewRef, elementIndex: number) {
|
||||
this.view = view;
|
||||
this.elementIndex = elementIndex;
|
||||
}
|
||||
@ -186,19 +186,19 @@ export class Renderer {
|
||||
* Sets the preset nested components,
|
||||
* which will be instantiated when this protoView is instantiated.
|
||||
* Note: We can't create new ProtoViewRefs here as we need to support cycles / recursive components.
|
||||
* @param {List<ProtoViewRef>} protoViewRefs
|
||||
* @param {List<RenderProtoViewRef>} protoViewRefs
|
||||
* RenderProtoView for every element with a component in this protoView or in a view container's protoView
|
||||
*/
|
||||
mergeChildComponentProtoViews(protoViewRef:ProtoViewRef, componentProtoViewRefs:List<ProtoViewRef>) { return null; }
|
||||
mergeChildComponentProtoViews(protoViewRef:RenderProtoViewRef, componentProtoViewRefs:List<RenderProtoViewRef>) { return null; }
|
||||
|
||||
/**
|
||||
* Creates a view and inserts it into a ViewContainer.
|
||||
* @param {RenderViewContainerRef} viewContainerRef
|
||||
* @param {ProtoViewRef} protoViewRef A ProtoViewRef of type ProtoViewDto.HOST_VIEW_TYPE or ProtoViewDto.EMBEDDED_VIEW_TYPE
|
||||
* @param {RenderProtoViewRef} protoViewRef A RenderProtoViewRef of type ProtoViewDto.HOST_VIEW_TYPE or ProtoViewDto.EMBEDDED_VIEW_TYPE
|
||||
* @param {number} atIndex
|
||||
* @return {List<ViewRef>} the view and all of its nested child component views
|
||||
* @return {List<RenderViewRef>} the view and all of its nested child component views
|
||||
*/
|
||||
createViewInContainer(vcRef:RenderViewContainerRef, atIndex:number, protoViewRef:ProtoViewRef):List<ViewRef> { return null; }
|
||||
createViewInContainer(vcRef:RenderViewContainerRef, atIndex:number, protoViewRef:RenderProtoViewRef):List<RenderViewRef> { return null; }
|
||||
|
||||
/**
|
||||
* Destroys the view in the given ViewContainer
|
||||
@ -208,7 +208,7 @@ export class Renderer {
|
||||
/**
|
||||
* Inserts a detached view into a viewContainer.
|
||||
*/
|
||||
insertViewIntoContainer(vcRef:RenderViewContainerRef, atIndex:number, view:ViewRef):void {}
|
||||
insertViewIntoContainer(vcRef:RenderViewContainerRef, atIndex:number, view:RenderViewRef):void {}
|
||||
|
||||
/**
|
||||
* Detaches a view from a container so that it can be inserted later on
|
||||
@ -220,53 +220,53 @@ export class Renderer {
|
||||
* installs it as a shadow view for an element.
|
||||
*
|
||||
* Note: only allowed if there is a dynamic component directive at this place.
|
||||
* @param {ViewRef} hostView
|
||||
* @param {RenderViewRef} hostView
|
||||
* @param {number} elementIndex
|
||||
* @param {ProtoViewRef} componentProtoViewRef A ProtoViewRef of type ProtoViewDto.COMPONENT_VIEW_TYPE
|
||||
* @return {List<ViewRef>} the view and all of its nested child component views
|
||||
* @param {RenderProtoViewRef} componentProtoViewRef A RenderProtoViewRef of type ProtoViewDto.COMPONENT_VIEW_TYPE
|
||||
* @return {List<RenderViewRef>} the view and all of its nested child component views
|
||||
*/
|
||||
createDynamicComponentView(hostViewRef:ViewRef, elementIndex:number, componentProtoViewRef:ProtoViewRef):List<ViewRef> { return null; }
|
||||
createDynamicComponentView(hostViewRef:RenderViewRef, elementIndex:number, componentProtoViewRef:RenderProtoViewRef):List<RenderViewRef> { return null; }
|
||||
|
||||
/**
|
||||
* Destroys the component view at the given index
|
||||
*
|
||||
* Note: only allowed if there is a dynamic component directive at this place.
|
||||
*/
|
||||
destroyDynamicComponentView(hostViewRef:ViewRef, elementIndex:number):void {}
|
||||
destroyDynamicComponentView(hostViewRef:RenderViewRef, elementIndex:number):void {}
|
||||
|
||||
/**
|
||||
* Creates a host view that includes the given element.
|
||||
* @param {ViewRef} parentViewRef (might be null)
|
||||
* @param {RenderViewRef} parentViewRef (might be null)
|
||||
* @param {any} hostElementSelector element or css selector for the host element
|
||||
* @param {ProtoViewRef} hostProtoView a ProtoViewRef of type ProtoViewDto.HOST_VIEW_TYPE
|
||||
* @return {List<ViewRef>} the view and all of its nested child component views
|
||||
* @param {RenderProtoViewRef} hostProtoView a RenderProtoViewRef of type ProtoViewDto.HOST_VIEW_TYPE
|
||||
* @return {List<RenderViewRef>} the view and all of its nested child component views
|
||||
*/
|
||||
createInPlaceHostView(parentViewRef:ViewRef, hostElementSelector, hostProtoViewRef:ProtoViewRef):List<ViewRef> { return null; }
|
||||
createInPlaceHostView(parentViewRef:RenderViewRef, hostElementSelector, hostProtoViewRef:RenderProtoViewRef):List<RenderViewRef> { return null; }
|
||||
|
||||
/**
|
||||
* Destroys the given host view in the given parent view.
|
||||
*/
|
||||
destroyInPlaceHostView(parentViewRef:ViewRef, hostViewRef:ViewRef):void {}
|
||||
destroyInPlaceHostView(parentViewRef:RenderViewRef, hostViewRef:RenderViewRef):void {}
|
||||
|
||||
/**
|
||||
* Sets a property on an element.
|
||||
* Note: This will fail if the property was not mentioned previously as a host property
|
||||
* in the View.
|
||||
*/
|
||||
setElementProperty(view:ViewRef, elementIndex:number, propertyName:string, propertyValue:any):void {}
|
||||
setElementProperty(view:RenderViewRef, elementIndex:number, propertyName:string, propertyValue:any):void {}
|
||||
|
||||
/**
|
||||
* This will set the value for a text node.
|
||||
* Note: This needs to be separate from setElementProperty as we don't have ElementBinders
|
||||
* for text nodes in the RenderProtoView either.
|
||||
*/
|
||||
setText(view:ViewRef, textNodeIndex:number, text:string):void {}
|
||||
setText(view:RenderViewRef, textNodeIndex:number, text:string):void {}
|
||||
|
||||
/**
|
||||
* Sets the dispatcher for all events that have been defined in the template or in directives
|
||||
* in the given view.
|
||||
*/
|
||||
setEventDispatcher(viewRef:ViewRef, dispatcher:any/*EventDispatcher*/):void {}
|
||||
setEventDispatcher(viewRef:RenderViewRef, dispatcher:any/*EventDispatcher*/):void {}
|
||||
|
||||
/**
|
||||
* To be called at the end of the VmTurn so the API can buffer calls
|
||||
|
@ -45,7 +45,7 @@ function _collectComponentChildViewRefs(view, target = null) {
|
||||
|
||||
|
||||
// public so that the compiler can use it.
|
||||
export class DirectDomProtoViewRef extends api.ProtoViewRef {
|
||||
export class DirectDomProtoViewRef extends api.RenderProtoViewRef {
|
||||
delegate:RenderProtoView;
|
||||
|
||||
constructor(delegate:RenderProtoView) {
|
||||
@ -54,7 +54,7 @@ export class DirectDomProtoViewRef extends api.ProtoViewRef {
|
||||
}
|
||||
}
|
||||
|
||||
export class DirectDomViewRef extends api.ViewRef {
|
||||
export class DirectDomViewRef extends api.RenderViewRef {
|
||||
delegate:RenderView;
|
||||
|
||||
constructor(delegate:RenderView) {
|
||||
@ -95,13 +95,13 @@ export class DirectDomRenderer extends api.Renderer {
|
||||
return this._compiler.compile(view);
|
||||
}
|
||||
|
||||
mergeChildComponentProtoViews(protoViewRef:api.ProtoViewRef, protoViewRefs:List<api.ProtoViewRef>) {
|
||||
mergeChildComponentProtoViews(protoViewRef:api.RenderProtoViewRef, protoViewRefs:List<api.RenderProtoViewRef>) {
|
||||
_resolveProtoView(protoViewRef).mergeChildComponentProtoViews(
|
||||
ListWrapper.map(protoViewRefs, _resolveProtoView)
|
||||
);
|
||||
}
|
||||
|
||||
createViewInContainer(vcRef:api.RenderViewContainerRef, atIndex:number, protoViewRef:api.ProtoViewRef):List<api.ViewRef> {
|
||||
createViewInContainer(vcRef:api.RenderViewContainerRef, atIndex:number, protoViewRef:api.RenderProtoViewRef):List<api.RenderViewRef> {
|
||||
var view = this._viewFactory.getView(_resolveProtoView(protoViewRef));
|
||||
var vc = _resolveViewContainer(vcRef);
|
||||
this._viewHydrator.hydrateViewInViewContainer(vc, view);
|
||||
@ -116,7 +116,7 @@ export class DirectDomRenderer extends api.Renderer {
|
||||
this._viewFactory.returnView(view);
|
||||
}
|
||||
|
||||
insertViewIntoContainer(vcRef:api.RenderViewContainerRef, atIndex=-1, viewRef:api.ViewRef):void {
|
||||
insertViewIntoContainer(vcRef:api.RenderViewContainerRef, atIndex=-1, viewRef:api.RenderViewRef):void {
|
||||
_resolveViewContainer(vcRef).insert(_resolveView(viewRef), atIndex);
|
||||
}
|
||||
|
||||
@ -124,14 +124,14 @@ export class DirectDomRenderer extends api.Renderer {
|
||||
_resolveViewContainer(vcRef).detach(atIndex);
|
||||
}
|
||||
|
||||
createDynamicComponentView(hostViewRef:api.ViewRef, elementIndex:number, componentViewRef:api.ProtoViewRef):List<api.ViewRef> {
|
||||
createDynamicComponentView(hostViewRef:api.RenderViewRef, elementIndex:number, componentViewRef:api.RenderProtoViewRef):List<api.RenderViewRef> {
|
||||
var hostView = _resolveView(hostViewRef);
|
||||
var componentView = this._viewFactory.getView(_resolveProtoView(componentViewRef));
|
||||
this._viewHydrator.hydrateDynamicComponentView(hostView, elementIndex, componentView);
|
||||
return _collectComponentChildViewRefs(componentView);
|
||||
}
|
||||
|
||||
destroyDynamicComponentView(hostViewRef:api.ViewRef, elementIndex:number):void {
|
||||
destroyDynamicComponentView(hostViewRef:api.RenderViewRef, elementIndex:number):void {
|
||||
throw new BaseException('Not supported yet');
|
||||
// Something along these lines:
|
||||
// var hostView = _resolveView(hostViewRef);
|
||||
@ -139,7 +139,7 @@ export class DirectDomRenderer extends api.Renderer {
|
||||
// this._viewHydrator.dehydrateDynamicComponentView(hostView, componentView);
|
||||
}
|
||||
|
||||
createInPlaceHostView(parentViewRef:api.ViewRef, hostElementSelector, hostProtoViewRef:api.ProtoViewRef):List<api.ViewRef> {
|
||||
createInPlaceHostView(parentViewRef:api.RenderViewRef, hostElementSelector, hostProtoViewRef:api.RenderProtoViewRef):List<api.RenderViewRef> {
|
||||
var parentView = _resolveView(parentViewRef);
|
||||
var hostView = this._viewFactory.createInPlaceHostView(hostElementSelector, _resolveProtoView(hostProtoViewRef));
|
||||
this._viewHydrator.hydrateInPlaceHostView(parentView, hostView);
|
||||
@ -149,13 +149,13 @@ export class DirectDomRenderer extends api.Renderer {
|
||||
/**
|
||||
* Destroys the given host view in the given parent view.
|
||||
*/
|
||||
destroyInPlaceHostView(parentViewRef:api.ViewRef, hostViewRef:api.ViewRef):void {
|
||||
destroyInPlaceHostView(parentViewRef:api.RenderViewRef, hostViewRef:api.RenderViewRef):void {
|
||||
var parentView = _resolveView(parentViewRef);
|
||||
var hostView = _resolveView(hostViewRef);
|
||||
this._viewHydrator.dehydrateInPlaceHostView(parentView, hostView);
|
||||
}
|
||||
|
||||
setImperativeComponentRootNodes(parentViewRef:api.ViewRef, elementIndex:number, nodes:List):void {
|
||||
setImperativeComponentRootNodes(parentViewRef:api.RenderViewRef, elementIndex:number, nodes:List):void {
|
||||
var parentView = _resolveView(parentViewRef);
|
||||
var hostElement = parentView.boundElements[elementIndex];
|
||||
var componentView = parentView.componentChildViews[elementIndex];
|
||||
@ -170,15 +170,15 @@ export class DirectDomRenderer extends api.Renderer {
|
||||
this._shadowDomStrategy.attachTemplate(hostElement, componentView);
|
||||
}
|
||||
|
||||
setElementProperty(viewRef:api.ViewRef, elementIndex:number, propertyName:string, propertyValue:any):void {
|
||||
setElementProperty(viewRef:api.RenderViewRef, elementIndex:number, propertyName:string, propertyValue:any):void {
|
||||
_resolveView(viewRef).setElementProperty(elementIndex, propertyName, propertyValue);
|
||||
}
|
||||
|
||||
setText(viewRef:api.ViewRef, textNodeIndex:number, text:string):void {
|
||||
setText(viewRef:api.RenderViewRef, textNodeIndex:number, text:string):void {
|
||||
_resolveView(viewRef).setText(textNodeIndex, text);
|
||||
}
|
||||
|
||||
setEventDispatcher(viewRef:api.ViewRef, dispatcher:any/*api.EventDispatcher*/):void {
|
||||
setEventDispatcher(viewRef:api.RenderViewRef, dispatcher:any/*api.EventDispatcher*/):void {
|
||||
_resolveView(viewRef).setEventDispatcher(dispatcher);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user