PageSourceSearch

https://www.agcga.org/wp-content/plugins/agc-novi-plugin-main/assets/events-slider.js?ver=0.6.1

js agcga.org collected 2026-09-29 09:31:33 UTC 3,663 bytes, 115 lines download raw bytes

1/**
2 * Dependency-free slider for .agc-novi-slider, replicating the behavior
3 * of the old agcga-imis Swiper init (extracted 2026-08-12): slides per
4 * view 1 (<768px) / 2 (<1024px) / 3 (>=1024px), grouped paging, 20px
5 * gaps, 1.2s ease, prev/next arrows, clickable bullets.
6 */
7( function () {
8	'use strict';
9
10	var GAP = 20;
11	var SPEED_MS = 1200;
12
13	function slidesPerView( width ) {
14		if ( width >= 1024 ) return 3;
15		if ( width >= 768 ) return 2;
16		return 1;
17	}
18
19	function initSlider( root ) {
20		var wrapper = root.querySelector( '.swiper-wrapper' );
21		var slides = wrapper ? wrapper.children : [];
22		if ( ! wrapper || ! slides.length ) return;
23
24		var prev = root.querySelector( '.swiper-button-prev' );
25		var next = root.querySelector( '.swiper-button-next' );
26		var pagination = root.querySelector( '.swiper-pagination' );
27
28		var perView = 0;
29		var page = 0;
30		var retries = 0;
31
32		function pageCount() {
33			return Math.max( 1, Math.ceil( slides.length / perView ) );
34		}
35
36		function layout() {
37			// A container measured at 0 (fonts/sections still settling)
38			// would write 0px slide widths — wait for real geometry.
39			if ( root.clientWidth < 60 ) {
40				if ( retries < 40 ) {
41					retries++;
42					setTimeout( layout, 125 );
43				}
44				return;
45			}
46			perView = slidesPerView( root.clientWidth );
47			var slideWidth = ( root.clientWidth - GAP * ( perView - 1 ) ) / perView;
48			for ( var i = 0; i < slides.length; i++ ) {
49				slides[ i ].style.width = slideWidth + 'px';
50				slides[ i ].style.marginRight = i === slides.length - 1 ? '0' : GAP + 'px';
51			}
52			page = Math.min( page, pageCount() - 1 );
53			update();
54		}
55
56		function update() {
57			var slideWidth = ( root.clientWidth - GAP * ( perView - 1 ) ) / perView;
58			// Last page aligns to the final slide instead of leaving a gap.
59			var maxStart = Math.max( 0, slides.length - perView );
60			var startSlide = Math.min( page * perView, maxStart );
61			wrapper.style.transform = 'translateX(-' + startSlide * ( slideWidth + GAP ) + 'px)';
62
63			if ( prev ) prev.classList.toggle( 'agc-disabled', page === 0 );
64			if ( next ) next.classList.toggle( 'agc-disabled', page >= pageCount() - 1 );
65			renderBullets();
66		}
67
68		function renderBullets() {
69			if ( ! pagination ) return;
70			var total = pageCount();
71			var html = '';
72			for ( var i = 0; i < total; i++ ) {
73				html += '<span class="swiper-pagination-bullet' + ( i === page ? ' swiper-pagination-bullet-active' : '' ) + '" data-page="' + i + '" role="button" aria-label="Go to slide group ' + ( i + 1 ) + '"></span>';
74			}
75			pagination.innerHTML = html;
76		}
77
78		function goTo( target ) {
79			page = Math.max( 0, Math.min( target, pageCount() - 1 ) );
80			update();
81		}
82
83		if ( prev ) prev.addEventListener( 'click', function () { goTo( page - 1 ); } );
84		if ( next ) next.addEventListener( 'click', function () { goTo( page + 1 ); } );
85		if ( pagination ) {
86			pagination.addEventListener( 'click', function ( event ) {
87				var bullet = event.target.closest( '[data-page]' );
88				if ( bullet ) goTo( parseInt( bullet.getAttribute( 'data-page' ), 10 ) );
89			} );
90		}
91
92		var resizeTimer = null;
93		window.addEventListener( 'resize', function () {
94			clearTimeout( resizeTimer );
95			resizeTimer = setTimeout( layout, 150 );
96		} );
97
98		wrapper.style.transition = 'transform ' + SPEED_MS + 'ms ease';
99		layout();
100		window.addEventListener( 'load', layout );
101	}
102
103	function boot() {
104		var sliders = document.querySelectorAll( '.agc-novi-slider' );
105		for ( var i = 0; i < sliders.length; i++ ) {
106			initSlider( sliders[ i ] );
107		}
108	}
109
110	if ( 'loading' === document.readyState ) {
111		document.addEventListener( 'DOMContentLoaded', boot );
112	} else {
113		boot();
114	}
115} )();

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.