PageSourceSearch

https://www.sanar-tver.ru/local/templates/redesign_new/assets/js/script.js?174471119012074

js sanar-tver.ru collected 2026-09-28 22:46:08 UTC 12,074 bytes, 402 lines download raw bytes

1document.addEventListener('DOMContentLoaded', () => {
2  let selector = {
3    body: 'body',
4    menuToggle: '.menu-toggle-cont',
5    fixedMenu: '.fixed-menu',
6    select: '.select',
7    selectName: '.select-current__name',
8    selectHideConteiner: '.select-hide',
9    selectActive: '.select.active',
10    selectOpenBtn: '.select .select-current',
11    selectSetActive: '.select-hide__radio label',
12    catalogOpen: '.catalog-content__menu_button',
13    catalogOpenContent: '.catalog-content__menu',
14    openLinkFirst: '.catalog-list__link_first.after',
15    openFirst: '.catalog-list_second',
16    openLinkSecond: '.catalog-list__link_second.after',
17    openSecond: '.catalog-list_third',
18    lkOpen: '.lk-sidebar__button',
19    lkOpenContent: '.lk-sidebar',
20    voidPrint: '.print',
21    fancyLink: 'a[data-fancy]',
22    fancyModalConteiner: '.modal-body',
23    fancyModalTitle: '.fancy-title'
24  };
25  this.activeAnimation = false;
26  document.addEventListener('click', (e) => {
27    let currentTarget = e.target;
28    if (currentTarget.matches(selector.openLinkFirst)) {
29      e.preventDefault();
30      let open = currentTarget.parentElement.querySelector(selector.openFirst);
31
32      if (open.classList.contains('active')) {
33        currentTarget.parentElement.classList.remove('active');
34        open.classList.remove('active');
35        open.style.maxHeight = open.scrollHeight + 'px';
36        setTimeout(() => {
37          open.style.maxHeight = 0;
38        }, 10);
39      } else {
40        let endAction = () => {
41          open.removeEventListener('transitionend', endAction);
42          open.style.maxHeight = 'fit-content';
43        };
44        currentTarget.parentElement.classList.add('active');
45        open.classList.add('active');
46        open.style.maxHeight = open.scrollHeight + 'px';
47        open.addEventListener('transitionend', endAction);
48      }
49    }
50
51    if (currentTarget.matches(selector.openLinkSecond)) {
52      e.preventDefault();
53      let open = currentTarget.parentElement.querySelector(selector.openSecond);
54      if (open.classList.contains('active')) {
55        currentTarget.parentElement.classList.remove('active');
56        open.classList.remove('active');
57        open.style.maxHeight = 0;
58      } else {
59        currentTarget.parentElement.classList.add('active');
60        open.classList.add('active');
61        open.style.maxHeight = open.scrollHeight + 'px';
62      }
63    }
64
65
66    if (currentTarget.matches('.search-button:not(.active)')) {
67
68      console.log(currentTarget);
69
70      if (!this.activeAnimation) {
71        this.activeAnimation = true;
72        e.preventDefault();
73        currentTarget.classList.add('active');
74        const headerBlock = document.querySelector('.header-block');
75
76        if (headerBlock) {
77          const logo = headerBlock.querySelector('.header-block__logo');
78          const firstEndAction = () => {
79            //   currentTarget.removeEventListener('transitionend', secondEndAction);
80            headerBlock.classList.add('search-show', 'search-hide');
81            this.activeAnimation = false;
82          };
83          logo.addEventListener('transitionend', firstEndAction);
84          headerBlock.classList.add('hide');
85        }
86      }
87    } else {
88      if (!currentTarget.closest('.header-block__content_form')) {
89        if (!this.activeAnimation) {
90          this.activeAnimation = true;
91          const currentTarget = document.querySelector('.search-button.active')
92          if (!currentTarget)
93            return;
94          currentTarget.classList.remove('active');
95          const headerBlock = document.querySelector('.header-block');
96          if (headerBlock) {
97            const inputSearch = headerBlock.querySelector('.header-block__content_form .form-control');
98            const firstEndAction = () => {
99              inputSearch.removeEventListener('transitionend', firstEndAction);
100              headerBlock.classList.remove('hide');
101              this.activeAnimation = false;
102            };
103            inputSearch.addEventListener('transitionend', firstEndAction)
104            headerBlock.classList.remove('search-show', 'search-hide');
105          }
106        }
107      }
108    }
109
110    //fancy-box
111    if (currentTarget.matches(selector.fancyLink)) {
112      e.preventDefault();
113      let
114        conteiner = document.querySelector(currentTarget.getAttribute('data-fancy')).querySelector(selector.fancyModalConteiner),
115        title = document.querySelector(currentTarget.getAttribute('data-fancy')).querySelector(selector.fancyModalTitle),
116        img = document.createElement('img');
117      conteiner.replaceChildren();
118      img.src = currentTarget.getAttribute('href');
119      if (currentTarget.getAttribute('data-title')) {
120        title.innerHTML = currentTarget.getAttribute('data-title');
121      } else {
122        title.innerHTML = '';
123      }
124      conteiner.append(img);
125      bootstrap.Modal.getOrCreateInstance(document.querySelector(currentTarget.getAttribute('data-fancy'))).show();
126    }
127    // print
128    if (currentTarget.matches(selector.voidPrint)) {
129      window.print();
130    }
131    // close all select and show select
132    let selectActive = document.querySelectorAll(selector.selectActive);
133
134    if (!currentTarget.closest(selector.selectHideConteiner)) {
135      if (currentTarget.closest(selector.selectOpenBtn)) {
136        if (!currentTarget.parentElement.classList.contains('active')) {
137          selectActive.forEach(elem => {
138            elem.classList.remove('active');
139          });
140          currentTarget.parentElement.classList.add('active');
141        } else {
142          selectActive.forEach(elem => {
143            elem.classList.remove('active');
144          });
145        }
146      } else {
147        selectActive.forEach(elem => {
148          elem.classList.remove('active');
149        });
150      }
151    } else {
152      if (currentTarget.matches(selector.selectSetActive)) {
153        let
154          text = currentTarget.innerHTML,
155          select = findParentElement(currentTarget, selector.select),
156          selectName = select.querySelectorAll(selector.selectName);
157        selectName.forEach(elem => {
158          elem.innerHTML = text;
159        });
160        select.classList.remove('active');
161      }
162    }
163    // mobile menu toggle
164    if (currentTarget.closest(selector.menuToggle)) {
165      e.preventDefault();
166      let body = document.querySelector(selector.body),
167        fixedMenu = document.querySelector(selector.fixedMenu),
168        menuToggle = document.querySelector(selector.menuToggle);
169      if (!menuToggle.classList.contains('menu-toggle-cont_active')) {
170        menuToggle.classList.add('menu-toggle-cont_active');
171        fixedMenu.classList.add('active');
172        body.classList.add('hidd');
173      } else {
174        menuToggle.classList.remove('menu-toggle-cont_active');
175        fixedMenu.classList.remove('active');
176        body.classList.remove('hidd');
177      }
178    }
179
180    if (currentTarget.matches(selector.catalogOpen)) {
181      e.preventDefault();
182      let open = currentTarget.parentElement.querySelector(selector.catalogOpenContent);
183      if (open.classList.contains('active')) {
184        currentTarget.parentElement.classList.remove('active');
185        open.classList.remove('active');
186        open.style.maxHeight = 0;
187      } else {
188        currentTarget.parentElement.classList.add('active');
189        open.classList.add('active');
190        open.style.maxHeight = open.scrollHeight + 'px';
191      }
192    }
193
194    if (currentTarget.matches(selector.lkOpen)) {
195      e.preventDefault();
196      let open = currentTarget.parentElement.querySelector(selector.lkOpenContent);
197      if (open.classList.contains('active')) {
198        currentTarget.parentElement.classList.remove('active');
199        open.classList.remove('active');
200        open.style.maxHeight = 0;
201      } else {
202        currentTarget.parentElement.classList.add('active');
203        open.classList.add('active');
204        open.style.maxHeight = open.scrollHeight + 'px';
205      }
206    }
207
208    function findParentElement(elem, selector) {
209      if (selector) {
210        while (elem !== undefined && elem !== null) {
211          elem = getParent(elem);
212          if (elem !== undefined && elem !== null) {
213            if (elem.matches(selector)) {
214              return elem;
215            }
216          }
217        }
218        return;
219      } else {
220        return;
221      }
222
223      function getParent(elem) {
224        return elem.parentElement;
225      }
226    }
227  });
228
229  const mainSlider = new Swiper(".main-slider", {
230    allowTouchMove: true,
231    slidesPerView: 1,
232    loop: true,
233    spaceBetween: 0,
234    speed: 800,
235    navigation: {
236      nextEl: ".main-next",
237      prevEl: ".main-prev"
238    },
239    autoplay: {
240      delay: 4000
241    },
242    pagination: {
243      el: ".swiper-pagination",
244      clickable: true
245    }
246  });
247
248  const newsSlider = new Swiper(".news-slider", {
249    allowTouchMove: true,
250    slidesPerView: 2,
251    loop: false,
252    spaceBetween: 30,
253    speed: 800,
254    navigation: {
255      nextEl: ".news-next",
256      prevEl: ".news-prev"
257    },
258    breakpoints: {
259      1460: {
260        spaceBetween: 18,
261        slidesPerView: 4,
262      },
263      1200: {
264        slidesPerView: 3,
265        spaceBetween: 18,
266      },
267      991: {
268        slidesPerView: 2,
269        spaceBetween: 18,
270      }
271    },
272  });
273
274  const newsSlider5 = new Swiper(".news-slider-5", {
275    allowTouchMove: true,
276    slidesPerView: 2,
277    loop: false,
278    spaceBetween: 30,
279    speed: 800,
280    navigation: {
281      nextEl: ".news-next",
282      prevEl: ".news-prev"
283    },
284    breakpoints: {
285      1460: {
286        spaceBetween: 18,
287        slidesPerView: 5,
288      },
289      1200: {
290        slidesPerView: 4,
291        spaceBetween: 18,
292      },
293      991: {
294        slidesPerView: 3,
295        spaceBetween: 18,
296      }
297    },
298  });
299
300  const modalSlider = new Swiper(".modal-slider", {
301    allowTouchMove: true,
302    slidesPerView: 1,
303    loop: true,
304    spaceBetween: 30,
305    speed: 800,
306    navigation: {
307      nextEl: ".modal-next",
308      prevEl: ".modal-prev"
309    },
310    breakpoints: {
311      1200: {
312        slidesPerView: 3
313      },
314      992: {
315        slidesPerView: 2
316      }
317    }
318  });
319
320  const partnersSlider = new Swiper(".partners-slider", {
321    allowTouchMove: true,
322    slidesPerView: 1,
323    loop: true,
324    spaceBetween: 30,
325    speed: 800,
326    navigation: {
327      nextEl: ".partners-next",
328      prevEl: ".partners-prev"
329    },
330    breakpoints: {
331      1200: {
332        slidesPerView: 4
333      },
334      768: {
335        slidesPerView: 3
336      }
337    }
338  });
339
340  const swiper = new Swiper(".mySwiper", {
341    spaceBetween: 10,
342    slidesPerView: 4,
343    freeMode: true,
344    loop: false,
345    watchSlidesProgress: true,
346    direction: 'vertical',
347  });
348  const swiper2 = new Swiper(".mySwiper2", {
349    spaceBetween: 0,
350    loop: false,
351    autoHeight: true,
352    navigation: {
353      nextEl: ".product-next",
354      prevEl: ".product-prev",
355    },
356    pagination: {
357      el: ".product-pagination",
358      clickable: true,
359    },
360    thumbs: {
361      swiper: swiper,
362    },
363  });
364
365  $(window).scroll(function () {
366    if ($(this).scrollTop() > 250)
367      $('#scrolling').fadeIn(700);
368    else
369      $('#scrolling').fadeOut(700);
370  });
371  $('#scrolling').click(function () {
372    $('body,html').animate({scrollTop: 0}, 700);
373    return false;
374  });
375
376  document.addEventListener('click', event => {
377    const allChars = event.target.closest('.open-characteristics');
378
379    if (allChars) {
380      const charsTabButton = document.querySelector('#tab-2');
381      const charsTab = document.querySelector('#tab-2-2');
382
383
384      if (charsTab) {
385
386        event.preventDefault();
387
388        const allTabsButtons = document.querySelectorAll('.product-tab .nav-link.active');
389        const allTabs = document.querySelectorAll('.product-tab .tab-pane.active.show');
390
391        allTabs.forEach(tab => tab.classList.remove('active', 'show'));
392        allTabsButtons.forEach(tab => tab.classList.remove('active'));
393
394
395        charsTabButton.classList.add('active');
396        charsTab.classList.add('active', 'show');
397
398        charsTabButton.scrollIntoView({behavior: "smooth"})
399      }
400    }
401  })
402});

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.