diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Cross.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Cross.ts index d3593c60b..14276f371 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Cross.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Cross.ts @@ -133,7 +133,7 @@ function createPane(title: string, empty: string): CrossPane { let drawn: CrossPreviewResponse | null = null; let size = { width: 0, height: 0 }; let zoom: ZoomPanState | undefined; - /** B06 카드 재료(393-2) · 카드 머리 · 발 높이(그림 높이 = 판 − 이것) · 측점 간격. */ + /** B06 카드 재료(393-2) · 카드가 그림 밖에 더 쓰는 높이(그림 높이 = 판 − 이것) · 측점 간격. */ let source: RouteCrossSource | null = null; let chrome = 0; let interval = 20; @@ -206,7 +206,7 @@ function createPane(title: string, empty: string): CrossPane { // 목록이 쓰는 그 규칙이다. 서버가 주는 `STA.0+100.000` 을 그대로 쓰면 표기가 갈린다. station.textContent = formatStation(preview.chainage_m, intervalM); draw(preview); - foot.textContent = summarizeCross(preview); + foot.textContent = source ? "" : summarizeCross(preview); // 카드 = 그래프만(393-3) }, wait(text) { box.replaceChildren(); diff --git a/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Card.ts b/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Card.ts index 9b1255c38..29b7ab62f 100644 --- a/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Card.ts +++ b/B05_Profile/B05_Profile_UI_RouteEdit_Cross_Card.ts @@ -6,7 +6,8 @@ * · 자료 = 새 노선 상세(계산 묶음) · 없으면 받아 둔 저장 상세 · 노선 초안 중 새 상세가 아직 없으면 없음 * (판은 옛 선 그림 `_Cross_Draw` 로 · 종단 임시 횡단 창도 그것 그대로) * · 단면 사본(station_id 앞머리 · design 사본) — B06 고름 · 줌 기억 · 면적 원본을 안 건드림 - * · 구조물 자리 · 암 경계 = 정본만 읽는 제어기(`Structure_Layouts` · 세월교 · 박스 조정값) · 누름 막음(줌 단추만) + * · 구조물 자리 · 암 경계 = 정본만 읽는 제어기(`Structure_Layouts` · 세월교 · 박스 조정값) · 누름 막음 + * · 그래프만(393-3) — 카드 머리 · 줌 단추 · 발 줄 걷음 · 그래프가 판 칸을 다 씀 * ========================================================================== */ import "../B06_Section/B06_Section_UI_Style_Cross_Controls.css"; @@ -129,13 +130,10 @@ export function routeCrossCard( ford, box, ); - // 읽기 전용 — 벽 · 선 · 면적 고름을 막음(줌 단추만 통과) - card.addEventListener( - "click", - (event) => { - if (!(event.target as Element).closest("button")) event.stopPropagation(); - }, - true, - ); + // 그래프만(393-3) — 카드 머리 · 줌 단추 · 발(암 경계 · 요약) 걷음 · 벽 · 선 · 면적 고름 막음 + card + .querySelectorAll(":scope > header, :scope > footer, .b06-cross-card__zoom") + .forEach((el) => el.remove()); + card.addEventListener("click", (event) => event.stopPropagation(), true); return card; } diff --git a/B05_Profile/B05_Profile_UI_Style_RouteEdit.css b/B05_Profile/B05_Profile_UI_Style_RouteEdit.css index e77dcbe77..9bf9c4b2a 100644 --- a/B05_Profile/B05_Profile_UI_Style_RouteEdit.css +++ b/B05_Profile/B05_Profile_UI_Style_RouteEdit.css @@ -254,7 +254,12 @@ background: var(--color-surface); } -/* B06 횡단 카드 읽기 전용(393-2) — 판 상자가 테두리 · 고름 강조 · 손가락 없음. */ +/* B06 횡단 카드 읽기 전용(393-2) · 그래프만(393-3) — 테두리 · 고름 강조 · 손가락 없음 · 칸을 다 씀. */ +.b05-routeedit__cross-box:has(> .b06-cross-card) { + border: 0; + border-radius: 0; +} + .b05-routeedit__cross-box > .b06-cross-card { border: 0; border-radius: 0; @@ -262,8 +267,7 @@ cursor: default; } -/* 발 줄 조정 단추(암 경계 등) = 읽기 전용이라 숨김 */ -.b05-routeedit__cross-box > .b06-cross-card > footer button { +.b05-routeedit__cross-foot:empty { display: none; } diff --git a/resources/tester/test_b05_routeedit_cross_width.py b/resources/tester/test_b05_routeedit_cross_width.py index 4f95bc83f..c29a984ea 100644 --- a/resources/tester/test_b05_routeedit_cross_width.py +++ b/resources/tester/test_b05_routeedit_cross_width.py @@ -104,3 +104,22 @@ def test_393_판_그림은_B06_카드_사본_노선_고치면_전후(results): def test_393_1_눈금이_연_판은_기억_안_함(results): assert results["planClick"]["panel"] == "cross" assert results["planClick"]["remember"] is False + + +def test_393_3_판_칸은_그래프만(): + b05 = os.path.join(os.path.dirname(os.path.dirname(HERE)), "B05_Profile") + + def read(name): + with open(os.path.join(b05, name), encoding="utf-8") as file: + return file.read() + + card = read("B05_Profile_UI_RouteEdit_Cross_Card.ts") + # 카드 머리(측점 · 알약) · 발(암 경계 · 요약) · 줌 단추 걷음 · 누름 전부 막음 + assert ':scope > header, :scope > footer, .b06-cross-card__zoom"' in card + assert '"click", (event) => event.stopPropagation(), true' in card + cross = read("B05_Profile_UI_RouteEdit_Cross.ts") + assert 'foot.textContent = source ? "" : summarizeCross(preview);' in cross + css = read("B05_Profile_UI_Style_RouteEdit.css") + assert ".b05-routeedit__cross-box:has(> .b06-cross-card) {" in css + assert ".b05-routeedit__cross-foot:empty {\n display: none;" in css + assert "footer button" not in css