Skip to content

Commit 46a2cca

Browse files
committed
feat(link-in-text-block): Add shadow DOM support
1 parent 0f98481 commit 46a2cca

File tree

2 files changed

+57
-17
lines changed

2 files changed

+57
-17
lines changed

lib/checks/color/link-in-text-block.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/* global axe*/
2-
var color = axe.commons.color;
2+
const { color, dom } = axe.commons;
33

44
function getContrast(color1, color2) {
55
var c1lum = color1.getRelativeLuminance();
66
var c2lum = color2.getRelativeLuminance();
77
return (Math.max(c1lum, c2lum) + 0.05) / (Math.min(c1lum, c2lum) + 0.05);
88
}
99

10-
var blockLike = ['block', 'list-item', 'table', 'flex', 'grid', 'inline-block'];
10+
const blockLike = ['block', 'list-item', 'table', 'flex', 'grid', 'inline-block'];
1111
function isBlock(elm) {
1212
var display = window.getComputedStyle(elm).getPropertyValue('display');
1313
return (blockLike.indexOf(display) !== -1 ||
@@ -19,9 +19,9 @@ if (isBlock(node)) {
1919
return false;
2020
}
2121

22-
var parentBlock = node.parentNode;
22+
var parentBlock = dom.getComposedParent(node);
2323
while (parentBlock.nodeType === 1 && !isBlock(parentBlock)) {
24-
parentBlock = parentBlock.parentNode;
24+
parentBlock = dom.getComposedParent(parentBlock);
2525
}
2626

2727
this.relatedNodes([ parentBlock ]);

test/checks/color/link-in-text-block.js

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ describe('link-in-text-block', function () {
22
'use strict';
33

44
var fixture = document.getElementById('fixture');
5+
var shadowSupport = axe.testUtils.shadowSupport;
56
var styleElm;
67

78
var checkContext = {
@@ -48,12 +49,12 @@ describe('link-in-text-block', function () {
4849
if (defaultStyle.hasOwnProperty(prop)) {
4950
styleObj[prop] = defaultStyle[prop];
5051
}
51-
}
52+
}
5253
for (prop in outerStyle) {
5354
if (outerStyle.hasOwnProperty(prop)) {
5455
styleObj[prop] = outerStyle[prop];
5556
}
56-
}
57+
}
5758

5859
var cssLines = Object.keys(styleObj).map(function (prop) {
5960
// Make camelCase prop dash separated
@@ -143,6 +144,45 @@ describe('link-in-text-block', function () {
143144
axe.commons.color.elementIsDistinct = orig;
144145
});
145146

147+
(shadowSupport.v1 ? it : xit)('works with the block outside the shadow tree', function () {
148+
var parentElm = document.createElement('div');
149+
var shadow = parentElm.attachShadow({ mode: 'open' });
150+
shadow.innerHTML = '<a href="">Link</a>';
151+
var linkElm = shadow.querySelector('a');
152+
fixture.appendChild(parentElm);
153+
154+
var orig = axe.commons.color.elementIsDistinct;
155+
axe.commons.color.elementIsDistinct = function (arg1, arg2) {
156+
assert.deepEqual(arg1, linkElm);
157+
assert.deepEqual(arg2, parentElm);
158+
return orig(arg1, arg2);
159+
};
160+
161+
checks['link-in-text-block'].evaluate.call(checkContext, linkElm);
162+
axe.commons.color.elementIsDistinct = orig;
163+
});
164+
165+
(shadowSupport.v1 ? it : xit)('works with the link inside the shadow tree slot', function () {
166+
var div = document.createElement('div');
167+
div.innerHTML = '<a href="">Link</a>';
168+
var shadow = div.attachShadow({ mode: 'open' });
169+
shadow.innerHTML = '<p><slot></slot></p>';
170+
fixture.appendChild(div);
171+
172+
var linkElm = div.querySelector('a');
173+
var parentElm = shadow.querySelector('p');
174+
175+
var orig = axe.commons.color.elementIsDistinct;
176+
axe.commons.color.elementIsDistinct = function (arg1, arg2) {
177+
assert.deepEqual(arg1, linkElm);
178+
assert.deepEqual(arg2, parentElm);
179+
return orig(arg1, arg2);
180+
};
181+
182+
checks['link-in-text-block'].evaluate.call(checkContext, linkElm);
183+
axe.commons.color.elementIsDistinct = orig;
184+
});
185+
146186
});
147187

148188

@@ -208,16 +248,16 @@ describe('link-in-text-block', function () {
208248
});
209249

210250
it('returns relatedNodes with undefined', function () {
211-
var linkElm = getLinkElm({ }, {
212-
color: '#000010',
213-
backgroundImage: 'url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7)'
214-
}, {
215-
color: '#000000'
216-
});
217-
assert.isUndefined(checks['link-in-text-block'].evaluate.call(checkContext, linkElm));
218-
assert.equal(
219-
checkContext._relatedNodes[0],
220-
linkElm.parentNode
221-
);
251+
var linkElm = getLinkElm({ }, {
252+
color: '#000010',
253+
backgroundImage: 'url(data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7)'
254+
}, {
255+
color: '#000000'
222256
});
257+
assert.isUndefined(checks['link-in-text-block'].evaluate.call(checkContext, linkElm));
258+
assert.equal(
259+
checkContext._relatedNodes[0],
260+
linkElm.parentNode
261+
);
262+
});
223263
});

0 commit comments

Comments
 (0)