Domania Source Viewer/URL Extractor
Source for
http://americanplumbing.net
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" /> <meta name="generator" content="Hostinger Horizons" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" /> <meta name="theme-color" content="#ffffff" /> <title>American Plumbing | Wichita Falls</title> <!-- Resource Hints for Performance & Network Optimization --> <link rel="preconnect" href="https://fonts.googleapis.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://images.unsplash.com" crossorigin /> <link rel="dns-prefetch" href="https://images.unsplash.com" /> <link rel="dns-prefetch" href="https://horizons-cdn.hostinger.com" /> <!-- Font Loading Strategy: swap for non-blocking render. Using system fonts for body, only loading Playfair for headings --> <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@600;700;800;900&display=swap" rel="stylesheet" /> <!-- Preload Critical LCP Asset with fetchpriority --> <link rel="preload" as="image" href="https://images.unsplash.com/photo-1637035100215-2c19519dd469?auto=format&fit=crop&q=80&w=1920" fetchpriority="high" imagesrcset="https://images.unsplash.com/photo-1637035100215-2c19519dd469?auto=format&fit=crop&q=80&w=400 400w, https://images.unsplash.com/photo-1637035100215-2c19519dd469?auto=format&fit=crop&q=80&w=800 800w, https://images.unsplash.com/photo-1637035100215-2c19519dd469?auto=format&fit=crop&q=80&w=1200 1200w, https://images.unsplash.com/photo-1637035100215-2c19519dd469?auto=format&fit=crop&q=80&w=1920 1920w" imagesizes="100vw" /> <!-- Critical CSS Inlining --> <style> body { margin: 0; padding: 0; background-color: #ffffff; font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } #root { display: flex; flex-direction: column; min-height: 100vh; } .initial-loader { display: flex; justify-content: center; align-items: center; height: 100vh; background: #ffffff; } /* Header critical styles */ header { position: sticky; top: 0; z-index: 50; width: 100%; background: #ffffff; } </style> <script type="module" crossorigin src="/assets/index-SARSdKwK.js"></script> <link rel="stylesheet" crossorigin href="/assets/index-DXUClc1C.css"> <script type="module"> window.onerror = (message, source, lineno, colno, errorObj) => { const errorDetails = errorObj ? JSON.stringify({ name: errorObj.name, message: errorObj.message, stack: errorObj.stack, source, lineno, colno, }) : null; window.parent.postMessage({ type: 'horizons-runtime-error', message, error: errorDetails }, '*'); }; </script> <script type="module"> const observer = new MutationObserver((mutations) => { for (const mutation of mutations) { for (const addedNode of mutation.addedNodes) { if ( addedNode.nodeType === Node.ELEMENT_NODE && ( addedNode.tagName?.toLowerCase() === 'vite-error-overlay' || addedNode.classList?.contains('backdrop') ) ) { handleViteOverlay(addedNode); } } } }); observer.observe(document.documentElement, { childList: true, subtree: true }); function handleViteOverlay(node) { if (!node.shadowRoot) { return; } const backdrop = node.shadowRoot.querySelector('.backdrop'); if (backdrop) { const overlayHtml = backdrop.outerHTML; const parser = new DOMParser(); const doc = parser.parseFromString(overlayHtml, 'text/html'); const messageBodyElement = doc.querySelector('.message-body'); const fileElement = doc.querySelector('.file'); const messageText = messageBodyElement ? messageBodyElement.textContent.trim() : ''; const fileText = fileElement ? fileElement.textContent.trim() : ''; const error = messageText + (fileText ? ' File:' + fileText : ''); window.parent.postMessage({ type: 'horizons-vite-error', error, }, '*'); } } </script> <script type="module"> const originalConsoleError = console.error; const MATCH_LINE_COL_REGEX = /:(\d+):(\d+)\)?\s*$/; // regex to match the :lineNum:colNum const MATCH_AT_REGEX = /^\s*at\s+(?:async\s+)?(?:.*?\s+)?\(?/; // regex to remove the 'at' keyword and any 'async' or function name const MATCH_PATH_REGEX = /^\//; // regex to remove the leading slash function parseStackFrameLine(line) { const lineColMatch = line.match(MATCH_LINE_COL_REGEX); if (!lineColMatch) return null; const [, lineNum, colNum] = lineColMatch; const suffix = `:${lineNum}:${colNum}`; const idx = line.lastIndexOf(suffix); if (idx === -1) return null; const before = line.substring(0, idx); const path = before.replace(MATCH_AT_REGEX, '').trim(); if (!path) return null; try { const pathname = new URL(path).pathname; const filePath = pathname.replace(MATCH_PATH_REGEX, '') || pathname; return `${filePath}:${lineNum}:${colNum}`; } catch (e) { const filePath = path.replace(MATCH_PATH_REGEX, '') || path; return `${filePath}:${lineNum}:${colNum}`; } } function getFilePathFromStack(stack, skipFrames = 0) { if (!stack || typeof stack !== 'string') return null; const lines = stack.split('\n').slice(1); const frames = lines.map(line => parseStackFrameLine(line.replace(/\r$/, ''))).filter(Boolean); return frames[skipFrames] ?? null; } console.error = function(...args) { originalConsoleError.apply(console, args); let errorString = ''; let filePath = null; for (let i = 0; i < args.length; i++) { const arg = args[i]; if (arg instanceof Error) { filePath = getFilePathFromStack(arg.stack, 0); errorString = `${arg.name}: ${arg.message}`; if (filePath) { errorString = `${errorString} at ${filePath}`; } break; } } if (!errorString) { errorString = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' '); const stack = new Error().stack; filePath = getFilePathFromStack(stack, 1); if (filePath) { errorString = `${errorString} at ${filePath}`; } } window.parent.postMessage({ type: 'horizons-console-error', error: errorString }, '*'); }; </script> <script type="module"> const originalFetch = window.fetch; window.fetch = function(...args) { const url = args[0] instanceof Request ? args[0].url : args[0]; // Skip WebSocket URLs if (url.startsWith('ws:') || url.startsWith('wss:')) { return originalFetch.apply(this, args); } return originalFetch.apply(this, args) .then(async response => { const contentType = response.headers.get('Content-Type') || ''; // Exclude HTML document responses const isDocumentResponse = contentType.includes('text/html') || contentType.includes('application/xhtml+xml'); if (!response.ok && !isDocumentResponse) { const responseClone = response.clone(); const errorFromRes = await responseClone.text(); const requestUrl = response.url; console.error(`Fetch error from ${requestUrl}: ${errorFromRes}`); } return response; }) .catch(error => { if (!url.match(/.html?$/i)) { console.error(error); } throw error; }); }; </script> <script type="module"> if (window.navigation && window.self !== window.top) { window.navigation.addEventListener('navigate', (event) => { const url = event.destination.url; try { const destinationUrl = new URL(url); const destinationOrigin = destinationUrl.origin; const currentOrigin = window.location.origin; if (destinationOrigin === currentOrigin) { return; } } catch (error) { return; } window.parent.postMessage({ type: 'horizons-navigation-error', url, }, '*'); }); } </script> </head> <body> <div id="root"> <div class="initial-loader" aria-hidden="true"></div> </div> <!-- Defer non-critical JS --> </body> </html>
Links from
http://americanplumbing.net