Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** Common methods used by transfomers. */ | 5 /** Common methods used by transfomers. */ |
| 6 library polymer.src.build.common; | 6 library polymer.src.build.common; |
| 7 | 7 |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 import 'dart:math' show min, max; | 9 import 'dart:math' show min, max; |
| 10 | 10 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 96 var asset = transform.primaryInput; | 96 var asset = transform.primaryInput; |
| 97 var id = asset.id; | 97 var id = asset.id; |
| 98 return asset.readAsString().then((content) { | 98 return asset.readAsString().then((content) { |
| 99 return _parseHtml(content, id.path, transform.logger, | 99 return _parseHtml(content, id.path, transform.logger, |
| 100 checkDocType: options.isHtmlEntryPoint(id)); | 100 checkDocType: options.isHtmlEntryPoint(id)); |
| 101 }); | 101 }); |
| 102 } | 102 } |
| 103 | 103 |
| 104 Future<Document> readAsHtml(AssetId id, Transform transform) { | 104 Future<Document> readAsHtml(AssetId id, Transform transform) { |
| 105 var primaryId = transform.primaryInput.id; | 105 var primaryId = transform.primaryInput.id; |
| 106 bool samePackage = id.package == primaryId.package; | 106 bool samePackage = id.package == primaryId.package; |
|
Siggi Cherem (dart-lang)
2014/02/13 17:46:33
use getAssetUrl here too
Jennifer Messerly
2014/02/13 20:43:47
Done.
| |
| 107 var url = samePackage ? id.path | 107 var url = samePackage ? id.path |
| 108 : assetUrlFor(id, primaryId, transform.logger, allowAssetUrl: true); | 108 : assetUrlFor(id, primaryId, transform.logger, allowAssetUrl: true); |
| 109 return transform.readInputAsString(id).then((content) { | 109 return transform.readInputAsString(id).then((content) { |
| 110 return _parseHtml(content, url, transform.logger, | 110 return _parseHtml(content, url, transform.logger, |
| 111 checkDocType: samePackage && options.isHtmlEntryPoint(id)); | 111 checkDocType: samePackage && options.isHtmlEntryPoint(id)); |
| 112 }); | 112 }); |
| 113 } | 113 } |
| 114 | 114 |
| 115 String getAssetUrl(AssetId id, Transform transform) { | |
|
Siggi Cherem (dart-lang)
2014/02/13 17:46:33
I find it a bit confusing to have both getAssetUrl
Jennifer Messerly
2014/02/13 20:43:47
done! based Dartdoc on your extremely helpful expl
| |
| 116 var primaryId = transform.primaryInput.id; | |
| 117 bool samePackage = id.package == primaryId.package; | |
| 118 return samePackage ? id.path | |
| 119 : assetUrlFor(id, primaryId, transform.logger, allowAssetUrl: true); | |
| 120 } | |
| 121 | |
| 115 Future<bool> assetExists(AssetId id, Transform transform) => | 122 Future<bool> assetExists(AssetId id, Transform transform) => |
| 116 transform.getInput(id).then((_) => true).catchError((_) => false); | 123 transform.getInput(id).then((_) => true).catchError((_) => false); |
| 117 | 124 |
| 118 String toString() => 'polymer ($runtimeType)'; | 125 String toString() => 'polymer ($runtimeType)'; |
| 119 } | 126 } |
| 120 | 127 |
| 121 /** Transformer phases which should be applied to the Polymer package. */ | 128 /** Transformer phases which should be applied to the Polymer package. */ |
| 122 List<List<Transformer>> get phasesForPolymer => | 129 List<List<Transformer>> get phasesForPolymer => |
| 123 [[new ObservableTransformer(['lib/src/instance.dart'])]]; | 130 [[new ObservableTransformer(['lib/src/instance.dart'])]]; |
| 124 | 131 |
| 125 /** | 132 /** |
| 126 * Create an [AssetId] for a [url] seen in the [source] asset. By default this | 133 * Create an [AssetId] for a [url] seen in the [source] asset. By default this |
| 127 * is used to resolve relative urls that occur in HTML assets, including | 134 * is used to resolve relative urls that occur in HTML assets, including |
| 128 * cross-package urls of the form "packages/foo/bar.html". Dart-style "package:" | 135 * cross-package urls of the form "packages/foo/bar.html". Dart-style "package:" |
| 129 * urls are not resolved unless [source] is Dart file (has a .dart extension). | 136 * urls are not resolved unless [source] is Dart file (has a .dart extension). |
| 130 */ | 137 */ |
| 131 // TODO(sigmund): delete once this is part of barback (dartbug.com/12610) | 138 // TODO(sigmund): delete once this is part of barback (dartbug.com/12610) |
| 132 AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { | 139 AssetId resolve(AssetId source, String url, TransformLogger logger, Span span, |
| 140 {bool allowAbsolute: false}) { | |
| 133 if (url == null || url == '') return null; | 141 if (url == null || url == '') return null; |
| 134 var uri = Uri.parse(url); | 142 var uri = Uri.parse(url); |
| 135 var urlBuilder = path.url; | 143 var urlBuilder = path.url; |
| 136 if (uri.host != '' || uri.scheme != '' || urlBuilder.isAbsolute(url)) { | 144 if (uri.host != '' || uri.scheme != '' || urlBuilder.isAbsolute(url)) { |
| 137 if (source.extension == '.dart' && uri.scheme == 'package') { | 145 if (source.extension == '.dart' && uri.scheme == 'package') { |
| 138 var index = uri.path.indexOf('/'); | 146 var index = uri.path.indexOf('/'); |
| 139 if (index != -1) { | 147 if (index != -1) { |
| 140 return new AssetId(uri.path.substring(0, index), | 148 return new AssetId(uri.path.substring(0, index), |
| 141 'lib${uri.path.substring(index)}'); | 149 'lib${uri.path.substring(index)}'); |
| 142 } | 150 } |
| 143 } | 151 } |
| 144 | 152 |
| 145 logger.error('absolute paths not allowed: "$url"', span: span); | 153 if (!allowAbsolute) { |
| 154 logger.error('absolute paths not allowed: "$url"', span: span); | |
| 155 } | |
| 146 return null; | 156 return null; |
| 147 } | 157 } |
| 148 | 158 |
| 149 var targetPath = urlBuilder.normalize( | 159 var targetPath = urlBuilder.normalize( |
| 150 urlBuilder.join(urlBuilder.dirname(source.path), url)); | 160 urlBuilder.join(urlBuilder.dirname(source.path), url)); |
| 151 var segments = urlBuilder.split(targetPath); | 161 var segments = urlBuilder.split(targetPath); |
| 152 var sourceSegments = urlBuilder.split(source.path); | 162 var sourceSegments = urlBuilder.split(source.path); |
| 153 assert (sourceSegments.length > 0); | 163 assert (sourceSegments.length > 0); |
| 154 var topFolder = sourceSegments[0]; | 164 var topFolder = sourceSegments[0]; |
| 155 var entryFolder = topFolder != 'lib' && topFolder != 'asset'; | 165 var entryFolder = topFolder != 'lib' && topFolder != 'asset'; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 239 return builder.relative(builder.join('/', id.path), | 249 return builder.relative(builder.join('/', id.path), |
| 240 from: builder.join('/', builder.dirname(sourceId.path))); | 250 from: builder.join('/', builder.dirname(sourceId.path))); |
| 241 } | 251 } |
| 242 | 252 |
| 243 | 253 |
| 244 /** Convert system paths to asset paths (asset paths are posix style). */ | 254 /** Convert system paths to asset paths (asset paths are posix style). */ |
| 245 String _systemToAssetPath(String assetPath) { | 255 String _systemToAssetPath(String assetPath) { |
| 246 if (path.Style.platform != path.Style.windows) return assetPath; | 256 if (path.Style.platform != path.Style.windows) return assetPath; |
| 247 return path.posix.joinAll(path.split(assetPath)); | 257 return path.posix.joinAll(path.split(assetPath)); |
| 248 } | 258 } |
| OLD | NEW |