From ede36a16cabebdac796bf2c1301e837d66b34705 Mon Sep 17 00:00:00 2001 From: vakrilov Date: Thu, 13 Aug 2015 14:26:09 +0300 Subject: [PATCH 1/2] Template builder code cleanup --- ui/builder/builder.ts | 17 +++++------------ ui/builder/template-builder.d.ts | 11 +++++++---- ui/builder/template-builder.ts | 25 +++++++++++++++++++++---- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/ui/builder/builder.ts b/ui/builder/builder.ts index f3f98cd5a..e1dc9f3c7 100644 --- a/ui/builder/builder.ts +++ b/ui/builder/builder.ts @@ -75,20 +75,13 @@ function parseInternal(value: string, context: any): componentBuilder.ComponentM } if (templateBuilder) { - if (args.eventType === xml.ParserEventType.StartElement) { - templateBuilder.addStartElement(args.prefix, args.namespace, args.elementName, args.attributes); - return; - } else if (args.eventType === xml.ParserEventType.EndElement) { - templateBuilder.addEndElement(args.prefix, args.elementName); - if (templateBuilder.hasFinished()) { - templateBuilder.build(); - templateBuilder = undefined; - } - else { - return; - } + var finished = templateBuilder.handleElement(args); + if (finished) { + // Clean-up and continnue + templateBuilder = undefined; } else { + // Skip processing untill the template builder finishes his job. return; } } diff --git a/ui/builder/template-builder.d.ts b/ui/builder/template-builder.d.ts index 4a8e6439e..651ce885f 100644 --- a/ui/builder/template-builder.d.ts +++ b/ui/builder/template-builder.d.ts @@ -1,15 +1,18 @@ //@private declare module "ui/builder/template-builder" { + import xml = require("xml"); import componentBuilder = require("ui/builder/component-builder"); class TemplateBuilder { constructor(templateProperty: TemplateProperty); elementName: string; - addStartElement(prefix: string, namespace: string, elementName: string, attributes: Object); - addEndElement(prefix: string, elementName: string); - build(); - hasFinished(); + + /** + * Returns true if the template builder has finished parsing template and the parsing should continue. + * @param args - ParserEvent argument to handle. + */ + handleElement(args: xml.ParserEvent): boolean; } export function isKnownTemplate(name: string, exports: any): boolean; diff --git a/ui/builder/template-builder.ts b/ui/builder/template-builder.ts index b5dcfbeb2..bb562934b 100644 --- a/ui/builder/template-builder.ts +++ b/ui/builder/template-builder.ts @@ -1,4 +1,5 @@ import definition = require("ui/builder/template-builder"); +import xml = require("xml"); var KNOWNTEMPLATES = "knownTemplates"; @@ -17,7 +18,23 @@ export class TemplateBuilder { return this._templateProperty.elementName; } - public addStartElement(prefix: string, namespace: string, elementName: string, attributes: Object) { + handleElement(args: xml.ParserEvent): boolean { + if (args.eventType === xml.ParserEventType.StartElement) { + this.addStartElement(args.prefix, args.namespace, args.elementName, args.attributes); + } else if (args.eventType === xml.ParserEventType.EndElement) { + this.addEndElement(args.prefix, args.elementName); + } + + if (this.hasFinished()) { + this.build(); + return true; + } + else { + return false; + } + } + + private addStartElement(prefix: string, namespace: string, elementName: string, attributes: Object) { this._nestingLevel++; this._items.push("<" + getElementNameWithPrefix(prefix, elementName) + @@ -26,18 +43,18 @@ export class TemplateBuilder { ">"); } - public addEndElement(prefix: string, elementName: string) { + private addEndElement(prefix: string, elementName: string) { this._nestingLevel--; if (!this.hasFinished()) { this._items.push(""); } } - public hasFinished() { + private hasFinished() { return this._nestingLevel < 0; } - public build() { + private build() { if (this._templateProperty.name in this._templateProperty.parent.component) { this._templateProperty.parent.component[this._templateProperty.name] = this._items.join(""); } From cd491d6c0331e714b4c3ab029aad0fcb13c6c82f Mon Sep 17 00:00:00 2001 From: vakrilov Date: Thu, 13 Aug 2015 14:34:23 +0300 Subject: [PATCH 2/2] Tslint --- ui/builder/template-builder.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/builder/template-builder.d.ts b/ui/builder/template-builder.d.ts index 651ce885f..39aa94c2f 100644 --- a/ui/builder/template-builder.d.ts +++ b/ui/builder/template-builder.d.ts @@ -8,7 +8,7 @@ declare module "ui/builder/template-builder" { elementName: string; - /** + /* * Returns true if the template builder has finished parsing template and the parsing should continue. * @param args - ParserEvent argument to handle. */