")&&!a.includes(c)&&!["html","head","body"].includes(c))if(o)if(0===r.length)e.push(`Unexpected closing tag ${c}>`),n=!1;else{const t=r.pop();t!==c&&(e.push(`Mismatched tag: Expected ${t}>, got ${c}>`),n=!1)}else r.push(c)})),r.length>0&&(e.push(`Unclosed tags: ${r.join(", ")}`),n=!1),(t.includes(" tag in full document"),n=!1),t.match(/
tag in full document"),n=!1)),{isValid:n,errors:e}}(n);if(!s.isValid)return o(`Invalid HTML: ${s.errors.join("; ")}`,"error"),void(t.resultsPane.textContent=n);e=function(t){let e=t.replace(/\s+/g," ").replace(/> <").trim();const n=(new DOMParser).parseFromString(e,"text/html"),o=" ",s=["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"];let r="";return t.match(/\n"),function t(e,n){if(e.nodeType===Node.TEXT_NODE){const t=e.textContent.trim();return void(t&&(r+=o.repeat(n)+t+"\n"))}if(e.nodeType!==Node.ELEMENT_NODE)return;const a=e.tagName.toLowerCase(),c=s.includes(a);r+=o.repeat(n)+`<${a}`;for(const t of e.attributes)r+=` ${t.name}="${t.value.replace(/"/g,""")}"`;r+=c?"/>":">",c?r+="\n":(r+="\n",Array.from(e.childNodes).forEach((e=>t(e,n+1))),r+=o.repeat(n)+`${a}>\n`)}(n.documentElement,0),r.trim()}(n),t.resultsPane.textContent=e,Prism.highlightElement(t.resultsPane),t.copyHtmlBtn.disabled=!1,t.downloadHtmlBtn.disabled=!1,o("HTML formatted and validated successfully","success")}catch(e){o(`Error processing HTML: ${e.message}`,"error"),t.resultsPane.textContent=n}else o("Enter HTML content to format","error")}));function o(e,n){t.statusMessage&&(t.statusMessage.textContent=e,t.statusMessage.className="status-message "+n,setTimeout((()=>{t.statusMessage.className="status-message",t.statusMessage.textContent=""}),5e3))}t.htmlInput.addEventListener("input",n),t.copyHtmlBtn.addEventListener("click",(function(){e?navigator.clipboard.writeText(e).then((()=>{o("Copied formatted HTML to clipboard","success")})).catch((()=>{o("Failed to copy to clipboard","error")})):o("No formatted HTML to copy","error")})),t.downloadHtmlBtn.addEventListener("click",(function(){if(!e)return void o("No formatted HTML to download","error");const t=new Blob([e],{type:"text/html"}),n=URL.createObjectURL(t),s=document.createElement("a");s.href=n,s.download="formatted.html",document.body.appendChild(s),s.click(),setTimeout((()=>{document.body.removeChild(s),URL.revokeObjectURL(n)}),100),o("Downloaded formatted HTML","success")}))}))