diff --git a/nativescript-core/css/css-tree-parser.d.ts b/nativescript-core/css/css-tree-parser.d.ts new file mode 100644 index 000000000..263200320 --- /dev/null +++ b/nativescript-core/css/css-tree-parser.d.ts @@ -0,0 +1 @@ +export declare function cssTreeParse(css: any, source: any): any; diff --git a/nativescript-core/ui/core/view/view.android.ts b/nativescript-core/ui/core/view/view.android.ts index 2388aa67c..bbfab0194 100644 --- a/nativescript-core/ui/core/view/view.android.ts +++ b/nativescript-core/ui/core/view/view.android.ts @@ -1116,7 +1116,7 @@ function createNativePercentLengthProperty(options: NativePercentLengthPropertyO setPercent = options.setPercent || percentNotSupported; options = null; } - if (length == "auto") { // tslint:disable-line + if (length == "auto" || !length) { // tslint:disable-line setPixels(this.nativeViewProtected, auto); } else if (typeof length === "number") { setPixels(this.nativeViewProtected, layout.round(layout.toDevicePixels(length))); diff --git a/nativescript-core/ui/styling/style-scope.ts b/nativescript-core/ui/styling/style-scope.ts index 0f1a219ab..47b96e92b 100644 --- a/nativescript-core/ui/styling/style-scope.ts +++ b/nativescript-core/ui/styling/style-scope.ts @@ -110,6 +110,19 @@ class CSSSource { this.parse(); } + public static fromDetect(cssOrAst: any, keyframes: KeyframesMap, fileName?: string): CSSSource { + if (typeof cssOrAst === "string") { + // raw-loader + return CSSSource.fromSource(cssOrAst, keyframes, fileName); + } else if (typeof cssOrAst === "object" && cssOrAst.type === "stylesheet" && cssOrAst.stylesheet && cssOrAst.stylesheet.rules) { + // css-loader + return CSSSource.fromAST(cssOrAst, keyframes, fileName); + } else { + // css2json-loader + return CSSSource.fromSource(cssOrAst.toString(), keyframes, fileName); + } + } + public static fromURI(uri: string, keyframes: KeyframesMap): CSSSource { // webpack modules require all file paths to be relative to /app folder const appRelativeUri = CSSSource.pathRelativeToApp(uri); @@ -119,16 +132,7 @@ class CSSSource { try { const cssOrAst = global.loadModule(resolvedModuleName, true); if (cssOrAst) { - if (typeof cssOrAst === "string") { - // raw-loader - return CSSSource.fromSource(cssOrAst, keyframes, resolvedModuleName); - } else if (typeof cssOrAst === "object" && cssOrAst.type === "stylesheet" && cssOrAst.stylesheet && cssOrAst.stylesheet.rules) { - // css-loader - return CSSSource.fromAST(cssOrAst, keyframes, resolvedModuleName); - } else { - // css2json-loader - return CSSSource.fromSource(cssOrAst.toString(), keyframes, resolvedModuleName); - } + return CSSSource.fromDetect(cssOrAst, keyframes, resolvedModuleName); } } catch (e) { traceWrite(`Could not load CSS from ${uri}: ${e}`, traceCategories.Error, traceMessageType.error); @@ -325,7 +329,7 @@ export function removeTaggedAdditionalCSS(tag: String | Number): Boolean { } export function addTaggedAdditionalCSS(cssText: string, tag?: string | Number): Boolean { - const parsed: RuleSet[] = CSSSource.fromSource(cssText, applicationKeyframes, undefined).selectors; + const parsed: RuleSet[] = CSSSource.fromDetect(cssText, applicationKeyframes, undefined).selectors; let changed = false; if (parsed && parsed.length) { changed = true;