Files
Aislo/ui_template/ui_template_native_menu.ts
T
eomsangdonandClaude Opus 5.5 a1069f270a feat(529-1): 단계 틀 인자(아이콘 · [<][>] 묶음 · 도움말 이름) · D · E 단계 빈 길 일곱
- createWorkflowLayout icons 인자(없으면 B 일곱 아이콘 그대로)
- [?] [<] [>] 묶음 = B05~B09 · D02~D04 · E02~E05 · 묶음 안에서만 오감 · 설명서 이름 B0N/D0N/E0N
- 서버 설명서 주소 D01~D04 · E01~E05 허용 · 우클릭 막기 · 돋보기 d · e 주소
- ROUTES D01~E05 · PLAN_STEP_ROUTES · STAB_STEP_ROUTES · A00_Common/group_workflow(빈 단계 = 틀 · 좌측 [?] 줄 · 단계 막대)
- 페이지 폴더마다 draft/<폴더>_Route.ts · tsconfig 에 D0* · E0* · 문구 ui_template_locale_de
- 시험: 280-2 대역에 D · E 묶음 · 54-2 D · E 설명서 길

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:32:09 +09:00

43 lines
2.1 KiB
TypeScript

/* =============================================================================
* ui_template_native_menu.ts
* 브라우저 기본 동작 손봄 — 공용 진입(`A00_Common/main.ts`) · CAD iframe(`cad_host.ts`) · 종단 새 창(`design_profile_popout.ts`)이 부름.
*
* 오른쪽 클릭 메뉴 막기 — 창 캡처 단계에서 `preventDefault` 만 함 — 이벤트는 멈추지 않으므로 우리 메뉴 듣기는 그대로 돎.
* 글 입력 칸도 막음 — 붙여넣기 · 복사는 Ctrl+V · Ctrl+C · 그 칸에 우리 메뉴가 붙어 있으면 그 메뉴가 뜸.
* 드롭다운 초점 빼기 — 마우스로 고른 뒤 초점이 남으면 휠 · ↑↓ 가 값을 또 바꿈(요구 280-6).
* ========================================================================== */
/** 막을 주소 — B · M · D · E 영역(`b01-…` · `m02-…` · `d02-…`) · A 영역은 그대로 */
export const NATIVE_MENU_ROUTE = /^[bmde]\d/;
/** `win` 의 기본 메뉴를 막음 — `isOn()` 이 거짓이면(예: A 영역 주소) 그대로 둠 */
export function blockNativeMenu(win: Window, isOn: () => boolean): void {
win.addEventListener(
"contextmenu",
(event) => {
if (isOn()) event.preventDefault();
},
true,
);
}
/** `win` 안 드롭다운을 마우스로 고르면 한 박자 뒤 초점을 뺌 — 키보드로 고른 때(↑↓ 훑기)는 그대로 둠.
* 한 박자 뒤 · 아직 그 select 에 초점일 때만 — 페이지 처리(다시 그림 · 다른 칸 초점)가 먼저 끝남.
* iframe 은 다른 realm — `instanceof` 대신 `tagName` 으로 가림. */
export function releaseSelectAfterPick(win: Window): void {
let byKey = false;
win.addEventListener("pointerdown", () => (byKey = false), true);
win.addEventListener("keydown", () => (byKey = true), true);
win.addEventListener(
"change",
(event) => {
const select = event.target as HTMLSelectElement | null;
if (byKey || select?.tagName !== "SELECT") return;
win.setTimeout(() => {
if (select.ownerDocument.activeElement === select) select.blur();
}, 0);
},
true,
);
}