PageSourceSearch

https://www.cambridgesatchel.com/cdn/shop/t/628/assets/facets-form.min.js

js cambridgesatchel.com collected 2026-10-02 04:10:32 UTC 7,291 bytes, 1 lines download raw bytes

1import"./utilities.min.js";import"./vendor.min.js";class r extends HTMLElement{constructor(){super(),this._loading=!1,this._activeFilter=!1,this.selectors={filterBtn:"[data-filter-btn]",filterRemove:"[data-filter-remove]",filterOptionsContainer:"[data-filter-options-container]",mobileFilterBtn:"[data-mobile-filter-trigger]",mobileApplyFiltersBtn:"[data-mobile-apply-filters]",mobileCloseFiltersBtn:"[data-mobile-filter-close]",mobileFilters:"[data-mobile-filters]",paginationLink:"[data-pagination-link]"},this.onActiveFilterClick=this.onActiveFilterClick.bind(this);const t=this.querySelector("form");t.addEventListener("submit",this.onSubmitHandler.bind(this)),t.addEventListener("change",this.onChangeHandler.bind(this)),this.querySelectorAll(this.selectors.filterBtn).forEach(e=>{e.addEventListener("click",this.onFilterBtnClick.bind(this))}),this.id==="MobileFacets"&&(document.querySelector(this.selectors.mobileFilterBtn).addEventListener("click",this.onMobileFilterPanelClick.bind(this)),document.querySelector(this.selectors.mobileFilters).addEventListener("click",this.onMobileApplyFiltersClick.bind(this)),document.querySelector(this.selectors.mobileFilters).addEventListener("click",this.onMobileFiltersCloseClick.bind(this)))}static setListeners(){const t=e=>{const i=e.state?e.state.searchParams:r.searchParamsInitial;i!==r.searchParamsPrev&&r.renderPage(i,null,!1)};window.addEventListener("popstate",t)}onChangeHandler(){this.querySelector("form").dispatchEvent(new Event("submit",{cancelable:!0}))}onActiveFilterClick(t){t.preventDefault();const e=t.currentTarget.href.indexOf("?")===-1?"":t.currentTarget.href.slice(t.currentTarget.href.indexOf("?")+1);r.renderPage(e)}onMobileFilterPanelClick(t){t.preventDefault(),document.querySelector(this.selectors.mobileFilters).classList.add("active"),document.querySelector("[data-sticky-filters]").classList.add("active")}onMobileFiltersCloseClick(t){t.target.closest(this.selectors.mobileCloseFiltersBtn)!==null&&(document.querySelector(this.selectors.mobileFilters).classList.remove("active"),document.querySelector("[data-sticky-filters]").classList.remove("active"))}onMobileApplyFiltersClick(t){t.target.closest(this.selectors.mobileApplyFiltersBtn)!==null&&(document.querySelector(this.selectors.mobileFilters).classList.remove("active"),document.querySelector("[data-sticky-filters]").classList.remove("active"))}createSearchParams(t){const e=new FormData(t);return new URLSearchParams(e).toString()}onSubmitHandler(t){t.preventDefault(),this.loading=!0;const e=document.querySelectorAll("facets-form form"),i=[],s=t.target.closest("form").id==="FacetsFormMobile";e.forEach(a=>{s?a.id==="FacetsFormMobile"&&i.push(this.createSearchParams(a)):(a.id==="FacetSortForm"||a.id==="FacetsFormDesktop"||a.id==="FacetSortDrawerForm")&&i.push(this.createSearchParams(a))});const l=new URLSearchParams(window.location.search),c=l.get("q")!==null?l.get("q"):"";c&&(i[0]=`q=${c}&options%5Bprefix%5D=last&${i[0]}`),this.onSubmitForm(i.join("&"),t)}onSubmitForm(t,e){r.renderPage(t,e)}onFilterBtnClick(t){if(t.target.closest(this.selectors.filterBtn)===null)return;const e=t.target.closest(this.selectors.filterBtn);this.activeFilter=e.getAttribute("data-filter-btn")}static renderFilters(t,e){const i=new DOMParser().parseFromString(t,"text/html"),s=i.querySelectorAll("#FacetsFormDesktop [data-filter-options], #FacetsFormMobile [data-filter-options]"),l=o=>{const n=e?e.target.closest("[data-filter-slug]"):void 0;return n?o.dataset.index===n.dataset.index:!1},c=Array.from(s).filter(o=>!l(o)),a=document.querySelector("#DrawerFacets");c.forEach(o=>{document.querySelectorAll(`[data-filter-options="${o.dataset.facetSlug}"]`).forEach(n=>{(!a||!a.contains(n))&&(n.innerHTML=o.innerHTML)})});const d=i.querySelectorAll("#DrawerFacets [data-filter-options]");a&&d.forEach(o=>{const n=a.querySelector(`[data-filter-options="${o.dataset.filterOptions}"]`);n&&(n.innerHTML=o.innerHTML)}),r.renderActiveFacets(i)}static renderActiveFacets(t){["[data-active-filters]"].forEach(i=>{const s=t.querySelector(i);s&&(document.querySelector(i).innerHTML=s.innerHTML)})}static renderProductGridContainer(t){const e=new DOMParser().parseFromString(t,"text/html");document.querySelector("[data-product-grid-container]").innerHTML=e.querySelector("[data-product-grid-container]").innerHTML,["#DesktopFacets","#MobileFacets","#DrawerFacets","#DrawerSort"].forEach(l=>{const c=document.querySelector(l);c&&(c.loading=!1)});const i=e.querySelector("[data-drawer-filter-count]"),s=document.querySelector("[data-drawer-filter-count]");
1i&&s&&(s.innerHTML=i.innerHTML),window.sal.update(),window.shopifyWishlist&&window.shopifyWishlist.initButtons(document.querySelector("[data-product-grid-container]"))}static renderSectionFromCache(t,e){const{html:i}=r.filterData.find(t);r.renderFilters(i,e),r.renderProductGridContainer(i)}static renderSectionFromFetch(t,e){fetch(t).then(i=>i.text()).then(i=>{const s=i;r.filterData=[...r.filterData,{html:s,url:t}],r.renderFilters(s,e),r.renderProductGridContainer(s)})}static renderPage(t,e,i=!0){r.searchParamsPrev=t,r.getSections().forEach(l=>{const c=`${window.location.pathname}?section_id=${l.section}&${t}`,a=d=>d.url===c;r.filterData.some(a)?r.renderSectionFromCache(a,e):r.renderSectionFromFetch(c,e)}),i&&r.updateURLHash(t)}static updateURLHash(t){window.history.pushState({searchParams:t},"",`${window.location.pathname}${t&&"?".concat(t)}`)}static getSections(){return[{section:document.getElementById("product-grid").dataset.id}]}get activeFilter(){return this._activeFilter}set activeFilter(t){t?this.activeFilter&&this.activeFilter===t?(this.id==="DesktopFacets"&&(this.querySelector(`[data-filter-btn="${this.activeFilter}"]`).classList.remove("active"),this.classList.remove("active"),this.querySelector(`[data-filter-options="${this.activeFilter}"]`).classList.remove("active")),document.querySelector("[data-sticky-filters]").classList.remove("active"),this._activeFilter=!1):this.activeFilter?(this.id==="DesktopFacets"&&(this.querySelector(`[data-filter-btn="${this.activeFilter}"]`).classList.remove("active"),this.querySelector(`[data-filter-btn="${t}"]`).classList.add("active"),this.querySelector(`[data-filter-options="${this.activeFilter}"]`).classList.remove("active"),this.querySelector(`[data-filter-options="${t}"]`).classList.add("active")),this._activeFilter=t):(this.id==="DesktopFacets"&&(this.querySelector(`[data-filter-btn="${t}"]`).classList.add("active"),this.classList.add("active"),this.querySelector(`[data-filter-options="${t}"]`).classList.add("active")),document.querySelector("[data-sticky-filters]").classList.add("active"),this._activeFilter=t):(this.id==="DesktopFacets"&&(this.querySelector(`[data-filter-btn="${this.activeFilter}"]`).classList.remove("active"),this.classList.remove("active"),this.querySelector(`[data-filter-options="${this.activeFilter}"]`).classList.remove("active")),document.querySelector("[data-sticky-filters]").classList.remove("active"),this._activeFilter=!1)}get loading(){return this._loading}set loading(t){this._loading=t,this.classList.toggle("loading",t)}}r.filterData=[];r.searchParamsInitial=window.location.search.slice(1);r.searchParamsPrev=window.location.search.slice(1);customElements.define("facets-form",r);r.setListeners();

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.