-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Expand file tree
/
Copy pathhas-slotted-changing-001.tentative.html
More file actions
89 lines (80 loc) · 3.25 KB
/
has-slotted-changing-001.tentative.html
File metadata and controls
89 lines (80 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Changing content targetting :has-slotted through a single shadow root</title>
<link rel="help" href="https://github.com/w3c/csswg-drafts/pull/10586">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
</head>
<body>
<div id="test"><template shadowrootmode="open">
<slot></slot>
<p id="target">This text will be styled.</p>
<style>
p {
color: rgb(0 255 0);
}
slot:not(:has-slotted) + p {
color: rgb(0 0 255);
}
</style>
</template></div>
<script>
const blue = 'rgb(0, 0, 255)';
const green = 'rgb(0, 255, 0)';
test(function (t) {
const test = document.getElementById('test');
const target = test.shadowRoot.getElementById('target');
t.add_cleanup(() => { test.innerHTML = '' });
let styles = getComputedStyle(target);
assert_equals(styles.getPropertyValue('color'), blue);
}, "empty node is blue");
test(function (t) {
const test = document.getElementById('test');
const target = test.shadowRoot.getElementById('target');
test.innerHTML = ' ';
t.add_cleanup(() => { test.innerHTML = '' });
styles = getComputedStyle(target);
assert_equals(styles.getPropertyValue('color'), green);
test.innerHTML = '';
styles = getComputedStyle(target);
assert_equals(styles.getPropertyValue('color'), blue);
}, "setting innerHTML to whitespace invalidates and becomes green, then empty string becomes blue");
test(function (t) {
const test = document.getElementById('test');
const target = test.shadowRoot.getElementById('target');
test.replaceChildren(document.createElement('div'));
assert_equals(styles.getPropertyValue('color'), green);
test.replaceChildren();
styles = getComputedStyle(target);
assert_equals(styles.getPropertyValue('color'), blue);
}, "calling replaceChildren invalidates and becomes green, emptying with replaceChildren becomes blue");
test(function (t) {
const test = document.getElementById('test');
const target = test.shadowRoot.getElementById('target');
const div = document.createElement('div');
test.innerHTML = '';
test.append(div);
t.add_cleanup(() => { test.innerHTML = '' });
styles = getComputedStyle(target);
assert_equals(styles.getPropertyValue('color'), green);
}, "calling append invalidates and becomes green");
test(function (t) {
const test = document.getElementById('test');
const target = test.shadowRoot.getElementById('target');
const node = document.createTextNode(' ');
test.replaceChildren(node);
t.add_cleanup(() => { test.innerHTML = '' });
styles = getComputedStyle(target);
assert_equals(styles.getPropertyValue('color'), green);
test.replaceChildren();
styles = getComputedStyle(target);
assert_equals(styles.getPropertyValue('color'), blue);
}, "calling replaceChildren(textnode) invalidates and becomes green");
</script>
</body>
</html>