Files
html/api/audit-pairs.js
Opus ba4c8c6230
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
phase42 doctrine 180 audit 7 pages zero overlaps - cockpit validated
2026-04-24 14:00:46 +02:00

43 lines
2.4 KiB
JavaScript

const { chromium } = require("playwright");
const fs = require("fs");
const TS = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
const OUT = "/var/www/html/proofs/audit-pairs-" + TS;
fs.mkdirSync(OUT + "/zooms", { recursive: true });
const PAGES = [
"wevia-cockpit","dormant-dashboard","realtime-monitor","weval-arena",
"wevia-chat","wevia-em-big4","wevia-em-linkedin-carousel"
];
(async () => {
const browser = await chromium.launch({ headless: true, args: ["--no-sandbox","--disable-gpu","--disable-dev-shm-usage"] });
const results = [];
for (const name of PAGES) {
let ctx;
try {
ctx = await browser.newContext({ viewport: { width: 1440, height: 900 } });
const pg = await ctx.newPage();
await pg.goto("https://weval-consulting.com/" + name + ".html", { waitUntil: "domcontentloaded", timeout: 15000 });
await pg.waitForTimeout(1800);
await pg.screenshot({ path: OUT + "/zooms/" + name + "-full.png", fullPage: false });
await pg.screenshot({ path: OUT + "/zooms/" + name + "-tr.png", clip: { x: 1040, y: 0, width: 400, height: 400 } });
await pg.screenshot({ path: OUT + "/zooms/" + name + "-br.png", clip: { x: 1040, y: 500, width: 400, height: 400 } });
const ol = await pg.evaluate(() => {
const fn = (x1,y1,x2,y2) => {
const all = document.querySelectorAll("button,.btn,.toggle,.tab,.chip,.badge,.fab,[class*=btn],[class*=tab]");
let n = 0;
for (const el of all) { const r=el.getBoundingClientRect(); if(r.width<2||r.height<2)continue; const pos=getComputedStyle(el).position; if(pos!=="fixed"&&pos!=="absolute")continue; const cx=r.x+r.width/2,cy=r.y+r.height/2; if(cx>=x1&&cx<=x2&&cy>=y1&&cy<=y2)n++; }
return n;
};
return { tr: fn(1040,0,1440,400), br: fn(1040,500,1440,900) };
});
results.push({ hub: name, tr: ol.tr, br: ol.br, ok: true });
await pg.close(); await ctx.close();
} catch (e) {
results.push({ hub: name, error: e.message.slice(0,100) });
try { await ctx.close(); } catch {}
}
}
await browser.close();
fs.writeFileSync(OUT + "/summary.json", JSON.stringify({ doctrine: "180", ts: new Date().toISOString(), pages: PAGES.length, results }, null, 2));
console.log(JSON.stringify({ ok: true, outdir: OUT.replace("/var/www/html",""), results: results.map(r => ({h:r.hub,tr:r.tr,br:r.br,err:r.error})) }));
})();