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 (templateBuilder) {
|
||||||
if (args.eventType === xml.ParserEventType.StartElement) {
|
var finished = templateBuilder.handleElement(args);
|
||||||
templateBuilder.addStartElement(args.prefix, args.namespace, args.elementName, args.attributes);
|
if (finished) {
|
||||||
return;
|
// Clean-up and continnue
|
||||||
} else if (args.eventType === xml.ParserEventType.EndElement) {
|
templateBuilder = undefined;
|
||||||
templateBuilder.addEndElement(args.prefix, args.elementName);
|
|
||||||
if (templateBuilder.hasFinished()) {
|
|
||||||
templateBuilder.build();
|
|
||||||
templateBuilder = undefined;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
// Skip processing untill the template builder finishes his job.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
ui/builder/template-builder.d.ts
vendored
11
ui/builder/template-builder.d.ts
vendored
@ -1,15 +1,18 @@
|
|||||||
//@private
|
//@private
|
||||||
declare module "ui/builder/template-builder" {
|
declare module "ui/builder/template-builder" {
|
||||||
|
import xml = require("xml");
|
||||||
import componentBuilder = require("ui/builder/component-builder");
|
import componentBuilder = require("ui/builder/component-builder");
|
||||||
|
|
||||||
class TemplateBuilder {
|
class TemplateBuilder {
|
||||||
constructor(templateProperty: TemplateProperty);
|
constructor(templateProperty: TemplateProperty);
|
||||||
|
|
||||||
elementName: string;
|
elementName: string;
|
||||||
addStartElement(prefix: string, namespace: string, elementName: string, attributes: Object);
|
|
||||||
addEndElement(prefix: string, elementName: string);
|
/*
|
||||||
build();
|
* Returns true if the template builder has finished parsing template and the parsing should continue.
|
||||||
hasFinished();
|
* @param args - ParserEvent argument to handle.
|
||||||
|
*/
|
||||||
|
handleElement(args: xml.ParserEvent): boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isKnownTemplate(name: string, exports: any): boolean;
|
export function isKnownTemplate(name: string, exports: any): boolean;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import definition = require("ui/builder/template-builder");
|
import definition = require("ui/builder/template-builder");
|
||||||
|
import xml = require("xml");
|
||||||
|
|
||||||
var KNOWNTEMPLATES = "knownTemplates";
|
var KNOWNTEMPLATES = "knownTemplates";
|
||||||
|
|
||||||
@ -17,7 +18,23 @@ export class TemplateBuilder {
|
|||||||
return this._templateProperty.elementName;
|
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._nestingLevel++;
|
||||||
this._items.push("<" +
|
this._items.push("<" +
|
||||||
getElementNameWithPrefix(prefix, elementName) +
|
getElementNameWithPrefix(prefix, elementName) +
|
||||||
@ -26,18 +43,18 @@ export class TemplateBuilder {
|
|||||||
">");
|
">");
|
||||||
}
|
}
|
||||||
|
|
||||||
public addEndElement(prefix: string, elementName: string) {
|
private addEndElement(prefix: string, elementName: string) {
|
||||||
this._nestingLevel--;
|
this._nestingLevel--;
|
||||||
if (!this.hasFinished()) {
|
if (!this.hasFinished()) {
|
||||||
this._items.push("</" + getElementNameWithPrefix(prefix, elementName) + ">");
|
this._items.push("</" + getElementNameWithPrefix(prefix, elementName) + ">");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public hasFinished() {
|
private hasFinished() {
|
||||||
return this._nestingLevel < 0;
|
return this._nestingLevel < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public build() {
|
private build() {
|
||||||
if (this._templateProperty.name in this._templateProperty.parent.component) {
|
if (this._templateProperty.name in this._templateProperty.parent.component) {
|
||||||
this._templateProperty.parent.component[this._templateProperty.name] = this._items.join("");
|
this._templateProperty.parent.component[this._templateProperty.name] = this._items.join("");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user