diff --git a/B05_Profile/B05_Profile_UI_Style_RouteEdit.css b/B05_Profile/B05_Profile_UI_Style_RouteEdit.css index caa6c66c3..a7ebab158 100644 --- a/B05_Profile/B05_Profile_UI_Style_RouteEdit.css +++ b/B05_Profile/B05_Profile_UI_Style_RouteEdit.css @@ -187,7 +187,7 @@ .b05-routeedit__cross-station { color: var(--color-text-secondary); - font-size: var(--text-caption); + font-size: inherit; /* 44-2 — 제목(횡단)과 같은 크기 */ } /* 횡단 판 — 캔버스 그림이 아니라 **SVG 선**이다(2026-09-12 사용자 지시 ③). @@ -235,7 +235,7 @@ .b05-routeedit__cross-key { fill: var(--color-text-secondary, #94a3b8); - font-size: 11px; + font-size: 5.5px; /* 44-2 — 지금(11px)의 절반 */ } .b05-routeedit__cross-key.is-design { diff --git a/resources/tester/ui_checks/44-2_횡단_글자.js b/resources/tester/ui_checks/44-2_횡단_글자.js new file mode 100644 index 000000000..d5d0f35fc --- /dev/null +++ b/resources/tester/ui_checks/44-2_횡단_글자.js @@ -0,0 +1,72 @@ +/* 44-2 — B05 계획노선 편집 · 측점 횡단 글자 크기 + * 시작 화면: B05 종단설계(#/b05-profile) · 환경 검증 프로젝트(OWNERS.md) · 로그인됨 · 계획노선 편집 닫힘 + * 부르는 법: orca eval --expression "$(cat 이 파일)" (async 식 · JSON 글을 돌려줌) + * 하는 일: [계획노선 편집] 열기 → 첫 측점 라벨 누름(앱 모듈의 라벨 상자 자리) → 횡단 판 글자 잼 → [취소]로 닫음 + * 기대 수치: + * - keys = 원지반 · 기본 계획 횡단 · 「좌 … 표고 …」 셋 모두 fontSize 5.5px(옛 11px 의 절반) + * - station.fontSize = title.fontSize(측점 표기 = 제목 「횡단」 크기) + * - 바꾸는 값 없음(취소로 닫음 · 노선 안 고침) + */ +(async () => { + const w = (ms) => new Promise((r) => setTimeout(r, ms)); + const until = async (fn, ms = 15000) => { + for (let t = 0; t < ms; t += 200) { + const v = fn(); + if (v) return v; + await w(200); + } + return null; + }; + const btn = (text) => + [...document.querySelectorAll("button")].find( + (b) => b.offsetParent && b.textContent.trim() === text, + ); + btn("계획노선 편집")?.click(); + const canvas = await until(() => + [...document.querySelectorAll("canvas")].find( + (c) => c.offsetParent && c.closest("[class*='routeedit']"), + ), + ); + if (!canvas) return JSON.stringify({ ok: false, why: "편집 캔버스 없음" }); + // 앱이 실제로 부른 그 모듈 주소(@fs/<폴더>/…) — 같은 주소라야 라벨 상자 WeakMap 을 같이 씀 + const url = performance + .getEntriesByType("resource") + .map((e) => e.name) + .find((n) => n.includes("B05_Profile_UI_RouteEdit_Input.ts")); + const input = await import(url); + const boxes = await until(() => { + const b = input.stationLabelBoxes(canvas); + return b.length ? b : null; + }); + if (!boxes) return JSON.stringify({ ok: false, why: "측점 라벨 상자 없음" }); + const rect = canvas.getBoundingClientRect(); + const box = boxes[Math.floor(boxes.length / 2)]; + const at = { clientX: rect.left + box.x, clientY: rect.top + box.y, button: 0, bubbles: true }; + canvas.dispatchEvent(new PointerEvent("pointerdown", at)); + canvas.dispatchEvent(new PointerEvent("pointerup", at)); + const pane = await until(() => + [...document.querySelectorAll(".b05-routeedit__cross")].find((p) => + p.querySelector(".b05-routeedit__cross-key"), + ), + ); + if (!pane) return JSON.stringify({ ok: false, why: "횡단 판 안 뜸", chainage: box.chainage }); + const fs = (el) => el && getComputedStyle(el).fontSize; + const keys = [...pane.querySelectorAll(".b05-routeedit__cross-key")].map((t) => ({ + text: t.textContent.slice(0, 20), + fontSize: fs(t), + h: +t.getBoundingClientRect().height.toFixed(1), + })); + const title = pane.querySelector(".b05-routeedit__cross-title"); + const station = pane.querySelector(".b05-routeedit__cross-station"); + const out = { + keys, + title: { text: title.textContent, fontSize: fs(title) }, + station: { text: station.textContent, fontSize: fs(station) }, + }; + out.ok = + keys.length === 3 && + keys.every((k) => k.fontSize === "5.5px") && + out.title.fontSize === out.station.fontSize; + btn("취소")?.click(); + return JSON.stringify(out); +})();