PageSourceSearch

https://itsecurity.ru/wp-content/themes/iskra-theme/front/src/js/m…/training-result-slider.js?ver=1788438850

js itsecurity.ru collected 2026-10-02 05:21:54 UTC 2,696 bytes, 68 lines download raw bytes

1console.log('training-result-slider.js LOADED');
2document.addEventListener('DOMContentLoaded', () => {
3    const slider = document.querySelector('.training-result_documents-slider');
4    if (!slider) {
5        console.log('Training slider not found');
6        return;
7    }
8    const track = slider.querySelector('.training-result_documents-track');
9    const slides = slider.querySelectorAll('.training-result_documents-slide');
10    const prev = slider.querySelector('.training-result_documents-nav--prev');
11    const next = slider.querySelector('.training-result_documents-nav--next');
12    const pagination = slider.querySelector('.training-result_documents-pagination');
13    if (!track || !slides.length || !prev || !next || !pagination) {
14        console.log('Training slider elements missing');
15        return;
16    }
17    let current = 0;
18    track.style.display = 'flex';
19    track.style.transition = 'transform .3s ease';
20    slides.forEach(slide => {
21        slide.style.flex = '0 0 100%';
22    });
23    function update() {
24        track.style.transform = `translateX(-${current * 100}%)`;
25        pagination.textContent = `${current + 1}/${slides.length}`;
26        prev.disabled = current === 0;
27        next.disabled = current === slides.length - 1;
28    }
29    next.addEventListener('click', () => {
30        if (current < slides.length - 1) {
31            current++;
32            update();
33        }
34    });
35    prev.addEventListener('click', () => {
36        if (current > 0) {
37            current--;
38            update();
39        }
40    });
41    update();
42
43    if (typeof $ !== 'undefined' && typeof $.fancybox !== 'undefined') {
44        $('[data-fancybox="training-results"]').fancybox({
45            buttons: ["zoom", "close"],
46            loop: false,
47            protect: true,
48            keyboard: false,
49            arrows: true,
50            infobar: false,
51            idleTime: false,
52            touch: false
53        });
54
55        // Синхронизация: fancybox сам листает свою группу свайпом,
56        // и это расходится с current в кастомном слайдере.
57        // Порядок data-fancybox элементов совпадает с порядком слайдов,
58        // поэтому просто берём индекс из fancybox и обновляем трек.
59        $(document).on('afterShow.fb', function (e, instance, slide) {
60            if (!instance || !instance.group || instance.group.length < 2) return;
61            if (slide.index === current) return;
62            current = slide.index;
63            update();
64        });
65    } else {
66        console.log('Fancybox not loaded');
67    }
68});

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.