From 6d46dda543db1d38b25a74ee5e087d72be6b47af Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 4 Oct 2026 20:19:31 +0900 Subject: [PATCH] =?UTF-8?q?fix(M02):=20=EC=A0=80=EC=9E=A5=20=EC=95=88=20?= =?UTF-8?q?=ED=95=9C=20=EA=B3=A0=EC=B9=A8=20=EB=AC=BC=EC=9D=8C=20=E2=80=94?= =?UTF-8?q?=20=E3=80=8C=EC=83=88=20=ED=95=AD=EB=AA=A9=E3=80=8D=20=EB=91=90?= =?UTF-8?q?=20=EB=8B=A8=EC=B6=94=20=ED=99=94=EB=A9=B4=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B0=88=20=EB=95=8C=20=C2=B7=20=EC=B9=B4=EB=93=9C=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=A4=EA=B8=B0=20=EC=A0=84(=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A8=20=EB=92=A4=20=EC=B9=B4=EB=93=9C=EB=A5=BC=20=EB=8B=A4?= =?UTF-8?q?=EC=8B=9C=20=EC=9D=BD=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 39-5 예외 — 고침이 말없이 버려지지 않게. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt --- M02_MasterTemplete/M02_MasterTemplete_Structure.ts | 2 ++ M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts | 5 +++-- resources/tester/test_m02_layer_screen.py | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts index 5e3d5baff..36da5cb24 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_Structure.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_Structure.ts @@ -453,6 +453,8 @@ export function createStructurePanel(opts: StructurePanelOptions): StructurePane const word = PART_WORD[kind]; const toNo = to && numbers[to.id]?.[PART_FIELD[kind]]; if (!to || !toNo) return void showToast(TEXT.saveFirst, "error"); + // 카드에 저장 안 한 고침 — 가져온 뒤 카드를 다시 읽어 버려지니 먼저 물음 + if (cards.dirty() && !(await showConfirmDialog(TEXT.discardCards))) return; const target = `${toNo} ${columnHead(to)}`; const here = { layer: getActiveLayer(), owner: getActiveOwner() }; const same = (from: From): boolean => from.layer === here.layer && from.owner === here.owner; diff --git a/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts b/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts index efc277f22..bb62f06db 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_UI_Page.ts @@ -139,7 +139,7 @@ export async function renderM02MasterTemplate(root: HTMLElement): Promise openNew()) } : {}), + ...(canEdit(layer, isAdmin) ? { newItem: newItemButton(() => void openNew()) } : {}), onColumn: (column) => { readOnlyBar?.setColumn(column); tree.select(column); @@ -155,7 +155,8 @@ export async function renderM02MasterTemplate(root: HTMLElement): Promise { + const openNew = async (): Promise => { + if (!(await main.confirmLeave())) return; // 집계표 · 카드에 저장 안 한 고침 — 버릴지 물음 const where = (): string => tree.folder().join(" / ") || L("M02_TreeTop"); main.showView( L("M02_TreeNewItem"), diff --git a/resources/tester/test_m02_layer_screen.py b/resources/tester/test_m02_layer_screen.py index ce9c04253..778e9787d 100644 --- a/resources/tester/test_m02_layer_screen.py +++ b/resources/tester/test_m02_layer_screen.py @@ -306,7 +306,7 @@ def test_구조물_조합_제목_줄_새_항목(): ) assert "if (extras.newItem) extras.newItem.hidden = !combo;" in main page = _text(M02 / "M02_MasterTemplete_UI_Page.ts") - assert "...(canEdit(layer, isAdmin) ? { newItem: newItemButton(() => openNew()) } : {})" in page + assert "...(canEdit(layer, isAdmin) ? { newItem: newItemButton(() => void openNew()) } : {})" in page panel = _text(M02 / "M02_MasterTemplete_TreePanel.ts") assert 'return at?.kind === "folder" ? at.path : [];' in panel # 고른 폴더(39-5 folder()) assert "const newItem = (): void => void addItem(folder());" in panel