Files
Martin Robinson 979e004aff Bug 1727891 [wpt PR 30211] - WebKit export of https://bugs.webkit.org/show_bug.cgi?id=229602, a=testonly
Automatic update from web-platform-tests
WebKit export of https://bugs.webkit.org/show_bug.cgi?id=229602 (#30211)

--

wpt-commits: 481890e388fb8144da304f8321d1f91a7eaf559d
wpt-pr: 30211
2021-09-02 10:30:57 +00:00

35 lines
1.5 KiB
JavaScript

/**
* The function positions a new div to exactly the bounding client rect without
* using sticky position. If it's directly under the sticky element it could be
* obscured and not show up when compared to the ref. */
function createIndicatorForStickyElements(sticky_divs) {
if (sticky_divs.length == 0)
throw "No sticky div was found in the test case.";
sticky_divs.forEach((sticky_div) => {
if (getComputedStyle(sticky_div).position != "sticky")
throw "Provided sticky element does not have position: sticky";
});
document.fonts.ready.then(() => {
sticky_divs.forEach((sticky_div) => {
// The relative position indicator will be able to share the same containing
// block to match the position with the same offset from in flow position
// (offsetTop/offsetLeft)
let position_div = document.createElement("div");
position_div.style.left = sticky_div.offsetLeft + "px";
position_div.style.top = sticky_div.offsetTop + "px";
// The absolute position is to ensure that the position_div adds zero size
// to in flow layout
position_div.style.position = "absolute"
let indicator_div = document.createElement("div");
indicator_div.style.width = sticky_div.offsetWidth + "px";
indicator_div.style.height = sticky_div.offsetHeight + "px";
indicator_div.style.backgroundColor = "blue";
indicator_div.style.position = "relative";
position_div.appendChild(indicator_div);
sticky_div.parentNode.insertBefore(position_div, sticky_div);
});
});
}