
committed by
Tobias Bosch

parent
52236bd765
commit
841f8789fd
@ -0,0 +1,37 @@
|
||||
library angular2.transform.stylesheet_compiler.processor;
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:angular2/src/transform/common/asset_reader.dart';
|
||||
import 'package:angular2/src/transform/common/code/source_module.dart';
|
||||
import 'package:angular2/src/transform/common/names.dart';
|
||||
import 'package:angular2/src/transform/common/ng_compiler.dart';
|
||||
import 'package:angular2/src/compiler/source_module.dart';
|
||||
|
||||
import 'package:barback/barback.dart';
|
||||
|
||||
AssetId shimmedStylesheetAssetId(AssetId cssAssetId) => new AssetId(
|
||||
cssAssetId.package, toShimmedStylesheetExtension(cssAssetId.path));
|
||||
|
||||
AssetId nonShimmedStylesheetAssetId(AssetId cssAssetId) => new AssetId(
|
||||
cssAssetId.package, toNonShimmedStylesheetExtension(cssAssetId.path));
|
||||
|
||||
Future<Iterable<Asset>> processStylesheet(
|
||||
AssetReader reader, AssetId stylesheetId) async {
|
||||
final stylesheetUrl = '${stylesheetId.package}|${stylesheetId.path}';
|
||||
final templateCompiler = createTemplateCompiler(reader);
|
||||
final cssText = await reader.readAsString(stylesheetId);
|
||||
final sourceModules =
|
||||
templateCompiler.compileStylesheetCodeGen(stylesheetUrl, cssText);
|
||||
|
||||
var libraryIdx = 0;
|
||||
return sourceModules.map((SourceModule module) => new Asset.fromString(
|
||||
new AssetId.parse('${module.moduleUrl}'),
|
||||
writeSourceModule(module,
|
||||
libraryName: '${_getLibBase(module.moduleUrl)}${libraryIdx++}')));
|
||||
}
|
||||
|
||||
final _unsafeCharsPattern = new RegExp(r'[^a-zA-Z0-9_]');
|
||||
String _getLibBase(String libraryName) {
|
||||
return libraryName.replaceAll('/', '.').replaceAll(_unsafeCharsPattern, '_');
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
library angular2.transform.stylesheet_compiler.transformer;
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:angular2/src/core/dom/html_adapter.dart';
|
||||
import 'package:angular2/src/transform/common/asset_reader.dart';
|
||||
import 'package:angular2/src/transform/common/logging.dart' as log;
|
||||
import 'package:angular2/src/transform/common/names.dart';
|
||||
|
||||
import 'package:barback/barback.dart';
|
||||
|
||||
import 'processor.dart';
|
||||
|
||||
/// Pre-compiles CSS stylesheet files to Dart code for Angular 2.
|
||||
class StylesheetCompiler extends Transformer implements DeclaringTransformer {
|
||||
StylesheetCompiler();
|
||||
|
||||
@override
|
||||
bool isPrimary(AssetId id) {
|
||||
return id.path.endsWith(CSS_EXTENSION);
|
||||
}
|
||||
|
||||
@override
|
||||
declareOutputs(DeclaringTransform transform) {
|
||||
transform.declareOutput(nonShimmedStylesheetAssetId(transform.primaryId));
|
||||
transform.declareOutput(shimmedStylesheetAssetId(transform.primaryId));
|
||||
}
|
||||
|
||||
@override
|
||||
Future apply(Transform transform) async {
|
||||
await log.initZoned(transform, () async {
|
||||
Html5LibDomAdapter.makeCurrent();
|
||||
var reader = new AssetReader.fromTransform(transform);
|
||||
var outputs = await processStylesheet(reader, transform.primaryInput.id);
|
||||
outputs.forEach((Asset compiledStylesheet) {
|
||||
transform.addOutput(compiledStylesheet);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user