PageSourceSearch

https://www.mariechantal.com/cdn/shop/t/121/assets/push-cart-recom…?v=13544743866153027941778665744

js mariechantal.com collected 2026-10-02 11:26:20 UTC 5,090 bytes, 2 lines download raw bytes

1export class PushCartRecommendations extends window.BAO.CustomElement(){connectedCallback(){super.connectedCallback(),this.init()}setupListeners(){super.setupListeners(),this.onCartChanged=this.init.bind(this),window.BAO.eventBus.addEventListener(window.BAO.EVENTS.PUSH_CART.CHANGED,this.onCartChanged)}async init(){this.initializeState(),await this.fetchInitialCartState(),this.scheduleRender()}initializeState(){this.isRendering=!1,this._expanded=!1,this.renderTimeoutId=null,this.cartState=null,this.lastRecommendationProductId=null}resetState(){this.expanded=!1,this.isRendering=!1,this.cartState=null,this.lastRecommendationProductId=null,this.renderTimeoutId&&(window.clearTimeout(this.renderTimeoutId),this.renderTimeoutId=null)}scheduleRender(){this.renderTimeoutId&&(window.clearTimeout(this.renderTimeoutId),this.renderTimeoutId=null),this.isRendering||(this.renderTimeoutId=window.setTimeout(()=>{this.renderTimeoutId=null,this.render()},250))}getLastAddedItem(cartState){return!cartState?.items||cartState.items.length===0?null:[...cartState.items].sort((a,b)=>b.key-a.key)[0]}buildRecommendationUrl(productId,intent){const baseUrl=this.dataset.url;if(!baseUrl||!productId)return null;const url=new URL(baseUrl,window.location.origin);return url.searchParams.set("product_id",productId),intent&&url.searchParams.set("intent",intent),url.toString()}async fetchRecommendationHtml(url){return(await fetch(url)).text()}parseRecommendationHtml(htmlString){const html=document.createElement("div");return html.innerHTML=htmlString,html}hasRecommendationItems(htmlElement){return htmlElement.querySelectorAll("[data-rec-item]").length>0}updateRecommendationContainers(content){document.querySelectorAll("push-cart-recommendations").forEach(container=>{container.innerHTML=content})}updateExpandedState(aside,recs,expanded){aside?.setAttribute("aria-expanded",expanded),recs?.forEach(rec=>{rec.setAttribute("loaded",expanded)})}extractRecommendationContent(htmlElement){const recommendationElement=htmlElement.querySelector("push-cart-recommendations");return recommendationElement?recommendationElement.innerHTML:""}async fetchRecommendationsWithFallback(productId){try{const complementaryUrl=this.buildRecommendationUrl(productId,"complementary");if(!complementaryUrl)return"";const complementaryHtml=await this.fetchRecommendationHtml(complementaryUrl),complementaryElement=this.parseRecommendationHtml(complementaryHtml);if(this.hasRecommendationItems(complementaryElement))return this.extractRecommendationContent(complementaryElement);const relatedUrl=this.buildRecommendationUrl(productId,"related");if(!relatedUrl)return"";const relatedHtml=await this.fetchRecommendationHtml(relatedUrl),relatedElement=this.parseRecommendationHtml(relatedHtml);return this.hasRecommendationItems(relatedElement)?this.extractRecommendationContent(relatedElement):""}catch(error){return console.error("Recommendation fetch error:",error),""}}hasValidCartData(){return this.cartState&&this.cartState.items&&this.cartState.items.length>0}async render(){if(!this.isRendering){this.isRendering=!0;try{if(!this.hasValidCartData()){this.expanded=!1;return}const lastAddedItem=this.getLastAddedItem(this.cartState);if(!lastAddedItem?.product_id){this.expanded=!1;return}const content=await this.fetchRecommendationsWithFallback(lastAddedItem.product_id);content?(this.externalEls?.container?.exists&&this.externalEls.container.element.classList.remove("psh-Cart_Recommendations-loading"),this.updateRecommendationContainers(content),this.expanded=!0):this.expanded=!1}catch(error){console.error("Render error:",error),this.expanded=!1}finally{this.isRendering=!1}}}disconnectedCallback(){super.disconnectedCallback(),this.resetState()}get expanded(){return this._expanded}set expanded(expanded){this._expanded=expanded;const aside=document.querySelector('dialog[key="cart"] .drw-Drawer_Aside'),recs=document.querySelectorAll("push-cart-recommendations");this.updateExpandedState(aside,recs,expanded)}async fetchInitialCartState(){try{const cartState=await(await fetch("/cart.js")).json();this.cartState=cartState,this.lastRecommendationProductId=null}catch(error){console.error("Failed to fetch initial cart state:",error)}}}customElements.get("push-cart-recommendations")||customElements.define("push-cart-recommendations",PushCartRecommendations);const{setInitialised}=window.BAO.Carousel.plugins;class PushCartRecommendationsCarousel extends window.BAO.CustomElement(){connectedCallback(){super.connectedCallback(),window.setTimeout(()=>this.render(),500)}render(){this.els?.slide?.exists&&(window.BAO.MediaBreakpoints.isMd||
1(this.carousel=this.setupCarousel()))}setupCarousel(){return new window.KeenSlider(this.els.slides.element,{selector:this.els.slide.selector,loop:!1,mode:"snap",slides:{perView:1.1,spacing:15}},[setInitialised()])}}customElements.get("push-cart-recommendations-carousel")||customElements.define("push-cart-recommendations-carousel",PushCartRecommendationsCarousel);
2//# sourceMappingURL=/cdn/shop/t/121/assets/push-cart-recommendations.js.map?v=13544743866153027941778665744

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.