Merge pull request #580 from NativeScript/feature/code-cleanup

Template builder code cleanup
This commit is contained in:
Alexander Vakrilov
2015-08-13 15:17:38 +03:00
3 changed files with 33 additions and 20 deletions

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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("</" + getElementNameWithPrefix(prefix, elementName) + ">");
}
}
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("");
}