projects/swimlane/ngx-datatable/src/lib/utils/elm-from-point.ts
if (typeof document !== 'undefined' && !document.elementsFromPoint) {
document.elementsFromPoint = elementsFromPoint;
}
/*tslint:disable*/
/**
* Polyfill for `elementsFromPoint`
*
* https://developer.mozilla.org/en-US/docs/Web/API/Document/elementsFromPoint
* https://gist.github.com/iddan/54d5d9e58311b0495a91bf06de661380
* https://gist.github.com/oslego/7265412
*/
export function elementsFromPoint(x: number, y: number) {
const elements = [];
const previousPointerEvents = [];
let current: any; // TODO: window.getComputedStyle should be used with inferred type (Element)
let i;
let d;
//if (document === undefined) return elements;
// get all elements via elementFromPoint, and remove them from hit-testing in order
while ((current = document.elementFromPoint(x, y)) && elements.indexOf(current) === -1 && current != null) {
// push the element and its current style
elements.push(current);
previousPointerEvents.push({
value: current.style.getPropertyValue('pointer-events'),
priority: current.style.getPropertyPriority('pointer-events')
});
// add "pointer-events: none", to get to the underlying element
current.style.setProperty('pointer-events', 'none', 'important');
}
// restore the previous pointer-events values
for (i = previousPointerEvents.length; (d = previousPointerEvents[--i]); ) {
elements[i].style.setProperty('pointer-events', d.value ? d.value : '', d.priority);
}
// return our results
return elements;
}
/*tslint:enable*/