Skip to content

Commit

Permalink
fix(webpack): fix fragment css not being applied with webpack (#5172)
Browse files Browse the repository at this point in the history
Support css files for fragments to be registered using global.registerModule
and global.registerWebpackModules.
  • Loading branch information
MartoYankov authored and Vasil Chimev committed Dec 14, 2017
1 parent 0986315 commit 60773e7
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 14 deletions.
29 changes: 21 additions & 8 deletions tns-core-modules/ui/builder/builder.ts
Expand Up @@ -115,15 +115,28 @@ function loadCustomComponent(componentPath: string, componentName?: string, attr
result = getComponentModule(componentName, componentPath, attributes, context);
}

// Add component CSS file if exists.
var cssFilePath = resolveFileName(fullComponentPathFilePathWithoutExt, "css");
if (cssFilePath) {
if (parentPage && typeof (<any>parentPage).addCssFile === "function") {
(<any>parentPage).addCssFile(cssFilePath);
} else {
ensureTrace();
// webpack modules require paths to be relative to /app folder.
let cssModulePath = fullComponentPathFilePathWithoutExt + ".css";
if (cssModulePath.startsWith("/")) {
var app = knownFolders.currentApp().path + "/";
if (cssModulePath.startsWith(app)) {
cssModulePath = "./" + cssModulePath.substr(app.length);
}
}

trace.write("CSS file found but no page specified. Please specify page in the options!", trace.categories.Error, trace.messageType.error);
// Add CSS from webpack module if exists.
if (global.moduleExists(cssModulePath)) {
(<any>parentPage).addCssFile(cssModulePath);
} else {
var cssFilePath = resolveFileName(fullComponentPathFilePathWithoutExt, "css");
// Add component CSS file if exists.
if (cssFilePath) {
if (parentPage && typeof (<any>parentPage).addCssFile === "function") {
(<any>parentPage).addCssFile(cssFilePath);
} else {
ensureTrace();
trace.write("CSS file found but no page specified. Please specify page in the options!", trace.categories.Error, trace.messageType.error);
}
}
}

Expand Down
24 changes: 18 additions & 6 deletions tns-core-modules/ui/styling/style-scope.ts
Expand Up @@ -80,22 +80,34 @@ class CSSSource {
}

public static fromURI(uri: string, keyframes: KeyframesMap): CSSSource {
// webpack modules require all file paths to be relative to /app folder.
let appRelativeUri = uri;
if (appRelativeUri.startsWith("/")) {
var app = knownFolders.currentApp().path + "/";
if (appRelativeUri.startsWith(app)) {
appRelativeUri = "./" + appRelativeUri.substr(app.length);
}
}

try {
const cssOrAst = global.loadModule(uri);
const cssOrAst = global.loadModule(appRelativeUri);
if (cssOrAst) {
if (typeof cssOrAst === "string") {
return CSSSource.fromSource(cssOrAst, keyframes, uri);
// raw-loader
return CSSSource.fromSource(cssOrAst, keyframes, appRelativeUri);
} else if (typeof cssOrAst === "object" && cssOrAst.type === "stylesheet" && cssOrAst.stylesheet && cssOrAst.stylesheet.rules) {
return CSSSource.fromAST(cssOrAst, keyframes, uri);
// css-loader
return CSSSource.fromAST(cssOrAst, keyframes, appRelativeUri);
} else {
// Probably a webpack css-loader exported object.
return CSSSource.fromSource(cssOrAst.toString(), keyframes, uri);
// css2json-loader
return CSSSource.fromSource(cssOrAst.toString(), keyframes, appRelativeUri);
}
}
} catch(e) {
//
}
return CSSSource.fromFile(uri, keyframes);

return CSSSource.fromFile(appRelativeUri, keyframes);
}

public static fromFile(url: string, keyframes: KeyframesMap): CSSSource {
Expand Down

0 comments on commit 60773e7

Please sign in to comment.