PageSourceSearch

https://securelist.ru/wp-content/plugins/kaspersky-custom-gallery/assets/js/script.js?ver=1790865803

js securelist.ru collected 2026-10-02 04:36:03 UTC 8,473 bytes, 264 lines download raw bytes

1// post gallery
2jQuery(document).ready(function($) {
3  $('._post .post-gallery').each(function(ind, el) {
4    var $gallery = $(el)
5    var resizeTimer
6
7    // Функция для пересчёта позиций и высоты
8    function updatePositions() {
9      // Пересчёт высоты
10      // var hSlickTrack = $gallery.find('.slick-track').height()
11
12      // if (hSlickTrack) {
13      //   $gallery.find('.slick-slide').height(hSlickTrack)
14      //   $gallery.find('.post-gallery__item').height(hSlickTrack)
15      // }
16
17      // Пересчёт позиций
18      var wGalleryDots = $gallery.find('ul.slick-dots').width()
19      var wGalleryWrapper = $gallery.closest('.post-gallery-wrapper').width()
20
21      if (wGalleryWrapper === 0) return
22
23      var offsetDots = (wGalleryWrapper - wGalleryDots) / 2
24      var offsetArrow = offsetDots - 70
25
26      // Перевод в проценты
27      var offsetDotsPercent = offsetDots / wGalleryWrapper * 100
28      var offsetArrowPercent = offsetArrow / wGalleryWrapper * 100
29
30      $gallery.find('ul.slick-dots').css('left', offsetDotsPercent + '%')
31      $gallery
32        .find('.slick-arrow.slick-next')
33        .css('right', offsetArrowPercent + '%')
34      $gallery
35        .find('.slick-arrow.slick-prev')
36        .css('left', offsetArrowPercent + '%')
37
38      // Очищаем текст стрелок
39      $('button.slick-arrow').html('')
40
41      // высота слайдера
42
43      // var hGalleryCurrent = $gallery.height()
44      var hActiveImage = $gallery.find('.slick-slide.slick-active img').height()
45
46      $gallery.css({
47        
48        height: hActiveImage + 'px'
49      })
50      // $gallery.height(hActiveImage)
51    }
52
53    // Событие инициализации Slick
54    $gallery.on('init', function(event, slick) {
55      updatePositions()
56    })
57
58    // Событие после изменения слайда
59    $gallery.on('afterChange', function() {
60      updatePositions()
61    })
62
63    // Событие ресайза с debounce для оптимизации
64    $(window).on('resize', function() {
65      clearTimeout(resizeTimer)
66      resizeTimer = setTimeout(function() {
67        updatePositions()
68      }, 150)
69    })
70
71    // Инициализация Slick слайдера
72    $gallery.slick({
73      dots: true,
74      infinite: false,
75      speed: 200,
76      fade: true,
77      responsive: [
78        {
79          breakpoint: 768,
80          settings: {
81            fade: false,
82            infinite: true
83          }
84        }
85      ]
86    })
87  })
88
89  // Функция для обновления позиций элементов в оверлее
90  function updateOverlayPositions($wrapper) {
91    if (!$wrapper.length || !$wrapper.hasClass('_overlay_show')) return
92
93    var wGalleryDots = $wrapper.find('ul.slick-dots').width()
94    var wGalleryWrapper = $wrapper.width()
95
96    if (wGalleryWrapper === 0) return
97
98    var offsetDots = (wGalleryWrapper - wGalleryDots) / 2
99    var offsetArrow = offsetDots - 70
100
101    // Перевод в проценты
102    var offsetDotsPercent = offsetDots / wGalleryWrapper * 100
103    var offsetArrowPercent = offsetArrow / wGalleryWrapper * 100
104
105    $wrapper.find('ul.slick-dots').css('left', offsetDotsPercent + '%')
106    $wrapper
107      .find('.slick-arrow.slick-next')
108      .css('right', offsetArrowPercent + '%')
109    $wrapper
110      .find('.slick-arrow.slick-prev')
111      .css('left', offsetArrowPercent + '%')
112
113    // Очищаем текст стрелок
114    $('button.slick-arrow').html('')
115  }
116
117  // Debounce функция для оптимизации
118  function debounce(func, wait) {
119    var timeout
120    return function executedFunction() {
121      var later = function() {
122        clearTimeout(timeout)
123        func()
124      }
125      clearTimeout(timeout)
126      timeout = setTimeout(later, wait)
127    }
128  }
129
130  // Инициализация оверлей слайдера
131  $('._overlay .post-gallery').on('init', function(event, slick) {
132    var $gallery = $(this)
133    var $wrapper = $gallery.closest('.post-gallery-wrapper._overlay')
134
135    updateOverlayPositions($wrapper)
136    $('.c-page-header, .site-top').addClass('overlay_only')
137  })
138
139  // Обновление позиций при ресайзе для активного оверлея
140  var debouncedResize = debounce(function() {
141    var $activeOverlay = $('.post-gallery-wrapper._overlay._overlay_show')
142    if ($activeOverlay.length) {
143      updateOverlayPositions($activeOverlay)
144    }
145  }, 150)
146
147  $(window).on('resize', debouncedResize)
148
149  // Обновление позиций при смене слайда в оверлее
150  $(document).on('afterChange', '._overlay .post-gallery', function(
151    event,
152    slick,
153    currentSlide
154  ) {
155    var $gallery = $(this)
156    var $wrapper = $gallery.closest('.post-gallery-wrapper._overlay')
157    if ($wrapper.hasClass('_overlay_show')) {
158      updateOverlayPositions($wrapper)
159    }
160  })
161
162  // Клик по изображению для открытия оверлея
163  $('.post-gallery._link_file img').on('click', function() {
164    var $img = $(this)
165    var $wrapper = $img.closest('.post-gallery-wrapper')
166    var galleryID = $wrapper.attr('data-id')
167    var $overlayWrapper = $('._overlay-' + galleryID)
168    var $overlayGallery = $overlayWrapper.find('.post-gallery')
169
170    var currentSlideIndex = $img
171      .closest('.slick-slide')
172      .attr('data-slick-index')
173    if (currentSlideIndex === undefined) {
174      currentSlideIndex = 0
175    } else {
176      currentSlideIndex = parseInt(currentSlideIndex)
177    }
178
179    // Инициализируем оверлей слайдер, если ещё не инициализирован
180    if (!$overlayGallery.hasClass('slick-initialized')) {
181      $overlayGallery.slick({
182        dots: true,
183        infinite: false,
184        speed: 200,
185        fade: true,
186        responsive: [
187          {
188            breakpoint: 768,
189            settings: {
190              fade: false,
191              infinite: true
192            }
193          }
194        ]
195      })
196    }
197
198    // Показываем оверлей
199    $overlayWrapper.addClass('_overlay_show')
200
201    // Переходим к нужному слайду
202    $overlayGallery.slick('slickGoTo', currentSlideIndex, true)
203
204    // Обновляем позиции после показа
205    setTimeout(function() {
206      updateOverlayPositions($overlayWrapper)
207    }, 50)
208  })
209
210  // Закрытие оверлея
211  $(document).on('click', '.post-gallery-wrapper._overlay_show', function(e) {
212    var $wrapper = $(this)
213    var $overlayGallery = $wrapper.find('.post-gallery')
214    var galleryID = $wrapper.attr('data-id')
215      ? $wrapper.attr('data-id').replace('_overlay-', '')
216      : ''
217
218    // Закрываем только при клике вне изображения и элементов управления
219    if (!$(e.target).is('img, .slick-arrow, .slick-dots *')) {
220      var currentSlideIndex = $overlayGallery.slick('slickCurrentSlide')
221
222      // Синхронизируем основной слайдер
223      if (galleryID) {
224        $('._post-' + galleryID + ' .post-gallery').slick(
225          'slickGoTo',
226          currentSlideIndex
227        )
228      }
229
230      // Уничтожаем оверлей слайдер
231      if ($overlayGallery.hasClass('slick-initialized')) {
232        $overlayGallery.slick('unslick')
233      }
234
235      // Скрываем оверлей
236      $wrapper.removeClass('_overlay_show')
237
238      // Удаляем классы с хедера
239      var $otherOverlays = $('.post-gallery-wrapper._overlay_show')
240      if (!$otherOverlays.length) {
241        $('.c-page-header, .site-top').removeClass('overlay_only')
242      }
243    }
244  })
245
246  // Дополнительная функция для закрытия оверлея по Escape
247  $(document).on('keydown', function(e) {
248    if (e.key === 'Escape' || e.keyCode === 27) {
249      var $activeOverlay = $('.post-gallery-wrapper._overlay_show')
250      if ($activeOverlay.length) {
251        $activeOverlay.trigger('click')
252      }
253    }
254  })
255
256  // Обновление позиций при загрузке всех изображений в оверлее
257  $(document).on('lazyLoaded', '._overlay .post-gallery', function() {
258    var $gallery = $(this)
259    var $wrapper = $gallery.closest('.post-gallery-wrapper._overlay')
260    if ($wrapper.hasClass('_overlay_show')) {
261      updateOverlayPositions($wrapper)
262    }
263  })
264})

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.