Skip to content

Commit 0ccc87c

Browse files
authored
Merge pull request #105 from tronsha/fix/deep
Fix deep
2 parents aeb65b5 + 4ca8331 commit 0ccc87c

File tree

5 files changed

+83
-9
lines changed

5 files changed

+83
-9
lines changed

src/Utils/StyleBuilder.php

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public function compile(?DOMElement $styleElement, ?string $path = null): ?strin
9494
if ($styleElement->hasAttribute('scoped')) {
9595
$this->hasScoped = true;
9696
preg_match_all(
97-
'/(?:^|\s)\s*[^@\s][\.a-z0-9-_:,\(\)\/\s]+?\s*[{]/i',
97+
'/(?:^|\s)\s*[^@\s][^{}]+?\s*[{]/i',
9898
$style,
9999
$matches,
100100
PREG_SET_ORDER
@@ -107,14 +107,22 @@ public function compile(?DOMElement $styleElement, ?string $path = null): ?strin
107107
if (++$count < $selectorsCount) {
108108
$selector .= ',';
109109
}
110-
$regex = strpos($selector, '::v-deep') !== false
111-
? '/((?:^|\s)\s*[^@\s][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*)(?:::v-deep)/i'
112-
: '/((?:^|\s)\s*[^@\s][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*(?:[,{]|$))/i';
113-
$style = str_replace(
114-
$selector,
115-
preg_replace($regex, '$1[' . $this->scopedAttribute . ']$2', $selector),
116-
$style
117-
);
110+
if (preg_match('/^[\s}]*::v-deep/', $selector)) {
111+
$style = str_replace(
112+
$selector,
113+
str_replace('::v-deep', '[' . $this->scopedAttribute . ']', $selector),
114+
$style
115+
);
116+
} else {
117+
$regex = strpos($selector, '::v-deep') !== false
118+
? '/((?:^|\s)\s*[^@\s][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*)(?:::v-deep)/i'
119+
: '/((?:^|\s)\s*[^@\s][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*(?:[,{]|$))/i';
120+
$style = str_replace(
121+
$selector,
122+
preg_replace($regex, '$1[' . $this->scopedAttribute . ']$2', $selector),
123+
$style
124+
);
125+
}
118126
}
119127
}
120128
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<style>
2+
.foo[data-v-7e66383ada15fdfce08f163adad1e7b2] ul > li { color: purple; }
3+
.foo[data-v-7e66383ada15fdfce08f163adad1e7b2] ul #first { color: red; }
4+
.foo[data-v-7e66383ada15fdfce08f163adad1e7b2] [target=_blank] { color: blue; }
5+
</style>
6+
<div class="foo {{ class|default('') }}" data-v-7e66383ada15fdfce08f163adad1e7b2 {{ dataScopedStyleAttribute|default('') }} style="{{ style|default('') }}">
7+
<ul data-v-7e66383ada15fdfce08f163adad1e7b2>
8+
<li id="first" data-v-7e66383ada15fdfce08f163adad1e7b2>foo</li>
9+
<li data-v-7e66383ada15fdfce08f163adad1e7b2>foo</li>
10+
</ul>
11+
<a href="#" target="_blank" data-v-7e66383ada15fdfce08f163adad1e7b2>foo</a>
12+
</div>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<template>
2+
<div class="foo">
3+
<ul>
4+
<li id="first">foo</li>
5+
<li>foo</li>
6+
</ul>
7+
<a href="#" target="_blank">foo</a>
8+
</div>
9+
</template>
10+
11+
<style scoped>
12+
.foo::v-deep ul > li {
13+
color: purple;
14+
}
15+
.foo::v-deep ul #first {
16+
color: red;
17+
}
18+
.foo::v-deep [target=_blank] {
19+
color: blue;
20+
}
21+
</style>
22+
23+
<script>
24+
export default {
25+
}
26+
</script>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<style>.foo[data-v-a75773abe77e60d5eec0d774b5e2deab] { color: black;}[data-v-a75773abe77e60d5eec0d774b5e2deab] .foo__bar { color: purple;}</style>
2+
<div class="foo {{ class|default('') }}" data-v-a75773abe77e60d5eec0d774b5e2deab {{ dataScopedStyleAttribute|default('') }} style="{{ style|default('') }}">
3+
<span class="foo__bar" data-v-a75773abe77e60d5eec0d774b5e2deab>
4+
test
5+
</span>
6+
</div>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<template>
2+
<div class="foo">
3+
<span class="foo__bar">
4+
test
5+
</span>
6+
</div>
7+
</template>
8+
9+
<style lang="scss" scoped>
10+
.foo {
11+
color: black;
12+
13+
/deep/ &__bar {
14+
color: purple;
15+
}
16+
}
17+
</style>
18+
19+
<script>
20+
export default {
21+
}
22+
</script>

0 commit comments

Comments
 (0)