1 2var ecblib = ecblib || {}; 3ecblib.staffstart = ecblib.staffstart || {}; 4ecblib.staffstart.analytics = ecblib.staffstart.analytics || {}; 5 6(function () { 7 'use strict'; 8 var _analytics = ecblib.staffstart.analytics; 9 _analytics.MERCHANT_ID = '00e75f81f467d802b75f2db40f7ccc8d'; 10 11 var ADDCART_SELECTOR = '.js-animation-add-cart, .js-enhanced-ecommerce-add-cart, .js-enhanced-ecommerce-add-cart-detail, .btn_cart_l_, .cartbox_ .large_button_'; 12 var AJAXCART_SCOPE = ''; 13 var AJAXCART_SELECTOR = ''; 14 var VARIATION_CART_BUTTON_ID_PREFIX = 'variation_cart_button_'; 15 var CONVERSION_SELECTOR = '#js-staffstart-conversion-detail'; 16 var PV_CONTENT_TYPE = { 17 cordinate: '1', 18 article: '2', 19 staffreview: '10' 20 }; 21 22 document.addEventListener('DOMContentLoaded', function () { 23 const queryParams = {}; 24 let queryString = window.location.search; 25 if (queryString) { 26 queryString = queryString.substring(1); 27 queryString.split('&').forEach(function (i) { 28 const pair = i.split('='); 29 const key = decodeURIComponent(pair[0]); 30 const val = decodeURIComponent(pair[1]); 31 queryParams[key] = val; 32 }); 33 } 34 var CONTNET_ID = { 35 cordinate: queryParams.ss_cid, 36 article: queryParams.ss_article_id, 37 staff: queryParams.ss_user_id, 38 staffreview: (typeof review_id === 'undefined' ? '' : review_id) 39 }; 40 41 var SESSION = ''; 42 var UID = ''; 43 44 /* PV */ 45 function CreatePV(content_type, content_id) { 46 var ss_pv_info = { 47 content_type: content_type, 48 content_id: content_id, 49 user_id: UID, 50 session_id: SESSION, 51 }; 52 staffStart.pv.sendTrackingRequest(_analytics.MERCHANT_ID, ss_pv_info); 53 } 54 55 /* cart - AjaxCart */ 56 function SendAddCartAjax() { 57 if (AJAXCART_SCOPE === '') return; 58 var qtyRegex = new RegExp(/^[0-9]+$/); 59 60 if (AJAXCART_SCOPE === 'document') { 61 document.addEventListener('click', function (e) { 62 if (!e.target || !PolyfillMatches(e.target, AJAXCART_SELECTOR)) { 63 return; 64 } 65 66 SendAddCart(e.target, qtyRegex); 67 }); 68 } else { 69 var ajaxCart = document.querySelectorAll(AJAXCART_SCOPE); 70 Array.prototype.forEach.call(ajaxCart, function (ajaxCartScope) { 71 ajaxCartScope.addEventListener('click', function (e) { 72 if (!e.target || !PolyfillMatches(e.target, AJAXCART_SELECTOR)) { 73 return; 74 } 75 76 SendAddCart(e.target, qtyRegex); 77 }); 78 }); 79 } 80 } 81 82 /* cart - CartButton */ 83 function SendAddCartSimple() { 84 var cartElements = document.querySelectorAll(ADDCART_SELECTOR); 85 if (cartElements.length === 0) return; 86 var qtyRegex = new RegExp(/^[0-9]+$/); 87 88 var excludeSelector = (function () { 89 if (AJAXCART_SCOPE === '') return null; 90 if (AJAXCART_SCOPE === 'document') return AJAXCART_SELECTOR; 91 return AJAXCART_SCOPE + ' ' + AJAXCART_SELECTOR; 92 })(); 93 94 Array.prototype.forEach.call(cartElements, function (elm) { 95 if (excludeSelector && PolyfillMatches(elm, excludeSelector)) return; /* already bind */ 96 if (IsExcludeSendAddCart(elm)) return; 97 98 elm.addEventListener('click', function (e) { 99 SendAddCart(e.target, qtyRegex); 100 }); 101 }); 102 }; 103 104 function IsExcludeSendAddCart(elm) { 105 var target_id = elm.id.toLowerCase(); 106 return target_id.indexOf(VARIATION_CART_BUTTON_ID_PREFIX) === 0; 107 }; 108 109 function SendAddCart(elm, qtyRegex) { 110 if (elm.tagName.toLowerCase() === 'a') { 111 SendAddCartLink(elm, qtyRegex); 112 return; 113 } 114 115 var link = PolyfillClosest(elm, 'a'); 116 if (link) { 117 SendAddCartLink(link, qtyRegex); 118 return; 119 } 120 121 SendAddCartForm(elm, qtyRegex); 122 } 123 124 function SendAddCartLink(elm, qtyRegex) { 125 if (!elm || !elm.href) return; 126 127 var query = elm.href.split('?', 2); 128 if (query.length === 1) return; 129 130 var params = GetQueryParams(query[1], ['goods', 'qty']); 131 staffStart.cart.sendTrackingRequest(_analytics.MERCHANT_ID, { product_code: params.goods, count: qtyRegex.test(params.qty) ? params.qty : '1' }); 132 } 133 134 function SendAddCartForm(elm, qtyRegex) { 135 var form = PolyfillClosest(elm, 'form'); 136 if (!form) return; 137 138 var goods = form.querySelectorAll('input[name=goods]'); 139 if (goods.length === 0) goods = form.querySelectorAll('select[name=goods]'); 140 if (goods.length !== 1) return; 141 142 var qty = form.querySelectorAll('input[name=qty]'); 143 staffStart.cart.sendTrackingRequest(_analytics.MERCHANT_ID, { product_code: goods[0].value, count: (qty[0] && qtyRegex.test(qty[0].value) ? qty[0].value : '1') }); 144 } 145 146 /* cv */ 147 function CreateConversion() { 148 var detailJson = document.querySelector(CONVERSION_SELECTOR); 149 if (!detailJson) return; 150 151 detailJson = JSON.parse(detailJson.textContent); 152 if (!detailJson || Array.isArray(detailJson.details) === false) return; 153 154 var product_info = '';
155 detailJson.details.forEach(function (detail) { 156 if (detail.goods === '') return; 157 if (product_info) product_info += ','; 158 product_info += detail.goods + ':' + detail.price + ':' + detail.qty; 159 }); 160 161 var ss_cv_info = [{ 162 order_id: detailJson.order_id, 163 product_info: product_info, 164 user_id: UID, 165 session_id: SESSION, 166 }]; 167 staffStart.cv.sendTrackingRequest(_analytics.MERCHANT_ID, ss_cv_info); 168 } 169 170 /* sns */ 171 function SendSnsPV() { 172 var ss_external = { 173 user_id: UID, 174 session_id: SESSION, 175 }; 176 staffStart.external.sendTrackingRequest(_analytics.MERCHANT_ID, ss_external); 177 } 178 179 /* polyfill */ 180 function PolyfillClosest(elm, selector) { 181 if (Element.prototype.closest) { 182 return elm.closest(selector); 183 } 184 185 var selectorUtil = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; 186 do { 187 if (selectorUtil.call(elm, selector)) return elm; 188 elm = elm.parentElement || elm.parentNode; 189 } while (elm !== null && elm.nodeType === 1); 190 return null; 191 } 192 193 function PolyfillMatches(elm, selector) { 194 if (Element.prototype.matches) { 195 return elm.matches(selector); 196 } 197 198 var selectorUtil = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; 199 if (selectorUtil.call(elm, selector)) { 200 return true; 201 } else { 202 return false; 203 } 204 } 205 206 function GetQueryParams(query, keys) { 207 var values = {}; 208 209 if (typeof URLSearchParams !== 'undefined') { 210 var param = new URLSearchParams(query); 211 keys.forEach(function (key) { 212 values[key] = param.has(key) ? param.get(key) : ''; 213 }); 214 } else { 215 var regStr = keys.map(function (key) { return key + '=[^&]+'; }).join('|'); 216 var regex = new RegExp(regStr, 'gi'); 217 var params = query.match(regex); 218 params.forEach(function (item) { 219 var keyvalue = item.split('='); 220 values[keyvalue[0]] = keyvalue.length > 1 ? keyvalue[1] : ''; 221 }); 222 keys.forEach(function (key) { 223 if (values[key] === undefined) values[key] = ''; 224 }); 225 } 226 227 return values; 228 } 229 230 /* exec */ 231 SendSnsPV(); 232 CreateConversion(); 233 SendAddCartAjax(); 234 SendAddCartSimple(); 235 236 if (CONTNET_ID.cordinate) CreatePV(PV_CONTENT_TYPE.cordinate, CONTNET_ID.cordinate); 237 if (CONTNET_ID.article) CreatePV(PV_CONTENT_TYPE.article, CONTNET_ID.article); 238 if (CONTNET_ID.staffreview) CreatePV(PV_CONTENT_TYPE.staffreview, CONTNET_ID.staffreview); 239 }); 240}());
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.