- logic/B06_Section_Station_Swap: 묶음 측점(PipelineStation[]) → 새 상세 객체 · 같은 측점(열쇠 · 없으면 같은 자리 같은 종류)은 앞 횡단 이어 받음(설계 · 구조물 제원 · 이름) · 자리 · 지반 표본만 새것 · 새 측점 = 지반 표본 + 기본 설계 · 빠진 측점 뺌 · formatStation(파이썬 format_station 짝) - Section_Store swapSectionStations: 같은 목록이면 그대로 · 바뀌면 캐시 · 세션 상세 갈아끼움 · 옛 열쇠 = 세워 둔 목록(옮긴 관도 옛 id) · 새 열쇠 = 묶음이 정한 것 · 노선 모양이 바뀐 차례면 세션 고침 넘김(사라진 측점 = 「노선 밖 고침 N 건」) · 듣는 쪽 subscribeSectionDetail - 횡단 보기 followSwaps(가게 stations 따라감): 조정창 값(반폭 · 기슭막이 · 유입 · 집수정 · 추가 벽)을 옮긴 자리로 · 암 경계 · 암 경사 다시 읽음 · 보일 때 카드 · 종단도 다시 · 떠난 보기의 옛 맵은 지금 값을 안 덮음 - 카드 통째 그리기 = 보이는 줄 + 한 줄만 바로 · 나머지는 같은 id 빈 자리 → 쉬는 틈에 진짜 카드 - 시험: 셋 늘고 둘 빠진 목록(카드 8) · 관 45.054 → 47 m 고침 이어 받음 · 노선 밖 고침 버림 · 조정창 옮김 · 같은 목록 안 갈아끼움 · 보이는 카드 수 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QfHKQs7J3hQELKMWQMUJEy
30 lines
1.4 KiB
TypeScript
30 lines
1.4 KiB
TypeScript
/* =============================================================================
|
|
* B06_Section_UI_Section_View_Lazy.ts
|
|
* 횡단 카드 목록 통째 그리기에서 **보이는 카드 먼저**(PLAN 346-2 4파 · 측점 수가 바뀌어 목록을 다시 짤 때) —
|
|
* 보이는 줄 + 한 줄만 바로 그리고 나머지는 같은 id · 같은 높이 빈 자리로 두었다가 쉬는 틈에 진짜 카드로
|
|
* (`createIdleQueue` · 화면 밖 카드 갈아 끼우기와 같은 줄). 스크롤 자리 · 측점 찾기는 빈 자리로도 그대로.
|
|
* ========================================================================== */
|
|
|
|
/** 처음에 바로 그릴 카드 수 — 보이는 줄 + 한 줄 · 칸이 아직 안 보이면(높이 0) 두 줄. */
|
|
export function eagerCardCount(
|
|
view: { clientHeight: number; scrollTop: number },
|
|
cols: number,
|
|
rowHeightPx: number,
|
|
gapPx: number,
|
|
): number {
|
|
const rows =
|
|
view.clientHeight > 0
|
|
? Math.ceil((view.scrollTop + view.clientHeight) / Math.max(rowHeightPx + gapPx, 1)) + 1
|
|
: 2;
|
|
return rows * Math.max(cols, 1);
|
|
}
|
|
|
|
/** 아직 안 그린 카드 자리 — 진짜 카드와 같은 id · 높이. */
|
|
export function pendingCard(stationId: string, heightPx: number): HTMLElement {
|
|
const slot = document.createElement("article");
|
|
slot.id = `cross-${stationId}`;
|
|
slot.className = "b06-cross-card b06-cross-card--pending";
|
|
slot.style.height = `${heightPx}px`;
|
|
return slot;
|
|
}
|