From c2f084224add0c07849dc512ccea2ee2671fcace Mon Sep 17 00:00:00 2001 From: Akash Agrawal Date: Thu, 28 Apr 2016 18:35:55 +0530 Subject: [PATCH] Expose configurable attributes property when loading components --- ui/builder/builder.d.ts | 1 + ui/builder/builder.ts | 2 +- ui/builder/component-builder.d.ts | 2 +- ui/builder/component-builder.ts | 6 +++--- ui/builder/special-properties.d.ts | 2 +- ui/builder/special-properties.ts | 2 +- utils/utils-common.ts | 12 +++++++----- utils/utils.d.ts | 2 +- 8 files changed, 16 insertions(+), 13 deletions(-) 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 }