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