| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library web_components.build.import_inliner; | 4 library web_components.build.import_inliner; |
| 5 | 5 |
| 6 import 'dart:async'; | 6 import 'dart:async'; |
| 7 import 'dart:collection' show LinkedHashMap; | 7 import 'dart:collection' show LinkedHashMap; |
| 8 import 'package:barback/barback.dart'; | 8 import 'package:barback/barback.dart'; |
| 9 import 'package:code_transformers/assets.dart'; | 9 import 'package:code_transformers/assets.dart'; |
| 10 import 'package:code_transformers/messages/build_logger.dart'; | 10 import 'package:code_transformers/messages/build_logger.dart'; |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 | 97 |
| 98 // Add all the other imports! | 98 // Add all the other imports! |
| 99 imports.forEach((AssetId asset, ImportData data) { | 99 imports.forEach((AssetId asset, ImportData data) { |
| 100 if (asset == primaryInput) return; | 100 if (asset == primaryInput) return; |
| 101 var document = data.document; | 101 var document = data.document; |
| 102 // Remove all dart script tags. | 102 // Remove all dart script tags. |
| 103 document | 103 document |
| 104 .querySelectorAll('script[type="$dartType"]') | 104 .querySelectorAll('script[type="$dartType"]') |
| 105 .forEach((script) => script.remove()); | 105 .forEach((script) => script.remove()); |
| 106 // Normalize urls in attributes and inline css. | 106 // Normalize urls in attributes and inline css. |
| 107 new _UrlNormalizer(primaryInput, asset, logger).visit(document); | 107 new _UrlNormalizer(data.fromId, asset, logger).visit(document); |
| 108 // Replace the import with its contents by appending the nodes | 108 // Replace the import with its contents by appending the nodes |
| 109 // immediately before the import one at a time, and then removing the | 109 // immediately before the import one at a time, and then removing the |
| 110 // import from the document. | 110 // import from the document. |
| 111 var element = data.element; | 111 var element = data.element; |
| 112 var parent = element.parent; | 112 var parent = element.parent; |
| 113 document.head.nodes | 113 document.head.nodes |
| 114 .toList(growable: false) | 114 .toList(growable: false) |
| 115 .forEach((child) => parent.insertBefore(child, element)); | 115 .forEach((child) => parent.insertBefore(child, element)); |
| 116 document.body.nodes | 116 document.body.nodes |
| 117 .toList(growable: false) | 117 .toList(growable: false) |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 return href; | 259 return href; |
| 260 } | 260 } |
| 261 if (uri.isAbsolute) return href; | 261 if (uri.isAbsolute) return href; |
| 262 if (uri.scheme.isNotEmpty) return href; | 262 if (uri.scheme.isNotEmpty) return href; |
| 263 if (uri.host.isNotEmpty) return href; | 263 if (uri.host.isNotEmpty) return href; |
| 264 if (uri.path.isEmpty) return href; // Implies standalone ? or # in URI. | 264 if (uri.path.isEmpty) return href; // Implies standalone ? or # in URI. |
| 265 if (path.isAbsolute(hrefToParse)) return href; | 265 if (path.isAbsolute(hrefToParse)) return href; |
| 266 | 266 |
| 267 var id = uriToAssetId(sourceId, hrefToParse, logger, span); | 267 var id = uriToAssetId(sourceId, hrefToParse, logger, span); |
| 268 if (id == null) return href; | 268 if (id == null) return href; |
| 269 var primaryId = primaryInput; | |
| 270 | 269 |
| 271 // Build the new path, placing back any suffixes that we stripped earlier. | 270 // Build the new path, placing back any suffixes that we stripped earlier. |
| 272 var prefix = | 271 var prefix = |
| 273 (firstFolder == -1) ? id.path : id.path.substring(0, id.path.length); | 272 (firstFolder == -1) ? id.path : id.path.substring(0, id.path.length); |
| 274 var suffix = (firstFolder == -1) ? '' : href.substring(firstFolder); | 273 var suffix = (firstFolder == -1) ? '' : href.substring(firstFolder); |
| 275 var newPath = '$prefix$suffix'; | 274 var newPath = '$prefix$suffix'; |
| 276 | 275 |
| 277 if (newPath.startsWith('lib/')) { | 276 if (newPath.startsWith('lib/')) { |
| 278 return '${topLevelPath}packages/${id.package}/${newPath.substring(4)}'; | 277 return '${topLevelPath}packages/${id.package}/${newPath.substring(4)}'; |
| 279 } | 278 } |
| 280 | 279 |
| 281 if (newPath.startsWith('asset/')) { | 280 if (newPath.startsWith('asset/')) { |
| 282 return '${topLevelPath}assets/${id.package}/${newPath.substring(6)}'; | 281 return '${topLevelPath}assets/${id.package}/${newPath.substring(6)}'; |
| 283 } | 282 } |
| 284 | 283 |
| 285 if (primaryId.package != id.package) { | 284 if (primaryInput.package != id.package) { |
| 286 // Technically we shouldn't get there | 285 // Technically we shouldn't get there |
| 287 logger.error(internalErrorDontKnowHowToImport | 286 logger.error(internalErrorDontKnowHowToImport |
| 288 .create({'target': id, 'source': primaryId, 'extra': ''}), | 287 .create({'target': id, 'source': primaryInput, 'extra': ''}), |
| 289 span: span); | 288 span: span); |
| 290 return href; | 289 return href; |
| 291 } | 290 } |
| 292 | 291 |
| 293 var builder = path.url; | 292 var builder = path.url; |
| 294 return builder.normalize(builder.relative(builder.join('/', newPath), | 293 return builder.normalize(builder.relative(builder.join('/', newPath), |
| 295 from: builder.join('/', builder.dirname(primaryId.path)))); | 294 from: builder.join('/', builder.dirname(primaryInput.path)))); |
| 296 } | 295 } |
| 297 } | 296 } |
| 298 | 297 |
| 299 /// Returns true if this is a valid custom element name. See: | 298 /// Returns true if this is a valid custom element name. See: |
| 300 /// <http://w3c.github.io/webcomponents/spec/custom/#dfn-custom-element-type> | 299 /// <http://w3c.github.io/webcomponents/spec/custom/#dfn-custom-element-type> |
| 301 bool isCustomTagName(String name) { | 300 bool isCustomTagName(String name) { |
| 302 if (name == null || !name.contains('-')) return false; | 301 if (name == null || !name.contains('-')) return false; |
| 303 return !invalidTagNames.containsKey(name); | 302 return !invalidTagNames.containsKey(name); |
| 304 } | 303 } |
| 305 | 304 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 '_href', // in a, area, link, base, command | 337 '_href', // in a, area, link, base, command |
| 339 'icon', | 338 'icon', |
| 340 '_icon', // in command | 339 '_icon', // in command |
| 341 'manifest', | 340 'manifest', |
| 342 '_manifest', // in html | 341 '_manifest', // in html |
| 343 'poster', | 342 'poster', |
| 344 '_poster', // in video | 343 '_poster', // in video |
| 345 'src', | 344 'src', |
| 346 '_src', // in audio, embed, iframe, img, input, script, source, track,video | 345 '_src', // in audio, embed, iframe, img, input, script, source, track,video |
| 347 ]; | 346 ]; |
| OLD | NEW |