X Tutup
Skip to content

Commit cb38d72

Browse files
committed
feat(shadow_css): support /deep/ and >>>
Fixes #7562 Closes #7563
1 parent b72bab4 commit cb38d72

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

modules/angular2/src/compiler/shadow_css.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -343,14 +343,16 @@ export class ShadowCss {
343343
strict: boolean): string {
344344
var r = [], parts = selector.split(',');
345345
for (var i = 0; i < parts.length; i++) {
346-
var p = parts[i];
347-
p = p.trim();
348-
if (this._selectorNeedsScoping(p, scopeSelector)) {
349-
p = strict && !StringWrapper.contains(p, _polyfillHostNoCombinator) ?
350-
this._applyStrictSelectorScope(p, scopeSelector) :
351-
this._applySelectorScope(p, scopeSelector, hostSelector);
346+
var p = parts[i].trim();
347+
var deepParts = StringWrapper.split(p, _shadowDeepSelectors);
348+
var shallowPart = deepParts[0];
349+
if (this._selectorNeedsScoping(shallowPart, scopeSelector)) {
350+
deepParts[0] = strict && !StringWrapper.contains(shallowPart, _polyfillHostNoCombinator) ?
351+
this._applyStrictSelectorScope(shallowPart, scopeSelector) :
352+
this._applySelectorScope(shallowPart, scopeSelector, hostSelector);
352353
}
353-
r.push(p);
354+
// replace /deep/ with a space for child selectors
355+
r.push(deepParts.join(' '));
354356
}
355357
return r.join(', ');
356358
}
@@ -434,17 +436,16 @@ var _cssColonHostRe = RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, '
434436
var _cssColonHostContextRe = RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');
435437
var _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';
436438
var _shadowDOMSelectorsRe = [
437-
/>>>/g,
438439
/::shadow/g,
439440
/::content/g,
440441
// Deprecated selectors
441442
// TODO(vicb): see https://github.com/angular/clang-format/issues/16
442443
// clang-format off
443-
/\/deep\//g, // former >>>
444444
/\/shadow-deep\//g, // former /deep/
445445
/\/shadow\//g, // former ::shadow
446446
// clanf-format on
447447
];
448+
var _shadowDeepSelectors = /(?:>>>)|(?:\/deep\/)/g;
448449
var _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$';
449450
var _polyfillHostRe = RegExpWrapper.create(_polyfillHost, 'im');
450451
var _colonHostRe = /:host/gim;

modules/angular2/test/compiler/shadow_css_spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,12 +144,12 @@ export function main() {
144144

145145
it('should handle /deep/', () => {
146146
var css = s('x /deep/ y {}', 'a');
147-
expect(css).toEqual('x[a] y[a] {}');
147+
expect(css).toEqual('x[a] y {}');
148148
});
149149

150150
it('should handle >>>', () => {
151151
var css = s('x >>> y {}', 'a');
152-
expect(css).toEqual('x[a] y[a] {}');
152+
expect(css).toEqual('x[a] y {}');
153153
});
154154

155155
it('should pass through @import directives', () => {

0 commit comments

Comments
 (0)
X Tutup