Handle fields hidden with an opacity rule (#85)

This commit is contained in:
Maxim Baz
2019-04-11 21:59:28 +02:00
committed by GitHub
parent 818a5525f4
commit c9a3ffe1c5

View File

@@ -224,11 +224,11 @@
* @return array List of search results
*/
function queryAllVisible(parent, field, form) {
var result = [];
for (var i = 0; i < field.selectors.length; i++) {
var elems = parent.querySelectorAll(field.selectors[i]);
for (var j = 0; j < elems.length; j++) {
var elem = elems[j];
const result = [];
for (let i = 0; i < field.selectors.length; i++) {
let elems = parent.querySelectorAll(field.selectors[i]);
for (let j = 0; j < elems.length; j++) {
let elem = elems[j];
// Select only elements from specified form
if (form && form != elem.form) {
continue;
@@ -247,12 +247,12 @@
continue;
}
// Elem takes space on the screen, but it or its parent is hidden with a visibility style.
var style = window.getComputedStyle(elem);
let style = window.getComputedStyle(elem);
if (style.visibility == "hidden") {
continue;
}
// Elem is outside of the boundaries of the visible viewport.
var rect = elem.getBoundingClientRect();
let rect = elem.getBoundingClientRect();
if (
rect.x + rect.width < 0 ||
rect.y + rect.height < 0 ||
@@ -260,6 +260,22 @@
) {
continue;
}
// Elem is hidden by its or or its parent's opacity rules
const OPACITY_LIMIT = 0.1;
let opacity = 1;
for (
let testElem = elem;
opacity >= OPACITY_LIMIT && testElem && testElem.nodeType === Node.ELEMENT_NODE;
testElem = testElem.parentNode
) {
let style = window.getComputedStyle(testElem);
if (style.opacity) {
opacity *= parseFloat(style.opacity);
}
}
if (opacity < OPACITY_LIMIT) {
continue;
}
// This element is visible, will use it.
result.push(elem);
}