class HtmlBodySerializer {
constructor() {
this.serializeHidden = false; // Default setting for serializing hidden elements
}
/**
* Toggles whether hidden elements should be serialized.
* @param {boolean} value - True to serialize hidden elements, false otherwise.
*/
doSerializeHidden(value) {
this.serializeHidden = value;
}
/**
* Checks if an element is visible in the live DOM.
* @param {HTMLElement} element - The element to check.
* @returns {boolean} True if the element is visible, false otherwise, unless serializeHidden is enabled.
*/
isVisible(element) {
if (this.serializeHidden) {
return true; // Serialize all elements if serializeHidden is enabled
}
const style = window.getComputedStyle(element);
return (
style.display !== 'none' &&
style.visibility !== 'hidden' &&
style.opacity !== '0'
);
}
/**
* Recursively serializes an element and its children while excluding unwanted elements.
* @param {HTMLElement} element - The element to serialize.
* @returns {string} The serialized HTML of the element.
*/
serializeElement(element) {
if (
element.tagName === 'SCRIPT' ||
element.tagName === 'STYLE' ||
element.tagName === 'IFRAME' ||
element.tagName === 'SVG' ||
element.tagName === 'PATH' ||
element.closest('svg') || // Exclude any element within an