import { AbstractDirective } from "./abstract-directive";
/**
* Error
*/
export class NgIf extends AbstractDirective implements NgTemplate.Directive {
nodes: NgTemplate.DirectiveNode[];
constructor( el: HTMLElement, reporter: NgTemplate.Reporter ){
super( el, reporter );
this.nodes = this.initNodes( el, "ng-if",
( node: HTMLElement, expr: string, compile: Function, cache: NgTemplate.Cache ) => {
return {
el: node,
anchor: document.createElement( "ng" ),
exp: compile( expr, "Boolean", reporter ),
cache: cache
};
});
}
sync( data: NgTemplate.DataMap ){
this.nodes.forEach(( node: NgTemplate.DirectiveNode ) => {
node.cache.evaluate( node.exp.call( node.el, data ), ( val: boolean ) => {
if ( val ) {
return this.enable( node );
}
this.disable( node );
});
});
}
private disable( node: NgTemplate.DirectiveNode ): void{
if ( node.anchor.parentNode ) {
return;
}
node.anchor.style.display = "none";
node.el.parentNode.insertBefore( node.anchor, node.el );
node.el.parentNode.removeChild( node.el );
}
private enable( node: NgTemplate.DirectiveNode ): void{
if ( !node.anchor.parentNode ) {
return;
}
node.anchor.parentNode.insertBefore( node.el, node.anchor );
node.anchor.parentNode.removeChild( node.anchor );
}
}