PageSourceSearch

https://komunitybevs.com/s/files/1/0654/5057/4075/t/2/compiled_assets/scripts_311.js

js komunitybevs.com collected 2026-10-10 01:00:34 UTC 7,029 bytes, 213 lines download raw bytes

1var _____WB$wombat$assign$function_____=function(name){return (self._wb_wombat && self._wb_wombat.local_init && self._wb_wombat.local_init(name))||self[name];};if(!self.__WB_pmw){self.__WB_pmw=function(obj){this.__WB_source=obj;return this;}}{
2let window = _____WB$wombat$assign$function_____("window");
3let self = _____WB$wombat$assign$function_____("self");
4let document = _____WB$wombat$assign$function_____("document");
5let location = _____WB$wombat$assign$function_____("location");
6let top = _____WB$wombat$assign$function_____("top");
7let parent = _____WB$wombat$assign$function_____("parent");
8let frames = _____WB$wombat$assign$function_____("frames");
9let opens = _____WB$wombat$assign$function_____("opens");
10(function() {
11  var __sections__ = {};
12  (function() {
13    for(var i = 0, s = document.getElementById('sections-script').getAttribute('data-sections').split(','); i < s.length; i++)
14      __sections__[s[i]] = true;
15  })();
16  (function() {
17  if (!__sections__["footer"]) return;
18  try {
19    
20  class LocalizationForm extends HTMLElement {
21    constructor() {
22      super();
23      this.elements = {
24        input: this.querySelector('input[name="locale_code"], input[name="country_code"]'),
25        button: this.querySelector('button'),
26        panel: this.querySelector('.disclosure__list-wrapper'),
27      };
28      this.elements.button.addEventListener('click', this.openSelector.bind(this));
29      this.elements.button.addEventListener('focusout', this.closeSelector.bind(this));
30      this.addEventListener('keyup', this.onContainerKeyUp.bind(this));
31
32      this.querySelectorAll('a').forEach(item => item.addEventListener('click', this.onItemClick.bind(this)));
33    }
34
35    hidePanel() {
36      this.elements.button.setAttribute('aria-expanded', 'false');
37      this.elements.panel.setAttribute('hidden', true);
38    }
39
40    onContainerKeyUp(event) {
41      if (event.code.toUpperCase() !== 'ESCAPE') return;
42
43      this.hidePanel();
44      this.elements.button.focus();
45    }
46
47    onItemClick(event) {
48      event.preventDefault();
49      const form = this.querySelector('form');
50      this.elements.input.value = event.currentTarget.dataset.value;
51      if (form) form.submit();
52    }
53
54    openSelector() {
55      this.elements.button.focus();
56      this.elements.panel.toggleAttribute('hidden');
57      this.elements.button.setAttribute('aria-expanded', (this.elements.button.getAttribute('aria-expanded') === 'false').toString());
58    }
59
60    closeSelector(event) {
61      const shouldClose = event.relatedTarget && event.relatedTarget.nodeName === 'BUTTON';
62      if (event.relatedTarget === null || shouldClose) {
63        this.hidePanel();
64      }
65    }
66  }
67
68  customElements.define('localization-form', LocalizationForm);
69
70  } catch(e) { console.error(e); }
71})();
72
73(function() {
74  if (!__sections__["header"]) return;
75  try {
76    
77  class StickyHeader extends HTMLElement {
78    constructor() {
79      super();
80    }
81
82    connectedCallback() {
83      this.header = document.getElementById('shopify-section-header');
84      this.headerBounds = {};
85      this.currentScrollTop = 0;
86      this.preventReveal = false;
87      this.predictiveSearch = this.querySelector('predictive-search');
88
89      this.onScrollHandler = this.onScroll.bind(this);
90      this.hideHeaderOnScrollUp = () => this.preventReveal = true;
91
92      this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
93      window.addEventListener('scroll', this.onScrollHandler, false);
94
95      this.createObserver();
96    }
97
98    disconnectedCallback() {
99      this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
100      window.removeEventListener('scroll', this.onScrollHandler);
101    }
102
103    createObserver() {
104      let observer = new IntersectionObserver((entries, observer) => {
105        this.headerBounds = entries[0].intersectionRect;
106        observer.disconnect();
107      });
108
109      observer.observe(this.header);
110    }
111
112    onScroll() {
113      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
114
115      if (this.predictiveSearch && this.predictiveSearch.isOpen) return;
116
117      if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
118        if (this.preventHide) return;
119        requestAnimationFrame(this.hide.bind(this));
120      } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
121        if (!this.preventReveal) {
122          requestAnimationFrame(this.reveal.bind(this));
123        } else {
124          window.clearTimeout(this.isScrolling);
125
126          this.isScrolling = setTimeout(() => {
127            this.preventReveal = false;
128          }, 66);
129
130          requestAnimationFrame(this.hide.bind(this));
131        }
132      } else if (scrollTop <= this.headerBounds.top) {
133        requestAnimationFrame(this.reset.bind(this));
134      }
135
136      this.currentScrollTop = scrollTop;
137    }
138
139    hide() {
140      this.header.classList.add('shopify-section-header-hidden', 'shopify-section-header-sticky');
141      this.closeMenuDisclosure();
142      this.closeSearchModal();
143    }
144
145    reveal() {
146      this.header.classList.add('shopify-section-header-sticky', 'animate');
147      this.header.classList.remove('shopify-section-header-hidden');
148    }
149
150    reset() {
151      this.header.classList.remove('shopify-section-header-hidden', 'shopify-section-header-sticky', 'animate');
152    }
153
154    closeMenuDisclosure() {
155      this.disclosures = this.disclosures || this.header.querySelectorAll('header-menu');
156      this.disclosures.forEach(disclosure => disclosure.close());
157    }
158
159    closeSearchModal() {
160      this.searchModal = this.searchModal || this.header.querySelector('details-modal');
161      this.searchModal.close(false);
162    }
163  }
164
165  customElements.define('sticky-header', StickyHeader);
166
167  } catch(e) { console.error(e); }
168})();
169
170(function() {
171  if (!__sections__["product-recommendations"]) return;
172  try {
173    
174  class ProductRecommendations extends HTMLElement {
175    constructor() {
176      super();
177
178      const handleIntersection = (entries, observer) => {
179        if (!entries[0].isIntersecting) return;
180        observer.unobserve(this);
181
182        fetch(this.dataset.url)
183          .then(response => response.text())
184          .then(text => {
185            const html = document.createElement('div');
186            html.innerHTML = text;
187            const recommendations = html.querySelector('product-recommendations');
188
189            if (recommendations && recommendations.innerHTML.trim().length) {
190              this.innerHTML = recommendations.innerHTML;
191            }
192
193            if (html.querySelector('.grid__item')) {
194              this.classList.add('product-recommendations--loaded');
195            }
196          })
197          .catch(e => {
198            console.error(e);
199          });
200      }
201
202      new IntersectionObserver(handleIntersection.bind(this), {rootMargin: '0px 0px 200px 0px'}).observe(this);
203    }
204  }
205
206  customElements.define('product-recommendations', ProductRecommendations);
207
208  } catch(e) { console.error(e); }
209})();
210
211})();
212
213}

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.