ladybird/Tests/LibWeb/Text/input/hit_testing/pointer-events.html
2025-03-20 11:50:49 +01:00

47 lines
1.9 KiB
HTML

<!DOCTYPE html>
<script src="../include.js"></script>
<body>
<!-- #a2 should be invisible to hit testing -->
<div id="a1">
<div id="a2" style="width: 100px; height: 100px; pointer-events: none"></div>
</div>
<!-- #b3 should be visible to hit testing -->
<div id="b1">
<div id="b2" style="width: 100px; height: 100px; pointer-events: none">
<div id="b3" style="width: 100px; height: 100px; pointer-events: auto"></div>
</div>
</div>
<!-- #c1 should be hit, even though it is an inline element surrounding a block element -->
<a id="c1">
<div id="c2" style="width: 100px; height: 100px; pointer-events: none"></div>
</a>
<!-- a pointer event on #d4 should hit #d2 instead -->
<b id="d1">foo<i id="d2"><div id="d3">bar</div>baz<u id="d4" style="pointer-events: none">lorem</u></i></b>
<!-- div creates its own stacking context, #e2 must be hit instead of crashing -->
<div id="e1" style="position: fixed; width: 100px; height: 100px; pointer-events: none; background-color: red"></div>
<div id="e2" style="width: 100px; height: 100px; background-color: green"></div>
<!-- #f1 must be hit instead of #f2 -->
<a id="f1"><img id="f2" style="height: 30px; width: 30px; pointer-events: none"></a>
</body>
<script>
test(() => {
const printHit = (x, y) => {
const hit = internals.hitTest(x, y);
printElement(hit.node);
printElement(hit.node.parentNode);
println('---');
};
printHit(a1.offsetLeft + 50, a1.offsetTop + 50);
printHit(b1.offsetLeft + 50, b1.offsetTop + 50);
printHit(c1.offsetLeft + 50, c1.offsetTop + 50);
printHit(d4.offsetLeft + 10, d4.offsetTop + 8);
printHit(e1.offsetLeft + 50, e1.offsetTop + 50);
printHit(f1.offsetLeft + 15, f1.offsetTop + 15);
});
</script>