PageSourceSearch

https://unternehmerverband.ch/cache-buster-1675858634/static/unterne/assets/js/main.js

js unternehmerverband.ch collected 2026-10-09 23:26:04 UTC 6,476 bytes, 249 lines download raw bytes

1(function() {
2  "use strict";
3
4  /**
5   * Easy selector helper function
6   */
7  const select = (el, all = false) => {
8    el = el.trim()
9    if (all) {
10      return [...document.querySelectorAll(el)]
11    } else {
12      return document.querySelector(el)
13    }
14  }
15
16  /**
17   * Easy event listener function
18   */
19  const on = (type, el, listener, all = false) => {
20    let selectEl = select(el, all)
21    if (selectEl) {
22      if (all) {
23        selectEl.forEach(e => e.addEventListener(type, listener))
24      } else {
25        selectEl.addEventListener(type, listener)
26      }
27    }
28  }
29
30  /**
31   * Easy on scroll event listener 
32   */
33  const onscroll = (el, listener) => {
34    el.addEventListener('scroll', listener)
35  }
36
37  /**
38   * Navbar links active state on scroll
39   */
40  let navbarlinks = select('#navbar .scrollto', true)
41  const navbarlinksActive = () => {
42    let position = window.scrollY + 200
43    navbarlinks.forEach(navbarlink => {
44      if (!navbarlink.hash) return
45      let section = select(navbarlink.hash)
46      if (!section) return
47      if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
48        navbarlink.classList.add('active')
49      } else {
50        navbarlink.classList.remove('active')
51      }
52    })
53  }
54  window.addEventListener('load', navbarlinksActive)
55  onscroll(document, navbarlinksActive)
56
57  /**
58   * Scrolls to an element with header offset
59   */
60  const scrollto = (el) => {
61    let header = select('#header')
62    let offset = header.offsetHeight
63
64    let elementPos = select(el).offsetTop
65    window.scrollTo({
66      top: elementPos - offset,
67      behavior: 'smooth'
68    })
69  }
70
71  /**
72   * Header fixed top on scroll
73   */
74  let selectHeader = select('#header')
75  if (selectHeader) {
76    let headerOffset = selectHeader.offsetTop
77    let nextElement = selectHeader.nextElementSibling
78    const headerFixed = () => {
79      if ((headerOffset - window.scrollY) <= 0) {
80        selectHeader.classList.add('fixed-top')
81        nextElement.classList.add('scrolled-offset')
82      } else {
83        selectHeader.classList.remove('fixed-top')
84        nextElement.classList.remove('scrolled-offset')
85      }
86    }
87    window.addEventListener('load', headerFixed)
88    onscroll(document, headerFixed)
89  }
90
91  /**
92   * Hero carousel indicators
93   */
94  let heroCarouselIndicators = select("#hero-carousel-indicators")
95  let heroCarouselItems = select('#heroCarousel .carousel-item', true)
96
97  heroCarouselItems.forEach((item, index) => {
98    (index === 0) ?
99    heroCarouselIndicators.innerHTML += "<li data-bs-target='#heroCarousel' data-bs-slide-to='" + index + "' class='active'></li>":
100      heroCarouselIndicators.innerHTML += "<li data-bs-target='#heroCarousel' data-bs-slide-to='" + index + "'></li>"
101  });
102
103  /**
104   * Back to top button
105   */
106  let backtotop = select('.back-to-top')
107  if (backtotop) {
108    const toggleBacktotop = () => {
109      if (window.scrollY > 100) {
110        backtotop.classList.add('active')
111      } else {
112        backtotop.classList.remove('active')
113      }
114    }
115    window.addEventListener('load', toggleBacktotop)
116    onscroll(document, toggleBacktotop)
117  }
118
119  /**
120   * Mobile nav toggle
121   */
122  on('click', '.mobile-nav-toggle', function(e) {
123    select('#navbar').classList.toggle('navbar-mobile')
124    this.classList.toggle('bi-list')
125    this.classList.toggle('bi-x')
126  })
127
128  /**
129   * Mobile nav dropdowns activate
130   */
131  on('click', '.navbar .dropdown > a', function(e) {
132    if (select('#navbar').classList.contains('navbar-mobile')) {
133      e.preventDefault()
134      this.nextElementSibling.classList.toggle('dropdown-active')
135    }
136  }, true)
137
138  /**
139   * Scrool with ofset on links with a class name .scrollto
140   */
141  on('click', '.scrollto', function(e) {
142    if (select(this.hash)) {
143      e.preventDefault()
144
145      let navbar = select('#navbar')
146      if (navbar.classList.contains('navbar-mobile')) {
147        navbar.classList.remove('navbar-mobile')
148        let navbarToggle = select('.mobile-nav-toggle')
149        navbarToggle.classList.toggle('bi-list')
150        navbarToggle.classList.toggle('bi-x')
151      }
152      scrollto(this.hash)
153    }
154  }, true)
155
156  /**
157   * Scroll with ofset on page load with hash links in the url
158   */
159  window.addEventListener('load', () => {
160    if (window.location.hash) {
161      if (select(window.location.hash)) {
162        scrollto(window.location.hash)
163      }
164    }
165  });
166
167  /**
168   * Porfolio isotope and filter
169   */
170  window.addEventListener('load', () => {
171    let portfolioContainer = select('.portfolio-container');
172    if (portfolioContainer) {
173      let portfolioIsotope = new Isotope(portfolioContainer, {
174        itemSelector: '.portfolio-item',
175        layoutMode: 'fitRows'
176      });
177
178      let portfolioFilters = select('#portfolio-flters li', true);
179
180      on('click', '#portfolio-flters li', function(e) {
181        e.preventDefault();
182        portfolioFilters.forEach(function(el) {
183          el.classList.remove('filter-active');
184        });
185        this.classList.add('filter-active');
186
187        portfolioIsotope.arrange({
188          filter: this.getAttribute('data-filter')
189        });
190        portfolioIsotope.on('arrangeComplete', function() {
191          AOS.refresh()
192        });
193      }, true);
194    }
195
196  });
197
198  /**
199   * Initiate portfolio lightbox 
200   */
201  const portfolioLightbox = GLightbox({
202    selector: '.portfolio-lightbox'
203  });
204
205  /**
206   * Portfolio details slider
207   */
208  new Swiper('.portfolio-details-slider', {
209    speed: 400,
210    autoplay: {
211      delay: 5000,
212      disableOnInteraction: false
213    },
214    pagination: {
215      el: '.swiper-pagination',
216      type: 'bullets',
217      clickable: true
218    }
219  });
220
221  /**
222   * Animation on scroll
223   */
224  window.addEventListener('load', () => {
225    AOS.init({
226      duration: 1000,
227      easing: "ease-in-out",
228      once: true,
229      mirror: false
230    });
231  });
232
233})()
234
235
236
237
238$('#chooseFile').bind('change', function () {
239  var filename = $("#chooseFile").val();
240  if (/^\s*$/.test(filename)) {
241    $(".file-upload").removeClass('active');
242    $("#noFile").text("No file chosen..."); 
243  }
244  else {
245    $(".file-upload").addClass('active');
246    $("#noFile").text(filename.replace("C:\\fakepath\\", "")); 
247  }
248});
249

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.