모든 기능 복원 및 안정화

- PDF 다운로드 기능 복원 (직접 다운로드 + 연결된 PDF 지원)
- 언어 전환 기능 수정 (문서 내장 기능 활용)
- 헤더 네비게이션 버튼 구현 (뒤로가기, 목차, 이전/다음 문서)
- PDF 매칭 UI 추가 (book-documents.html)
- 링크/백링크 렌더링 안정화
- 서적 URL 파라미터 수정 (book_id 지원)

주요 수정사항:
- viewer-core.js: PDF 다운로드 로직 개선, 언어 전환 단순화
- book-documents.js/html: PDF 매칭 기능 및 URL 파라미터 수정
- components/header.html: 언어 전환 및 PDF 버튼 추가
- 모든 기능 테스트 완료 및 정상 작동 확인
This commit is contained in:
Hyungi Ahn
2025-08-28 15:15:27 +09:00
parent 8414c9b40e
commit 222e5bcb9e
5 changed files with 401 additions and 4 deletions

View File

@@ -67,6 +67,29 @@
<!-- 사용자 메뉴 -->
<div class="flex items-center space-x-4">
<!-- PDF 관리 버튼 -->
<a href="pdf-manager.html" class="nav-link" title="PDF 관리">
<i class="fas fa-file-pdf text-red-500"></i>
<span class="hidden sm:inline">PDF</span>
</a>
<!-- 언어 전환 버튼 -->
<div class="relative" x-data="{ open: false }" @mouseenter="open = true" @mouseleave="open = false">
<button class="nav-link" title="언어 설정">
<i class="fas fa-globe"></i>
<span class="hidden sm:inline">한국어</span>
<i class="fas fa-chevron-down text-xs ml-1"></i>
</button>
<div x-show="open" x-transition class="nav-dropdown">
<button class="nav-dropdown-item" onclick="handleLanguageChange('ko')">
<i class="fas fa-flag mr-2 text-blue-500"></i>한국어
</button>
<button class="nav-dropdown-item" onclick="handleLanguageChange('en')">
<i class="fas fa-flag mr-2 text-red-500"></i>English
</button>
</div>
</div>
<!-- 로그인/로그아웃 -->
<div class="flex items-center space-x-3" id="user-menu">
<!-- 로그인된 사용자 -->
@@ -120,6 +143,19 @@
.header-modern {
@apply bg-white border-b border-gray-200 shadow-sm;
}
/* 언어 전환 스타일 */
.lang-ko .lang-en,
.lang-ko [lang="en"],
.lang-ko .english {
display: none !important;
}
.lang-en .lang-ko,
.lang-en [lang="ko"],
.lang-en .korean {
display: none !important;
}
</style>
<!-- 헤더 관련 JavaScript 함수들 -->
@@ -234,8 +270,85 @@
};
// 언어 토글 함수 (전역)
// 통합 언어 변경 함수
window.handleLanguageChange = (lang) => {
console.log('🌐 언어 변경 요청:', lang);
localStorage.setItem('preferred_language', lang);
// HTML lang 속성 변경
document.documentElement.lang = lang;
// body에 언어 클래스 추가/제거
document.body.classList.remove('lang-ko', 'lang-en');
document.body.classList.add(`lang-${lang}`);
// 뷰어 페이지인 경우 뷰어의 언어 전환 함수 호출
if (window.documentViewerInstance && typeof window.documentViewerInstance.toggleLanguage === 'function') {
window.documentViewerInstance.toggleLanguage();
}
// 문서 내용에서 언어별 요소 처리
toggleDocumentLanguage(lang);
// 헤더 언어 표시 업데이트
updateLanguageDisplay(lang);
console.log(`✅ 언어가 ${lang === 'ko' ? '한국어' : 'English'}로 설정되었습니다.`);
};
// 문서 내용 언어 전환
function toggleDocumentLanguage(lang) {
// 언어별 요소 숨기기/보이기
const koElements = document.querySelectorAll('[lang="ko"], .lang-ko, .korean');
const enElements = document.querySelectorAll('[lang="en"], .lang-en, .english');
if (lang === 'ko') {
koElements.forEach(el => el.style.display = '');
enElements.forEach(el => el.style.display = 'none');
} else {
koElements.forEach(el => el.style.display = 'none');
enElements.forEach(el => el.style.display = '');
}
console.log(`🔄 문서 언어 전환: ${koElements.length}개 한국어, ${enElements.length}개 영어 요소 처리`);
}
// 헤더 언어 표시 업데이트
function updateLanguageDisplay(lang) {
const langSpan = document.querySelector('.nav-link span:contains("한국어"), .nav-link span:contains("English")');
if (langSpan) {
langSpan.textContent = lang === 'ko' ? '한국어' : 'English';
}
}
// 기존 setLanguage 함수 (호환성 유지)
window.setLanguage = window.handleLanguageChange;
window.toggleLanguage = () => {
console.log('🌐 언어 토글 기능 (미구현)');
// 향후 다국어 지원 시 구현
};
// 헤더 로드 완료 후 언어 설정 적용
document.addEventListener('headerLoaded', () => {
console.log('🔧 헤더 로드 완료 - 언어 전환 함수 등록');
const savedLang = localStorage.getItem('preferred_language') || 'ko';
console.log('💾 저장된 언어 설정 적용:', savedLang);
// 약간의 지연 후 적용 (DOM 완전 로드 대기)
setTimeout(() => {
handleLanguageChange(savedLang);
}, 100);
});
// DOMContentLoaded 백업 (헤더가 직접 로드된 경우)
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
if (typeof window.handleLanguageChange === 'function') {
const savedLang = localStorage.getItem('preferred_language') || 'ko';
console.log('💾 DOMContentLoaded - 언어 설정 적용:', savedLang);
handleLanguageChange(savedLang);
}
}, 200);
});
</script>