var ecblib = ecblib || {}; ecblib.staffstart = ecblib.staffstart || {}; ecblib.staffstart.analytics = ecblib.staffstart.analytics || {}; (function () { 'use strict'; var _analytics = ecblib.staffstart.analytics; _analytics.MERCHANT_ID = '00e75f81f467d802b75f2db40f7ccc8d'; var ADDCART_SELECTOR = '.js-animation-add-cart, .js-enhanced-ecommerce-add-cart, .js-enhanced-ecommerce-add-cart-detail, .btn_cart_l_, .cartbox_ .large_button_'; var AJAXCART_SCOPE = ''; var AJAXCART_SELECTOR = ''; var VARIATION_CART_BUTTON_ID_PREFIX = 'variation_cart_button_'; var CONVERSION_SELECTOR = '#js-staffstart-conversion-detail'; var PV_CONTENT_TYPE = { cordinate: '1', article: '2', staffreview: '10' }; document.addEventListener('DOMContentLoaded', function () { var CONTNET_ID = { cordinate: (typeof cid === 'undefined' ? '' : cid), article: (typeof article_id === 'undefined' ? '' : article_id), staff: (typeof user_id === 'undefined' ? '' : user_id), staffreview: (typeof review_id === 'undefined' ? '' : review_id) }; var SESSION = ''; var UID = ''; /* PV */ function CreatePV(content_type, content_id) { var ss_pv_info = { content_type: content_type, content_id: content_id, user_id: UID, session_id: SESSION, }; staffStart.pv.sendTrackingRequest(_analytics.MERCHANT_ID, ss_pv_info); } /* cart - AjaxCart */ function SendAddCartAjax() { if (AJAXCART_SCOPE === '') return; var qtyRegex = new RegExp(/^[0-9]+$/); if (AJAXCART_SCOPE === 'document') { document.addEventListener('click', function (e) { if (!e.target || !PolyfillMatches(e.target, AJAXCART_SELECTOR)) { return; } SendAddCart(e.target, qtyRegex); }); } else { var ajaxCart = document.querySelectorAll(AJAXCART_SCOPE); Array.prototype.forEach.call(ajaxCart, function (ajaxCartScope) { ajaxCartScope.addEventListener('click', function (e) { if (!e.target || !PolyfillMatches(e.target, AJAXCART_SELECTOR)) { return; } SendAddCart(e.target, qtyRegex); }); }); } } /* cart - CartButton */ function SendAddCartSimple() { var cartElements = document.querySelectorAll(ADDCART_SELECTOR); if (cartElements.length === 0) return; var qtyRegex = new RegExp(/^[0-9]+$/); var excludeSelector = (function () { if (AJAXCART_SCOPE === '') return null; if (AJAXCART_SCOPE === 'document') return AJAXCART_SELECTOR; return AJAXCART_SCOPE + ' ' + AJAXCART_SELECTOR; })(); Array.prototype.forEach.call(cartElements, function (elm) { if (excludeSelector && PolyfillMatches(elm, excludeSelector)) return; /* already bind */ if (IsExcludeSendAddCart(elm)) return; elm.addEventListener('click', function (e) { SendAddCart(e.target, qtyRegex); }); }); }; function IsExcludeSendAddCart(elm) { var target_id = elm.id.toLowerCase(); return target_id.indexOf(VARIATION_CART_BUTTON_ID_PREFIX) === 0; }; function SendAddCart(elm, qtyRegex) { if (elm.tagName.toLowerCase() === 'a') { SendAddCartLink(elm, qtyRegex); return; } var link = PolyfillClosest(elm, 'a'); if (link) { SendAddCartLink(link, qtyRegex); return; } SendAddCartForm(elm, qtyRegex); } function SendAddCartLink(elm, qtyRegex) { if (!elm || !elm.href) return; var query = elm.href.split('?', 2); if (query.length === 1) return; var params = GetQueryParams(query[1], ['goods', 'qty']); staffStart.cart.sendTrackingRequest(_analytics.MERCHANT_ID, { product_code: params.goods, count: qtyRegex.test(params.qty) ? params.qty : '1' }); } function SendAddCartForm(elm, qtyRegex) { var form = PolyfillClosest(elm, 'form'); if (!form) return; var goods = form.querySelectorAll('input[name=goods]'); if (goods.length === 0) goods = form.querySelectorAll('select[name=goods]'); if (goods.length !== 1) return; var qty = form.querySelectorAll('input[name=qty]'); staffStart.cart.sendTrackingRequest(_analytics.MERCHANT_ID, { product_code: goods[0].value, count: (qty[0] && qtyRegex.test(qty[0].value) ? qty[0].value : '1') }); } /* cv */ function CreateConversion() { var detailJson = document.querySelector(CONVERSION_SELECTOR); if (!detailJson) return; detailJson = JSON.parse(detailJson.textContent); if (!detailJson || Array.isArray(detailJson.details) === false) return; var product_info = ''; detailJson.details.forEach(function (detail) { if (detail.goods === '') return; if (product_info) product_info += ','; product_info += detail.goods + ':' + detail.price + ':' + detail.qty; }); var ss_cv_info = [{ order_id: detailJson.order_id, product_info: product_info, user_id: UID, session_id: SESSION, }]; staffStart.cv.sendTrackingRequest(_analytics.MERCHANT_ID, ss_cv_info); } /* sns */ function SendSnsPV() { var ss_external = { user_id: UID, session_id: SESSION, }; staffStart.external.sendTrackingRequest(_analytics.MERCHANT_ID, ss_external); } /* polyfill */ function PolyfillClosest(elm, selector) { if (Element.prototype.closest) { return elm.closest(selector); } var selectorUtil = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; do { if (selectorUtil.call(elm, selector)) return elm; elm = elm.parentElement || elm.parentNode; } while (elm !== null && elm.nodeType === 1); return null; } function PolyfillMatches(elm, selector) { if (Element.prototype.matches) { return elm.matches(selector); } var selectorUtil = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; if (selectorUtil.call(elm, selector)) { return true; } else { return false; } } function GetQueryParams(query, keys) { var values = {}; if (typeof URLSearchParams !== 'undefined') { var param = new URLSearchParams(query); keys.forEach(function (key) { values[key] = param.has(key) ? param.get(key) : ''; }); } else { var regStr = keys.map(function (key) { return key + '=[^&]+'; }).join('|'); var regex = new RegExp(regStr, 'gi'); var params = query.match(regex); params.forEach(function (item) { var keyvalue = item.split('='); values[keyvalue[0]] = keyvalue.length > 1 ? keyvalue[1] : ''; }); keys.forEach(function (key) { if (values[key] === undefined) values[key] = ''; }); } return values; } /* exec */ SendSnsPV(); CreateConversion(); SendAddCartAjax(); SendAddCartSimple(); if (CONTNET_ID.cordinate) CreatePV(PV_CONTENT_TYPE.cordinate, CONTNET_ID.cordinate); if (CONTNET_ID.article) CreatePV(PV_CONTENT_TYPE.article, CONTNET_ID.article); if (CONTNET_ID.staffreview) CreatePV(PV_CONTENT_TYPE.staffreview, CONTNET_ID.staffreview); }); }());