angular2
Version:
Angular 2 - a web framework for modern web apps
136 lines (135 loc) • 7.1 kB
JavaScript
"use strict";
Object.defineProperties(module.exports, {
StyleInliner: {get: function() {
return StyleInliner;
}},
__esModule: {value: true}
});
var $__angular2_47_di__,
$__angular2_47_src_47_services_47_xhr__,
$__angular2_47_src_47_facade_47_collection__,
$__angular2_47_src_47_services_47_url_95_resolver__,
$__style_95_url_95_resolver__,
$__angular2_47_src_47_facade_47_lang__,
$__angular2_47_src_47_facade_47_async__;
var Injectable = ($__angular2_47_di__ = require("angular2/di"), $__angular2_47_di__ && $__angular2_47_di__.__esModule && $__angular2_47_di__ || {default: $__angular2_47_di__}).Injectable;
var XHR = ($__angular2_47_src_47_services_47_xhr__ = require("angular2/src/services/xhr"), $__angular2_47_src_47_services_47_xhr__ && $__angular2_47_src_47_services_47_xhr__.__esModule && $__angular2_47_src_47_services_47_xhr__ || {default: $__angular2_47_src_47_services_47_xhr__}).XHR;
var ListWrapper = ($__angular2_47_src_47_facade_47_collection__ = require("angular2/src/facade/collection"), $__angular2_47_src_47_facade_47_collection__ && $__angular2_47_src_47_facade_47_collection__.__esModule && $__angular2_47_src_47_facade_47_collection__ || {default: $__angular2_47_src_47_facade_47_collection__}).ListWrapper;
var UrlResolver = ($__angular2_47_src_47_services_47_url_95_resolver__ = require("angular2/src/services/url_resolver"), $__angular2_47_src_47_services_47_url_95_resolver__ && $__angular2_47_src_47_services_47_url_95_resolver__.__esModule && $__angular2_47_src_47_services_47_url_95_resolver__ || {default: $__angular2_47_src_47_services_47_url_95_resolver__}).UrlResolver;
var StyleUrlResolver = ($__style_95_url_95_resolver__ = require("./style_url_resolver"), $__style_95_url_95_resolver__ && $__style_95_url_95_resolver__.__esModule && $__style_95_url_95_resolver__ || {default: $__style_95_url_95_resolver__}).StyleUrlResolver;
var $__5 = ($__angular2_47_src_47_facade_47_lang__ = require("angular2/src/facade/lang"), $__angular2_47_src_47_facade_47_lang__ && $__angular2_47_src_47_facade_47_lang__.__esModule && $__angular2_47_src_47_facade_47_lang__ || {default: $__angular2_47_src_47_facade_47_lang__}),
isBlank = $__5.isBlank,
isPresent = $__5.isPresent,
RegExp = $__5.RegExp,
RegExpWrapper = $__5.RegExpWrapper,
StringWrapper = $__5.StringWrapper,
normalizeBlank = $__5.normalizeBlank;
var $__6 = ($__angular2_47_src_47_facade_47_async__ = require("angular2/src/facade/async"), $__angular2_47_src_47_facade_47_async__ && $__angular2_47_src_47_facade_47_async__.__esModule && $__angular2_47_src_47_facade_47_async__ || {default: $__angular2_47_src_47_facade_47_async__}),
Promise = $__6.Promise,
PromiseWrapper = $__6.PromiseWrapper;
var StyleInliner = function StyleInliner(xhr, styleUrlResolver, urlResolver) {
this._xhr = xhr;
this._urlResolver = urlResolver;
this._styleUrlResolver = styleUrlResolver;
};
($traceurRuntime.createClass)(StyleInliner, {
inlineImports: function(cssText, baseUrl) {
return this._inlineImports(cssText, baseUrl, []);
},
_inlineImports: function(cssText, baseUrl, inlinedUrls) {
var $__7 = this;
var partIndex = 0;
var parts = StringWrapper.split(cssText, _importRe);
if (parts.length === 1) {
return cssText;
}
var promises = [];
while (partIndex < parts.length - 1) {
var prefix = parts[partIndex];
var rule = parts[partIndex + 1];
var url = _extractUrl(rule);
if (isPresent(url)) {
url = this._urlResolver.resolve(baseUrl, url);
}
var mediaQuery = _extractMediaQuery(rule);
var promise = void 0;
if (isBlank(url)) {
promise = PromiseWrapper.resolve(("/* Invalid import rule: \"@import " + rule + ";\" */"));
} else if (ListWrapper.contains(inlinedUrls, url)) {
promise = PromiseWrapper.resolve(prefix);
} else {
ListWrapper.push(inlinedUrls, url);
promise = PromiseWrapper.then(this._xhr.get(url), (function(css) {
css = $__7._inlineImports(css, url, inlinedUrls);
if (PromiseWrapper.isPromise(css)) {
return css.then((function(css) {
return prefix + $__7._transformImportedCss(css, mediaQuery, url) + '\n';
}));
} else {
return prefix + $__7._transformImportedCss(css, mediaQuery, url) + '\n';
}
}), (function(error) {
return ("/* failed to import " + url + " */\n");
}));
}
ListWrapper.push(promises, promise);
partIndex += 2;
}
return PromiseWrapper.all(promises).then(function(cssParts) {
var cssText = cssParts.join('');
if (partIndex < parts.length) {
cssText += parts[partIndex];
}
return cssText;
});
},
_transformImportedCss: function(css, mediaQuery, url) {
css = this._styleUrlResolver.resolveUrls(css, url);
return _wrapInMediaRule(css, mediaQuery);
}
}, {});
Object.defineProperty(StyleInliner, "annotations", {get: function() {
return [new Injectable()];
}});
Object.defineProperty(StyleInliner, "parameters", {get: function() {
return [[XHR], [StyleUrlResolver], [UrlResolver]];
}});
Object.defineProperty(StyleInliner.prototype.inlineImports, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(StyleInliner.prototype._inlineImports, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.genericType(List, $traceurRuntime.type.string)]];
}});
Object.defineProperty(StyleInliner.prototype._transformImportedCss, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
function _extractUrl(importRule) {
var match = RegExpWrapper.firstMatch(_urlRe, importRule);
if (isBlank(match))
return null;
return isPresent(match[1]) ? match[1] : match[2];
}
Object.defineProperty(_extractUrl, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
function _extractMediaQuery(importRule) {
var match = RegExpWrapper.firstMatch(_mediaQueryRe, importRule);
if (isBlank(match))
return null;
var mediaQuery = match[1].trim();
return (mediaQuery.length > 0) ? mediaQuery : null;
}
Object.defineProperty(_extractMediaQuery, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
function _wrapInMediaRule(css, query) {
return (isBlank(query)) ? css : ("@media " + query + " {\n" + css + "\n}");
}
Object.defineProperty(_wrapInMediaRule, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
var _importRe = RegExpWrapper.create('@import\\s+([^;]+);');
var _urlRe = RegExpWrapper.create('url\\(\\s*?[\'"]?([^\'")]+)[\'"]?|' + '[\'"]([^\'")]+)[\'"]');
var _mediaQueryRe = RegExpWrapper.create('[\'"][^\'"]+[\'"]\\s*\\)?\\s*(.*)');
//# sourceMappingURL=style_inliner.js.map
//# sourceMappingURL=./style_inliner.map