| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- Object.defineProperty(exports, "__esModule", { value: true });
- var ast = require("@angular/compiler");
- var expressionTypes_1 = require("../expressionTypes");
- var recursiveAngularExpressionVisitor_1 = require("./recursiveAngularExpressionVisitor");
- var sourceMappingVisitor_1 = require("../sourceMappingVisitor");
- var getExpressionDisplacement = function (binding) {
- var attrLen = 0;
- var valLen = 0;
- var totalLength = 0;
- var result = 0;
- if (binding instanceof ast.BoundEventAst ||
- binding instanceof ast.BoundElementPropertyAst ||
- binding instanceof ast.BoundDirectivePropertyAst) {
- var subBindingLen = 0;
- if (binding instanceof ast.BoundElementPropertyAst) {
- switch (binding.type) {
- case 4:
- subBindingLen = 'animate'.length + 1;
- break;
- case 1:
- subBindingLen = 'attr'.length + 1;
- break;
- case 2:
- subBindingLen = 'class'.length + 1;
- break;
- case 3:
- subBindingLen = 'style'.length + 1;
- break;
- }
- }
- if (!(binding instanceof ast.BoundDirectivePropertyAst)) {
- attrLen = binding.name.length + 4 + subBindingLen;
- }
- if (binding instanceof ast.BoundEventAst) {
- valLen = binding.handler.span.end;
- }
- else if (binding instanceof ast.BoundDirectivePropertyAst &&
- (binding.templateName === 'ngForOf' || binding.templateName === 'ngIf')) {
- result = binding.sourceSpan.start.file.content.lastIndexOf(binding.value.source);
- if (binding.templateName === 'ngIf') {
- if (binding.value.ast.span.start > 0)
- result = binding.sourceSpan.start.file.content.lastIndexOf(binding.value.source) + binding.value.ast.span.start;
- }
- }
- else {
- valLen = binding.value.span.end;
- }
- if (!(binding instanceof ast.BoundDirectivePropertyAst) || (binding.templateName !== 'ngForOf' && binding.templateName !== 'ngIf')) {
- totalLength = binding.sourceSpan.end.offset - binding.sourceSpan.start.offset;
- var whitespace = totalLength - (attrLen + valLen) - 1;
- result = whitespace + attrLen + binding.sourceSpan.start.offset;
- }
- }
- else if (binding instanceof ast.BoundTextAst) {
- result = binding.sourceSpan.start.offset;
- }
- return result;
- };
- var BasicTemplateAstVisitor = (function (_super) {
- __extends(BasicTemplateAstVisitor, _super);
- function BasicTemplateAstVisitor(sourceFile, _originalOptions, context, templateStart, expressionVisitorCtrl) {
- if (expressionVisitorCtrl === void 0) { expressionVisitorCtrl = recursiveAngularExpressionVisitor_1.RecursiveAngularExpressionVisitor; }
- var _this = _super.call(this, sourceFile, _originalOptions, context.template.template, templateStart) || this;
- _this._originalOptions = _originalOptions;
- _this.context = context;
- _this.templateStart = templateStart;
- _this.expressionVisitorCtrl = expressionVisitorCtrl;
- _this._variables = {};
- return _this;
- }
- BasicTemplateAstVisitor.prototype.visit = function (node, context) {
- node.visit(this, context);
- };
- BasicTemplateAstVisitor.prototype.visitNgContent = function (ast, context) { };
- BasicTemplateAstVisitor.prototype.visitEmbeddedTemplate = function (ast, context) {
- var _this = this;
- ast.directives.forEach(function (d) { return _this.visit(d, context); });
- ast.variables.forEach(function (v) { return _this.visit(v, context); });
- ast.children.forEach(function (e) { return _this.visit(e, context); });
- ast.outputs.forEach(function (o) { return _this.visit(o, context); });
- ast.attrs.forEach(function (a) { return _this.visit(a, context); });
- ast.references.forEach(function (r) { return _this.visit(r, context); });
- };
- BasicTemplateAstVisitor.prototype.visitElement = function (element, context) {
- var _this = this;
- element.references.forEach(function (r) { return _this.visit(r, context); });
- element.inputs.forEach(function (i) { return _this.visit(i, context); });
- element.outputs.forEach(function (o) { return _this.visit(o, context); });
- element.attrs.forEach(function (a) { return _this.visit(a, context); });
- element.children.forEach(function (e) { return _this.visit(e, context); });
- element.directives.forEach(function (d) { return _this.visit(d, context); });
- };
- BasicTemplateAstVisitor.prototype.visitReference = function (ast, context) { };
- BasicTemplateAstVisitor.prototype.visitVariable = function (ast, context) {
- this._variables[ast.name] = true;
- };
- BasicTemplateAstVisitor.prototype.visitEvent = function (ast, context) {
- this._variables['$event'] = true;
- this.visitNgTemplateAST(ast.handler, this.templateStart + getExpressionDisplacement(ast));
- this._variables['$event'] = false;
- };
- BasicTemplateAstVisitor.prototype.visitElementProperty = function (prop, context) {
- var ast = prop.value.ast;
- ast.interpolateExpression = prop.value.source;
- this.visitNgTemplateAST(prop.value, this.templateStart + getExpressionDisplacement(prop), prop);
- };
- BasicTemplateAstVisitor.prototype.visitAttr = function (ast, context) { };
- BasicTemplateAstVisitor.prototype.visitBoundText = function (text, context) {
- if (expressionTypes_1.ExpTypes.ASTWithSource(text.value)) {
- var ast_1 = text.value.ast;
- ast_1.interpolateExpression = text.value.source;
- this.visitNgTemplateAST(ast_1, this.templateStart + getExpressionDisplacement(text));
- }
- };
- BasicTemplateAstVisitor.prototype.visitText = function (text, context) { };
- BasicTemplateAstVisitor.prototype.visitDirective = function (ast, context) {
- var _this = this;
- ast.inputs.forEach(function (o) { return _this.visit(o, context); });
- ast.hostProperties.forEach(function (p) { return _this.visit(p, context); });
- ast.hostEvents.forEach(function (e) { return _this.visit(e, context); });
- };
- BasicTemplateAstVisitor.prototype.visitDirectiveProperty = function (prop, context) {
- if (expressionTypes_1.ExpTypes.ASTWithSource(prop.value)) {
- this.visitNgTemplateAST(prop.value, this.templateStart + getExpressionDisplacement(prop), prop);
- }
- };
- BasicTemplateAstVisitor.prototype.visitNgTemplateAST = function (ast, templateStart, prop) {
- var _this = this;
- var templateVisitor = new this.expressionVisitorCtrl(this.getSourceFile(), this._originalOptions, this.context, templateStart);
- templateVisitor.preDefinedVariables = this._variables;
- templateVisitor.parentAST = prop;
- templateVisitor.visit(ast);
- templateVisitor.getFailures().forEach(function (f) { return _this.addFailure(f); });
- };
- return BasicTemplateAstVisitor;
- }(sourceMappingVisitor_1.SourceMappingVisitor));
- exports.BasicTemplateAstVisitor = BasicTemplateAstVisitor;
|