1 2/************************************* 3* ììí ëì주ë í¨ì 모ì 4*************************************/ 5// ì«ì íì ì²´í¬ 6function isNumeric(str) { 7 if (typeof str !== 'string') return false; 8 return !isNaN(str) && !isNaN(parseFloat(str)); 9} 10 11// ì¸ì´ ê°ì ¸ì¤ê¸° 12function getLang() { 13 const get_lang = document.querySelector('html').getAttribute('lang'); 14 return get_lang; 15} 16 17// ì ì ì ê·¼ 18window.isNumeric = isNumeric; 19window.getLang = getLang; 20 21 22 23/************************************* 24* Footerì í¨ë°ë¦¬ì¬ì´í¸ ëë¡ë¤ì´ Handler 25*************************************/ 26document.addEventListener('DOMContentLoaded', function() { 27 const familySiteWrapper = document.querySelector('.family-site-wrapper'); 28 const familySiteBtn = document.querySelector('.family-site-btn'); 29 30 if (!familySiteBtn || !familySiteWrapper) return; 31 32 // ë²í¼ í´ë¦ ì ëë¡ë¤ì´ í ê¸ 33 familySiteBtn.addEventListener('click', function(e) { 34 e.stopPropagation(); 35 familySiteWrapper.classList.toggle('active'); 36 }); 37 38 // ëë¡ë¤ì´ ë§í¬ í´ë¦ ì ëë¡ë¤ì´ ë«ê¸° 39 const dropdownLinks = document.querySelectorAll('.family-site-link'); 40 dropdownLinks.forEach(function(link) { 41 link.addEventListener('click', function(e) { 42 // ë§í¬ì 기본 ëìì ì ì§íê³ ëë¡ë¤ì´ë§ ë«ê¸° 43 setTimeout(function() { 44 familySiteWrapper.classList.remove('active'); 45 }, 100); 46 }); 47 }); 48 49 // 문ìì ë¤ë¥¸ ê³³ í´ë¦ ì ëë¡ë¤ì´ ë«ê¸° 50 document.addEventListener('click', function(e) { 51 if (!familySiteWrapper.contains(e.target)) { 52 familySiteWrapper.classList.remove('active'); 53 } 54 }); 55}); 56 57 58 59/************************************* 60* GNB, íë²ê±° ë©ë´, ì¸ì´ë³ê²½ ì´ê¸°í í¨ì 모ì 61*************************************/ 62 63// ì¦ìì¤í í¨ìë¡ ì ì²´ ì´ê¸°í ì½ë ê°ì 64(function() { 65 'use strict'; 66 67 // ì ì ë³ì ì¤ì 68 setupGlobals(); 69})(); 70 71// ì ì ë³ì ì¤ì (ì¸ì´, ì¤í¬ë¡¤ 컨í ì´ë ì ë í° ë±) 72function setupGlobals() { 73 window.lang = window.lang || 'ko'; // ì¸ì´ ê¸°ë³¸ê° 74} 75 76// í¤ë ì´ê¸°í í¨ì 77function initHeader() { 78 var $header = $('.header'); 79 var $gnbBar = $('.gnb_bar'); 80 var $body = $('body'); 81 var $hamburger = $('.hamburger_btn'); 82 var $currentD1 = null; 83 84 // GNB ë©ë´ ë§ì°ì¤ ì¤ë² ì´ë²¤í¸ 85 $header.find('.d1').on('mouseover', function() { 86 87 $body.addClass('menu_open'); 88 $header.addClass('is_open'); 89 $header.removeClass('scrolled'); 90 91 if ($currentD1) $currentD1.removeClass('is_hover'); 92 93 $(this).addClass('is_hover'); 94 $currentD1 = $(this); 95 resizeHeaderHeight($currentD1); 96 97 // GNB ë° ì ëë©ì´ì 98 if ($currentD1.length && $gnbBar.length) { 99 var parentRect = $currentD1[0].offsetParent.getBoundingClientRect(); 100 var rect = $currentD1[0].getBoundingClientRect(); 101 var left = rect.left - parentRect.left; 102 $gnbBar.css('width', `calc(${rect.width}px - 2em)`); 103 $gnbBar.css('transform', `translateX(calc(${left}px + 1em))`); 104 } 105 }); 106 107 // GNB ë©ë´ ë§ì°ì¤ ë¦¬ë¸ ì´ë²¤í¸ 108 $header.on('mouseleave', function() { 109 if ($currentD1) { 110 $currentD1.removeClass('is_hover'); 111 $currentD1 = null; 112 } 113 resizeHeaderHeight($header); 114 $gnbBar.css('width', '0'); 115 $gnbBar.css('transform', 'translateX(0)'); 116 117 $body.removeClass('menu_open'); 118 $header.removeClass('is_open'); 119 120 }); 121 122 // íë²ê±° ë©ë´ í´ë¦ ì´ë²¤í¸ ë°ì¸ë© 123 if ($hamburger.length) { 124 $hamburger.off('click').on('click', function(e) { 125 // íë²ê±° ë²í¼ì init í´ëì¤ ì ê±°(ì´ê¸° ì ëë©ì´ì ë±) 126 $hamburger.removeClass('init'); 127 this.blur(); 128 129 // ì¬ì´ë ë©ë´(ham_menu)ì GNB ëí¼(gnb_wrap) ì í 130 var $hamMenu = $('.ham_menu'); 131 var $gnbWrap = $('.gnb_wrap'); 132 133 // is_side_menu í´ëì¤ë¥¼ í ê¸íì¬ ì´ê³ ë«ê¸° 모ë ì²ë¦¬ 134 $header.toggleClass('is_side_menu'); 135 136 if ($header.hasClass('is_side_menu')) { 137 // ì¬ì´ë ë©ë´ ì´ë¦¼: ham_menu ì¨ê¹, gnb_wrap ë³´ì
138 if ($hamMenu.length) $hamMenu.css({'opacity': '1', 'visibility': 'visible'}); 139 if ($gnbWrap.length) $gnbWrap.css('opacity', '0'); 140 } else { 141 // ì¬ì´ë ë©ë´ ë«í: ham_menu ë³´ì, gnb_wrap ì¨ê¹ 142 if ($hamMenu.length) $hamMenu.css({'opacity': '0', 'visibility': 'hidden'}); 143 if ($gnbWrap.length) $gnbWrap.css('opacity', '1'); 144 $header.removeClass('is_open'); 145 } 146 147 e.preventDefault(); 148 e.stopPropagation(); 149 }); 150 } 151 152 // í¤ë ëì´ ì¡°ì í¨ì 153 function resizeHeaderHeight($target) { 154 var $d2 = $target.find('.d2-wrap'); 155 if (!$d2.length){ 156 document.documentElement.style.setProperty('--header-height', '60px'); 157 return; 158 } 159 var d2Height = $d2[0].clientHeight; 160 document.documentElement.style.setProperty('--header-height', d2Height); 161 } 162 163} 164 165 166// ì¸ì´ ì í ëë¡ë¤ì´ - ìì 167//initHeaderDropdown()ì¼ë¡ ì ì²´ ì½ë를 ê°ì¸ì DOMContentLoaded ì´íì ì¤íëëë¡ ë³ê²½. ììê° ì¡´ì¬í ë ì´ë²¤í¸ê° ì ìì ì¼ë¡ ë°ì¸ë© 168function initHeaderDropdown() { 169 170 const $langDropdown = document.querySelector('.lang_dropdown.lang'); 171 let time; 172 let beforeDelta = 0; 173 174 // ì¸ì´ ë²í¼ í´ë¦ ì´ë²¤í¸ (ê° ì¸ì´ì ë§ë URLë¡ ì´ëíëë° ì¸ì ìì¼ë ì§ê¸ì ìì) 175 document.querySelectorAll('.lang_dropdown').forEach(lang_dropdown => { 176 const navButtons = lang_dropdown.querySelectorAll('.lang_dropdown_item'); 177 if (!navButtons || !navButtons.length) return; 178 179 navButtons.forEach(navButton => { 180 navButton.addEventListener('click', function(e) { 181 e.preventDefault(); 182 try { 183 const selectedSite = (this.getAttribute('hreflang') || '').toLowerCase(); 184 const url = new URL(window.location.href); 185 const originalPath = url.pathname || '/'; 186 const segments = originalPath.split('/').filter(Boolean); 187 188 // If first segment is a supported site code, replace it; otherwise prepend 189 if (segments.length ) { 190 segments[0] = selectedSite; 191 } else { 192 segments.unshift(selectedSite); 193 }// Rebuild pathname, preserve trailing slash if existed 194 const trailingSlash = originalPath.endsWith('/') ? '/' : ''; 195 url.pathname = '/' + segments.join('/') + trailingSlash; 196 // Navigate 197 window.location.href = url.toString(); 198 199 } catch (e) { 200 201 } 202 }); 203 }); 204 }); 205 206 207 // ë¤ë¥¸ ìì í´ë¦ ì ëë¡ë¤ì´ ë«ê¸° 208 document.body.addEventListener('click', initDropStatus); 209 210 // ëë¡ë¤ì´ ë«ê¸° (ë¤ë¥¸ ìì í´ë¦ ì) 211 function initDropStatus(e) { 212 document.querySelectorAll('.lang_dropdown').forEach(el => { 213 if (e.target.parentNode !== el) { 214 el.classList.add('closed'); 215 } 216 }); 217 } 218 219 // ëë¡ë¤ì´ ìì¹ ê³ì° 220 function setDropdownPosition() { 221 const $region = document.querySelector('.menu_lang'); 222 if (!$region || !$langDropdown) return; 223 224 const rect = $region.getBoundingClientRect(); 225 $langDropdown.style.top = `calc(1.37em + ${rect.top}px)`; 226 $langDropdown.style.left = `calc(1.37em + ${rect.left}px - ${rect.height / 2}px)`; 227 228 setHeaderMultiLangHeight(); 229 } 230 231 const multiLangPad = 12; 232 233 function setHeaderMultiLangHeight() { 234 const $dropdownLang = document.querySelector('.lang_dropdown.lang'); 235 const $dropdownList = $dropdownLang ? $dropdownLang.querySelector('.lang_dropdown__list') : null; 236 if ($dropdownList) { 237 $dropdownList.style.setProperty('--height', $dropdownList.scrollHeight + multiLangPad + 'px'); 238 } 239 } 240 241 // ì¸ì´ ë³ê²½ ë²í¼ í´ë¦ ì´ë²¤í¸ 242 const $regionBtn = document.querySelector('.menu_lang'); 243 if ($regionBtn) { 244 $regionBtn.addEventListener('click', function(e) { 245 setDropdownPosition(); 246 this.blur(); 247 248 const $dropdown = $langDropdown ? $langDropdown.closest('.lang_dropdown') : null; 249 if ($dropdown) { 250 $dropdown.classList.toggle('closed'); 251 } 252 setHeaderMultiLangHeight(); 253 e.preventDefault(); 254 e.stopPropagation(); 255 });
256 } 257 258 // ìëì° ë¦¬ì¬ì´ì¦ ì´ë²¤í¸ 259 window.addEventListener('resize', function() { 260 if (time) clearTimeout(time); 261 262 setDropdownPosition(); 263 time = setTimeout(function() { 264 setDropdownPosition(); 265 }, 200); 266 }); 267 268 setDropdownPosition(); 269 270} 271// ì¸ì´ ì í ëë¡ë¤ì´ - ë 272 273// ë©ë´ ë«ê¸° í¨ì - ì¤í¬ë¡¤ ì í¸ì¶ë¨ 274function closeMenu() { 275 const $header = $('.header'); 276 const $body = $('body'); 277 278 if ($header.length === 0) return; 279 280 /** 281 * 1. íë²ê±° ì¬ì´ë ë©ë´ê° ì´ë ¤ìë ê²½ì° (is_side_menu) 282 * GNB ëë¡ë¤ì´(is_open)ë§ ë«ê³ , ì¬ì´ë ë©ë´ë ì ì§í¨ 283 */ 284 if ($header.hasClass('is_side_menu')) { 285 $header.removeClass('is_open'); // ìë¨ GNB ëë¡ë¤ì´ ìíë§ í´ì 286 // returnì íì§ ìê³ ì¬ê¸°ì ë©ì¶ê±°ë, ì¬ì´ë ë©ë´ ë¡ì§ì ê±´ëëëë¤. 287 return; 288 } 289 290 /** 291 * 2. ì¼ë°ì ì¸ ìí© (ì¬ì´ë ë©ë´ê° ìë ë) 292 * 모ë ë©ë´ ìí를 ì´ê¸°í 293 */ 294 $header.removeClass('is_open'); 295 $body.removeClass('menu_open'); 296 297 // íë²ê±° ë©ë´ ë ì´ì´ ì¨ê¹ ì²ë¦¬ (ì¬ì´ë ë©ë´ê° ìë ëë§ ì¤í) 298 const $hamMenu = $('.ham_menu'); 299 const $gnbWrap = $('.gnb_wrap'); 300 if ($hamMenu.length) $hamMenu.css({'opacity': '0', 'visibility': 'hidden'}); 301 if ($gnbWrap.length) $gnbWrap.css('opacity', '1'); 302} 303 304 305 306// íì´ì§ ë¡ë ìë£ í í¤ë ë° ì¸ì´ ëë¡ë¤ì´ ì´ê¸°í (ì¤ë³µ ë°©ì§) 307function runHeaderInits() { 308 if (!window.__headerInited) { 309 window.__headerInited = true; 310 initHeader(); 311 initHeaderDropdown(); 312 } 313} 314if (document.readyState === 'loading') { 315 document.addEventListener('DOMContentLoaded', runHeaderInits); 316} else { 317 runHeaderInits(); 318} 319 320 321// ë§ì°ì¤ ì¤í¬ë¡¤ ì í¤ë ëë¡ë¤ì´ ë©ë´ ë«ê¸° ë° í¤ë ì¤íì¼ ë³ê²½ 322window.addEventListener('scroll', function() { 323 324 closeMenu(); // ëë¡ë¤ì´ ë©ë´ ë«ê¸° 325 326 // ì¤í¬ë¡¤ ìì¹ì ë°ë¥¸ í¤ë ì¤íì¼ ë³ê²½ 327 var $header = document.querySelector('.header'); 328 if (!$header) return; 329 if (window.scrollY > 60) { 330 $header.classList.add('scrolled'); 331 } else { 332 $header.classList.remove('scrolled'); 333 } 334}); 335 336// ì ììì ì ê·¼ ê°ë¥íëë¡ windowì ë±ë¡ 337window.initHeader = initHeader; 338window.initHeaderDropdown = initHeaderDropdown; 339window.closeMenu = closeMenu; 340 341
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.