|
426 | 426 | rule.keyframesName, rule.transformedKeyframesName); |
427 | 427 | }, |
428 | 428 |
|
| 429 | + _hasDirOrHostContext: function(parsedSelector) { |
| 430 | + return /:host-context|:dir/.test(parsedSelector); |
| 431 | + }, |
| 432 | + |
429 | 433 | // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes): |
430 | 434 | // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo |
431 | 435 | // host selector: x-foo.wide -> .x-foo-42.wide |
|
437 | 441 | _scopeSelector: function(rule, hostRx, hostSelector, viaAttr, scopeId) { |
438 | 442 | rule.transformedSelector = rule.transformedSelector || rule.selector; |
439 | 443 | var selector = rule.transformedSelector; |
440 | | - var scope = viaAttr ? '[' + styleTransformer.SCOPE_NAME + '~=' + |
441 | | - scopeId + ']' : |
442 | | - '.' + scopeId; |
| 444 | + var scope = styleTransformer._calcElementScope(scopeId, viaAttr); |
443 | 445 | var parts = selector.split(','); |
444 | 446 | for (var i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) { |
445 | | - parts[i] = p.match(hostRx) ? |
446 | | - p.replace(hostSelector, scope) : |
447 | | - scope + ' ' + p; |
| 447 | + // :host-context and :dir will |
| 448 | + if (this._hasDirOrHostContext(rule.parsedSelector)) { |
| 449 | + var hostScope = styleTransformer._calcElementScope(hostSelector, viaAttr); |
| 450 | + var sub = p.split(' '); |
| 451 | + for (var j = 0; j < sub.length; j++) { |
| 452 | + sub[j] = sub[j].replace(hostScope, scope); |
| 453 | + } |
| 454 | + parts[i] = sub.join(' '); |
| 455 | + } else { |
| 456 | + parts[i] = p.match(hostRx) ? |
| 457 | + p.replace(hostSelector, scope) : |
| 458 | + scope + ' ' + p; |
| 459 | + } |
448 | 460 | } |
449 | 461 | rule.selector = parts.join(','); |
450 | 462 | }, |
|
0 commit comments