1//åç¹çå ¬å ±å½æ°æä»¶ 2 3// ä¸æäº§åå类产åå¯¼èª åç¹æ è¯åæ¢ 4const product_index_change = { 5 "index_navigation_tws":"ìì 무ì ì리ì¦", 6 "index_navigation_sports":"ì¤í¬ì¸ ì리ì¦", 7 "index_navigation_swim":"ìì ì리ì¦", 8 "index_navigation_comm":"커뮤ëì¼ì´ì ì리ì¦", 9 "index_navigation_accessory":"ì¡ì¸ì리", 10 "product_collection_all":"ALL", 11 "index_best":"ì¸ê¸°", 12}; 13 14//产åå¡çæ§çitem_list_idè½¬æ¢ææ°ç 15const product_list_id_change = { 16 "product_collection_all":"ALL", 17 "product_collection_tws":"ìì 무ì ì리ì¦", 18 "product_collection_sports":"ì¤í¬ì¸ ì리ì¦", 19 "product_collection_swim":"ìì ì리ì¦", 20 "product_collection_comm":"커뮤ëì¼ì´ì ì리ì¦", 21 "product_collection_accessory":"ì¡ì¸ì리", 22}; 23 24// ç»å½ï¼æç页é¢ï¼è´ç©è½¦ï¼logo åç¹æ è¯åæ¢ 25const login_cart_sign_change = { 26 'LOG-IN' : 'login', 27 'MYPAGE' : 'my_page', 28 'CART' : 'shop_cart', 29 'logo' : 'logo', 30} 31 32function validateEmail(email) { 33 const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; 34 return regex.test(email); 35} 36 37//view_item_listäºä»¶ä¸éè¿åç±»åè·åitem_list_id ; item_list_name为å符串ï¼change_arr为æ°ç» 38function get_item_list_id(item_list_name,change_arr){ 39 let list_id = ''; 40 $.each(change_arr, function(index, value) { 41 if(value === item_list_name){ 42 list_id = index; 43 return index; 44 } 45 }); 46 return list_id; 47} 48 49function normalizeGa4TrackingProduct(row, fallbackCurrency){ 50 if (!row) return null; 51 const currency = fallbackCurrency || 'KRW'; 52 return { 53 item_id: row.item_id || '', 54 item_name: row.item_name || '', 55 item_variant: row.item_variant || null, 56 item_category: row.item_category || null, 57 item_category2: row.item_category2 || null, 58 item_category3: row.item_category3 || null, 59 item_brand: row.item_brand || 'SHOKZ', 60 discount: row.discount != null ? row.discount : 0, 61 price: row.price != null ? Number(row.price) : 0, 62 quantity: row.quantity != null ? row.quantity : 1, 63 currency: row.currency || currency, 64 }; 65} 66 67function findGa4TrackingProductByItemId(itemId, fallbackCurrency){ 68 const id = String(itemId || ''); 69 if (!id) return null; 70 71 const initData = window.ga4InitData || []; 72 const byAttributeId = initData.find(function(it){ 73 return String(it.pro_attribute_id || '') === id; 74 }); 75 if (byAttributeId) { 76 return normalizeGa4TrackingProduct(byAttributeId, fallbackCurrency); 77 } 78 79 const byItId = initData.find(function(it){ 80 return String(it.it_id || '') === id; 81 }); 82 if (byItId) { 83 return normalizeGa4TrackingProduct(byItId, fallbackCurrency); 84 } 85 86 const skuMap = window.ga4_sku_product_map || {}; 87 const itIdSkuMap = window.ga4_it_id_sku_map || {}; 88 89 if (skuMap[id]) { 90 return normalizeGa4TrackingProduct(skuMap[id], fallbackCurrency); 91 } 92 93 const mappedSku = itIdSkuMap[id]; 94 if (mappedSku && skuMap[mappedSku]) { 95 return normalizeGa4TrackingProduct(skuMap[mappedSku], fallbackCurrency); 96 } 97 98 return null; 99} 100 101/** 102 * æ ¹æ®ç°ä»·ä¸åä»·è®¡ç®ææ£ç¾åæ¯ï¼åæè¿çæ´æ°åæ´ã 103 * @param {string|number} price å½åå®ä»·ã 104 * @param {string|number} originalPrice åå§å®ä»·ã 105 * @returns {string} ææ£ç¾åæ¯åç¬¦ä¸²ï¼æ ææ£æ¶è¿å `'0'`ã 106 */ 107function get_discount(price, originalPrice) { 108 const p = parseFloat(price) || 0; 109 const op = parseFloat(originalPrice) || 0; 110 if (op === 0 || p >= op) { 111 return '0'; 112 } 113 return Math.round(((op - p) / op) * 100).toString(); 114} 115 116//è·åurlæåçä¸ä¸ªè·¯å¾æ®µ 117function getLastId(url){ 118 if (typeof url !== 'string') return null; // éåç¬¦ä¸²ç´æ¥è¿å 119 const match = url.match(/\/([^/?]+)(?:\?|$)/); 120 const lastPathPart = match ? match[1] : null; 121 return lastPathPart 122} 123 124// è·ååä¸ªææ¾å¨ä¿¡æ¯ç彿° è¿æ¯è°·æææ¾å¨çæ°æ® 125function getPlayerInfo(player) { 126 if (!player) return null; 127 try { 128 const data = player.getVideoData(); 129 const duration = player.getDuration(); 130 const current = player.getCurrentTime(); 131 const percent = ((current / duration) * 100).toFixed(1); 132 return { 133 "title": data.title, 134 "duration": duration, 135 "current": current, 136 "percent": percent + '%' 137 }; 138 } catch (error) { 139 return null; 140 } 141} 142function set_player_interval(is_player,player,video_url,fail_count){ 143 // æ¯1ç§è·å䏿¬¡ä¿¡æ¯ 144 let play1_interval = setInterval(() => { 145 const info = getPlayerInfo(player); 146 if(fail_count>=5){ 147 clearInterval(play1_interval); 148 } 149 if(info.duration == 0){ 150 fail_count++; 151 }else{ 152 if(is_player === true){ 153 clearInterval(play1_interval); 154 is_player = false;
155 return; 156 } 157 is_player = true; 158 159 ga4_listing_video_start(info.title,video_url,info.percent,info.current,info.duration); 160 } 161 }, 1000); 162} 163 164//夿å ç´ æ¯å¦å¨è§å¾ ç±äºä¸åçgitå·²ç»è¿ç§»äºï¼ä¸ºäºé¿å å²çªï¼å½æ°åé¢å äºä¸ªnew 165$.fn.isOnScreenNew = function() { 166 var element = this.get(0); 167 if(element){ 168 var bounds = element.getBoundingClientRect(); 169 return ( 170 bounds.top <= window.innerHeight && 171 bounds.top >= 0 && 172 bounds.left >= 0 && 173 bounds.bottom >= 0 && 174 bounds.bottom <= window.innerHeight && 175 bounds.right >= 0 176 ); 177 } 178}; 179$.fn.isOnScreenBottomNew = function() { 180 var element = this.get(0); 181 if(element){ 182 var bounds = element.getBoundingClientRect(); 183 return ( 184 bounds.bottom >= 0 && 185 bounds.bottom <= window.innerHeight && 186 bounds.right <= window.innerWidth 187 ); 188 } 189}; 190 191/** 192 * å¯è§èå´å 触å éç¨å½æ° 193 * @param {string|number} selector 为idéæ©å¨ 194 * @param {function} ga4_event 第äºä¸ªåæ°ä¸ºåç¹å 容彿°ã 195 * æ¯å¦banneråçä¸ç§è§¦åã 196 */ 197function commonHandleViewportCheck(selector,ga4_event){ 198 const selectorDiv = document.getElementById(selector); 199 let ga4_timer = null; 200 let isTriggered = false; 201 function handleViewportCheck() { 202 if ( $("#"+selector).isOnScreenNew() ) { 203 if (!ga4_timer && !isTriggered) { 204 ga4_timer = setTimeout(() => { 205 selectorDiv.classList.add('active'); 206 ga4_event; 207 isTriggered = true; 208 }, 1000); 209 } 210 } else { 211 if (ga4_timer) { 212 clearTimeout(ga4_timer); 213 ga4_timer = null; 214 } 215 } 216 } 217 // æ·»å æ»å¨äºä»¶çå¬ 218 window.addEventListener('scroll', handleViewportCheck); 219 // åå§æ£æ¥ 220 handleViewportCheck(); 221} 222 223/** 224 * js模ææå¼a龿¥æ°é¡µé¢ 225 * js 黿¢a龿¥ç«å³è·³è½¬ï¼å¤çè¿ååè°ç¨æ¤å½æ° 226 * * 227 */ 228function openInNewTab(url) { 229 // 1. å建ä¸ä¸ªéèç <a> æ ç¾ 230 const link = document.createElement('a'); 231 // 2. 设置跳转å°å 232 link.href = url; 233 // 3. å ³é®ï¼è®¾ç½® target 为 _blankï¼è¡¨ç¤ºå¨æ°çªå£/æ ç¾é¡µæå¼ 234 link.target = '_blank'; 235 // 4. å¯éï¼ä¸ºäºå®å ¨ï¼é²æ¢æ°é¡µé¢éè¿ window.opener 篡æ¹å页é¢ï¼ï¼å»ºè®®å ä¸ rel="noopener noreferrer" 236 link.rel = 'noopener noreferrer'; 237 // 5. å°æ ç¾æ·»å å° DOM ä¸ï¼è½ç¶ä¸å¯è§ï¼ä½æäºæµè§å¨è¦æ±å¿ é¡»å¨ DOM 䏿è½è§¦åï¼ 238 document.body.appendChild(link); 239 // 6. 模æç¹å»äºä»¶ 240 link.click(); 241 // 7. æ¸ çï¼ç§»é¤æ ç¾ 242 document.body.removeChild(link); 243} 244 245// æ£æ¥urlåæ°æ¯å¦åå¨ 246function hasUrlParam(param) { 247 const urlParams = new URLSearchParams(window.location.search); 248 return urlParams.has(param); 249} 250 251 252function isMobile(){ 253 try { return window.matchMedia && window.matchMedia('(max-width: 768px)').matches; } catch(e){ return false; } 254} 255 256 257function ga4_login_select_content(button_name){ 258 window.dataLayer.push({ "event_parameters": null }); 259 window.dataLayer.push({ 260 "event":"ga4Event", 261 "event_name":"select_content", 262 "event_parameters":{ 263 "content_type":"User Module", 264 "content_name":"Sign In", 265 "button_name":button_name 266 } 267 }); 268} 269 270//æ§çkakaoç»å½æé®ä½¿ç¨æ¤äºä»¶ 271function ga4_login_select_content_kakao_old(){ 272 window.dataLayer.push({ "event_parameters": null }); 273 window.dataLayer.push({ 274 "event":"ga4Event", 275 "event_name":"select_content", 276 "event_parameters":{ 277 "module_name":"User Module", 278 "content_name":"ì¹´ì¹´ì¤ ë¡ê·¸ì¸", 279 "button_name":"ì¹´ì¹´ì¤ ë¡ê·¸ì¸" 280 } 281 }); 282} 283 284function ga4_login_login(){ 285 window.dataLayer.push({ "event_parameters": null }); 286 window.dataLayer.push({ 287 "event":"ga4Event", 288 "event_name":"login", 289 }); 290} 291 292function ga4_login_sign_up(){ 293 window.dataLayer.push({ "event_parameters": null }); 294 window.dataLayer.push({ 295 "event":"ga4Event", 296 "event_name":"sign_up", 297 }); 298} 299 300 301//ç»å½ï¼æ³¨å跨页é¢äºä»¶ 302function ga4_login_domload_function(){ 303 const login_source=localStorage.getItem('login_source')||'Official website'; 304 if(g5_is_member){ 305 if(localStorage.getItem('googleSignUpEventSent')){ 306 ga4_login_sign_up(); 307 localStorage.removeItem('googleSignUpEventSent'); 308 } 309 if(!localStorage.getItem('googleLoginEventSent')){ 310 ga4_login_login(); 311 localStorage.setItem('googleLoginEventSent', g5_mb_no); 312 } 313 } 314 if(!g5_is_member&&localStorage.getItem('googleLoginEventSent')){ 315 window.dataLayer.push({ 316 "event":"ga4Event", 317 "event_name":"logout", 318 "event_parameters":{ 319 "login_source":login_source 320 } 321 }); 322 // console.log('[GTM EVENT] User is log out') 323 localStorage.removeItem('googleLoginEventSent') 324 } 325 326 //Mç«¯ä½¿ç¨ PC端åå¨å ¶ä»å°æ¹ 327 $("#mb_login .sns-wrap").click(function(e){ 328 if($(this).hasClass('login-a')){ 329 ga4_login_select_content_kakao_old(); 330 }else{ 331 ga4_login_select_content("Kakao Signin"); 332 } 333 334 })
335 $("#mb_login .ga4_btn_confirm").click(function(e){ 336 const button = $(this).data('tracking-button-name'); 337 ga4_login_select_content(button); 338 339 }) 340} 341 342 343/** 344 * æäº¤è®¢å æå äºä»¶ æ°æ®è¦å卿µè§å¨ç¼åä¸ï¼å¦å跳转页é¢å°±æ²¡æäº 跨页é¢äºä»¶ 345 * */ 346function ga4_checkout_generateorder_event(status,error_msg = ''){ 347 if(localStorage.getItem("ga4_checkout_form_commit")){ 348 const ga4_checkout_coupon = localStorage.getItem("ga4_checkout_coupon"); 349 const ga4_checkout_coupon_value = localStorage.getItem("ga4_checkout_coupon_value"); 350 const ga4_checkout_payment_type = localStorage.getItem("ga4_checkout_payment_type"); 351 const ga4_checkout_shipping = localStorage.getItem("ga4_checkout_shipping"); 352 const ga4_checkout_point = localStorage.getItem("ga4_checkout_point"); 353 const ga4_checkout_total_value = localStorage.getItem("ga4_checkout_total_value"); 354 const ga4_checkout_product = JSON.parse(localStorage.getItem("ga4_checkout_product")); 355 const ga4_checkout_order_status = localStorage.getItem("ga4_checkout_order_status"); 356 if(!status && !ga4_checkout_order_status){ 357 return; 358 }else if(!status && ga4_checkout_order_status){ 359 status = ga4_checkout_order_status; 360 } 361 362 window.dataLayer.push({ "event_parameters": null }); 363 window.dataLayer.push({ 364 "event":"ga4Event", 365 "event_name":"order_button", 366 "event_parameters":{ 367 "value":Number(ga4_checkout_total_value), 368 "coupon":ga4_checkout_coupon, //伿 å·åç§° 369 "coupon_value":ga4_checkout_coupon_value, //伿 å·éé¢ 370 "payment_type":ga4_checkout_payment_type, 371 "shipping":ga4_checkout_shipping, //è¿è´¹ 372 "status":status, 373 "error_type":error_msg, 374 "point":ga4_checkout_point, // pointï¼è®¢åæ¶èç积åï¼ 375 "item_list_id":"Checkout", 376 "item_list_name":"Checkout", 377 "items": ga4_checkout_product 378 } 379 }); 380 381 localStorage.removeItem('ga4_checkout_form_commit'); 382 localStorage.removeItem('ga4_checkout_coupon'); 383 localStorage.removeItem('ga4_checkout_coupon_value'); 384 localStorage.removeItem('ga4_checkout_shipping'); 385 localStorage.removeItem('ga4_checkout_point'); 386 localStorage.removeItem('ga4_checkout_order_status'); 387 } 388 389} 390 391function check_checkout_button_event(){ 392 //é对å¼å¸¸æ åµï¼æè å ¶ä»æä½æ²¡æè¿å,å¨è§¦å䏿¬¡äºä»¶ ä¸åäºä»¶ 393 if(localStorage.getItem("ga4_checkout_form_commit") && localStorage.getItem("ga4_checkout_order_status")){ 394 setTimeout(() => { 395 ga4_checkout_generateorder_event("",''); 396 }, 1000); 397 398 } 399} 400 401//ææç跨页é¢äºä»¶ï¼ç»ä¸åå¨commonéé¢ 402document.addEventListener('DOMContentLoaded', () => { 403 //éé¢æè·¨é¡µé¢äºä»¶ ç»å½æååæ³¨åæååäºä»¶ 以åä¸è®¢åäºä»¶ 404 ga4_login_domload_function(); 405 check_checkout_button_event(); 406}); 407 408 409 410 411 412 413 414
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.