angular2
Version:
Angular 2 - a web framework for modern web apps
328 lines (327 loc) • 15.6 kB
JavaScript
"use strict";
Object.defineProperties(module.exports, {
ShadowCss: {get: function() {
return ShadowCss;
}},
__esModule: {value: true}
});
var $__angular2_47_src_47_dom_47_dom_95_adapter__,
$__angular2_47_src_47_facade_47_collection__,
$__angular2_47_src_47_facade_47_lang__;
var DOM = ($__angular2_47_src_47_dom_47_dom_95_adapter__ = require("angular2/src/dom/dom_adapter"), $__angular2_47_src_47_dom_47_dom_95_adapter__ && $__angular2_47_src_47_dom_47_dom_95_adapter__.__esModule && $__angular2_47_src_47_dom_47_dom_95_adapter__ || {default: $__angular2_47_src_47_dom_47_dom_95_adapter__}).DOM;
var $__1 = ($__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__}),
List = $__1.List,
ListWrapper = $__1.ListWrapper;
var $__2 = ($__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__}),
StringWrapper = $__2.StringWrapper,
RegExp = $__2.RegExp,
RegExpWrapper = $__2.RegExpWrapper,
RegExpMatcherWrapper = $__2.RegExpMatcherWrapper,
isPresent = $__2.isPresent,
isBlank = $__2.isBlank,
BaseException = $__2.BaseException,
int = $__2.int;
var ShadowCss = function ShadowCss() {
this.strictStyling = true;
};
($traceurRuntime.createClass)(ShadowCss, {
shimStyle: function(style, selector) {
var hostSelector = arguments[2] !== (void 0) ? arguments[2] : '';
var cssText = DOM.getText(style);
return this.shimCssText(cssText, selector, hostSelector);
},
shimCssText: function(cssText, selector) {
var hostSelector = arguments[2] !== (void 0) ? arguments[2] : '';
cssText = this._insertDirectives(cssText);
return this._scopeCssText(cssText, selector, hostSelector);
},
_insertDirectives: function(cssText) {
cssText = this._insertPolyfillDirectivesInCssText(cssText);
return this._insertPolyfillRulesInCssText(cssText);
},
_insertPolyfillDirectivesInCssText: function(cssText) {
return StringWrapper.replaceAllMapped(cssText, _cssContentNextSelectorRe, function(m) {
return m[1] + '{';
});
},
_insertPolyfillRulesInCssText: function(cssText) {
return StringWrapper.replaceAllMapped(cssText, _cssContentRuleRe, function(m) {
var rule = m[0];
rule = StringWrapper.replace(rule, m[1], '');
rule = StringWrapper.replace(rule, m[2], '');
return m[3] + rule;
});
},
_scopeCssText: function(cssText, scopeSelector, hostSelector) {
var $__3 = this;
var unscoped = this._extractUnscopedRulesFromCssText(cssText);
cssText = this._insertPolyfillHostInCssText(cssText);
cssText = this._convertColonHost(cssText);
cssText = this._convertColonHostContext(cssText);
cssText = this._convertShadowDOMSelectors(cssText);
if (isPresent(scopeSelector)) {
_withCssRules(cssText, (function(rules) {
cssText = $__3._scopeRules(rules, scopeSelector, hostSelector);
}));
}
cssText = cssText + '\n' + unscoped;
return cssText.trim();
},
_extractUnscopedRulesFromCssText: function(cssText) {
var r = '',
m;
var matcher = RegExpWrapper.matcher(_cssContentUnscopedRuleRe, cssText);
while (isPresent(m = RegExpMatcherWrapper.next(matcher))) {
var rule = m[0];
rule = StringWrapper.replace(rule, m[2], '');
rule = StringWrapper.replace(rule, m[1], m[3]);
r = rule + '\n\n';
}
return r;
},
_convertColonHost: function(cssText) {
return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer);
},
_convertColonHostContext: function(cssText) {
return this._convertColonRule(cssText, _cssColonHostContextRe, this._colonHostContextPartReplacer);
},
_convertColonRule: function(cssText, regExp, partReplacer) {
return StringWrapper.replaceAllMapped(cssText, regExp, function(m) {
if (isPresent(m[2])) {
var parts = m[2].split(','),
r = [];
for (var i = 0; i < parts.length; i++) {
var p = parts[i];
if (isBlank(p))
break;
p = p.trim();
ListWrapper.push(r, partReplacer(_polyfillHostNoCombinator, p, m[3]));
}
return r.join(',');
} else {
return _polyfillHostNoCombinator + m[3];
}
});
},
_colonHostContextPartReplacer: function(host, part, suffix) {
if (StringWrapper.contains(part, _polyfillHost)) {
return this._colonHostPartReplacer(host, part, suffix);
} else {
return host + part + suffix + ', ' + part + ' ' + host + suffix;
}
},
_colonHostPartReplacer: function(host, part, suffix) {
return host + StringWrapper.replace(part, _polyfillHost, '') + suffix;
},
_convertShadowDOMSelectors: function(cssText) {
for (var i = 0; i < _shadowDOMSelectorsRe.length; i++) {
cssText = StringWrapper.replaceAll(cssText, _shadowDOMSelectorsRe[i], ' ');
}
return cssText;
},
_scopeRules: function(cssRules, scopeSelector, hostSelector) {
var cssText = '';
if (isPresent(cssRules)) {
for (var i = 0; i < cssRules.length; i++) {
var rule = cssRules[i];
if (DOM.isStyleRule(rule) || DOM.isPageRule(rule)) {
cssText += this._scopeSelector(rule.selectorText, scopeSelector, hostSelector, this.strictStyling) + ' {\n';
cssText += this._propertiesFromRule(rule) + '\n}\n\n';
} else if (DOM.isMediaRule(rule)) {
cssText += '@media ' + rule.media.mediaText + ' {\n';
cssText += this._scopeRules(rule.cssRules, scopeSelector, hostSelector);
cssText += '\n}\n\n';
} else {
try {
if (isPresent(rule.cssText)) {
cssText += rule.cssText + '\n\n';
}
} catch (x) {
if (DOM.isKeyframesRule(rule) && isPresent(rule.cssRules)) {
cssText += this._ieSafeCssTextFromKeyFrameRule(rule);
}
}
}
}
}
return cssText;
},
_ieSafeCssTextFromKeyFrameRule: function(rule) {
var cssText = '@keyframes ' + rule.name + ' {';
for (var i = 0; i < rule.cssRules.length; i++) {
var r = rule.cssRules[i];
cssText += ' ' + r.keyText + ' {' + r.style.cssText + '}';
}
cssText += ' }';
return cssText;
},
_scopeSelector: function(selector, scopeSelector, hostSelector, strict) {
var r = [],
parts = selector.split(',');
for (var i = 0; i < parts.length; i++) {
var p = parts[i];
p = p.trim();
if (this._selectorNeedsScoping(p, scopeSelector)) {
p = strict && !StringWrapper.contains(p, _polyfillHostNoCombinator) ? this._applyStrictSelectorScope(p, scopeSelector) : this._applySelectorScope(p, scopeSelector, hostSelector);
}
ListWrapper.push(r, p);
}
return r.join(', ');
},
_selectorNeedsScoping: function(selector, scopeSelector) {
var re = this._makeScopeMatcher(scopeSelector);
return !isPresent(RegExpWrapper.firstMatch(re, selector));
},
_makeScopeMatcher: function(scopeSelector) {
var lre = RegExpWrapper.create('\\[');
var rre = RegExpWrapper.create('\\]');
scopeSelector = StringWrapper.replaceAll(scopeSelector, lre, '\\[');
scopeSelector = StringWrapper.replaceAll(scopeSelector, rre, '\\]');
return RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');
},
_applySelectorScope: function(selector, scopeSelector, hostSelector) {
return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector);
},
_applySimpleSelectorScope: function(selector, scopeSelector, hostSelector) {
if (isPresent(RegExpWrapper.firstMatch(_polyfillHostRe, selector))) {
var replaceBy = this.strictStyling ? ("[" + hostSelector + "]") : scopeSelector;
selector = StringWrapper.replace(selector, _polyfillHostNoCombinator, replaceBy);
return StringWrapper.replaceAll(selector, _polyfillHostRe, replaceBy + ' ');
} else {
return scopeSelector + ' ' + selector;
}
},
_applyStrictSelectorScope: function(selector, scopeSelector) {
var isRe = RegExpWrapper.create('\\[is=([^\\]]*)\\]');
scopeSelector = StringWrapper.replaceAllMapped(scopeSelector, isRe, (function(m) {
return m[1];
}));
var splits = [' ', '>', '+', '~'],
scoped = selector,
attrName = '[' + scopeSelector + ']';
for (var i = 0; i < splits.length; i++) {
var sep = splits[i];
var parts = scoped.split(sep);
scoped = ListWrapper.map(parts, function(p) {
var t = StringWrapper.replaceAll(p.trim(), _polyfillHostRe, '');
if (t.length > 0 && !ListWrapper.contains(splits, t) && !StringWrapper.contains(t, attrName)) {
var re = RegExpWrapper.create('([^:]*)(:*)(.*)');
var m = RegExpWrapper.firstMatch(re, t);
if (isPresent(m)) {
p = m[1] + attrName + m[2] + m[3];
}
}
return p;
}).join(sep);
}
return scoped;
},
_insertPolyfillHostInCssText: function(selector) {
selector = StringWrapper.replaceAll(selector, _colonHostContextRe, _polyfillHostContext);
selector = StringWrapper.replaceAll(selector, _colonHostRe, _polyfillHost);
return selector;
},
_propertiesFromRule: function(rule) {
var cssText = rule.style.cssText;
var attrRe = RegExpWrapper.create('[\'"]+|attr');
if (rule.style.content.length > 0 && !isPresent(RegExpWrapper.firstMatch(attrRe, rule.style.content))) {
var contentRe = RegExpWrapper.create('content:[^;]*;');
cssText = StringWrapper.replaceAll(cssText, contentRe, 'content: \'' + rule.style.content + '\';');
}
return cssText;
}
}, {});
Object.defineProperty(ShadowCss.prototype.shimStyle, "parameters", {get: function() {
return [[], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype.shimCssText, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._insertDirectives, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._insertPolyfillDirectivesInCssText, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._insertPolyfillRulesInCssText, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._scopeCssText, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._extractUnscopedRulesFromCssText, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._convertColonHost, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._convertColonHostContext, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._convertColonRule, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [RegExp], [Function]];
}});
Object.defineProperty(ShadowCss.prototype._colonHostContextPartReplacer, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._colonHostPartReplacer, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._convertShadowDOMSelectors, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._scopeRules, "parameters", {get: function() {
return [[], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._scopeSelector, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.boolean]];
}});
Object.defineProperty(ShadowCss.prototype._selectorNeedsScoping, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._makeScopeMatcher, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._applySelectorScope, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._applySimpleSelectorScope, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._applyStrictSelectorScope, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [$traceurRuntime.type.string]];
}});
Object.defineProperty(ShadowCss.prototype._insertPolyfillHostInCssText, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
var _cssContentNextSelectorRe = RegExpWrapper.create('polyfill-next-selector[^}]*content:[\\s]*?[\'"](.*?)[\'"][;\\s]*}([^{]*?){', 'im');
var _cssContentRuleRe = RegExpWrapper.create('(polyfill-rule)[^}]*(content:[\\s]*[\'"](.*?)[\'"])[;\\s]*[^}]*}', 'im');
var _cssContentUnscopedRuleRe = RegExpWrapper.create('(polyfill-unscoped-rule)[^}]*(content:[\\s]*[\'"](.*?)[\'"])[;\\s]*[^}]*}', 'im');
var _polyfillHost = '-shadowcsshost';
var _polyfillHostContext = '-shadowcsscontext';
var _parenSuffix = ')(?:\\((' + '(?:\\([^)(]*\\)|[^)(]*)+?' + ')\\))?([^,{]*)';
var _cssColonHostRe = RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, 'im');
var _cssColonHostContextRe = RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');
var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';
var _shadowDOMSelectorsRe = [RegExpWrapper.create('>>>'), RegExpWrapper.create('::shadow'), RegExpWrapper.create('::content'), RegExpWrapper.create('/deep/'), RegExpWrapper.create('/shadow-deep/'), RegExpWrapper.create('/shadow/')];
var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
var _polyfillHostRe = RegExpWrapper.create(_polyfillHost, 'im');
var _colonHostRe = RegExpWrapper.create(':host', 'im');
var _colonHostContextRe = RegExpWrapper.create(':host-context', 'im');
function _cssToRules(cssText) {
return DOM.cssToRules(cssText);
}
Object.defineProperty(_cssToRules, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
function _withCssRules(cssText, callback) {
if (isBlank(callback))
return ;
var rules = _cssToRules(cssText);
callback(rules);
}
Object.defineProperty(_withCssRules, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [Function]];
}});
//# sourceMappingURL=shadow_css.js.map
//# sourceMappingURL=./shadow_css.map