{
  "version": 3,
  "sources": ["/cdn/shop/t/40/assets/ro-search-modal-ga4.js?vTrack=202605191002"],
  "sourcesContent": ["/**\n * \u641C\u7D22\u5F39\u7A97 GA4 \u57CB\u70B9\n *\n * \u4E8B\u4EF6\u540D\u5747\u4E3A search\uFF0C\u901A\u8FC7 search_type \u533A\u5206\uFF1A\n * - normal search\uFF1A\u56DE\u8F66\u3001\u5E95\u90E8 Search \u6309\u94AE\n * - recommend search\uFF1A\u8054\u60F3\u4E0B\u62C9\u9879\n * - recommendation banner\uFF1ARecommendations \u533A\uFF08banner / \u4EA7\u54C1\u5361\u7247 / \u6587\u5B57\u94FE\uFF09\n */\nimport { ready } from \"//robodev2.myshopify.com/cdn/shop/t/40/assets/GA4-track-directive-core.js?vTrack=202605191002&v=24408178041680028611791946642\";\nimport { trackReport } from \"//robodev2.myshopify.com/cdn/shop/t/40/assets/GA4-track-directive-report.js?vTrack=202605191002&v=104115401213510859531791885457\";\n\nconst MODAL_ID = 'roSearchModal';\nconst INPUT_SELECTOR = '#roSearchContent .ro-input__input';\n\n/** \u4E0E roborock-search-modal.liquid DOM \u4E00\u4E00\u5BF9\u5E94 */\nconst RECOMMENDATION_BANNER_SELECTOR =\n  'a.ro-search-recommend, a.search-recommend-item';\nconst RECOMMEND_SEARCH_SELECTOR = 'a.search-results-item';\nconst NORMAL_SEARCH_BTN_SELECTOR = 'a.search-btn';\n\nlet initialized = false;\n\n/**\n * \u5224\u65AD\u70B9\u51FB\u662F\u5426\u843D\u5728\u67D0\u533A\u57DF\u5185\u7684\u76EE\u6807\u94FE\u63A5\u4E0A\u3002\n * root.contains \u9650\u5B9A\u8303\u56F4\uFF1Blink.matches \u53EA\u7528\u300C\u6807\u7B7E+\u7C7B\u540D\u300D\uFF0C\u907F\u514D `#\u7236\u7EA7 a.xxx` \u590D\u5408\u9009\u62E9\u5668\u5339\u914D\u4E0D\u51C6\u3002\n */\nfunction isLinkIn(root, link, selector) {\n  return !!root && !!link && root.contains(link) && link.matches(selector);\n}\n\n/**\n * \u8BFB\u53D6\u5F39\u7A97\u5185\u641C\u7D22\u8BCD\n * @param {HTMLElement} modal\n * @returns {string}\n */\nfunction getSearchTerm(modal) {\n  const input = modal.querySelector(INPUT_SELECTOR);\n  return input ? input.value.trim() : '';\n}\n\n/**\n * \u94FE\u63A5\u5C55\u793A\u6587\u6848\uFF08\u542B\u9AD8\u4EAE mark \u5185\u7684\u6587\u5B57\uFF0C\u4E0D\u542B HTML \u6807\u7B7E\uFF09\n * @param {HTMLAnchorElement} link\n * @returns {string}\n */\nfunction getLinkText(link) {\n  return (link.getAttribute('aria-label') || link.textContent || '').trim();\n}\n\n/**\n * \u4E0A\u62A5 search \u4E8B\u4EF6\n * @param {string} searchType\n * @param {string} searchTerm\n * @param {Record<string, string>} [extra]\n */\nfunction pushSearchEvent(searchType, searchTerm, extra = {}) {\n  trackReport({\n    event_name: 'search',\n    event_parameters: Object.assign(\n      {\n        search_type: searchType,\n        search_term: searchTerm,\n      },\n      extra\n    ),\n  });\n}\n\n/**\n * \u7ED1\u5B9A\u5F39\u7A97\u5185\u5168\u90E8\u641C\u7D22\u76F8\u5173\u57CB\u70B9\uFF08\u4EC5\u521D\u59CB\u5316\u4E00\u6B21\uFF09\n */\nfunction initSearchModalGa4() {\n  if (initialized) return;\n\n  const modal = document.getElementById(MODAL_ID);\n  if (!modal) return;\n\n  const input = modal.querySelector(INPUT_SELECTOR);\n  if (!input) return;\n\n  initialized = true;\n\n  const recommendRoot = modal.querySelector('#SearchRecommend');\n  const resultsRoot = modal.querySelector('#SearchResults');\n\n  // normal search\uFF1A\u56DE\u8F66\uFF08\u975E\u7A7A\uFF09\uFF0C\u4E0D\u963B\u6B62\u9ED8\u8BA4\u8DF3\u8F6C\n  input.addEventListener('keydown', function (event) {\n    if (event.key !== 'Enter') return;\n    const searchTerm = getSearchTerm(modal);\n    if (!searchTerm) return;\n    pushSearchEvent('normal search', searchTerm);\n  });\n\n  // \u6355\u83B7\u9636\u6BB5\uFF1A\u5728 <a> \u8DF3\u8F6C\u524D\u5B8C\u6210\u4E0A\u62A5\n  modal.addEventListener(\n    'click',\n    function (event) {\n      const link = event.target.closest('a');\n      if (!link) return;\n\n      const searchTerm = getSearchTerm(modal);\n      // Recommendations \u533A\uFF1Abanner / \u4EA7\u54C1\u5361\u7247 / \u6587\u5B57\u94FE\n      if (isLinkIn(recommendRoot, link, RECOMMENDATION_BANNER_SELECTOR)) {\n        pushSearchEvent('recommendation banner', searchTerm, {\n          product_name: link.href || '',\n        });\n        return;\n      }\n\n      // \u8054\u60F3\u4E0B\u62C9\u9879\uFF1Asearch_term \u4E3A\u88AB\u70B9\u51FB\u6761\u76EE\u7684\u5B8C\u6574\u6587\u6848\uFF0C\u975E\u8F93\u5165\u6846\u5173\u952E\u8BCD\n      if (isLinkIn(resultsRoot, link, RECOMMEND_SEARCH_SELECTOR)) {\n        pushSearchEvent('recommend search', getLinkText(link));\n        return;\n      }\n\n      // \u5E95\u90E8 Search \u6309\u94AE\n      if (isLinkIn(resultsRoot, link, NORMAL_SEARCH_BTN_SELECTOR)) {\n        if (!searchTerm) return;\n        pushSearchEvent('normal search', searchTerm);\n      }\n    },\n    true\n  );\n}\n\nready(initSearchModalGa4);\n"],
  "mappings": "AAQA,OAAS,UAAa,gIACtB,OAAS,gBAAmB,mIAE5B,MAAM,SAAW,gBACX,eAAiB,oCAGjB,+BACJ,iDACI,0BAA4B,wBAC5B,2BAA6B,eAEnC,IAAI,YAAc,GAMlB,SAAS,SAAS,KAAM,KAAM,SAAU,CACtC,MAAO,CAAC,CAAC,MAAQ,CAAC,CAAC,MAAQ,KAAK,SAAS,IAAI,GAAK,KAAK,QAAQ,QAAQ,CACzE,CAOA,SAAS,cAAc,MAAO,CAC5B,MAAM,MAAQ,MAAM,cAAc,cAAc,EAChD,OAAO,MAAQ,MAAM,MAAM,KAAK,EAAI,EACtC,CAOA,SAAS,YAAY,KAAM,CACzB,OAAQ,KAAK,aAAa,YAAY,GAAK,KAAK,aAAe,IAAI,KAAK,CAC1E,CAQA,SAAS,gBAAgB,WAAY,WAAY,MAAQ,CAAC,EAAG,CAC3D,YAAY,CACV,WAAY,SACZ,iBAAkB,OAAO,OACvB,CACE,YAAa,WACb,YAAa,UACf,EACA,KACF,CACF,CAAC,CACH,CAKA,SAAS,oBAAqB,CAC5B,GAAI,YAAa,OAEjB,MAAM,MAAQ,SAAS,eAAe,QAAQ,EAC9C,GAAI,CAAC,MAAO,OAEZ,MAAM,MAAQ,MAAM,cAAc,cAAc,EAChD,GAAI,CAAC,MAAO,OAEZ,YAAc,GAEd,MAAM,cAAgB,MAAM,cAAc,kBAAkB,EACtD,YAAc,MAAM,cAAc,gBAAgB,EAGxD,MAAM,iBAAiB,UAAW,SAAU,MAAO,CACjD,GAAI,MAAM,MAAQ,QAAS,OAC3B,MAAM,WAAa,cAAc,KAAK,EACjC,YACL,gBAAgB,gBAAiB,UAAU,CAC7C,CAAC,EAGD,MAAM,iBACJ,QACA,SAAU,MAAO,CACf,MAAM,KAAO,MAAM,OAAO,QAAQ,GAAG,EACrC,GAAI,CAAC,KAAM,OAEX,MAAM,WAAa,cAAc,KAAK,EAEtC,GAAI,SAAS,cAAe,KAAM,8BAA8B,EAAG,CACjE,gBAAgB,wBAAyB,WAAY,CACnD,aAAc,KAAK,MAAQ,EAC7B,CAAC,EACD,MACF,CAGA,GAAI,SAAS,YAAa,KAAM,yBAAyB,EAAG,CAC1D,gBAAgB,mBAAoB,YAAY,IAAI,CAAC,EACrD,MACF,CAGA,GAAI,SAAS,YAAa,KAAM,0BAA0B,EAAG,CAC3D,GAAI,CAAC,WAAY,OACjB,gBAAgB,gBAAiB,UAAU,CAC7C,CACF,EACA,EACF,CACF,CAEA,MAAM,kBAAkB",
  "names": []
}
