mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-17 04:41:36 +08:00
Merge pull request #580 from NativeScript/feature/code-cleanup
Template builder code cleanup
This commit is contained in:
@ -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();
|
||||
var finished = templateBuilder.handleElement(args);
|
||||
if (finished) {
|
||||
// Clean-up and continnue
|
||||
templateBuilder = undefined;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Skip processing untill the template builder finishes his job.
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
11
ui/builder/template-builder.d.ts
vendored
11
ui/builder/template-builder.d.ts
vendored
@ -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;
|
||||
|
@ -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("");
|
||||
}
|
||||
|
Reference in New Issue
Block a user