PageSourceSearch

https://valleyair.org/assets/product/valleyair/js/utility-rev2.js?v=20231206.1

js valleyair.org collected 2026-10-02 06:46:22 UTC 6,203 bytes, 193 lines download raw bytes

1document.addEventListener("DOMContentLoaded", function(){
2    mainNavX();
3    swiper();
4    landingCategories();
5    accordion();
6    internalNavListToggleKeepAlive();
7    internalNavListToggleActive();
8    internalNavListToggle();
9    internalNavListIconControlOnLoad();
10});
11
12// Simple expandable list
13// 
14function internalNavListToggle() {
15    $('.icon-control').click(function() {
16        $(this).parent().find('ul').toggle();
17        $(this).parent().find('ul').toggleClass('active'); 
18        $(this).parent().find('i').toggleClass('fa-plus');
19        $(this).parent().find('i').toggleClass('fa-minus');
20    });
21}
22
23function internalNavListToggleActive() {
24    $(".internal-nav li.active ul").toggle();
25}
26
27function internalNavListToggleKeepAlive() {
28    $(".internal-nav li ul li.active").parent().addClass('active');
29    $(".internal-nav li ul.active").parent().addClass('active');
30}
31
32function internalNavListIconControlOnLoad() {
33    $(".internal-nav li.active").find('.icon-control i').removeClass('fa-plus');
34    $(".internal-nav li.active").find('.icon-control i').addClass('fa-minus');
35    $(".internal-nav li ul.active").parent().find('.icon-control i').removeClass('fa-plus');
36    $(".internal-nav li ul.active").parent().find('.icon-control i').addClass('fa-minus');
37} 
38
39// Swiper
40// 
41function swiper() {
42    var mySwiper = new Swiper('.swiper-container', {
43    // Optional parameters
44    direction: 'horizontal',
45    effect: 'fade',
46    loop: true,
47    // autoplay: false,
48    autoplay: {
49        delay: 8000,
50        disableOnInteraction: false,
51        pauseOnMouseEnter: true,
52    },
53    fadeEffect: {
54        crossFade: true
55    },
56    // If we need pagination
57    pagination: {
58        el: '.swiper-pagination',
59    },
60    // Navigation arrows
61    navigation: {
62        nextEl: '.swiper-button-next',
63        prevEl: '.swiper-button-prev',
64    },
65    // And if we need scrollbar
66    scrollbar: {
67        el: '.swiper-scrollbar',
68        draggable: true,
69    },
70    })
71
72    // $(".swiper-button-pause").click(function(){
73    //     swiper.pause();
74    //   });
75    
76    //   $(".swiper-button-play").click(function(){
77    //     swiper.start();
78    //   });
79}
80
81// Landing Categories
82// 
83function landingCategories() {
84    $('#landing-air-quality').click(function() {
85        // nav items
86        $(this).addClass('active');
87        $('#landing-grants').removeClass('active');
88        $('#landing-general').removeClass('active');
89        // Categories
90        $('.landing-category--air-quality').addClass('active');
91        $('.landing-category--grants').removeClass('active');
92        $('.landing-category--general').removeClass('active');
93    });
94
95    $('#landing-grants').click(function() {
96        // nav items
97        $(this).addClass('active');
98        $('#landing-air-quality').removeClass('active');
99        $('#landing-general').removeClass('active');
100        // Categories
101        $('.landing-category--grants').addClass('active');
102        $('.landing-category--air-quality').removeClass('active');
103        $('.landing-category--general').removeClass('active');
104    });
105
106    $('#landing-general').click(function() {
107        // nav items
108        $(this).addClass('active');
109        $('#landing-air-quality').removeClass('active');
110        $('#landing-grants').removeClass('active');
111        // Categories
112        $('.landing-category--general').addClass('active');
113        $('.landing-category--air-quality').removeClass('active');
114        $('.landing-category--grants').removeClass('active');
115    });
116}
117
118// Accordion
119// 
120function accordion() {
121    const accordionBtns = document.querySelectorAll(".vad-accordion__control");
122
123    accordionBtns.forEach((accordion) => {
124        accordion.onclick = function () {
125            this.classList.toggle("is-open");
126
127            let content = this.nextElementSibling;
128            console.log(content);
129
130            if (content.style.maxHeight) {
131                //this is if the accordion is open
132                content.style.maxHeight = null;
133            } else {
134                //if the accordion is currently closed
135                content.style.maxHeight = content.scrollHeight + "px";
136                console.log(content.style.maxHeight);
137            }
138        };
139    });
140}
141
142// Main Nav
143// 
144function mainNavX() {
145    const topLevelItem = document.querySelectorAll(".vad-main-nav__top-level");
146    const topLevelListItem = document.querySelectorAll(".vad-main-nav__has-sub");
147    const noClickItems = document.querySelectorAll('.cms-top-section, .cms-alert, .aqi-forecast-widget, .landing-slider__link-layer, .landing-actions, .vad-footer-top, .vad-footer-ribbon');
148
149    var body = document.body;
150    var navMain = document.querySelector(".vad-main-nav");
151    var navMainList = document.querySelector(".vad-main-nav__list");
152    var navControl = document.querySelector(".control__vad-main-nav a");
153    var navControlIcon = document.querySelector(".control__vad-main-nav a i");
154    var navMainSub = document.querySelectorAll(".vad-main-nav__sub");
155    var navControlBack = document.querySelectorAll(".vad-main-nav__back a");
156
157    navControl.addEventListener('click', function (e) {
158
159        navMain.classList.toggle('active');
160        navControlIcon.classList.toggle('fa-times');
161        body.classList.toggle("noScroll");
162
163        [].forEach.call(navMainSub, function(el) {
164            el.classList.remove("active");
165        });
166
167    });
168
169    navControlBack.forEach((item) => {
170        item.addEventListener('click', function (e) {
171            [].forEach.call(navMainSub, function(el) {
172                el.classList.remove("active");
173            });
174        });
175    });
176
177    topLevelItem.forEach((item) => {
178
179        item.onclick = function (e) {
180            let content = this.nextElementSibling;
181
182            content.classList.add('active');
183
184            // body.classList.add('inactive');
185
186            // noClickItems.forEach(element => {
187            //     element.classList.add('noClick');
188            // });
189        };
190
191    });
192}
193

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.