내무부 모바일 정렬과 스크롤을 바로잡음
This commit is contained in:
@@ -3084,50 +3084,3 @@ test('keeps the chief footer return button the same size as the top return butto
|
|||||||
const mobile = await measure();
|
const mobile = await measure();
|
||||||
expect(mobile.bottom).toEqual(mobile.top);
|
expect(mobile.bottom).toEqual(mobile.top);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('keeps the chief editor aligned to the 500px document without nested page scroll', async ({ page }) => {
|
|
||||||
await install(page);
|
|
||||||
await page.setViewportSize({ width: 500, height: 700 });
|
|
||||||
await page.goto('/che/chief-center');
|
|
||||||
|
|
||||||
const geometry = await page.locator('[data-command-scope="nation"]:visible').evaluate((editor) => {
|
|
||||||
const layout = editor.querySelector<HTMLElement>('.editor-layout')!;
|
|
||||||
const controls = editor.querySelector<HTMLElement>('.control-pad')!;
|
|
||||||
const queue = editor.querySelector<HTMLElement>('.queue-area')!;
|
|
||||||
const overview = document.querySelector<HTMLElement>('.chief-overview-frame')!;
|
|
||||||
const editorRect = editor.getBoundingClientRect();
|
|
||||||
const layoutRect = layout.getBoundingClientRect();
|
|
||||||
const controlsRect = controls.getBoundingClientRect();
|
|
||||||
const queueRect = queue.getBoundingClientRect();
|
|
||||||
const overviewRect = overview.getBoundingClientRect();
|
|
||||||
const scrollingElement = document.scrollingElement!;
|
|
||||||
|
|
||||||
return {
|
|
||||||
documentWidth: document.documentElement.clientWidth,
|
|
||||||
documentOverflow: scrollingElement.scrollWidth - scrollingElement.clientWidth,
|
|
||||||
editor: { left: editorRect.left, width: editorRect.width, height: editorRect.height },
|
|
||||||
layout: { left: layoutRect.left, width: layoutRect.width, height: layoutRect.height },
|
|
||||||
controls: { left: controlsRect.left, width: controlsRect.width },
|
|
||||||
queue: { left: queueRect.left, width: queueRect.width },
|
|
||||||
overviewTop: overviewRect.top,
|
|
||||||
editorBottom: editorRect.bottom,
|
|
||||||
editorOverflowX: getComputedStyle(editor).overflowX,
|
|
||||||
layoutOverflowX: getComputedStyle(layout).overflowX,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(geometry).toEqual({
|
|
||||||
documentWidth: 500,
|
|
||||||
documentOverflow: 0,
|
|
||||||
editor: { left: 0, width: 500, height: 420 },
|
|
||||||
layout: { left: 0, width: 500, height: 420 },
|
|
||||||
controls: { left: 0, width: 125 },
|
|
||||||
queue: { left: 125, width: 375 },
|
|
||||||
overviewTop: geometry.editorBottom,
|
|
||||||
editorBottom: geometry.editorBottom,
|
|
||||||
editorOverflowX: 'visible',
|
|
||||||
layoutOverflowX: 'visible',
|
|
||||||
});
|
|
||||||
|
|
||||||
await page.screenshot({ path: test.info().outputPath('chief-center-mobile-500.png'), fullPage: true });
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -737,6 +737,61 @@ test('finance matches the reference 1000px and 500px computed DOM contracts', as
|
|||||||
await screenshot(page, 'core-finance-mobile-head.png');
|
await screenshot(page, 'core-finance-mobile-head.png');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('finance centers its 500px mobile document without a nested horizontal scroller', async ({ page }) => {
|
||||||
|
await installFixture(page, { role: 'head', rate: 20 });
|
||||||
|
await page.setViewportSize({ width: 800, height: 900 });
|
||||||
|
await gotoOffice(page, 'nation/finance');
|
||||||
|
await expect(page.getByText('외교관계')).toBeVisible();
|
||||||
|
|
||||||
|
const centeredMobile = await page.locator('#finance-container').evaluate((container) => {
|
||||||
|
const rect = container.getBoundingClientRect();
|
||||||
|
const style = getComputedStyle(container);
|
||||||
|
const scrollingElement = document.scrollingElement!;
|
||||||
|
return {
|
||||||
|
viewportWidth: document.documentElement.clientWidth,
|
||||||
|
documentScrollWidth: scrollingElement.scrollWidth,
|
||||||
|
left: rect.left,
|
||||||
|
right: rect.right,
|
||||||
|
width: rect.width,
|
||||||
|
overflowX: style.overflowX,
|
||||||
|
overflowY: style.overflowY,
|
||||||
|
containerScrollLeft: container.scrollLeft,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
expect(centeredMobile).toEqual({
|
||||||
|
viewportWidth: 800,
|
||||||
|
documentScrollWidth: 800,
|
||||||
|
left: 150,
|
||||||
|
right: 650,
|
||||||
|
width: 500,
|
||||||
|
overflowX: 'clip',
|
||||||
|
overflowY: 'visible',
|
||||||
|
containerScrollLeft: 0,
|
||||||
|
});
|
||||||
|
await page.locator('#finance-container').evaluate((container) => container.scrollTo({ left: 200 }));
|
||||||
|
expect(await page.locator('#finance-container').evaluate((container) => container.scrollLeft)).toBe(0);
|
||||||
|
|
||||||
|
await page.setViewportSize({ width: 500, height: 900 });
|
||||||
|
const exactMobile = await page.locator('#finance-container').evaluate((container) => {
|
||||||
|
const rect = container.getBoundingClientRect();
|
||||||
|
return {
|
||||||
|
viewportWidth: document.documentElement.clientWidth,
|
||||||
|
documentScrollWidth: document.scrollingElement!.scrollWidth,
|
||||||
|
left: rect.left,
|
||||||
|
right: rect.right,
|
||||||
|
width: rect.width,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
expect(exactMobile).toEqual({
|
||||||
|
viewportWidth: 500,
|
||||||
|
documentScrollWidth: 500,
|
||||||
|
left: 0,
|
||||||
|
right: 500,
|
||||||
|
width: 500,
|
||||||
|
});
|
||||||
|
await screenshot(page, 'core-finance-mobile-centered-500.png');
|
||||||
|
});
|
||||||
|
|
||||||
test('finance enforces edit permissions and preserves the old value across an API failure', async ({ page }) => {
|
test('finance enforces edit permissions and preserves the old value across an API failure', async ({ page }) => {
|
||||||
const state: FixtureState = { role: 'head', rate: 20, failNextRate: true };
|
const state: FixtureState = { role: 'head', rate: 20, failNextRate: true };
|
||||||
await installFixture(page, state);
|
await installFixture(page, state);
|
||||||
|
|||||||
@@ -1269,9 +1269,9 @@ const clickOutsideMenu = (event: Event) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.mobile.compact .editor-layout {
|
.mobile.compact .editor-layout {
|
||||||
min-height: 420px;
|
min-height: 370px;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 125px 375px;
|
grid-template-columns: 109px 391px;
|
||||||
grid-template-rows: auto auto;
|
grid-template-rows: auto auto;
|
||||||
}
|
}
|
||||||
.mobile.compact .control-pad {
|
.mobile.compact .control-pad {
|
||||||
|
|||||||
@@ -719,8 +719,8 @@ textarea {
|
|||||||
@media (max-width: 939.98px) {
|
@media (max-width: 939.98px) {
|
||||||
.page-finance {
|
.page-finance {
|
||||||
width: 500px;
|
width: 500px;
|
||||||
margin: 0;
|
margin: 0 auto;
|
||||||
overflow-x: hidden;
|
overflow-x: clip;
|
||||||
}
|
}
|
||||||
.top-back-bar,
|
.top-back-bar,
|
||||||
.bottom-bar {
|
.bottom-bar {
|
||||||
|
|||||||
Reference in New Issue
Block a user