|
@@ -118,16 +118,48 @@ this.docHelper = this.docHelper || (() => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function hiddenElement(element, ignoredTags) {
|
|
function hiddenElement(element, ignoredTags) {
|
|
|
- if (ignoredTags.includes(element.tagName)) {
|
|
|
|
|
- return false;
|
|
|
|
|
- } else {
|
|
|
|
|
- let hidden = element.hidden || (element.style && (element.style.display == "none" || element.style.opacity == "0" || element.style.visibility == "hidden"));
|
|
|
|
|
- if (!hidden) {
|
|
|
|
|
- const boundingRect = element.getBoundingClientRect();
|
|
|
|
|
- hidden = !boundingRect.width && !boundingRect.height;
|
|
|
|
|
|
|
+ let cacheElementsHidden = new Map();
|
|
|
|
|
+ let hidden = testHiddenElement(element, ignoredTags, cacheElementsHidden);
|
|
|
|
|
+ if (!hidden) {
|
|
|
|
|
+ let parentElement = element.parentElement;
|
|
|
|
|
+ if (parentElement) {
|
|
|
|
|
+ let parentElementHidden = testHiddenElement(parentElement, ignoredTags, cacheElementsHidden);
|
|
|
|
|
+ while (parentElement && !parentElementHidden) {
|
|
|
|
|
+ parentElement = parentElement.parentElement;
|
|
|
|
|
+ if (parentElement) {
|
|
|
|
|
+ parentElementHidden = testHiddenElement(parentElement, ignoredTags, cacheElementsHidden);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return parentElementHidden;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return hidden;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ function testHiddenElement(element, ignoredTags, cacheElementsHidden) {
|
|
|
|
|
+ let hidden = cacheElementsHidden.get(element);
|
|
|
|
|
+ if (hidden === undefined) {
|
|
|
|
|
+ if (!ignoredTags.includes(element.tagName)) {
|
|
|
|
|
+ hidden = element.hidden;
|
|
|
|
|
+ if (!hidden) {
|
|
|
|
|
+ const elementStyle = element.style;
|
|
|
|
|
+ hidden = elementStyle && elementStyle.display == "none";
|
|
|
|
|
+ if (!hidden) {
|
|
|
|
|
+ const style = getComputedStyle(element);
|
|
|
|
|
+ if (style) {
|
|
|
|
|
+ hidden = style.display == "none";
|
|
|
|
|
+ if (!hidden && (style.opacity == "0" || style.visibility == "hidden")) {
|
|
|
|
|
+ const boundingRect = element.getBoundingClientRect();
|
|
|
|
|
+ hidden = !boundingRect.width && !boundingRect.height;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- return hidden;
|
|
|
|
|
|
|
+ hidden = Boolean(hidden);
|
|
|
|
|
+ cacheElementsHidden.set(element, hidden);
|
|
|
}
|
|
}
|
|
|
|
|
+ return hidden;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function postProcessDoc(doc, options) {
|
|
function postProcessDoc(doc, options) {
|