feat(M01): 「로직 쉽게 보기·만들기」·「로직 흐름 보기」 컨테이너와 계산 코드 걷음 · 정본 로직 화면 복사본 「로직 개선 시험」 컨테이너 더함
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WRFJmmhPi4exAzHgPZHMT
This commit is contained in:
@@ -75,9 +75,8 @@ export interface SideHandle {
|
||||
root: HTMLElement;
|
||||
/** 일위대가 로직 컨테이너 안(로직 목록이 들어갈 자리) */
|
||||
logicHost: HTMLElement;
|
||||
/** 「로직 쉽게 보기·만들기」 컨테이너 안(같은 로직 목록이 들어갈 자리) */
|
||||
easyHost: HTMLElement;
|
||||
cviewHost: HTMLElement;
|
||||
/** 「로직 개선 시험」 컨테이너 안 */
|
||||
labHost: HTMLElement;
|
||||
/** 그룹의 파일 판본을 다시 받음(저장 뒤) — 돌려받는 것 = 새 목록 */
|
||||
refresh: (group: string) => Promise<FileInfo[]>;
|
||||
setActive: (id: string | null) => void;
|
||||
@@ -133,14 +132,12 @@ const LEAF: Group[] = ["환율", "요율"];
|
||||
/** 거름이 있는 컨테이너 — 펼치면 「전체」(또는 닫기 전 거름) 이 바로 열림 */
|
||||
const FILTERED: Group[] = ["인력", "기계", "소요량", "계수"];
|
||||
const LOGIC_ID = "로직|";
|
||||
const EASY_ID = "쉬움|";
|
||||
const CVIEW_ID = "흐름|";
|
||||
const LAB_ID = "로직시험|";
|
||||
|
||||
export function buildSide(
|
||||
onOpen: (pick: Pick) => void,
|
||||
onLogic: () => void,
|
||||
onEasy: () => void,
|
||||
onCView: () => void,
|
||||
onLab: () => void,
|
||||
): SideHandle {
|
||||
const lists = new Map<Group, FileInfo[]>();
|
||||
const bodies = new Map<Group, HTMLElement>();
|
||||
@@ -427,23 +424,15 @@ export function buildSide(
|
||||
onLogic();
|
||||
});
|
||||
|
||||
const easyHost = el("div", { className: "m01-side__items" });
|
||||
const easy = section(tx("Easy_Title"), easyHost);
|
||||
easy.querySelector(".ui-collapsible__title")?.addEventListener("click", () => {
|
||||
if (!easy.classList.contains("is-collapsed")) return;
|
||||
setActive(buttons.has(EASY_ID) ? EASY_ID : null);
|
||||
onEasy();
|
||||
const labHost = el("div", { className: "m01-side__items" });
|
||||
const lab = section(tx("Lab_Title"), labHost);
|
||||
lab.querySelector(".ui-collapsible__title")?.addEventListener("click", () => {
|
||||
if (!lab.classList.contains("is-collapsed")) return;
|
||||
setActive(buttons.has(LAB_ID) ? LAB_ID : null);
|
||||
onLab();
|
||||
});
|
||||
|
||||
const cviewHost = el("div", { className: "m01-side__items" });
|
||||
const cview = section(tx("CView_Title"), cviewHost);
|
||||
cview.querySelector(".ui-collapsible__title")?.addEventListener("click", () => {
|
||||
if (!cview.classList.contains("is-collapsed")) return;
|
||||
setActive(buttons.has(CVIEW_ID) ? CVIEW_ID : null);
|
||||
onCView();
|
||||
});
|
||||
|
||||
const root = el("div", { className: "m01-side", children: [...groups, logic, easy, cview] });
|
||||
const root = el("div", { className: "m01-side", children: [...groups, logic, lab] });
|
||||
attachCollapsible(root);
|
||||
void Promise.all(GROUPS.map(refresh)).catch((error) =>
|
||||
showToast(error instanceof Error ? error.message : L("M01_LoadFailed"), "error"),
|
||||
@@ -451,5 +440,5 @@ export function buildSide(
|
||||
const setOnPicked = (fn: () => void): void => {
|
||||
onPicked = fn;
|
||||
};
|
||||
return { root, logicHost, easyHost, cviewHost, refresh, setActive, setOnPicked, filter };
|
||||
return { root, logicHost, labHost, refresh, setActive, setOnPicked, filter };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user