PageSourceSearch

https://www.wildoakboutique.com/cdn/shop/t/649/assets/worker-analytics.js?v=148903149625326106681788891197

js wildoakboutique.com collected 2026-09-24 09:51:47 UTC 22,712 bytes, 2 lines download raw bytes

1(()=>{const sessionStorageKey="wob.workerSessionId",queueStorageKey="wob.workerAnalyticsQueue",eventIngestPath="/interactions",normalizeEndpoint=endpoint=>String(endpoint||"").trim().replace(/\/+$/,""),normalizeText=value=>String(value||"").trim(),trackedClickElements=new WeakSet,endpointSelectors=[["[data-collection-worker-endpoint]","collectionWorkerEndpoint"],["[data-search-worker-endpoint]","searchWorkerEndpoint"],["[data-header-search-endpoint]","headerSearchEndpoint"],["[data-site-nav-products-endpoint]","siteNavProductsEndpoint"],["[data-shop-the-category-worker-endpoint]","shopTheCategoryWorkerEndpoint"],["[data-featured-worker-endpoint]","featuredWorkerEndpoint"]],isDebugEnabled=()=>{try{return new URLSearchParams(window.location.search).get("analytics_debug")==="1"||window.localStorage.getItem("wobAnalyticsDebug")==="true"}catch{return!1}},debug=(...args)=>{isDebugEnabled()&&console.info("[WOB analytics]",...args)},markTrackedClickElement=element=>{trackedClickElements.add(element),window.setTimeout(()=>{trackedClickElements.delete(element)},1500)},getConfiguredEndpoint=()=>normalizeEndpoint(window.WobAnalyticsConfig?.endpoint||""),getEndpointForTarget=target=>{for(const[selector,datasetKey]of endpointSelectors){const scoped=target?.closest?.(selector),scopedEndpoint=normalizeEndpoint(scoped?.dataset?.[datasetKey]);if(scopedEndpoint)return scopedEndpoint}for(const[selector,datasetKey]of endpointSelectors){const fallback=document.querySelector(selector),fallbackEndpoint=normalizeEndpoint(fallback?.dataset?.[datasetKey]);if(fallbackEndpoint)return fallbackEndpoint}return getConfiguredEndpoint()},getEventId=()=>window.crypto?.randomUUID?.()||`event-${Date.now()}-${Math.random().toString(16).slice(2)}`,positiveInteger=value=>{const parsed=Number.parseInt(value,10);return Number.isInteger(parsed)&&parsed>0?parsed:null},getShopifyClickSourceType=event=>normalizeText(event.sourcePlacement).startsWith("product-page")?"product_page":event.type==="cart_product_clicked"?"cart_drawer":event.type==="search_suggestion_clicked"?"search_dropdown":event.type==="search_result_clicked"?"search_results":event.type==="collection_product_clicked"&&event.source==="collection"?"collection_grid":event.type==="collection_product_clicked"||event.type==="menu_dropdown_product_clicked"?"recommendation":"other",getShopifyClickSourceKey=(event,sourceType)=>normalizeText(sourceType==="search_dropdown"||sourceType==="search_results"?event.query||event.normalizedQuery:sourceType==="collection_grid"||sourceType==="recommendation"?event.collectionHandle||event.sourceName||event.source:sourceType==="product_page"?event.sourceName||event.sourcePlacement||event.source:sourceType==="cart_drawer"?event.sourceName||event.sourcePlacement||"Cart drawer":event.sourceName||event.sourcePlacement||event.source),publishShopifyProductClick=(detail={})=>{const publish=window.Shopify?.analytics?.publish;if(typeof publish!="function")return debug("Shopify customer-event publisher unavailable"),!1;const sourceType=normalizeText(detail.source_type)||"other",payload={schema_version:1,click_id:normalizeText(detail.click_id)||getEventId(),product_id:normalizeText(detail.product_id),variant_id:normalizeText(detail.variant_id)||null,product_handle:normalizeText(detail.product_handle),source_type:sourceType,source_key:normalizeText(detail.source_key),result_set_id:normalizeText(detail.result_set_id)||null,collection_handle:normalizeText(detail.collection_handle)||null,placement:normalizeText(detail.placement)||null,position:positiveInteger(detail.position),worker_target:"web"};if(typeof detail.experiment_token=="string"&&detail.experiment_token.length<=1536&&(payload.experiment_token=detail.experiment_token),!payload.product_id&&!payload.product_handle)return debug("Shopify product click skipped without product identity",payload),!1;try{return publish.call(window.Shopify.analytics,"wob:product_click",payload),debug("Shopify product click published",payload),!0}catch(error){return debug("Shopify product click publish failed",error),!1}},publishTrackedProductClick=(event,experimentToken=null)=>{if(event.resultType!=="product")return!1;const sourceType=getShopifyClickSourceType(event);
1return publishShopifyProductClick({click_id:event.eventId,product_id:event.productId,variant_id:event.variantId,product_handle:event.productHandle,source_type:sourceType,source_key:getShopifyClickSourceKey(event,sourceType),result_set_id:event.resultSetId,collection_handle:event.collectionHandle,placement:event.sourcePlacement,position:event.position,experiment_token:experimentToken})},getSessionId=()=>{try{const existing=window.localStorage.getItem(sessionStorageKey);if(existing)return existing;const next=window.crypto?.randomUUID?.()||`session-${Date.now()}-${Math.random().toString(16).slice(2)}`;return window.localStorage.setItem(sessionStorageKey,next),next}catch{return`session-${Date.now()}-${Math.random().toString(16).slice(2)}`}},isQueuedRecordUsable=(record,now=Date.now())=>!!(record?.endpoint&&record?.event?.eventId)&&Number(record.attempts||0)<8&&now-Number(record.queuedAt||0)<=864e5,readEventQueue=()=>{try{const parsed=JSON.parse(window.localStorage.getItem(queueStorageKey)||"[]"),now=Date.now();return Array.isArray(parsed)?parsed.filter(record=>isQueuedRecordUsable(record,now)):[]}catch{return[]}},writeEventQueue=queue=>{try{const nextQueue=queue.filter(isQueuedRecordUsable).slice(-80);nextQueue.length?window.localStorage.setItem(queueStorageKey,JSON.stringify(nextQueue)):window.localStorage.removeItem(queueStorageKey)}catch(error){debug("queue write failed",error)}},queueEvent=(endpoint,event)=>{if(!endpoint||!event?.eventId)return!1;const nextQueue=[...readEventQueue().filter(record=>record.event?.eventId!==event.eventId),{endpoint,event,queuedAt:Date.now(),attempts:0}];return writeEventQueue(nextQueue),debug("event queued",{eventId:event.eventId,type:event.type,queueLength:nextQueue.length}),!0},removeQueuedEvents=eventIds=>{const ids=new Set(eventIds.filter(Boolean));ids.size&&(writeEventQueue(readEventQueue().filter(record=>!ids.has(record.event?.eventId))),debug("queue events flushed",Array.from(ids)))},markQueuedEventsAttempted=eventIds=>{const ids=new Set(eventIds.filter(Boolean));ids.size&&writeEventQueue(readEventQueue().map(record=>ids.has(record.event?.eventId)?{...record,attempts:Number(record.attempts||0)+1,lastAttemptAt:Date.now()}:record))},sendBeaconPayload=(url,body,eventIds=[])=>{if(!navigator.sendBeacon)return!1;const queued=navigator.sendBeacon(url,body);return queued&&debug("beacon queued",eventIds),queued},sendEvents=({endpoint,events,keepalive=!0,useFetch=!0,onSuccess=null}={})=>{const normalizedEndpoint=normalizeEndpoint(endpoint),filteredEvents=Array.isArray(events)?events.filter(Boolean):[];if(!normalizedEndpoint||!filteredEvents.length)return!1;const body=JSON.stringify({events:filteredEvents}),url=`${normalizedEndpoint}${eventIngestPath}`,fetchTransport=window.__wobNativeFetch||(window.fetch?window.fetch.bind(window):null);if(useFetch&&fetchTransport)try{return fetchTransport(url,{method:"POST",body,keepalive,mode:"no-cors",credentials:"omit",cache:"no-store"}).then(()=>{debug("fetch transport resolved",filteredEvents.map(event=>event.eventId)),typeof onSuccess=="function"&&onSuccess()}).catch(error=>{debug("event fetch failed",error)}),!0}catch(error){debug("event fetch could not start",error)}const beaconQueued=sendBeaconPayload(url,body,filteredEvents.map(event=>event.eventId));return beaconQueued&&typeof onSuccess=="function"&&onSuccess(),beaconQueued},flushQueuedEvents=()=>{const queue=readEventQueue();return queue.length?(queue.forEach(record=>{const endpoint=normalizeEndpoint(record.endpoint),event=record.event,eventId=event?.eventId||"";!endpoint||!eventId||(markQueuedEventsAttempted([eventId]),debug("flushing queued events",{endpoint,eventIds:[eventId]}),sendEvents({endpoint,events:[event],keepalive:!1,useFetch:!0,onSuccess:()=>removeQueuedEvents([eventId])}))}),!0):(debug("queue empty"),!1)},track=({endpoint,eventType,source,context={},link=null}={})=>{const normalizedEndpoint=normalizeEndpoint(endpoint);if(!eventType)return debug("skipped event",{eventType,endpoint}),!1;const event={type:eventType,eventId:getEventId(),timestamp:new Date().toISOString(),sessionId:getSessionId(),source,page:{path:window.location.pathname,url:window.location.href},...context},isNavigationClick=link instanceof HTMLAnchorElement,shopifyPublished=publishTrackedProductClick(event,window.WobCollectionExperiments?.contextFor(link));return normalizedEndpoint?(debug("tracking event",event),queueEvent(normalizedEndpoint,event),sendEvents({endpoint:normalizedEndpoint,events:[event],useFetch:!isNavigationClick,onSuccess:()=>removeQueuedEvents([event.eventId])})):(debug("worker event skipped without endpoint",{eventType,shopifyPublished}),shopifyPublished)},getSearchQuery=root=>{const input=root?.querySelector?.("[data-header-search-input], [data-search-input]"),rootQuery=normalizeText(root?.dataset?.searchQuery),inputQuery=normalizeText(input?.value),urlQuery=normalizeText(new URLSearchParams(window.location.search).get("q"));return inputQuery||rootQuery||urlQuery},getProductHandleFromUrl=value=>{try{const match=new URL(value||"",window.location.origin).pathname.match(/\/products\/([^/?#]+)/);return match?decodeURIComponent(match[1]):""}catch{return""}},getProductCardPosition=card=>Number(card?.dataset?.collectionResultPosition||card?.dataset?.searchResultPosition||0),getCollectionSourceName=root=>normalizeText(root?.dataset?.collectionTitle)||normalizeText(root?.dataset?.collectionHandle)||"Collection",trackHeaderSearchClick=(event,target)=>{const resultLink=target.closest("[data-header-search-result-link]"),form=resultLink?.closest("[data-header-search]");if(!resultLink||!form)return!1;if((resultLink.dataset.headerSearchResultType||"")!=="product")return debug("ignored header non-product result",resultLink.dataset.headerSearchResultType||""),!0;if(trackedClickElements.has(resultLink))return!0;markTrackedClickElement(resultLink);const query=normalizeText(resultLink.dataset.headerSearchQuery)||getSearchQuery(form);return track({endpoint:form.dataset.headerSearchEndpoint,eventType:"search_suggestion_clicked",source:"header-search",link:resultLink,context:{query,normalizedQuery:query.toLowerCase(),resultType:"product",sourcePlacement:"search-dropdown",sourceName:"Header search",productId:resultLink.dataset.headerSearchProductId||"",productHandle:resultLink.dataset.headerSearchProductHandle||"",productTitle:resultLink.dataset.headerSearchProductTitle||"",position:Number(resultLink.dataset.headerSearchResultPosition||0)}}),!0},trackSearchResultClick=(event,target)=>{const root=target.closest("[data-worker-search]"),link=target.closest("[data-search-result-link], [data-product-card-link]"),productCard=link?.closest("[data-search-product-result], .product-card");if(!root||!link||!productCard)return root&&debug("search click did not match product card",{hasRoot:!!root,hasLink:!!link,hasProductCard:!!productCard}),!1;if(trackedClickElements.has(link))return!0;markTrackedClickElement(link);const query=getSearchQuery(root),resultSetId=normalizeText(root.dataset.searchResultSetId);return track({endpoint:root.dataset.searchWorkerEndpoint,eventType:"search_result_clicked",source:"search",link,context:{query,normalizedQuery:query.toLowerCase(),resultSetId,resultType:"product",sourcePlacement:"search-page",sourceName:"Search results",productId:productCard.dataset.productId||"",productHandle:productCard.dataset.productHandle||"",productTitle:productCard.dataset.productTitle||"",position:Number(productCard.dataset.searchResultPosition||productCard.dataset.collectionResultPosition||0)}}),!0},trackCollectionProductClick=(event,target)=>{const root=target.closest("[data-collection-infinite-scroll]"),link=target.closest("[data-product-card-link]"),productCard=link?.closest(".product-card");return!root||!link||!productCard||!productCard.dataset.productId?((root||link)&&debug("collection click did not match product card",{hasRoot:!!root,hasLink:!!link,hasProductCard:!!productCard,productId:productCard?.dataset?.productId||""}),!1):(trackedClickElements.has(link)||(markTrackedClickElement(link),track({endpoint:root.dataset.collectionWorkerEndpoint,eventType:"collection_product_clicked",source:"collection",link,context:{resultType:"product",sourcePlacement:"collection",sourceName:getCollectionSourceName(root),collectionId:root.dataset.collectionId||"",collectionHandle:root.dataset.collectionHandle||"",productId:productCard.dataset.productId||"",productHandle:productCard.dataset.productHandle||"",productTitle:productCard.dataset.productTitle||"",position:Number(productCard.dataset.collectionResultPosition||0),sortKey:new URLSearchParams(window.location.search).get("sort_by")||root.dataset.collectionSortKey||"recommended",workerRendered:productCard.dataset.collectionWorkerProduct==="true"}})),!0)},trackMenuDropdownProductClick=(event,target)=>{const card=target.closest('[data-site-nav-product-card], .site-nav__dropdown-products a[href*="/products/"]'),link=card?.matches("a[href]")?card:card?.closest("a[href]")||card?.querySelector?.("a[href]"),rail=card?.closest("[data-site-nav-products], .site-nav__dropdown-products");if(!card||!link||!rail)return!1;if(trackedClickElements.has(link))return!0;markTrackedClickElement(link);const analyticsSource=rail.dataset.siteNavProductsAnalyticsSource||"header-nav-dropdown",sourceGroup=rail.dataset.siteNavProductsSourceGroup||"header",collectionTitle=normalizeText(rail.dataset.siteNavProductsCollectionTitle)||normalizeText(rail.dataset.siteNavProductsCollectionHandle);return track({endpoint:rail.dataset.siteNavProductsEndpoint||getEndpointForTarget(link),eventType:"menu_dropdown_product_clicked",source:analyticsSource,link,context:{resultType:"product",sourcePlacement:"menu-dropdown",sourceName:collectionTitle?`Header navigation - ${collectionTitle}`:"Header navigation",sourceGroup,collectionId:rail.dataset.siteNavProductsCollectionId||"",collectionHandle:rail.dataset.siteNavProductsCollectionHandle||"",productId:card.dataset.siteNavProductId||link.dataset.siteNavProductId||"",numericProductId:card.dataset.siteNavProductNumericId||link.dataset.siteNavProductNumericId||"",productHandle:card.dataset.siteNavProductHandle||link.dataset.siteNavProductHandle||getProductHandleFromUrl(link.getAttribute("href")),productTitle:card.dataset.siteNavProductTitle||link.dataset.siteNavProductTitle||normalizeText(card.querySelector(".site-nav__product-title")?.textContent),position:Number(card.dataset.siteNavProductPosition||link.dataset.siteNavProductPosition||0),workerRendered:(card.dataset.siteNavProductSource||link.dataset.siteNavProductSource)==="worker"}}),!0},trackProductShopTheLookClick=(event,target)=>
1{const root=target.closest("[data-product-shop-the-look]"),link=target.closest("[data-product-card-link]"),productCard=link?.closest(".product-card");return!root||!link||!productCard||!productCard.dataset.productId?!1:(trackedClickElements.has(link)||(markTrackedClickElement(link),track({endpoint:getEndpointForTarget(link),eventType:"collection_product_clicked",source:"product-page-shop-the-look",link,context:{resultType:"product",sourcePlacement:"product-page-shop-the-look",sourceName:root.dataset.productShopTheLookSourceName||"Shop the Look",collectionHandle:root.dataset.productShopTheLookCollectionHandle||"",productId:productCard.dataset.productId||"",productHandle:productCard.dataset.productHandle||"",productTitle:productCard.dataset.productTitle||"",position:getProductCardPosition(productCard)}})),!0)},trackCartDrawerProductClick=(event,target)=>{const link=target.closest("[data-cart-product-link]"),item=link?.closest("[data-cart-drawer-item]");if(!link||!item||trackedClickElements.has(link))return!1;const productId=normalizeText(item.dataset.productId),productHandle=normalizeText(item.dataset.productHandle)||getProductHandleFromUrl(link.getAttribute("href"));
1return!productId&&!productHandle?!1:(markTrackedClickElement(link),track({endpoint:"",eventType:"cart_product_clicked",source:"cart-drawer",link,context:{resultType:"product",sourcePlacement:"cart-drawer-item",sourceName:"Existing cart item",productId,variantId:item.dataset.variantId||"",productHandle,productTitle:item.dataset.productTitle||"",position:positiveInteger(item.dataset.lineIndex)}}),!0)},getQuickAddTracking=(form,productCard)=>{const baseContext={resultType:"product",interaction:"quick-add",productId:productCard.dataset.productId||"",variantId:form.querySelector("[data-product-card-variant-input]")?.value||"",productHandle:productCard.dataset.productHandle||"",productTitle:productCard.dataset.productTitle||"",position:getProductCardPosition(productCard)},shopTheLook=productCard.closest("[data-product-shop-the-look]");if(shopTheLook)return{endpoint:getEndpointForTarget(form),eventType:"collection_product_clicked",source:"product-page-shop-the-look",context:{...baseContext,sourcePlacement:"product-page-shop-the-look-quick-add",sourceName:`${shopTheLook.dataset.productShopTheLookSourceName||"Shop the Look"} quick add`,collectionHandle:shopTheLook.dataset.productShopTheLookCollectionHandle||""}};const searchRoot=productCard.closest("[data-worker-search]");if(searchRoot){const query=getSearchQuery(searchRoot);return{endpoint:searchRoot.dataset.searchWorkerEndpoint,eventType:"search_result_clicked",source:"search",context:{...baseContext,query,normalizedQuery:query.toLowerCase(),resultSetId:normalizeText(searchRoot.dataset.searchResultSetId),sourcePlacement:"search-page-quick-add",sourceName:"Search results quick add"}}}const featuredRoot=productCard.closest("[data-featured-collection-tabs]");if(featuredRoot){const panel=productCard.closest("[data-featured-worker-panel]"),collectionTitle=normalizeText(panel?.dataset?.featuredCollectionTitle);return{endpoint:featuredRoot.dataset.featuredWorkerEndpoint,eventType:"collection_product_clicked",source:"homepage-featured-collection",context:{...baseContext,sourcePlacement:"homepage-featured-collection-quick-add",sourceName:collectionTitle||normalizeText(featuredRoot.querySelector(".featured-collection__header h2")?.textContent),collectionHandle:panel?.dataset?.featuredCollectionHandle||"",collectionTitle}}}const collectionRoot=productCard.closest("[data-collection-infinite-scroll]");return collectionRoot?{endpoint:collectionRoot.dataset.collectionWorkerEndpoint,eventType:"collection_product_clicked",source:"collection",context:{...baseContext,sourcePlacement:"collection-quick-add",sourceName:getCollectionSourceName(collectionRoot),collectionHandle:collectionRoot.dataset.collectionHandle||""}}:document.body.classList.contains("template-product")?{endpoint:getEndpointForTarget(form),eventType:"collection_product_clicked",source:"product-page-quick-add",context:{...baseContext,sourcePlacement:"product-page-quick-add",sourceName:"Product page quick add"}}:null},trackProductCardQuickAddSubmit=event=>{const form=event.target instanceof HTMLFormElement?event.target.closest("[data-cart-add-form]"):null,productCard=form?.closest(".product-card");if(!form||!productCard||trackedClickElements.has(form))return;const tracking=getQuickAddTracking(form,productCard);tracking&&(markTrackedClickElement(form),track({...tracking,link:form}))},trackFeaturedCollectionProductClick=(event,target)=>{const root=target.closest("[data-featured-collection-tabs]"),link=target.closest("[data-product-card-link]"),productCard=link?.closest(".product-card"),panel=productCard?.closest("[data-featured-worker-panel]");if(!root||!link||!productCard||!panel||!productCard.dataset.productId)return!1;if(trackedClickElements.has(link))return!0;markTrackedClickElement(link);const collectionTitle=normalizeText(panel.dataset.featuredCollectionTitle);return track({endpoint:root.dataset.featuredWorkerEndpoint,eventType:"collection_product_clicked",source:"homepage-featured-collection",link,context:{resultType:"product",sourcePlacement:"homepage-featured-collection",sourceName:collectionTitle||normalizeText(root.querySelector(".featured-collection__header h2")?.textContent),collectionId:panel.dataset.featuredCollectionId||"",collectionHandle:panel.dataset.featuredCollectionHandle||"",collectionTitle,productId:productCard.dataset.productId||"",productHandle:productCard.dataset.productHandle||"",productTitle:productCard.dataset.productTitle||"",position:Number(productCard.dataset.featuredResultPosition||0),sortKey:panel.dataset.featuredSortKey||"recommended",workerRendered:productCard.dataset.featuredWorkerProduct==="true"}}),!0},trackShopTheCategoryProductClick=(event,target)=>{const root=target.closest("[data-shop-the-category]"),link=target.closest("[data-shop-the-category-product-card]");if(!root||!link)return!1;if(trackedClickElements.has(link))return!0;const productId=normalizeText(link.dataset.productId),productHandle=normalizeText(link.dataset.productHandle)||getProductHandleFromUrl(link.getAttribute("href"));
1if(!productId&&!productHandle)return!1;markTrackedClickElement(link);const collectionTitle=normalizeText(root.dataset.shopTheCategoryCollectionTitle);return track({endpoint:root.dataset.shopTheCategoryWorkerEndpoint,eventType:"collection_product_clicked",source:"homepage-shop-by-category",link,context:{resultType:"product",sourcePlacement:"homepage-shop-by-category",sourceName:collectionTitle||"Shop by Category",collectionId:root.dataset.shopTheCategoryCollectionId||"",collectionHandle:root.dataset.shopTheCategoryCollectionHandle||"",collectionTitle,productId,productHandle,productTitle:link.dataset.productTitle||"",position:Number(link.dataset.shopTheCategoryResultPosition||0),sortKey:root.dataset.shopTheCategorySortKey||"recommended",workerRendered:!0}}),!0},trackProductInteraction=event=>{const target=event.target instanceof Element?event.target:null;target&&(trackCartDrawerProductClick(event,target)||trackHeaderSearchClick(event,target)||trackMenuDropdownProductClick(event,target)||trackSearchResultClick(event,target)||trackProductShopTheLookClick(event,target)||trackShopTheCategoryProductClick(event,target)||trackFeaturedCollectionProductClick(event,target)||trackCollectionProductClick(event,target))};document.addEventListener("click",trackProductInteraction,!0),document.addEventListener("submit",trackProductCardQuickAddSubmit,!0),flushQueuedEvents(),debug("initialized"),window.WobWorkerAnalytics={flush:flushQueuedEvents,getSessionId,getEndpointForTarget,normalizeEndpoint,track},window.WobProductAnalytics={publishClick:publishShopifyProductClick}})();
2//# sourceMappingURL=/cdn/shop/t/649/assets/worker-analytics.js.map?v=148903149625326106681788891197

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.