feat(393-2): B05 우측 「횡단」 · 「이전 횡단」 판 = B06 횡단 카드 읽기 전용 — 구조물 · 포장 · 면적 · 축 · 단면 사본(B06 고름 · 줌 기억 안 건드림) · 정본만 읽는 제어기 export
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XWh5wNNycMkbwMpACz1rte
This commit is contained in:
@@ -181,6 +181,11 @@ const store = load("A00_Common", "design", "design_store.ts");
|
||||
STUBS["b_svg_zoom_pan"] = { attachSvgZoomPan: () => undefined };
|
||||
STUBS["B05_Profile_UI_RouteEdit_Cross_Draw"] = { CROSS_PLOT_PAD: {}, summarizeCross: () => "" };
|
||||
STUBS["B05_Profile_UI_RouteEdit_Chrome"] = { sidePanelsOf: new WeakMap() }; // 판 양식(382-1) — 화면 밖
|
||||
// B06 카드 그림(393-2) — 화면 밖 · 판 값 고르기는 진짜
|
||||
STUBS["B05_Profile_UI_RouteEdit_Cross_Card"] = {
|
||||
routeCrossSource: () => null,
|
||||
routeCrossCard: () => null,
|
||||
};
|
||||
const pane = load("B05_Profile", "B05_Profile_UI_RouteEdit_Cross.ts");
|
||||
const r3 = (value) => (typeof value === "number" ? Math.round(value * 1000) / 1000 : null);
|
||||
|
||||
|
||||
@@ -67,7 +67,14 @@ let stations = [
|
||||
let footprint = null;
|
||||
let route = { v: 1 };
|
||||
// 접힌 판 펴기 — 몸(side)에 묶인 패널 묶음 흉내
|
||||
const panels = { now: null, current: () => panels.now, open: (id) => (panels.now = id) };
|
||||
// 393-1 — 측점 눈금이 연 판은 기억 안 함(remember 거짓)
|
||||
const panels = {
|
||||
now: null,
|
||||
current: () => panels.now,
|
||||
open: (id, remember = true) => ((panels.now = id), (panels.remember = remember)),
|
||||
};
|
||||
// 393-2 — 판 그림 = B06 카드(가짜) · 그린 단면 id 를 적음
|
||||
const cards = [];
|
||||
const side = { append() {} };
|
||||
|
||||
const STUBS = {
|
||||
@@ -79,6 +86,12 @@ const STUBS = {
|
||||
summarizeCross: () => "",
|
||||
},
|
||||
"./B05_Profile_UI_RouteEdit_Chrome": { sidePanelsOf: new WeakMap([[side, panels]]) },
|
||||
"./B05_Profile_UI_RouteEdit_Cross_Card": {
|
||||
routeCrossSource: (projectId, pipe, chainageM, pane) => ({
|
||||
section: { station_id: `b05-${pane}-s${chainageM}` },
|
||||
}),
|
||||
routeCrossCard: (source) => (cards.push(source.section.station_id), fakeEl()),
|
||||
},
|
||||
"../A00_Common/design/design_pipeline_page": {
|
||||
pagePipeline: () => ({
|
||||
output: (name) => (name === "ground" ? { stations } : null),
|
||||
@@ -171,8 +184,10 @@ async function run() {
|
||||
];
|
||||
footprint = { records: [record("grid:5", 102, 9, -4, false, true)] };
|
||||
route = { v: 2 };
|
||||
cards.length = 0;
|
||||
await cross.refresh();
|
||||
out.afterEdit = cross.watched();
|
||||
out.cardsAfterEdit = cards.slice();
|
||||
|
||||
// 평면 눈금 클릭 = 공용 고름에 적음 · 판이 접혀 있으면 폄
|
||||
const heard = [];
|
||||
@@ -185,6 +200,7 @@ async function run() {
|
||||
selection: pick.readSelection("p-1"),
|
||||
heard: heard.slice(),
|
||||
panel: panels.now,
|
||||
remember: panels.remember,
|
||||
watched: cross.watched(),
|
||||
};
|
||||
|
||||
|
||||
@@ -92,3 +92,13 @@ def test_관_구조물_고름은_마름모만(results):
|
||||
|
||||
def test_고름을_풀면_법선도_없다(results):
|
||||
assert results["cleared"] == {"watched": None, "redrawn": True}
|
||||
|
||||
|
||||
def test_393_판_그림은_B06_카드_사본_노선_고치면_전후(results):
|
||||
# 노선 고친 차례 — 아래 판 = 고치기 전 측점(이전 사본 id) · 위 판 = 새 측점 · B06 카드 id 와 안 겹침
|
||||
assert results["cardsAfterEdit"] == ["b05-prev-s100", "b05-cur-s102"]
|
||||
|
||||
|
||||
def test_393_1_눈금이_연_판은_기억_안_함(results):
|
||||
assert results["planClick"]["panel"] == "cross"
|
||||
assert results["planClick"]["remember"] is False
|
||||
|
||||
Reference in New Issue
Block a user