diff --git a/apps/tests/xml-declaration/xml-declaration-tests.ts b/apps/tests/xml-declaration/xml-declaration-tests.ts index 8c316b505..bbf7c6a85 100644 --- a/apps/tests/xml-declaration/xml-declaration-tests.ts +++ b/apps/tests/xml-declaration/xml-declaration-tests.ts @@ -133,6 +133,26 @@ export function test_loadWithOptionsFromTNSPath() { TKUnit.assert(v instanceof Label, "Expected result: Label; Actual result: " + v + ";"); }; +export function test_loadWithAttributes() { + var lText = "Nativescript rocks"; + var lWrap = true; + var lColor = "#FF0000"; // red + + var v = builder.load({ + path: "tns_modules/ui/label", + name: "Label", + attributes: { + text: lText, + textWrap: lWrap, + style: "color: " + lColor + ";" + } + }); + + TKUnit.assertEqual(v["text"], lText, "Expected result: true; Actual result: " + v + ";"); + TKUnit.assertEqual(v["textWrap"], true, "Expected result: true; Actual result: " + v + ";"); + helper.assertViewColor(v, lColor); +}; + export function test_parse_ShouldNotCrashWithoutExports() { var file = fs.File.fromPath(fs.path.join(__dirname, "mainPage.xml")); var text = file.readTextSync(); @@ -879,4 +899,4 @@ export function test_hasSourceCodeLocations() { var label = page.getViewById("label"); var labelSource = Source.get(label); TKUnit.assertEqual(labelSource.toString(), "file:///app/" + basePath + "examples/test-page.xml:3:5"); -} \ No newline at end of file +} diff --git a/build/run-testsapp.grunt.js b/build/run-testsapp.grunt.js index 7ffd381dc..285a3ac7c 100644 --- a/build/run-testsapp.grunt.js +++ b/build/run-testsapp.grunt.js @@ -209,7 +209,7 @@ module.exports = { }, shell: { collectAndroidLog: { - command: "./expect.exp " + "'adb logcat' " + localCfg.outFile, + command: "./expect.exp " + "'adb logcat *:D' " + localCfg.outFile, options: { execOptions: { maxBuffer: Infinity diff --git a/ui/builder/builder.d.ts b/ui/builder/builder.d.ts index e2262d644..57318bb68 100644 --- a/ui/builder/builder.d.ts +++ b/ui/builder/builder.d.ts @@ -9,6 +9,7 @@ export interface LoadOptions { path: string; name: string; + attributes?: any; exports?: any; page?: page.Page; } diff --git a/ui/builder/builder.ts b/ui/builder/builder.ts index f1c642310..73d3dfa18 100644 --- a/ui/builder/builder.ts +++ b/ui/builder/builder.ts @@ -115,7 +115,7 @@ export function load(pathOrOptions: string | LoadOptions, context?: any): View { if (!context) { if (!isString(pathOrOptions)) { let options = pathOrOptions; - componentModule = loadCustomComponent(options.path, options.name, undefined, options.exports, options.page); + componentModule = loadCustomComponent(options.path, options.name, options.attributes, options.exports, options.page); } else { let path = pathOrOptions; componentModule = loadInternal(path); diff --git a/ui/builder/component-builder.d.ts b/ui/builder/component-builder.d.ts index 24711fc29..8da3f4278 100644 --- a/ui/builder/component-builder.d.ts +++ b/ui/builder/component-builder.d.ts @@ -2,7 +2,7 @@ declare module "ui/builder/component-builder" { import view = require("ui/core/view"); export function getComponentModule(elementName: string, namespace: string, attributes: Object, exports: Object): ComponentModule; - export function setPropertyValue(instance: view.View, instanceModuleExports: Object, pageExports: Object, propertyName: string, propertyValue: string) : void; + export function setPropertyValue(instance: view.View, instanceModuleExports: Object, pageExports: Object, propertyName: string, propertyValue: any) : void; export interface ComponentModule { component: view.View; diff --git a/ui/builder/component-builder.ts b/ui/builder/component-builder.ts index 7fbef2f21..b82740b2e 100644 --- a/ui/builder/component-builder.ts +++ b/ui/builder/component-builder.ts @@ -154,7 +154,7 @@ export function getComponentModule(elementName: string, namespace: string, attri return componentModule; } -export function setPropertyValue(instance: View, instanceModule: Object, exports: Object, propertyName: string, propertyValue: string) { +export function setPropertyValue(instance: View, instanceModule: Object, exports: Object, propertyName: string, propertyValue: any) { // Note: instanceModule can be null if we are loading custom compnenet with no code-behind. if (isBinding(propertyValue) && instance.bind) { @@ -183,7 +183,7 @@ export function setPropertyValue(instance: View, instanceModule: Object, exports if (!attrHandled && (instance)._applyXmlAttribute) { attrHandled = (instance)._applyXmlAttribute(propertyName, propertyValue); } - if (!attrHandled) { + if (!attrHandled) { instance[propertyName] = convertString(propertyValue); } } @@ -193,7 +193,7 @@ function getBindingExpressionFromAttribute(value: string): string { return value.replace("{{", "").replace("}}", "").trim(); } -function isBinding(value: string): boolean { +function isBinding(value: any): boolean { var isBinding; if (isString(value)) { diff --git a/ui/builder/special-properties.d.ts b/ui/builder/special-properties.d.ts index 66ed2b3be..e233ae523 100644 --- a/ui/builder/special-properties.d.ts +++ b/ui/builder/special-properties.d.ts @@ -1,7 +1,7 @@ declare module "ui/builder/special-properties" { import view = require("ui/core/view"); - export type PropertySetter = (instance: view.View, propertyValue: string) => void; + export type PropertySetter = (instance: view.View, propertyValue: any) => void; export function registerSpecialProperty(name: string, setter: PropertySetter): void; export function getSpecialPropertySetter(name: string): PropertySetter; } diff --git a/ui/builder/special-properties.ts b/ui/builder/special-properties.ts index 83596513d..e8d8b6c74 100644 --- a/ui/builder/special-properties.ts +++ b/ui/builder/special-properties.ts @@ -1,6 +1,6 @@ import view = require("ui/core/view"); -export type PropertySetter = (instance: view.View, propertyValue: string) => void; +export type PropertySetter = (instance: view.View, propertyValue: any) => void; var specialProperties: Map = new Map(); diff --git a/utils/utils-common.ts b/utils/utils-common.ts index d3db424b9..e3e9f30df 100644 --- a/utils/utils-common.ts +++ b/utils/utils-common.ts @@ -34,10 +34,12 @@ export function escapeRegexSymbols(source: string): string { return source.replace(escapeRegex, "\\$&"); } -export function convertString(value: string): any { +export function convertString(value: any): any { var result; - - if (value.trim() === "") { + + if (!types.isString(value)) { + result = value; + } else if (value.trim() === "") { result = value; } else { // Try to convert value to number. @@ -50,7 +52,7 @@ export function convertString(value: string): any { result = value; } } - + return result; } @@ -131,4 +133,4 @@ export function isDataURI(uri: string): boolean { var firstSegment = uri.trim().split(',')[0]; return firstSegment && firstSegment.indexOf("data:") === 0 && firstSegment.indexOf('base64') >= 0; -} \ No newline at end of file +} diff --git a/utils/utils.d.ts b/utils/utils.d.ts index b5381759b..72889d093 100644 --- a/utils/utils.d.ts +++ b/utils/utils.d.ts @@ -240,5 +240,5 @@ * Converts string value to number or boolean. * @param value The original value. */ - export function convertString(value: string): any + export function convertString(value: any): any }