Files
core2026/tools/frontend-legacy-parity/dynasty-ref-measure.mjs
T

94 lines
3.7 KiB
JavaScript

import { chromium } from '@playwright/test';
const baseUrl = process.env.DYNASTY_REF_URL ?? 'http://127.0.0.1:3410/hwe';
const detailId = process.env.DYNASTY_REF_DETAIL_ID ?? '1';
const browser = await chromium.launch({ headless: true });
const page = await browser.newPage({
viewport: { width: 1280, height: 900 },
deviceScaleFactor: 1,
colorScheme: 'dark',
locale: 'ko-KR',
});
const measure = async (url) => {
await page.goto(url, { waitUntil: 'networkidle' });
return page.evaluate(() => {
const tables = Array.from(document.querySelectorAll('table')).map((table) => {
const rect = table.getBoundingClientRect();
const style = getComputedStyle(table);
return {
x: rect.x,
y: rect.y,
width: rect.width,
height: rect.height,
backgroundImage: style.backgroundImage,
borderSpacing: style.borderSpacing,
fontFamily: style.fontFamily,
fontSize: style.fontSize,
lineHeight: style.lineHeight,
};
});
const button = document.querySelector('button');
const buttonStyle = button ? getComputedStyle(button) : null;
const firstCell = document.querySelector('td');
const firstCellStyle = firstCell ? getComputedStyle(firstCell) : null;
return {
chromium: navigator.userAgent,
body: {
width: document.body.getBoundingClientRect().width,
minWidth: getComputedStyle(document.body).minWidth,
margin: getComputedStyle(document.body).margin,
fontFamily: getComputedStyle(document.body).fontFamily,
fontSize: getComputedStyle(document.body).fontSize,
lineHeight: getComputedStyle(document.body).lineHeight,
},
tables,
button: buttonStyle
? {
height: button.getBoundingClientRect().height,
borderWidth: buttonStyle.borderWidth,
borderRadius: buttonStyle.borderRadius,
backgroundColor: buttonStyle.backgroundColor,
color: buttonStyle.color,
padding: buttonStyle.padding,
fontFamily: buttonStyle.fontFamily,
fontSize: buttonStyle.fontSize,
lineHeight: buttonStyle.lineHeight,
cursor: buttonStyle.cursor,
}
: null,
firstCell: firstCellStyle
? {
padding: firstCellStyle.padding,
borderWidth: firstCellStyle.borderWidth,
textAlign: firstCellStyle.textAlign,
}
: null,
};
});
};
const output = {
list: await measure(`${baseUrl}/a_emperior.php`),
detail: await measure(`${baseUrl}/a_emperior_detail.php?select=${detailId}`),
};
if (process.env.FRONTEND_PARITY_ARTIFACT_DIR) {
await page.goto(`${baseUrl}/a_emperior.php`, { waitUntil: 'networkidle' });
await page.screenshot({
path: `${process.env.FRONTEND_PARITY_ARTIFACT_DIR}/dynasty-ref-list.png`,
fullPage: true,
});
if (process.env.DYNASTY_REF_CAPTURE_DETAIL === '1') {
await page.goto(`${baseUrl}/a_emperior_detail.php?select=${detailId}`, { waitUntil: 'networkidle' });
await page.screenshot({
path: `${process.env.FRONTEND_PARITY_ARTIFACT_DIR}/dynasty-ref-detail.png`,
fullPage: true,
});
}
}
process.stdout.write(`${JSON.stringify(output, null, 2)}\n`);
await browser.close();