The goal is to make implementing a renderer straight forward.
BREAKING_CHANGE:
- Renderer interface was redone / simplified.
- `DirectDomRenderer` was replaced by `DomRenderer`.
- `DirectDomRenderer.setImperativeComponentRootNodes` is replaced
by the following 2 steps:
1. `ViewManager.getComponentView(elementRef) -> ViewRef`
2. `DomRenderer.setComponentViewRootNodes(viewRef, rootNodes)`
- all `@View` annotations need to have a template, but the template
may be empty. Previously views that had a `renderer` property did
not have to have a `template`.
- `dynamicComponentLoader.loadIntoNewLocation` does no more allow
to pass an element, but requires a css selector.
Special syntax: `:document` can be used as prefix to search globally
on the document instead of in the provided parent view.
Part of #1675
40 lines
1.1 KiB
JavaScript
40 lines
1.1 KiB
JavaScript
import {isPresent} from 'angular2/src/facade/lang';
|
|
import {DOM} from 'angular2/src/dom/dom_adapter';
|
|
|
|
import {List} from 'angular2/src/facade/collection';
|
|
|
|
import {ElementBinder} from './element_binder';
|
|
import {NG_BINDING_CLASS} from '../util';
|
|
|
|
import {RenderProtoViewRef} from '../../api';
|
|
|
|
export function resolveInternalDomProtoView(protoViewRef:RenderProtoViewRef) {
|
|
var domProtoViewRef:DomProtoViewRef = protoViewRef;
|
|
return domProtoViewRef._protoView;
|
|
}
|
|
|
|
export class DomProtoViewRef extends RenderProtoViewRef {
|
|
_protoView:DomProtoView;
|
|
constructor(protoView:DomProtoView) {
|
|
super();
|
|
this._protoView = protoView;
|
|
}
|
|
}
|
|
|
|
export class DomProtoView {
|
|
element;
|
|
elementBinders:List<ElementBinder>;
|
|
isTemplateElement:boolean;
|
|
rootBindingOffset:int;
|
|
|
|
constructor({
|
|
elementBinders,
|
|
element
|
|
}) {
|
|
this.element = element;
|
|
this.elementBinders = elementBinders;
|
|
this.isTemplateElement = DOM.isTemplateElement(this.element);
|
|
this.rootBindingOffset = (isPresent(this.element) && DOM.hasClass(this.element, NG_BINDING_CLASS)) ? 1 : 0;
|
|
}
|
|
}
|