/* Gold Apple — 공통 모바일 nav 컨트롤러 (드로어 / 언어 셀렉트 / 활성 표시)
2026-04-27 신규
- 헤더 globe 클릭 → 언어 dropdown
- 햄버거(MENU) 클릭 → 드로어 열기
- 현재 경로와 일치하는 메뉴에 aria-current="page"
- 언어 선택 시 속성과 localStorage 만 갱신 (i18n 사전은 별도)
*/
(function () {
'use strict';
if (window.__gaMobileNavInit) return;
window.__gaMobileNavInit = true;
document.body.classList.add('ga-has-bottomnav');
// ── 1. Active state by current path ─────────────────────────────
var path = (location.pathname || '/').replace(/\/$/, '') || '/';
function markActive(scope) {
if (!scope) return;
var links = scope.querySelectorAll('a[href]');
for (var i = 0; i < links.length; i++) {
var hRaw = links[i].getAttribute('href') || '';
var h = hRaw.replace(/\/$/, '') || '/';
if (h === path || (h !== '/' && path.indexOf(h) === 0)) {
links[i].setAttribute('aria-current', 'page');
}
}
}
markActive(document.querySelector('.ga-drawer__menu'));
markActive(document.querySelector('.ga-bottomnav'));
// ── 1.5 CTA 텍스트/화살표 분리 (텍스트만 정확히 가운데 정렬) — 2026-04-29 ──
var ctaLink = document.querySelector('.ga-drawer__cta a');
if (ctaLink && !ctaLink.querySelector('.ga-drawer__cta-arrow')) {
var ctaHtml = ctaLink.innerHTML;
var ctaMatch = ctaHtml.match(/^([\s\S]*?)\s*(→|→)\s*$/);
if (ctaMatch) {
ctaLink.innerHTML =
'' + ctaMatch[1].trim() + '' +
'→';
}
}
// ── 2. Drawer toggle ─────────────────────────────────────────────
var drawer = document.querySelector('.ga-drawer');
var burger = document.querySelector('.nav-burger');
function openDrawer(e) {
if (e) e.preventDefault();
if (!drawer) return;
drawer.classList.add('is-open');
document.body.style.overflow = 'hidden';
if (burger) burger.setAttribute('aria-expanded', 'true');
}
function closeDrawer() {
if (!drawer) return;
drawer.classList.remove('is-open');
document.body.style.overflow = '';
if (burger) burger.setAttribute('aria-expanded', 'false');
}
function toggleDrawer(e) {
if (e) e.preventDefault();
if (!drawer) return;
if (drawer.classList.contains('is-open')) closeDrawer();
else openDrawer();
}
if (burger) burger.addEventListener('click', toggleDrawer);
if (drawer) {
drawer.addEventListener('click', function (e) {
if (e.target === drawer || e.target.matches('.ga-drawer__close,[data-drawer-close]')) {
closeDrawer();
}
});
}
// 2026-04-28 안전장치: viewport resize로 drawer가 display:none 처리되면 body lock 자동 해제 (스크롤 풀기)
window.addEventListener('resize', function () {
if (drawer && drawer.classList.contains('is-open')) {
var disp = window.getComputedStyle(drawer).display;
if (disp === 'none') closeDrawer();
}
});
// ESC 키로 닫기
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' && drawer && drawer.classList.contains('is-open')) closeDrawer();
});
// ── 3. Language dropdown ─────────────────────────────────────────
var langs = document.querySelectorAll('.ga-lang');
for (var k = 0; k < langs.length; k++) {
(function (host) {
var btn = host.querySelector('.ga-lang__btn');
var menu = host.querySelector('.ga-lang__menu');
var saved = localStorage.getItem('ga.lang') || 'en';
// mark default
var opts = host.querySelectorAll('.ga-lang__opt');
for (var i = 0; i < opts.length; i++) {
opts[i].setAttribute('aria-selected', opts[i].dataset.lang === saved ? 'true' : 'false');
}
document.documentElement.setAttribute('lang', saved);
btn.addEventListener('click', function (e) {
e.stopPropagation();
host.classList.toggle('is-open');
});
host.addEventListener('click', function (e) {
var t = e.target.closest('.ga-lang__opt');
if (!t) return;
var code = t.dataset.lang || 'en';
localStorage.setItem('ga.lang', code);
document.documentElement.setAttribute('lang', code);
for (var j = 0; j < opts.length; j++) {
opts[j].setAttribute('aria-selected', opts[j].dataset.lang === code ? 'true' : 'false');
}
host.classList.remove('is-open');
});
document.addEventListener('click', function (e) {
if (!host.contains(e.target)) host.classList.remove('is-open');
});
})(langs[k]);
}
})();