PageSourceSearch

https://snocountry.com/assets/js/snowstatelist.js

js snocountry.com collected 2026-10-02 10:51:13 UTC 3,327 bytes, 85 lines download raw bytes

1
2const initializeFilters = () => {
3  let elCurrentActive;
4  waitForElement(`.filter-container #filter-all`).then(elFilterAll => {
5    elCurrentActive = elFilterAll;
6    document.querySelectorAll('.filter-container button[id^="filter-"]').forEach(iterElBtn => {
7      iterElBtn.addEventListener('click',() => {
8        _log('Filter btn clicked');
9        // Clear existing active button, reset to new one
10        elCurrentActive.className = "";
11        iterElBtn.classList.add('active');
12        elCurrentActive = iterElBtn;
13        const elSnowReportsContainer = document.querySelector('#container-snow-reports');
14        if (elSnowReportsContainer) {
15          elSnowReportsContainer.className = "";
16          elSnowReportsContainer.classList.add(iterElBtn.dataset.id);          
17        }
18      });    
19    });
20    
21
22  }).catch( () => { console.log('Error waiting for EL:');});
23};
24
25
26const insertSEOItemListOfResorts = () => {
27  waitForElement('.statelist-rendered').then(() => {
28    
29    let resortList = '';
30    let delim = '';
31    document.querySelectorAll('a.resort__link h2').forEach((iterEl) => {
32      resortList += `${delim} "${iterEl.innerText}"\n`;
33      delim = ',';
34    });
35    let state = document.body.dataset.snowreport.replaceAll('-',' ');
36    state = state.replace(/(^\w{1})|(\s+\w{1})/g, letter => letter.toUpperCase());
37    const seoItemList = `
38      <script type="application/ld+json">
39      {
40        "@context": "https://schema.org",
41        "@type": "ItemList",
42        "itemListElement": [
43          ${resortList}
44        ],
45        "itemListOrder": "https://schema.org/ItemListUnordered",
46        "name": "Ski Resorts in ${state}"
47      }
48      </script>
49    `;
50    document.querySelector('head').insertAdjacentHTML('beforeend',seoItemList);
51  }).catch( (e) => { console.error('Error waiting for resort list to create SEO state list of resorts:',e);});
52};
53
54document.addEventListener('DOMContentLoaded',()=> {
55  const target = document.body.dataset.snowreport;
56  const src = document.body.dataset.source;
57  const requestType = document.body.dataset.resorttype;
58  const endpoint = (src !== 'resort') ? 'list' : 'resort';  
59  // fetch(url,{"headers": {"sec-fetch-mode": "cors","Access-Control-Allow-Origin":"*"}, "mode":"cors"}).then(response => {
60  
61  //const url = `.netlify/functions/snowreport-api?target=${target}&src=${src}` ;
62  const url = (window.location.hostname !== 'localhost') ? `.netlify/functions/snowreport-api?target=${target}&src=${src}&type=${requestType}` : `https://feeds.snocountry.net/proof-of-concept/headless-snow-report-${endpoint}.php?target=${target}&src=${src}&type=${requestType}`;
63  _log(`snowreport-api: ${url}`);
64  fetch(url).then(response => {
65    return response.json();
66  }).then(data => {
67
68    document.querySelector('#container-snow-reports').innerHTML = data.snowreport;
69    //process progressbars
70    (function() {
71      const progressBarList = document.querySelectorAll('.progress-bar');
72      if (progressBarList) {
73        progressBarList.forEach(iterBar => {
74          iterBar.style.width = iterBar.dataset.percentage;
75          //console.log(`pb:`,iterBar.dataset.percentage); 
76        });
77      }
78    })();
79    initializeFilters();
80    insertSEOItemListOfResorts();
81
82  }).catch( () => { console.log('Error waiting for EL:');});
83
84  //checkForAd(target);
85});

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.