PageSourceSearch

https://skytracklatam.com/js/custom.250611080343.js

js skytracklatam.com collected 2026-10-02 01:43:30 UTC 8,181 bytes, 281 lines download raw bytes

1/* JS for preset "Marquee" */
2$(function() {
3   $('.marquee-wrap').attr('data-items', $('.marquee-wrap > .inner').children().length);
4});
5/* End JS for preset "Marquee" */
6
7/* JS for preset "Content Slider" */
8$(function() {
9	if (document.body.classList.contains('edit') || document.body.classList.contains('preview')) {
10		return;
11	}
12
13	viewport.promise('api.slick.ready', function() {
14		viewport.jQuery('.content-slider-wrap > .inner').slick({
15			autoplay: false,
16			arrows: true,
17			prevArrow: '<button type="button" data-role="none" class="slick-prev" tabindex="0" role="button"></button>',
18			nextArrow: '<button type="button" data-role="none" class="slick-next" tabindex="0" role="button"></button>',
19			speed: 300,
20			autoplaySpeed: 3000,
21			dots: true,
22			adaptiveHeight: true,
23			fade: false
24		});
25	}).requireSlick();
26});
27
28/* End JS for preset "Content Slider" */
29
30/* JS for preset "Menu V2" */
31(function() {
32	$(function() {
33		$('.menu-wrapper').each(function() {
34			initMenu($(this))
35		});
36	});
37
38	// Make :active pseudo classes work on iOS
39	document.addEventListener("touchstart", function() {}, false);
40
41	var initMenu = function($menuWrapper) {
42		var $body = $('body');
43		var $menu = $('.ed-menu', $menuWrapper);
44		var $menuLinks = $('a', $menu);
45		var $menuTrigger = $('.menu-trigger', $menuWrapper);
46		var $banner = $('.banner').first();
47
48		var menuWrapperHeight = $menuWrapper.outerHeight();
49		var bannerHeight = $banner.length ? $banner.outerHeight() : 0;
50		var smoothScrollOffset = 20;
51		
52		toggleClassOnClick($body.add($menu), $menuTrigger, null, 'open open-menu'); // Keep open on $menu for backward compatibility
53		activateSmoothScroll($menuLinks.add($('.scroll a')), smoothScrollOffset);
54		addClassOnVisibleLinkTargets($menuLinks, 'active', 2 / 3);
55		handleSticky($menuWrapper, 'sticky', $banner);
56	};
57
58	/**
59	 * Observe element's height changes and reload the initMenu() function
60	 *
61	 * @param {HTMLElement} elm Element to observe
62	 * @param {function} callback to call when elmement's height changed
63	 */
64	var observeHeightChange = function(elm, callback) {
65		if (!('ResizeObserver' in window) || elm == null) return;
66
67		var ro = new ResizeObserver(callback);
68		ro.observe(elm);
69	}
70
71	/**
72	 * Toggles class on a target when a trigger is clicked
73	 * 
74	 * @param {jQuery} $target The target to apply the CSS class to
75	 * @param {jQuery} $trigger The Trigger
76	 * @param {jQuery} $closeTrigger Optional close trigger
77	 * @param {string} cssClass CSS Class to toggle on the target
78	 */
79	var toggleClassOnClick = function($target, $trigger, $closeTrigger, cssClass) {
80
81		// Reset in case class "open" was saved accidentally
82		$target.removeClass(cssClass);
83		$trigger.removeClass(cssClass);
84
85		// Click on trigger toggles class "open"
86		$trigger.off('.toggle').on('click.toggle', function() {
87			$(this).toggleClass(cssClass);
88			$target.toggleClass(cssClass);
89		});
90
91		// Close target when link inside is clicked
92		$target.find('a').click(function() {
93			$target.removeClass(cssClass);
94			$trigger.removeClass(cssClass);
95		});
96
97		if (!$closeTrigger || !$closeTrigger.length) {
98			return;
99		}
100
101		$closeTrigger.click(function() {
102			$target.removeClass(cssClass);
103			$trigger.removeClass(cssClass);
104		});
105	};
106
107	/**
108	 * Smooth scroll to link targets
109	 * 
110	 * @param {jQuery} $scrollLinks The links
111	 * @param {jQuery} scrollOffset Offset to subtract from the scroll target position (e.g. for fixed positioned elements like a menu)
112	 */
113	var activateSmoothScroll = function($scrollLinks, scrollOffset) {
114		if (typeof scrollOffset === 'undefined') {
115			scrollOffset = 0;
116		}
117
118		var determineTarget = function($trigger, hash) {
119			if (hash == '#!next') {
120				return $trigger.closest('.ed-element').next();
121			}
122
123			return $(hash);
124		}
125
126		$scrollLinks.click(function(e) {
127			var $target = determineTarget($(this), this.hash);
128			if (!$target.length) return;
129			e.preventDefault();
130
131			viewport.scrollTo($target, 'top', 500, 0);
132
133		});
134	};
135
136	/**
137	 * We are using the fill property on an element to pass user's choices from CSS to JavaScript
138	 * 
139	 * @param {jQuery} $element
140	 */
141	var getStickyMode = function($element) {
142		var fillValue = getComputedStyle($element[0]).fill;
143
144		return fillValue === 'rgb(255, 0, 0)' ?
145			'sticky_banner' :
146			fillValue === 'rgb(0, 255, 0)' ?
147			'sticky_menu' :
148			fillValue === 'rgb(0, 0, 255)' ?
149			'sticky_instant' :
150			fillValue === 'rgb(255, 255, 255)' ?
151			'sticky_reverse' :
152			'sticky_none';
153	};
154
155	/**
156	 * Adds a class to an element when not currently visible
157	 * 
158	 * @param {jQuery} $element The element to handle stickyness for
159	 * @param {string} cssClass The actual CSS class to be applied to the element when it's above a certain scroll position
160	 * @param {jQuery} $banner A banner to reference the scroll position to
161	 */
162	var handleSticky = function($element, cssClass, $banner) {
163		var triggerPos = 0,
164			offset = 0;
165		var menuWrapperHeight = $element.outerHeight();
166		var mode;
167		var prevScroll = 0;
168		$element.removeClass(cssClass);
169		
170		var toggleSpacer = function(toggle) {
171			document.body.style.setProperty('--spacer-height', toggle ? menuWrapperHeight + 'px' : '');
172		};
173
174		var handleScroll = function() {
175			if (!$element.length || mode === 'sticky_none') return;
176
177			var isReverse = mode === 'sticky_reverse',
178				curScroll = viewport.getScrollTop();
179
180			if (triggerPos <= curScroll && (!isReverse || prevScroll > curScroll)) {
181				$element.addClass(cssClass);
182				toggleSpacer(true);
183			} else {
184				$element.removeClass(cssClass);
185				toggleSpacer(false);
186			}
187
188			prevScroll = curScroll;
189		};
190		
191		var updateOffset = function() {
192			mode = getStickyMode($element);
193			menuWrapperHeight = $element.outerHeight();
194			if (!$element.hasClass(cssClass)) {
195				offset = $element.offset().top;
196			}
197			if (mode === 'sticky_banner' && !$banner.length) {
198				mode = 'sticky_menu';
199			}
200			if (mode === 'sticky_banner') {
201				triggerPos = $banner.offset().top + ($banner.length ? $banner.outerHeight() : $element.outerHeight());
202			}
203			if (mode === 'sticky_menu' || mode === 'sticky_reverse') {
204				triggerPos = offset + $element.outerHeight();
205			}
206			if (mode === 'sticky_instant') {
207				triggerPos = offset;
208			}
209			
210			handleScroll();
211		}
212		
213		viewport.observe('resize', updateOffset);
214		viewport.observe('animation.end', updateOffset);
215		observeHeightChange($element[0], updateOffset);
216		updateOffset();
217		
218		viewport.observe('scroll', handleScroll);
219		handleScroll();
220	};
221
222	/**
223	 * Adds a class to links whose target is currently inside the viewport
224	 * 
225	 * @param {jQuery} $links Link(s) to be observed
226	 * @param {string} cssClass CSS Class to be applied
227	 * @param {float} sectionViewportRatio Ratio by which the target should be within the viewport
228	 */
229	var addClassOnVisibleLinkTargets = function($links, cssClass, sectionViewportRatio) {
230		if (typeof sectionViewportRatio === 'undefined') {
231			sectionViewportRatio = 1 / 2;
232		}
233
234		var menuTargets = [];
235		var activeLink = $links.filter('.active:not(.wv-link-elm)').eq(0);
236
237		var links = $links.filter(function() {
238			var $target = $(this.hash);
239			if (!$target.length) {
240				return false;
241			}
242
243			// Cache offset position to improve performance (update on resize)		
244			var updateOffset = function() {
245				$target.data('offset', $target.offset().top);
246			};
247
248			viewport.observe('resize', updateOffset);
249			viewport.observe('animation.end', updateOffset);
250			updateOffset();
251
252			menuTargets.push($target);
253			return true;
254		});
255
256		// No hash links found, so don't handle it at all
257		if (!links.length) {
258			return;
259		}
260
261		var checkVisibility = function() {
262			$links.removeClass('active');
263
264			// Check section position reversely
265			for (var i = menuTargets.length - 1; i >= 0; i--) {
266				var desiredScrollPosition = menuTargets[i].data('offset') - viewport.getHeight() * (1 - sectionViewportRatio);
267				if (viewport.getScrollTop() >= desiredScrollPosition && menuTargets[i][0].offsetParent !== null) {
268					links.eq(i).addClass(cssClass);
269					return;
270				}
271			}
272
273			// Fallback to originally active item
274			activeLink.addClass(cssClass);
275		};
276
277		viewport.observe('scroll', checkVisibility);
278		checkVisibility();
279	};
280})();
281/* End JS for preset "Menu V2" */

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.