PageSourceSearch

https://www.ohpolly.com/cdn/shop/t/1735/assets/recommendations-api-layer.js?v=161929694371444728621789654329

js ohpolly.com collected 2026-10-03 20:36:51 UTC 2,971 bytes, 2 lines download raw bytes

1const{getElements}=window.BAO.Utils;class RecommendationsAPILayer{constructor(){this.pageType!=="product"&&this.fetchPlacements(),window.BAO.eventBus.addEventListener(window.BAO.EVENTS.PUSH_CART.SETTLED,this.handleCartSettled.bind(this)),window.BAO.eventBus.addEventListener(window.BAO.EVENTS.PRODUCT.OPTION_CHANGED,this.handleOptionChanged.bind(this))}fetchPlacements({update,productId,variantId,scope}={}){try{window.nostojs(api=>{let pageApi=api.defaultSession();switch(update&&(pageApi=api.defaultSession().setResponseMode("HTML").enableCampaignInjection()),this.pageType){case"404":pageApi=pageApi.viewNotFound();break;case"cart":pageApi=pageApi.viewCart();break;case"collection":pageApi=pageApi.viewCategory(this.categoryId);break;case"index":pageApi=pageApi.viewFrontPage();break;case"product":variantId?pageApi=pageApi.viewProductSku(productId||this.productId,`${variantId}`):pageApi=pageApi.viewProduct(productId||this.productId);break;case"search":pageApi=pageApi.viewSearch(this.searchQuery);break;default:pageApi=pageApi.viewOther();break}const placementIds=scope||this.getPlacementIds(api);pageApi.setPlacements(placementIds).load().then(response=>{let placements=[];update?placements=Object.keys(response?.recommendations||{}):Object.entries(response.campaigns?.recommendations||{}).forEach(([key,entry])=>{entry.products?.length&&placements.push(key)}),this.toggleElements(placements,scope),window.BAO.dispatchEvent(window.BAO.EVENTS.NOSTO.UPDATED)}).catch(error=>{console.error("Failed to fetch placements from Nosto:",error)})})}catch(error){console.error("NostoJS API call failed:",error)}}toggleElements(placements,scope){if(window.Shopify.designMode)return;getElements(".nosto_element").forEach(recommendationEl=>{if(recommendationEl.closest('[data-product-info-el="apps"]'))return;const id=recommendationEl.id;if(!(scope&&!scope.includes(id))&&!(!scope&&recommendationEl.closest("[data-product-oos]"))){if(placements.includes(id)){recommendationEl.removeAttribute("hidden");return}recommendationEl.setAttribute("hidden","")}})}async handleCartSettled(){await window.Nosto.reloadCart(),this.fetchPlacements({update:!0})}handleOptionChanged({detail}){const variantId=detail?.variant?.id;if(!variantId||detail.variant.available!==!1)return;const oosPlacementId=document.querySelector("[data-product-oos] .nosto_element")?.id;oosPlacementId&&this.fetchPlacements({update:!0,variantId,scope:[oosPlacementId]})}getPlacementIds(api){return api.placements.getPlacements().filter(id=>!document.getElementById(id)?.closest('[data-product-info-el="apps"]'))}get categoryId(){return document.body.dataset.categoryId}get pageType(){return document.body.dataset.pageType}get productId(){return document.body.dataset.productId}get searchQuery(){return document.body.dataset.searchQuery}}window.theme.recommendations.apiLayer=new RecommendationsAPILayer;
2//# sourceMappingURL=/cdn/shop/t/1735/assets/recommendations-api-layer.js.map?v=161929694371444728621789654329

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.