PageSourceSearch

https://emma-sleep.ca/cdn/shop/t/384/assets/site-subnav.js?v=5462986883953855701775103981

js emma-sleep.ca collected 2026-10-04 17:04:01 UTC 7,649 bytes, 62 lines download raw bytes

1class SiteSubnav extends CustomElement{parentIndex=null;data={title:"",url:""};get refs(){const siteNav=document.querySelector("site-nav");return{$subNavItems:this.$el.find("site-subnav-item"),siteNav,mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}beforeMount(){super.beforeMount(),this.getActiveNavLink()}mounted(){super.mounted()}refresh(){const{siteNav}=this.refs;siteNav.activeIndex!==this.parentIndex&&(this.getActiveNavLink(),this.render())}render(){this.innerHTML=this.template()}template(){if(!this.data)return null;const{title}=this.data;return`
2        <div class="subnav-container ${title}" data-name="${title}">
3            <nav-sidebar :parentIndex="${this.parentIndex}"></nav-sidebar>
4        </div>
5
6        <nav-spotlight class="spotlight" :parentIndex="${this.parentIndex}"></nav-spotlight>
7    `}getActiveNavLink(){const{siteNav,mainNavigationMenu}=this.refs;this.parentIndex=siteNav.activeIndex,this.data=mainNavigationMenu[this.parentIndex]}}customElements.define("site-subnav",SiteSubnav);class SiteSubavItem extends CustomElement{props={path:"",index:0};data={};get refs(){return{navSpotlight:this.$el.closest("site-subnav").find("nav-spotlight").get(0),mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}constructor(){super()}setup(){}mounted(){super.mounted(),this.$el.on("mouseover",this.renderSpotLight)}beforeMount(){super.beforeMount();const{mainNavigationMenu}=this.refs,{path}=this.props;this.data=_.get(mainNavigationMenu,path)}renderSpotLight=debounce(()=>{const{index}=this.props,{object,featuredImage,url,accentuate}=this.data,{navSpotlight}=this.refs;index!==navSpotlight.activeIndex&&(navSpotlight.activeIndex=index,navSpotlight?.refresh({name:object.title,price:object.price,originalPrice:object.compare_at_price,url,featuredImage,accentuate}))},200)}customElements.define("site-subnav-item",SiteSubavItem);class NavSidebar extends CustomElement{props={parentIndex:0};get refs(){const siteNav=document.querySelector("site-nav");return{$subNavItems:this.$el.find("site-subnav-item"),siteNav,$navSpotlight:this.$el.find("nav-spotlight"),mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}async render(){isTabletViewport()||(this.innerHTML="<loading-overlay></loading-overlay>"),this.innerHTML=await this.template(),this.populateSpotlight()}populateSpotlight(){const{$subNavItems,$navSpotlight}=this.refs,firstSubNavItem=$subNavItems.first().get(0);$navSpotlight.get(0)?.mounted?firstSubNavItem?.renderSpotLight():$navSpotlight.on("mounted",()=>{firstSubNavItem?.renderSpotLight()})}async template(){const{mainNavigationMenu}=this.refs,{parentIndex}=this.props;if(this.data=mainNavigationMenu[parentIndex],!this.data)return null;const{title,url}=this.data,btnText=title==="Mattresses"?"Compare ":"Shop "+title,[i18nTitle,i18nBtnText]=await translateWeglot([title,btnText]),navItems=await this.renderSubnavItems();return`
8          <p class="subnav-container__title paragraph-20 font-semibold">${i18nTitle}</p>
9
10          <ul
11            class="subnav-container__links"
12          >
13            ${navItems.join("")}
14          </ul>
15
16          <a href="${url}" class="compare-btn btn btn--secondary btn--compact">
17            ${i18nBtnText}
18          </a>
19    `}async renderSubnavItems(){const{children}=this.data,{parentIndex}=this.props;return Promise.all(children.map(async(childlink,i)=>{const[i18nTitle]=await translateWeglot([childlink.title]);return`<site-subnav-item
20                :path="[${parentIndex}].children[${i}]"
21                :index="${i}"
22                class="site-subnav__item"
23              >
24                <a
25                  href="${childlink.url}"
26                  class="site-subnav__link"
27                  ${childlink.active?'aria-current="page"':""}
28                  tabindex="-1"
29                  abtasty-tracker="PDP_CTR"
30                >
31                 <p class="subnav-container__badge">${childlink.promotionCapsule}</p>
32                  <div class="sub-item-content">
33                     <div class="subnav__title">
34                        <p>
35                          ${i18nTitle}
36                        </p>
37                        <div class="weglot-tr">
38                          ${childlink.subnavHtmlContent} 
39                        </div>
40                     </div>
41              <img src="${childlink.submenuThumbImage}&transform=resize=600" class="spotlight__image w-full h-full object-contain" loading="lazy" />
42                  </div>
43                </a>
44              </site-subnav-item>`}))}}customElements.define("nav-sidebar",NavSidebar);class NavSpotlight extends CustomElement{props={parentIndex:0};activeIndex=0;
44data={name:"",price:"",originalPrice:"",imageUrl:null,url:"#",badgeText:""};get refs(){return{mainNavigationMenu:JSON.parse(document.getElementById("main-navigation-menu").textContent)}}constructor(){super()}async connectedCallback(){this.extractProps(),this.init(),this.beforeMount(),await this.render(),setTimeout(()=>{$(this).ready(this.mounted.bind(this))},0)}init(){super.init()}async render(){this.$el.css("opacity",0),await wait(250),this.innerHTML=await this.template(),this.$el.css("opacity",1)}async mounted(){super.mounted();const{parentIndex}=this.props,path=`[${parentIndex}].children[0]`,{mainNavigationMenu}=this.refs,data=_.get(mainNavigationMenu,path),{object,featuredImage,url,accentuate}=data;await this.refresh({name:object.title,price:object.price,originalPrice:object.compare_at_price,url,featuredImage,accentuate})}async template(){if(!this.data.name)return;const{name,price,originalPrice,url,imageUrl,badgeText}=this.data,[i18nBadge=badgeText,i18nName=name,i18nFromText="From"]=await translateWeglot([badgeText,name,"From"]);return`
45      <div class="spotlight-media bg-wild-sand">
46        ${badgeText?`<p class="spotlight__badge absolute top-5 left-4 text-[13px]">${i18nBadge}</p>`:""}
47        <a href="${url}" class="spotlight__link" abtasty-tracker="PDP_CTR">
48          <img src="${imageUrl}" class="spotlight__image w-full h-full rounded-lg object-cover" loading="lazy" />
49        </a>
50      </div>
51
52      <div class="spotlight-body">
53        <a href="${url}" class="spotlight__link">
54          <p class="spotlight__name text-xl font-semibold">${i18nName}</p>
55        </a>
56        <div class="flex items-center gap-2 text-md">
57          ${originalPrice?`<p class="inline">${i18nFromText}</p> `:""}<span class="spotlight__price ${originalPrice?"text-[var(--color-negative-500)]":"text-[var(--color-neutral-900)]"} font-bold">${price}</span>
58          ${originalPrice?`<span class="spotlight__original-price line-through text-xs">${originalPrice}</span>`:""}
59        </div>
60      </div>
61    `}async refresh({name,price,url,originalPrice,featuredImage,accentuate}){const isShowFreeBundle=$("#nav-show-free-bundle").val(),useABTestImg=url==="/products/emma-original-a"&&!!isShowFreeBundle;this.data.name=name,this.data.price=currencyFormatter.format(price/100),this.data.originalPrice=originalPrice?currencyFormatter.format(originalPrice/100):null,this.data.imageUrl=accentuate.navigation_spotlight_image?`${accentuate.navigation_spotlight_image[0].src}&transform=resize=600`:featuredImage,this.data.url=url;const discountedAmount=originalPrice-price,discountedPrice=accentuate.upto_discount||(100*discountedAmount/originalPrice).toFixed(0);this.data.badgeText=discountedPrice>0?`Up to ${discountedPrice}% off`:"",await this.render()}}customElements.define("nav-spotlight",NavSpotlight);
62//# sourceMappingURL=/cdn/shop/t/384/assets/site-subnav.js.map?v=5462986883953855701775103981

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.