77 lines
2.8 KiB
TypeScript
77 lines
2.8 KiB
TypeScript
|
import {isPresent, isBlank} from 'angular2/src/facade/lang';
|
||
|
|
||
|
import * as o from '../output/output_ast';
|
||
|
import {
|
||
|
CompileTokenMetadata,
|
||
|
CompileDirectiveMetadata,
|
||
|
CompileIdentifierMetadata
|
||
|
} from '../compile_metadata';
|
||
|
import {CompileView} from './compile_view';
|
||
|
|
||
|
export function getPropertyInView(property: o.Expression, viewPath: CompileView[]): o.Expression {
|
||
|
if (viewPath.length === 0) {
|
||
|
return property;
|
||
|
} else {
|
||
|
var viewProp: o.Expression = o.THIS_EXPR;
|
||
|
for (var i = 0; i < viewPath.length; i++) {
|
||
|
viewProp = viewProp.prop('declarationAppElement').prop('parentView');
|
||
|
}
|
||
|
if (property instanceof o.ReadPropExpr) {
|
||
|
var lastView = viewPath[viewPath.length - 1];
|
||
|
let readPropExpr: o.ReadPropExpr = property;
|
||
|
// Note: Don't cast for members of the AppView base class...
|
||
|
if (lastView.fields.some((field) => field.name == readPropExpr.name) ||
|
||
|
lastView.getters.some((field) => field.name == readPropExpr.name)) {
|
||
|
viewProp = viewProp.cast(lastView.classType);
|
||
|
}
|
||
|
}
|
||
|
return o.replaceVarInExpression(o.THIS_EXPR.name, viewProp, property);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function injectFromViewParentInjector(token: CompileTokenMetadata,
|
||
|
optional: boolean): o.Expression {
|
||
|
var method = optional ? 'getOptional' : 'get';
|
||
|
return o.THIS_EXPR.prop('parentInjector').callMethod(method, [createDiTokenExpression(token)]);
|
||
|
}
|
||
|
|
||
|
export function getViewFactoryName(component: CompileDirectiveMetadata,
|
||
|
embeddedTemplateIndex: number): string {
|
||
|
return `viewFactory_${component.type.name}${embeddedTemplateIndex}`;
|
||
|
}
|
||
|
|
||
|
|
||
|
export function createDiTokenExpression(token: CompileTokenMetadata): o.Expression {
|
||
|
if (isPresent(token.value)) {
|
||
|
return o.literal(token.value);
|
||
|
} else if (token.identifierIsInstance) {
|
||
|
return o.importExpr(token.identifier)
|
||
|
.instantiate([], o.importType(token.identifier, [], [o.TypeModifier.Const]));
|
||
|
} else {
|
||
|
return o.importExpr(token.identifier);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function createFlatArray(expressions: o.Expression[]): o.Expression {
|
||
|
var lastNonArrayExpressions = [];
|
||
|
var result: o.Expression = o.literalArr([]);
|
||
|
for (var i = 0; i < expressions.length; i++) {
|
||
|
var expr = expressions[i];
|
||
|
if (expr.type instanceof o.ArrayType) {
|
||
|
if (lastNonArrayExpressions.length > 0) {
|
||
|
result =
|
||
|
result.callMethod(o.BuiltinMethod.ConcatArray, [o.literalArr(lastNonArrayExpressions)]);
|
||
|
lastNonArrayExpressions = [];
|
||
|
}
|
||
|
result = result.callMethod(o.BuiltinMethod.ConcatArray, [expr]);
|
||
|
} else {
|
||
|
lastNonArrayExpressions.push(expr);
|
||
|
}
|
||
|
}
|
||
|
if (lastNonArrayExpressions.length > 0) {
|
||
|
result =
|
||
|
result.callMethod(o.BuiltinMethod.ConcatArray, [o.literalArr(lastNonArrayExpressions)]);
|
||
|
}
|
||
|
return result;
|
||
|
}
|