주요 정리 내용: - 핵심 엔진 분리: state, excelHandler 등을 src/core/ 디렉토리로 격리 - 모달 컴포넌트화: index.html의 거대 HTML 구조를 각 모달 TS 파일로 내장 및 동적 주입 - index.html 최적화: 수백 줄의 중복 코드를 제거하여 슬림한 Shell 구조로 변환 - 전역 복구: 병합 과정에서 발생한 한글 인코딩 깨짐 전수 복구 및 빌드 오류 해결 - 경로 정합성: 파일 구조 변경에 따른 모든 import 경로 일괄 업데이트
36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
/**
|
|
* 모든 모달의 공통 기능 (닫기, ESC 처리, 배경 클릭 등)을 관리하는 베이스 모듈입니다.
|
|
*/
|
|
export function initBaseModal() {
|
|
const closeAllModals = () => {
|
|
const modals = document.querySelectorAll('.modal-overlay');
|
|
modals.forEach(modal => modal.classList.add('hidden'));
|
|
};
|
|
|
|
// ESC 키로 닫기
|
|
window.addEventListener('keydown', (e) => {
|
|
if (e.key === 'Escape') closeAllModals();
|
|
});
|
|
|
|
// 배경(Overlay) 클릭 시 닫기 (동적 생성된 모달 대응을 위해 이벤트 위임 고려 가능하나 일단 단순 구현)
|
|
document.addEventListener('click', (e) => {
|
|
const target = e.target as HTMLElement;
|
|
if (target.classList.contains('modal-overlay')) {
|
|
closeAllModals();
|
|
}
|
|
});
|
|
|
|
return { closeAllModals };
|
|
}
|
|
|
|
/**
|
|
* 특정 모달을 엽니다.
|
|
* @param modalId 모달 엘리먼트의 ID
|
|
*/
|
|
export function openModal(modalId: string) {
|
|
const modal = document.getElementById(modalId);
|
|
if (modal) {
|
|
modal.classList.remove('hidden');
|
|
}
|
|
}
|