1class Bannerpop { 2 IS_MOBILE_MODE = false; 3 POP_OPTIONS = { 4 bodyWidth:0, 5 bodyLeft:0, 6 screenWidth:0, 7 popname:"popup_", 8 width:{ window:[],layer:[] }, 9 height:{ window:[],layer:[] }, 10 top:{ window:[],layer:[] }, 11 left:{ window:[],layer:[] }, 12 order:0, // z-indexì© ìì°¨ì 13 view:"normal" // ì¼ë° : normal or ê´ë¦¬ì : manager 14 }; 15 constructor() { 16 const userWrap = document.querySelector("#user-wrap"); 17 if (userWrap) { 18 this.IS_MOBILE_MODE = userWrap.classList.contains("mobile") ? true : false; 19 } 20 } 21 22 // ë°°ë append 23 static async append() { 24 const _this = this, 25 status = window.bannerStatus, 26 time = window.___currentTime || window.parent.___currentTime, 27 sTime = window.startTime, 28 eTime = window.endTime, 29 title = typeof window.bannerTitle == "undefined" ? "" : decodeURIComponent(window.bannerTitle), 30 target = document.currentScript, 31 voteUse = typeof bannerVoteUse == "undefined" ? "N" : bannerVoteUse; 32 33 let content = decodeURIComponent(bannerContent); 34 35 if(!target || target.getAttribute("data-append") == true) return false; // ê°ì²´ê° ìê±°ë ììì ,ì´ë¯¸ ì¶ê°ëìë¤ë©´ ì¤ë¨ 36 37 // ìì ,ì¢ ë£ ë°°ë 38 if(sTime > time || time > eTime || status=="0"){ 39 const isAdminPage = location.href.includes('/edit/adminSection.html'); 40 const isUserView = document.body.classList.contains('ndip_user_body_view'); 41 if (!isAdminPage && !isUserView && voteUse === 'Y' && status === "0") { 42 return false; // ì¢ ë£ ë©ìì§ ì ëì°ê¸° 43 } 44 // 45 let voteAdcClass = "", 46 adcMsg="", 47 adcClass=""; 48 49 if(sTime > time && status != "0"){ 50 adcMsg = 'ìì½ë°°ë'; 51 adcClass = "banner-later"; 52 }else if(time > eTime || status == "0"){ 53 adcMsg = 'ì¢ ë£ë°°ë'; 54 adcClass = "banner-finish"; 55 if(voteUse == "Y") voteAdcClass = "vote_banner_box_finish"; 56 } 57 58 target.setAttribute("data-append", "true"); 59 const div = document.createElement('div'); 60 61 if (!isAdminPage) { 62 div.className = "ad-finished " + voteAdcClass; 63 } else { 64 div.className = "ad-finished " + adcClass; 65 div.innerHTML = '<i class="icon-clock-o"></i> ' + adcMsg + ': <strong>"' + title + '"</strong>'; 66 } 67 68 target.insertAdjacentElement('afterend', div); 69 70 bannerTitle = ""; // ì´ê¸°í' 71 72 return false; 73 } 74 75 const reloadScripts = async (element) => { 76 const scripts = element.querySelectorAll("script[src]"); 77 const cacheVersion = Util.getCookie("nx_cache_vm") 78 79 for (const script of scripts) { 80 await new Promise((resolve, reject) => { 81 const newScript = document.createElement("script"); 82 newScript.async = true; 83 let newSrc = script.src; 84 if (cacheVersion === "vnum1") { 85 const separator = newSrc.includes("?") ? "&" : "?"; 86 newSrc += separator + "version=" + new Date().getTime(); 87 } 88 89 newScript.src = newSrc; 90 script.replaceWith(newScript); 91 newScript.onload = resolve; 92 newScript.onerror = reject; 93 94 }); 95 } 96 }; 97 98 const setSizeInfo = (_this) => { 99 const idxno = _this.getAttribute("data-idxno"), 100 ul = _this.querySelector(".beb_ul"), 101 boxWidth = _this.clientWidth || _this.closest("#float_side_box").clientWidth; // ì ì¬ì´ëì ë°°ëì¼ê²½ì° ì¬ì¸¡ì 102 103 let lis = ul.querySelectorAll(".beb_li"), 104 liCount = lis.length || 0; 105 106 lis.forEach(li => { 107 const len = li.querySelectorAll(".banner_box").length; 108 if (!len) { 109 li.remove(); 110 lis = ul.querySelectorAll(".beb_li"); 111 liCount = lis.length; 112 } 113 }); 114 115 // ë¶ëª¨ë°ì¤ 기ì¤ì¼ë¡ ul ìµë ëì´ ì§ì 116 ul.style.width = (boxWidth * liCount) + "px"; 117 118 // ë°°ëë§ë¤ ëì´ê° ë¤ë¥¼ì ìì¼ë ë¶ëª¨ë°ì¤ ëì´ê¸°ì¤ì¼ë¡í¨ 119 lis.forEach(li => li.style.width = boxWidth + "px"); 120 121 return { 122 idxno : idxno, 123 ul : ul, 124 lis : lis, 125 boxWidth : boxWidth, 126 liCount : liCount 127 }; 128 } 129 130 const parser = new DOMParser(), 131 doc = parser.parseFromString(content, "text/html"), 132 contentBox = _this.changeCDNLink(doc.body.firstChild); 133 134 let targetIdxno = null; 135 if (target.src) { 136 const targetMatch = target.src.match(/\/(\d+)\.js/); 137 targetIdxno = (targetMatch!=null)?targetMatch[1]:null; 138 } 139 140 if (targetIdxno!=null && Util.getCookie("delay_banner")==targetIdxno) { 141 setTimeout(()=>{ 142 target.after(contentBox); 143 Util.setCookie("delay_banner", "", 0); 144 }, 1000); 145 } else target.after(contentBox); 146 147 await reloadScripts(contentBox); 148 149 if (!(contentBox.classList.contains("banner_event_box") || contentBox.classList.contains("banner-multi-box"))) return; 150 151 // 기ë¥ì± ë°°ë 152 if(contentBox.classList.contains("banner_event_box")) { 153 const type = contentBox.getAttribute("data-type");
154 const savePrefix = "banner_order_"; 155 156 const ActivityRelatedFunc = { 157 // ììëë¡ íëì ë°°ëë§ ë³´ì 158 order:function(){ 159 const info = setSizeInfo(contentBox), 160 idxno = info.idxno, 161 lis = info.lis, 162 liCount = info.liCount - 1, 163 saveKey = savePrefix + idxno, 164 order = Number(localStorage.getItem(saveKey)) || 0; 165 // ëë¤ ì íëê²ë§ ë³´ì, ë²í¼ ìì° 166 lis.forEach((li, i) => li.style.display = i === order ? "list-item" : "none"); 167 168 localStorage.setItem(saveKey, (order >= liCount ? 0 : order + 1)); 169 }, 170 171 // random banner 172 random:function(){ 173 const info = setSizeInfo(contentBox), 174 lis = info.lis, 175 liCount = info.liCount, 176 random = Math.floor(Math.random() * liCount); 177 // ëë¤ ì íëê²ë§ ë³´ì, ë²í¼ ìì° 178 lis.forEach((li, i) => li.style.display = i === random ? "list-item" : "none"); 179 }, 180 // random ë°°ë ì íí ì¬ë¼ì´ë 181 randomSlide:function(){ 182 this.slide(true); 183 }, 184 185 // slide banner 186 // rand true or false 187 slide: function(rand){ 188 const info = setSizeInfo(contentBox), 189 ul = info.ul, 190 lis = Array.from(info.lis), 191 liCount = info.liCount, 192 btnBox = contentBox.querySelector(".beb_buttons"), 193 btnStop = btnBox.querySelector(".beb_btn_stop"), 194 speed = Number(contentBox.getAttribute("data-speed")) || 0.3, 195 delayInfo = lis.map(li => Number(li.getAttribute("data-delay")) || 5), 196 boxWidth = info.boxWidth; 197 198 let btnCurrent = null, // íì¬ ì íë ë²í¼ prev,next,play,stop of buttons 199 count = (rand === true ? Math.floor(Math.random() * (liCount)) : -1), // ì²ìë¶í° +1 íê³ ììí기ì -1ì´ê¸°ê°-randomì¼ëë ë°°ëìì¤ 1ê° 200 left = boxWidth, // ìì§ì´ë ê°ê²© 201 delay = null, // ë©ì¶°ìë ìê°(ì´) 202 si = null, // setInterval ë³ì : animate completeìì delayë¡ í´ê²°íë ¤ íëë° ëê° ì ìí림 203 tmpDelay = null, // next, prev ì delay ìì´ ëê¹ 204 firstBtnClicked = 0; // prev,nextë¡ ì´ëíëê° - rotateìì ëíë² +,- í기ì ì²ìë§ ì¤íëì´ì¼ í¨ 205 206 /**** function //s ****/ 207 /* 208 ë¤ì ë°°ë 209 @params 210 loop : ë°ë³µë ê²ì¸ê° 211 mode : + or - 212 */ 213 214 lis.forEach(li => li.style.display = "list-item"); 215 216 function rotate(loop, mode){ 217 if(!mode) mode = "+"; 218 mode === "+" ? count++ : count--; 219 220 if(count >= liCount || count <= 0) count = 0; 221 let front = count + 1; 222 if(count >= (liCount - 1)) front = 0; 223 left = boxWidth * front * -1; 224 delay = tmpDelay === null ? delayInfo[count] : tmpDelay; 225 226 si = setTimeout(() => { 227 ul.style.transition = `margin-left ${speed * 1000}ms`; 228 ul.style.marginLeft = left + "px"; 229 230 ul.addEventListener('transitionend', function callback() { 231 if (loop === false) btnCurrent.disabled = false; 232 tmpDelay = null; 233 ul.removeEventListener('transitionend', callback); 234 }); 235 236 if (loop !== false) rotate(); 237 }, delay * 1000); 238 } 239 240 241 // stop 242 function stop(){ 243 firstBtnClicked++; 244 245 //$ul.stop(true, false); 246 clearTimeout(si); 247 tmpDelay = null; 248 btnStop.classList.add("beb_btn_start"); 249 btnStop.textContent = "play"; 250 } 251 252 // restart 253 function start(){ 254 firstBtnClicked = 0; 255 256 count--; 257 if(count<=0) count=0; 258 259 tmpDelay = null; 260 rotate(); 261 262 btnStop.classList.remove("beb_btn_start"); 263 btnStop.textContent = "ë©ì¶¤"; 264 } 265 266 // ì´ì 267 function prev(){ 268 stop(); 269 270 if(firstBtnClicked === 1) count--; // ì²ìë§ ì´ë¯¸ ì¦ê°ëê°ì ê°ììí´ 271 if(count <= 0) count = liCount; 272 273 tmpDelay=0; 274 rotate(false, "-"); 275 276 btnCurrent.disabled = true; 277 } 278 279 // ì´í 280 function next(){ 281 stop(); 282 283 if(firstBtnClicked === 1) count--; 284 if(count >= liCount) count=0; 285 286 tmpDelay = 0; 287 rotate(false); 288 289 btnCurrent.disabled = true; 290 } 291 /**** function //e ****/ 292 293 // ì²ì ë°°ë를 ë³´ì´ì§ ìëë¤ë ê²ì ëë¤ ë°°ëì ì¬ë¼ì´ëë¼ë ê²-ì²ìë³´ì¼ë°°ë ì¤ì 294 if(count >= 0 && rand === true){ 295 let _boxWidth = boxWidth * (count >= liCount ? liCount -1 : count) * -1; 296 count--; 297 298 ul.style.marginLeft = _boxWidth + "px"; 299 } 300 301 // ì¤í 302 rotate(); 303 304 // ë²í¼ë³´ì 305 btnBox.addEventListener("click", (e) => { 306 const target = e.target.closest("button.beb_btns"); 307 if(!target) return; 308 btnCurrent = target; 309 310 if(target.classList.contains("beb_btn_prev")) prev(); 311 if(target.classList.contains("beb_btn_next")) next(); 312 if(target.classList.contains("beb_btn_stop")) target.classList.contains("beb_btn_start") ? start() : stop(); 313 });
314 315 // mouseover event 316 if (_this.IS_MOBILE_MODE) { 317 ul.addEventListener('touchstart', stop); 318 ul.addEventListener('touchend', start); 319 } else { 320 ul.addEventListener('mouseenter', stop); 321 ul.addEventListener('mouseleave', start); 322 } 323 }, 324 }; 325 326 327 ActivityRelatedFunc[type](); 328 329 } 330 331 // ë©í° 기ë¥ì± ë°°ë 332 if(contentBox.classList.contains("banner-multi-box")) { 333 this.bannerLoad(contentBox); 334 } 335 //$(target).attr("data-append","true").after(content); // ì¶ê° ëìì¼ë©´ data-append íê·¸ ëê¹ 336 } 337 338 // script, img link cdn ë§í¬ë¡ ì¹í 339 static changeCDNLink(dom) { 340 let cdnDomain = ""; 341 if("CDN_DOMAIN" in window) cdnDomain=window.CDN_DOMAIN; 342 else if("CDN_DOMAIN" in window.parent) dnDomain=window.parent.CDN_DOMAIN; 343 else if("CDN_DOMAIN" in window.opener) dnDomain=window.opener.CDN_DOMAIN; 344 345 if(!cdnDomain || !(/^http(s)?:/i.test(cdnDomain) || /^\/\//i.test(cdnDomain))) return dom; 346 347 let els=dom.querySelectorAll("script[src] , img[src]"); //console.log(els) 348 if(els.length<=0) return dom; 349
350 els.forEach((a)=>{ 351 const src = a.getAttribute("src"); 352 if(src && !/^http(s)?:/i.test(src) && !/^\/\//i.test(src)) a.src = cdnDomain + src; 353 }); 354 355 return dom; 356 } 357 358 static bannerLoad(contentBox) { 359 const effectType = contentBox.getAttribute("data-effect-type"), 360 rowNum = parseInt(contentBox.getAttribute("data-row-num"), 10) || 1, 361 colNum = Number(contentBox.getAttribute("data-column-num")) || 1, 362 scrollNum = parseInt(contentBox.getAttribute("data-scroll-num"), 10) || 1, 363 moveDisplay = contentBox.getAttribute("data-move-display") || 'none', 364 isAutoPlay = contentBox.getAttribute("data-autoplay") == "Y", 365 autoplaySpeed = parseInt(contentBox.getAttribute("data-autoplay-speed"), 10) || 5, 366 speed = parseInt(contentBox.getAttribute("data-speed"), 10) || 300, 367 isRandom = contentBox.getAttribute("data-random") == "Y"; 368 369 // ìì½ë°°ëì´ê±°ë ì¢ ë£ ë°°ëì¼ ê²½ì° ì ì¸ ì²ë¦¬. 370 if (location.href.indexOf('/edit/adminSection.html') < 0) { 371 // ì¬ë¼ì´ë ì¬ì© ì 372 contentBox.querySelectorAll(".slick-slide").forEach(function(slide) { 373 if (slide.querySelectorAll('.banner_box').length <= 0) { 374 slide.remove(); 375 } 376 }); 377 // ì¬ë¼ì´ë 미ì¬ì© ì 378 $('.banner-multi-box .slick-slide-none .ad-finished').closest('.columns').remove(); 379 } 380 381 if(effectType != "none") { 382 const totalSlide = contentBox.querySelectorAll(".slick-slide").length || 0, 383 slideCount = effectType == "horizon" ? (totalSlide / rowNum) || 0 : totalSlide, 384 randomStart = isRandom ? Math.floor(Math.random() * slideCount) : 0; 385 386 const slickParam = {}; 387 slickParam.prevArrow = '<button type="button" class="roll-btns btn-prev"><i class="icon-angle-left-thin"><span class="show-for-sr">prev</span></i></button>'; // ì´ì ë²í¼ 388 slickParam.nextArrow = '<button type="button" class="roll-btns btn-next"><i class="icon-angle-right-thin"><span class="show-for-sr">next</span></i></button>'; // ë¤ìë²í¼ 389 slickParam.infinite = true; // 무í ë기기 390 slickParam.draggable = false; 391 switch(effectType) { 392 case "vertical" : 393 slickParam.slidesToShow = rowNum; 394 slickParam.vertical = true; 395 slickParam.verticalSwiping = true; 396 if(isRandom && totalSlide > rowNum) slickParam.initialSlide = randomStart; 397 break; 398 case "horizon": 399 default: 400 slickParam.slidesToShow = parseInt(colNum , 10); 401 if (rowNum > 1) slickParam.rows = rowNum; 402 if (isRandom) slickParam.initialSlide = randomStart; 403 break; 404 } 405 slickParam.slidesToScroll = scrollNum; 406 slickParam.arrows = moveDisplay == "arrow" ? true : false; 407 slickParam.dots = moveDisplay == "dot" ? true : false; 408 slickParam.dotsClass = "auto-pager"; 409 slickParam.autoplay = isAutoPlay ? true : false; 410 slickParam.autoplaySpeed = isAutoPlay ? autoplaySpeed * 1000 : 0; 411 slickParam.speed = speed; 412 slickParam.centerMode = false; 413 slickParam.variableWidth = false; 414 slickParam.focusOnSelect = true; 415 416 $(contentBox).slick(slickParam); 417 } else { 418 if (isRandom) shuffle($(contentBox)); 419 } 420 421 function shuffleArray(d) { 422 for (var c = d.length - 1; c > 0; c--) { 423 var b = Math.floor(Math.random() * (c + 1)); 424 var a = d[c]; 425 d[c] = d[b]; 426 d[b] = a; 427 } 428 return d; 429 } 430 431 function shuffle(target){ 432 var $box = $(target).children(".slick-slide-none") 433 ,$container = $box.children(".row") 434 ,$li = $box.find(".columns") 435 ,total = $li.length 436 ,tmp = []; 437 for(var i=0;i<total;i++) tmp.push(i); 438 $container.empty(); 439 setTimeout(
440 shuffleArray(tmp).forEach(function(a,b){ 441 var $bannerBoxs=$li[a].querySelectorAll(".banner_box") 442 ,length=$bannerBoxs.length 443 ,div=document.createElement("div"); 444 for(var i=0;i<length;i++){ 445 div.appendChild($bannerBoxs[i]); 446 div.className = "columns"; 447 } 448 $container.append(div); 449 }) 450 ,0); 451 } 452 } 453 454 float(j) { 455 // json ê° 456 const parents = this, 457 current = window. ___currentTime, 458 start = Number(j.start) || 0, 459 end = Number(j.end) || (new Date().getTime() + 100), 460 status = j.status || "0"; 461 462 if(this.POP_OPTIONS.view != "manager" && (status == "0" || current < start || (current > end && end !== 0))) return false; 463 464 const idxno = j.idxno || "0", 465 popupType = j.popup_type || "window", 466 popupWidth = Number(j.popup_width) || 0, 467 popupHeight = (Number(j.popup_height) || 0), 468 contentType = j.content_type||"FILE", 469 bottomClose = j.bottom_close||"N", 470 bottomCloseExpireCk = j.bottom_close_expire_ck || "none", 471 bottomCloseExpire = j.bottom_close_expire || 1, 472 layerBorder = j.layer_border || "N", 473 layerMove = j.layer_move || "N", 474 layerScroll = j.layer_scroll || "N", 475 layerClosePosition = j.layer_close_position || "BR", 476 windowScroll = j.window_scroll || "Y", 477 content = decodeURIComponent(j.content) || "", 478 popname = this.POP_OPTIONS.popname + idxno, 479 _type = popupType; // default: ê°ìëì - íì ê³¼ ë ì´ì´ê° ìì¹ê°ì ê³µì íì¬ ì°¨ë¡ë¡ ëì¸ë ¤ë©´ "window" or ê³µì íì§ ìê³ ê°ì ëì¸ë ¤ë©´ popupType; 480 481 let top = 0, 482 left = 0, 483 xPosition = Number(j.x_position) || 0, 484 yPosition = Number(j.y_position) || 0; 485 486 const type = { 487 calcPosition: function() { 488 // x,yê° 0ì¼ëë autoë¡ ê°ì£¼ 489 if((xPosition == "0" && yPosition == "0")) { 490 const maxHeight = parents.arrayMaxMin(parents.POP_OPTIONS.height[_type], "max"), 491 maxTop = parents.arrayMaxMin(parents.POP_OPTIONS.top[_type], "max"), 492 initLeft = popupType == "window" ? 0 : parents.POP_OPTIONS.bodyLeft, 493 prevWidth = parents.POP_OPTIONS.width[_type][parents.POP_OPTIONS.width[_type].length - 1] || 0, 494 prevLeft = parents.POP_OPTIONS.left[_type][parents.POP_OPTIONS.left[_type].length - 1] || initLeft; 495 496 left = prevLeft + prevWidth; 497 498 if(left > parents.POP_OPTIONS[popupType == "window" ? "screenWidth" : "bodyWidth"]) { 499 top += maxHeight; 500 left = initLeft; 501 502 parents.POP_OPTIONS.width[_type] = []; 503 parents.POP_OPTIONS.height[_type] = []; 504 parents.POP_OPTIONS.top[_type] = []; 505 parents.POP_OPTIONS.left[_type] = []; 506 } else { 507 top = (maxTop || 0); 508 } 509 510 // ë³íëê° ë°°ì´ì ë£ê¸° ìí´ ì¡°ì 511 xPosition = left; 512 yPosition = top; 513 514 // ë³ìì ë´ì 515 parents.POP_OPTIONS.width[_type].push(popupWidth || 0); 516 parents.POP_OPTIONS.height[_type].push(popupHeight || 0); 517 parents.POP_OPTIONS.top[_type].push(yPosition || 0); 518 parents.POP_OPTIONS.left[_type].push(xPosition || 0); 519 } else { 520 top = yPosition; 521 left = xPosition; 522 } 523 }, 524 525 // ê´ë¦¬ì 미리보기ì ì¤ìì 526 setPositionCenter: function(){ 527 const _width = (document.body.clientWidth/2)-(popupWidth/2), 528 _scrollTop = document.body.scrollTop; 529 530 top = _scrollTop + 50; 531 left = (_width>0)?_width:0; 532 }, 533 534 // ëì¸ íì´ì§ applyPage 535 isApplyPage: function() { 536 if(parents.POP_OPTIONS.view == "manager") return true; 537 }, 538 539 window:function(){ 540 this.calcPosition(); // ìì¹ ê³ì° 541 const winpopupUrl = '/bannerpop/popup.html?win_popup_idxno=' + idxno; 542 window.open(winpopupUrl, popname, "width="+popupWidth+",height="+(popupHeight + ((bottomCloseExpireCk=='none'&&bottomClose=='N')?0:40))+",scrollbars="+(windowScroll=="Y"?"yes":"no")+",resizable=yes,top="+top+",left="+left); 543 }, 544 545 layer:function(){ 546 this.calcPosition(); // ìì¹ ê³ì° 547 548 // HTML 문ìì´ DOM ììë¡ ë³í 549 const parser = new DOMParser(), 550 doc = parser.parseFromString(content, 'text/html'), 551 contentBox = parents.constructor.changeCDNLink(doc.body.firstChild); 552 553 contentBox.id = popname; 554 if (layerMove == "Y" && parents.IS_MOBILE_MODE!==true) contentBox.style.setProperty("--nd-popup-transform", "none"); 555 contentBox.style.setProperty("--nd-popup-offset-x", left + "px"); 556 contentBox.style.setProperty("--nd-popup-offset-y", top + "px"); 557 contentBox.style.setProperty("--nd-popup-width", popupWidth + "px"); 558 contentBox.style.setProperty("--nd-popup-height", popupHeight + "px"); 559 contentBox.style.setProperty("--nd-popup-zindex", "110" + parents.POP_OPTIONS.order); 560 contentBox.classList.add("layer_box"); 561 562 if(contentType == "HTML") contentBox.classList.add("for-html"); 563 564 if(layerScroll === "Y") contentBox.classList.add("layer_box_fixed"); 565 566 if(layerBorder === "Y") contentBox.classList.add("layer_box_border"); 567 568 const closeBox = contentBox.querySelector(".popup_close_box"); 569 if(closeBox) { 570 closeBox.classList.add("layer_close_box"); 571 } 572 573 if(layerMove == "Y" && parents.IS_MOBILE_MODE!==true){ 574 contentBox.classList.add("layer_box_cursor_move"); 575 parents.enableDraggable(contentBox); 576 } 577 578 // ì°½ë«ê¸°-icon ë«ê¸° ë²í¼ì ë³ê°ë¤ 579 //if(bottomClose=="Y"){ 580 const btnClose = contentBox.querySelectorAll(".popup_close, .popup_close_map, .popup_icon_close"), 581 hasPopupCloseElements = contentBox.querySelectorAll(".popup_close, .popup_close_map").length > 0;
582 583 btnClose.forEach(btn => { 584 if (btn.classList.contains("popup_icon_close")) { 585 // ë²í¼ìì¹ ì¡ëë° ë¶íìí´ì 주ì(2024-05-17) 586 // if ((layerClosePosition == 'BL' || layerClosePosition == 'BR') && hasPopupCloseElements) { 587 // btn.style.top = Number(j.popup_height) - 30 + "px"; 588 // } 589 if(!hasPopupCloseElements) { 590 contentBox.classList.add("no-footer"); 591 } 592 btn.classList.add("layer_position_" + layerClosePosition); 593 } 594 }); 595 596 btnClose.forEach(btn => btn.addEventListener("click", () => { 597 parents.evtClose(popupType, idxno); 598 return false; 599 })); 600 //} 601 602 // ì´ë¯¸ì§ë´ ë§í¬ê° ì°½ë«ê¸° ë¼ë©´ 603 //$content.find("a[href*='javascript:window.close()']").click(function(){ 604 const elements = contentBox.querySelectorAll("[href*='javascript:window.close()']"); 605 elements.forEach(element => element.addEventListener("click", () => { 606 parents.evtClose(popupType, idxno); 607 return false; 608 })); 609 610 const popupDays = contentBox.querySelectorAll(".popup-days, .popup_day_close_map"); 611 // í루, ëªì¼ëì ì´ì§ ì기 612 parents.daysNotOpen(bottomCloseExpireCk, bottomCloseExpire, popupDays, j); 613 614 if(parents.POP_OPTIONS.view == "manager"){ 615 document.body.appendChild(contentBox); 616 this.setPositionCenter(); 617 contentBox.classList.remove("layer_box_fixed"); 618 contentBox.style.setProperty("--nd-popup-transform", "none"); 619 contentBox.style.setProperty("--nd-popup-offset-y", top + "px"); 620 contentBox.style.setProperty("--nd-popup-offset-x", left + "px"); 621 }else { 622 document.querySelector("#layer-popups").appendChild(contentBox); 623 } 624 625 // ì´ë¯¸ì§ë§µ 리ì¬ì´ì¦ 626 $('img[usemap]', contentBox).rwdImageMaps(); 627 } 628 }; 629 630 type[popupType](); 631 } 632 633 // íì ëì°ê¸° 634 popup() { 635 if(!window.___popup) return; 636 if(Array.isArray(___popup) === false && ___popup.length > 0) return; 637 if(!window.___currentTime) ___currentTime = Math.floor(new Date().getTime() / 1000); 638 639 const content = document.querySelector("#layer-popups"); 640 641 if(!content) return false; 642 643 this.POP_OPTIONS.bodyWidth = content.clientWidth; 644 this.POP_OPTIONS.screenWidth = window.screen.width; 645 646 for(let i = 0, cnt = ___popup.length ; i < cnt ; i++ ){ 647 // ì¿ í¤ì¸ì§ íë¨í ì´ê¸° 648 let coo = ""; 649 coo = Util.getCookie(this.POP_OPTIONS.popname + ___popup[i].idxno); 650 651 if(!coo){ 652 this.POP_OPTIONS.order++; 653 this.float(___popup[i]); 654 } 655 } 656 } 657 658 // ì°½ë«ê¸° 659 evtClose(mode, idxno) { 660 if(mode=="layer"){ 661 const layerId = this.POP_OPTIONS.popname + idxno; 662 663 $("#"+layerId).fadeOut("fast", function(){ 664 $(this).remove(); 665 }); 666 }else window.close(); 667 } 668 669 // cookie 670 evtCookieClose(name, days) { 671 Util.setCookie(name, "popup", days); 672 } 673 674 // í루, ëªì¼ëì ì´ì§ ì기. 675 daysNotOpen(expire, period, btns, p) { 676 const idxno = p.idxno; 677 let isClickedMap = false; 678 const addListenerAndClose = (element, days) => { 679 element.addEventListener("click", () => { 680 this.evtCookieClose(this.POP_OPTIONS.popname + idxno, Number(days)||1); 681 this.evtClose(p.popup_type, idxno); 682 return false; 683 }); 684 }; 685 686 if (expire !== "none") { 687 btns.forEach(btn => { 688 if (btn.classList.contains("popup-days")) { 689 // í루ëì ì´ì§ ì기 690 if (expire === "day") { 691 addListenerAndClose(btn, "1"); 692 if (!btn.hasChildNodes()) { 693 btn.innerHTML = '<a href="#close-to-layer">í루ëì ë³´ì§ ì기</a>'; 694 } 695 } 696 // ì§ì ë ì¼ì ëì ì´ì§ ì기 697 else if (expire === "days") { 698 const html = `<a href="#link">${period > 1 ? period + 'ì¼ ëì ë³´ì§ ì기' : 'í루 ëì ë³´ì§ ì기'}</a>`; 699 btn.insertAdjacentHTML('beforeend', html); 700 addListenerAndClose(btn, period); 701 } 702 } else { 703 addListenerAndClose(btn, "1"); 704 isClickedMap = true; 705 } 706 }); 707 } 708 709 // expire ê°ì´ë ê´ê³ìì´ ì´ë¯¸ì§ë§µì ì°¾ì ì²ë¦¬ 710 if (isClickedMap === false) { 711 btns.forEach((btn) => 712 btn.addEventListener("click", () => 713 addListenerAndClose(btn, "1") 714 ) 715 ); 716 } 717 } 718 719 // window popup control 720 popupControl(){ 721 if(!___popup) return ; 722 if((typeof ___popup) !== "object") return ; 723 const p = ___popup, 724 title = decodeURIComponent(p.title)||"", 725 popupType = p.popup_type||"window", 726 bottomClose = p.bottom_close||"Y", 727 bottomCloseExpireCk = p.bottom_close_expire_ck||"day", // : day,days,none 728 bottomCloseExpire = p.bottom_close_expire||1, // : ëªì¼ 729 btnClose = document.querySelectorAll(".popup_close, .popup_close_map, .popup_icon_close"), 730 btnDayClose = document.querySelectorAll('.popup-days'); 731 732 if(popupType!="window") return ; 733
734 // ìëì° ë° íì´í êµì²´ 735 document.title = title; 736 737 // ì°½ë«ê¸° 738 if(bottomClose=="Y"){ 739 btnClose.forEach(btn => { 740 btn.addEventListener("click", () => { 741 this.evtClose(p.popup_type, p.idxno); 742 return false; 743 }); 744 }); 745 } 746 747 // í루, ëªì¼ëì ì´ì§ ì기 748 this.daysNotOpen(bottomCloseExpireCk, bottomCloseExpire, btnDayClose, p); 749 } 750 751 enableDraggable(ele) { 752 let isDragging = false; 753 let dragStartX, dragStartY; 754 let initTranslateX = 0, 755 initTranslateY = 0; 756 757 const draggableEle = ele; 758 const linksAndAreas = ele.querySelectorAll('a, area'); 759 760 linksAndAreas.forEach(element => { 761 element.style.cursor = 'move'; 762 }); 763 ele.addEventListener("click", (e) => e.preventDefault()); 764 const onPointerDown = (e) => { 765 e.preventDefault(); 766 isDragging = true; 767 dragStartX = e.pageX; 768 dragStartY = e.pageY; 769 770 const transform = window.getComputedStyle(draggableEle).transform; 771 if (transform !== 'none') { 772 const matrix = new DOMMatrixReadOnly(transform); 773 initTranslateX = matrix.m41; 774 initTranslateY = matrix.m42; 775 } else { 776 initTranslateX = 0; 777 initTranslateY = 0; 778 } 779 }; 780 781 const onPointerMove = (e) => { 782 if (!isDragging) return; 783 784 const moveX = e.pageX - dragStartX; 785 const moveY = e.pageY - dragStartY; 786 787 const translateX = initTranslateX + moveX; 788 const translateY = initTranslateY + moveY; 789 draggableEle.style.setProperty("--nd-popup-transform", `translate(${translateX}px, ${translateY}px)`); 790 }; 791 792 const onPointerUp = () => { 793 isDragging = false; 794 }; 795 796 draggableEle.addEventListener('mousedown', onPointerDown); 797 document.addEventListener('mousemove', onPointerMove); 798 document.addEventListener('mouseup', onPointerUp); 799 } 800 801 // array ìµê³ ê° 802 arrayMaxMin(arr, mode) { 803 if(Array.isArray(arr) === false) return false; 804 805 if(!mode) mode = "max"; 806 arr.sort(function(a, b){ 807 return b - a; 808 }); 809 return (mode=="max"? arr[0] : arr[arr.length-1]) || 0; 810 } 811 812 // íµê³ ì ë리í±ì¤ ì´ë²¤í¸ ì°ê²° 813 analytics(type, banner, agent) { 814 if (!type||!banner||!agent) return; 815 816 switch (type) { 817 case "view": 818 agent.forEach(function(agt) { 819 try{ 820 if (agt=="ga" && typeof ga!="undefined") { 821 ga('send', 'event', 'ë°°ëë·°', 'NDVIEWBANNER', banner); 822 } 823 if (agt=="gtag" && typeof gtag!="undefined") { 824 gtag('event', 'NDVIEWBANNER', {'event_category': 'ë°°ëë·°', 'event_label': banner}); 825 } 826 if (agt=="gtm" && typeof dataLayer!="undefined") { 827 dataLayer.push({'event':'NDVIEWBANNER','event_category':'ë°°ëë·°', 'event_label':banner}); 828 } 829 if (agt=="wcsnaver" && typeof wcs!="undefined") { 830 wcs.event(banner, 'NDVIEWBANNER'); 831 } 832 } catch (e) {} 833 }); 834 break; 835 836 case "click": 837 agent.forEach(function(agt) { 838 try { 839 if (agt=="ga" && typeof ga!="undefined") { 840 ga('send', 'event', 'ë°°ëí´ë¦', 'NDCLICKBANNER', banner); 841 } 842 if (agt=="gtag" && typeof gtag!="undefined") { 843 gtag('event', 'NDCLICKBANNER', {'event_category': 'ë°°ëí´ë¦', 'event_label': banner}); 844 } 845 if (agt=="gtm" && typeof dataLayer!="undefined") { 846 dataLayer.push({'event':'NDCLICKBANNER','event_category':'ë°°ëí´ë¦', 'event_label':banner}); 847 } 848 if (agt=="wcsnaver" && typeof wcs!="undefined") { 849 wcs.event(banner, 'NDCLICKBANNER'); 850 } 851 } catch(e) {} 852 }); 853 break; 854 } 855 856 // Tip!! 857 // ga('send', 'event', ì¹´í ê³ ë¦¬, ì¡ì , ë¼ë²¨) // êµ¬ê¸ ì ëë²ì¤ ì ë리í
857±ì¤ íê·¸ ì¬ì©ì (analytics.js) 858 // gtag('event', event_name, {event_category, event_label}) // êµ¬ê¸ ê¸ë¡ë² ì¬ì´í¸ íê·¸ ì¬ì©ì (gtag.js) 859 // dataLayer.push({var:value}); // êµ¬ê¸ íê·¸ ê´ë¦¬ì ë°ì´í° ìì ë³ì íìì (GA4 êµ¬ì± ì¬ì©) 860 // wcs.event('ì´ë²¤í¸ì¹´í ê³ ë¦¬ëª ', 'ì´ë²¤í¸ëª ') // ë¤ì´ë² ì ë리í±ì¤ ì¬ì©ì 861 } 862}
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.