PageSourceSearch

https://trailsday.org/wp-content/themes/cpfa/js/jquery.site.js?ver=1.3

js trailsday.org collected 2026-10-01 14:46:23 UTC 19,224 bytes, 743 lines download raw bytes

1function getUrlParameter(name) {
2    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
3    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
4    var results = regex.exec(location.search);
5    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
6};
7
8function calculateModalButton(){
9	if($('#home-events-filter-container a.active').length || $('#home-events-filter-container input.active').length){
10		$('#modal-clear-button').addClass('is-visible');
11	} else {
12		$('#modal-clear-button').removeClass('is-visible');
13	}
14}
15
16function generateFilterList() {
17	var filterList = '';
18	var displayList = '';
19	var data = [];
20	var city = $('#home-event-city-filter option:selected').val() || 'all'; 
21	var url = '';
22	var typeUrl = 'type=';
23	var dayUrl = 'eventday=';
24	var cityUrl = 'city=';
25	var openItemsUrl = 'open=';
26	let selectedTypes = [];
27	let selectedDays = [];
28	
29	if(!$('#home-events-filter-container').length){
30		return false;
31	}
32
33	// Handle city
34	if (city != 'all') {
35		var firstChar = city.charAt(0);
36		if (firstChar == '.') {
37			cityName = city.substring(1);
38		}
39		cityUrl += cityName;
40	}
41
42	// Collect selected types
43	$('#home-events-filter-container .event-type-toggle.active').each(function () {
44		var typeId = $(this).attr('data-id');
45		selectedTypes.push(typeId);
46		typeUrl += typeId + ',';
47		displayList += '<a href="#" data-id="' + typeId + '" class="event-type-toggle">' + $(this).text() + '<span class="icon-close"></span></a>';
48	});
49
50	// Collect selected day (radio input logic)
51	var $checkedDay = $('#home-events-filter-container input[name="event-day"]:checked');
52    if ($checkedDay.length) {
53        var dayId = $checkedDay.attr('data-id'); // or use .val(), since they match
54        var dayLabel = $checkedDay.attr('data-label');
55        selectedDays.push(dayId);
56        dayUrl += dayId;
57        displayList += '<a href="#" data-id="' + dayId + '" class="event-day-toggle">' + dayLabel + '<span class="icon-close"></span></a>';
58    }
59
60	// Trim trailing comma from typeUrl
61	if (typeUrl.endsWith(',')) typeUrl = typeUrl.slice(0, -1);
62
63	// Build filterList with inclusive type, exclusive day
64	if (selectedTypes.length > 0) {
65		selectedTypes.forEach(function (type) {
66			if (selectedDays.length > 0) {
67				selectedDays.forEach(function (day) {
68					filterList += '.' + type + '.' + day + ',';
69				});
70			} else {
71				filterList += '.' + type + ',';
72			}
73		});
74	} else if (selectedDays.length > 0) {
75		selectedDays.forEach(function (day) {
76			filterList += '.' + day + ',';
77		});
78	}
79
80	// Handle open-item filter
81	if ($('#open-item-filter').hasClass('active')) {
82		openItemsUrl = 'open=yes';
83		if (filterList === '') {
84			filterList = '.open-item';
85		} else {
86			let splitFilters = filterList.split(',');
87			filterList = splitFilters.map(f => f + '.open-item').join(',');
88		}
89	}
90
91	// Prepend city if selected
92	if (city != 'all') {
93		let splitFilters = filterList.split(',');
94		filterList = splitFilters.map(f => city + f).join(',');
95	}
96
97	// Clean up trailing comma
98	if (filterList.endsWith(',')) {
99		filterList = filterList.slice(0, -1);
100	}
101
102	// Default fallback
103	if (filterList === '') {
104		filterList = city != 'all' ? city : 'all';
105	}
106
107	// Build URL
108	let params = [];
109	if (cityUrl !== 'city=') params.push(cityUrl);
110	if (dayUrl !== 'eventday=') params.push(dayUrl);
111	if (typeUrl !== 'type=') params.push(typeUrl);
112	if (openItemsUrl !== 'open=') params.push(openItemsUrl);
113	url = params.length > 0 ? '?' + params.join('&') : '';
114
115	// Push URL to history
116	let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + url;
117	if (history.pushState) {
118		window.history.pushState({ path: newurl }, '', newurl);
119	}
120
121	// Clear button visibility
122    if (selectedTypes.length === 0 && selectedDays.length === 0 && city === 'all' && !$('#open-item-filter').hasClass('active')) {
123        $('#home-event-filters-clear-all, #modal-clear-button').removeClass('is-visible');
124    } else {
125        $('#home-event-filters-clear-all, #modal-clear-button').addClass('is-visible');
126    }
127
128	data['filterList'] = filterList;
129	data['displayList'] = displayList;
130
131	return data;
132}
133
134$('.update-resource-item-file').on('change', function(){
135	var file = this.files[0];
136	
137	var eventId = $(this).data('id');
138	var index = $(this).data('index');
139	
140	if (!file) return;
141
142	var formData = new FormData();
143	formData.append('file', file);
144	var username = 'cacpro';
145	//Dev
146	//var appPassword = 'sQ0e8mK6fMBCUxJefkTa7rfC';
147	//Live
148	var appPassword = 'e9K6q4FtDEQk4xKgR9nVua1q';
149
150	$.ajax({
151		url: '/wp-json/trailsday/v1/resource/upload', // Your custom endpoint
152		method: 'POST',
153		beforeSend: function(xhr) {
154			xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ':' + appPassword));
155		},
156		data: formData,
157		processData: false,  // Don't process the files
158		contentType: false,  // Set content type to false
159		success: function(response) {
160			var output = JSON.parse(response);
161			var url = output.url;
162			
163			$.ajax({
164			  url: '/wp-json/trailsday/v1/resource/update/',
165			  type: "POST",
166			  data: { 
167					eventId: eventId, 
168					index: index,
169					newFile: url
170			  },
171			  success: function(response) {
172				location.reload();
173			  },
174			  error: function(xhr, status, error) {
175				console.error("Error:", error);
176			  }
177			});
178		},
179		error: function(error) {
180			console.error('Upload failed', error);
181		}
182	});
183});
184
185$('#new-resource-file').on('change', function(){
186	var file = this.files[0];
187	
188	var eventId = $(this).data('id');
189	
190	if (!file) return;
191
192	var formData = new FormData();
193	formData.append('file', file);
194	var username = 'cacpro';
195	//Dev
196	//var appPassword = 'sQ0e8mK6fMBCUxJefkTa7rfC';
197	//Live
198	var appPassword = 'e9K6q4FtDEQk4xKgR9nVua1q';
199
200	$.ajax({
201		url: '/wp-json/trailsday/v1/resource/upload', // Your custom endpoint
202		method: 'POST',
203		beforeSend: function(xhr) {
204			xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ':' + appPassword));
205		},
206		data: formData,
207		processData: false,  // Don't process the files
208		contentType: false,  // Set content type to false
209		success: function(response) {
210			var output = JSON.parse(response);
211			var url = output.url;
212			
213			$.ajax({
214			  url: '/wp-json/trailsday/v1/resource/add/',
215			  type: "POST",
216			  data: { 
217					eventId: eventId, 
218					newFile: url
219			  },
220			  success: function(response) {
221				location.reload();
222			  },
223			  error: function(xhr, status, error) {
224				console.error("Error:", error);
225			  }
226			});
227		},
228		error: function(error) {
229			console.error('Upload failed', error);
230		}
231	});
232});
233
234$(document).on('click', '#add-new-resource', function(e){
235	e.preventDefault();
236	
237	$('#add-resource-container').slideToggle(500);
238});
239
240$('.remove-resource').on('click', function(e){
241	e.preventDefault();
242	
243	var eventId = $(this).data('id');
244	var index = $(this).data('index');
245	
246	$.ajax({
247	  url: '/wp-json/trailsday/v1/resource/delete/',
248	  type: "POST",
249	  data: { 
250		  	eventId: eventId, 
251			index: index 
252      },
253	  success: function(response) {
254		location.reload();
255	  },
256	  error: function(xhr, status, error) {
257		console.error("Error:", error);
258	  }
259	});
260});
261
262$(document).ready(function(){
263	//Attach FastClick to eliminate delays for taps on mobile devices.
264	FastClick.attach(document.body);
265	
266	//Hide any transitions from appearing before the page completely loads. 
267	$(window).load(function() {
268	  $("body").removeAttr('id');
269	}); 
270	
271  	calculateModalButton();
272	generateFilterList();
273  
274	//Page animations
275	$(".animsition").animsition({
276		inClass: 'fade-in',
277		outClass: 'fade-out',
278		inDuration: 1400,
279		outDuration: 1000,
280		linkElement: '.animsition-link',
281		// e.g. linkElement: 'a:not([target="_blank"]):not([href^="#"])'
282		loading: true,
283		loadingParentElement: 'html', //animsition wrapper element
284		loadingClass: 'animsition-loading',
285		loadingInner: '<img src="' + window.location.protocol + "//" + window.location.host + '/wp-content/themes/cpfa/images/loading.svg" />', // e.g '<img src="loading.svg" />'
286		timeout: false,
287		timeoutCountdown: 5000,
288		onLoadEvent: true,
289		browser: [ 'animation-duration', '-webkit-animation-duration'],
290		overlay : false,
291		overlayClass : 'animsition-overlay-slide',
292		overlayParentElement : 'body',
293		transition: function(url){ window.location.href = url; }
294	});	
295	
296	//Lazy load image setup...
297	lazyLoad = new LazyLoad({
298		elements_selector: '.lazy'
299	});
300	
301	$("#mobile-menu-icon").on('click', function(e){
302		e.preventDefault();
303		
304		$(this).toggleClass('active');
305		$('#mobile-menu').slideToggle(500);
306	});
307	
308	$('#map-button').on('click', function(e){
309		e.preventDefault();
310		
311		$('#shadow').toggleClass('is-visible');
312		$('body').toggleClass('nav-menu-open');
313		setTimeout(function(){
314			$('#home-modal-container').toggleClass('is-visible');
315		}, 500);
316	});
317	
318	$('#close-map').on('click', function(e){
319		e.preventDefault();
320		
321		$('#home-modal-container').toggleClass('is-visible');
322		$('body').toggleClass('nav-menu-open');
323		setTimeout(function(){
324			$('#shadow').toggleClass('is-visible');
325		}, 500);
326	});
327	
328	$('#home-events-toggle').on('click', function(e){
329		e.preventDefault();
330		
331		$('#shadow').toggleClass('is-visible');
332		setTimeout(function(){
333			$('#home-events-filter-container').toggleClass('is-visible');
334			$('body').toggleClass('nav-menu-open');
335		}, 500);
336	});
337	
338	$('#close-filter-container').on('click', function(e){
339		e.preventDefault();
340		
341		$('body').toggleClass('nav-menu-open');
342		$('#home-events-filter-container').toggleClass('is-visible');
343		setTimeout(function(){
344			$('#shadow').toggleClass('is-visible');
345		}, 500);
346	});
347	
348	$('.gform_wrapper .ginput_container.ginput_container_select select, .gform_wrapper .ginput_container.ginput_container_time select').selectric({disableOnMobile: false});
349	
350	$(document).on('gform_page_loaded', function(event, form_id, current_page){
351        $('.gform_wrapper .ginput_container.ginput_container_select select, .gform_wrapper .ginput_container.ginput_container_time select').selectric({disableOnMobile: false});
352    });
353    
354    //Accordions expand/contract...
355    $('.accordion-header').on('click', function(e){
356	    e.preventDefault();
357	    
358	    clicked = $(this);
359	    
360		if($(clicked).hasClass('active'))
361		{
362			$(clicked).next('.accordion-details').slideUp(500);
363			$(clicked).removeClass('active');
364		} 
365		else
366		{
367			if($('.accordion-header.active').length)
368			{
369				active = $('.accordion-header.active');
370				
371				$(active).removeClass('active');
372				$(active).next('.accordion-details').slideUp(500, function(){
373					$(clicked).next('.accordion-details').slideDown(500);
374					$(clicked).addClass('active');	
375				});
376			}	
377			else
378			{
379				$(clicked).next('.accordion-details').slideDown(500);
380				$(clicked).addClass('active');				
381			}
382		}
383    });
384    
385    $('#home-event-filter-icon-wrapper a').on('click', function(e){
386	    e.preventDefault();
387	    
388	    var list = $('#home-events');
389		var listItems = list.children('.event-list-item');
390		list.append(listItems.get().reverse());
391		
392		var active = $('#home-event-filter-icon-wrapper a.active');
393		var inactive = $('#home-event-filter-icon-wrapper a:not(.active)');
394		
395		active.removeClass('active');
396		inactive.addClass('active');
397    });
398    
399    $('#home-events-filter-container .event-type-toggle').on('click', function(e){
400	   e.preventDefault();
401	   
402	   $(this).toggleClass('active'); 
403	   	
404	   calculateModalButton();
405    });
406    
407    $('#open-item-filter').on('change', function(e){
408	   $(this).toggleClass('active');
409	   
410	   var returnData = generateFilterList();
411	   var filterList = returnData['filterList'];
412	   var displayList = returnData['displayList'];
413	   
414	   //mixer.destroy();
415	   mixer = mixitup('#home-events', {
416			load: {
417				filter: filterList,
418			},
419			selectors: {
420				target: '.event-list-item'
421			}
422		});
423	
424		mixer.forceRefresh();
425		mixer.filter(filterList);
426		mixer.forceRender();
427		
428		$('#home-event-filters-applied').empty();
429		$('#home-event-filters-applied').append(displayList);
430    });
431    
432    $('#home-events-filter-container .event-day-toggle').on('change', function(e){
433		if($(this).hasClass('active'))
434		{
435			$(this).removeClass('active');
436		}
437		else
438		{
439			$(this).toggleClass('active'); 
440		}
441			
442		calculateModalButton();
443    });
444    
445    $('#modal-clear-button').on('click', function(e){
446		e.preventDefault();
447      	window.location.href = window.location.pathname;
448      	return false;
449	   
450	   $('#home-events-filter-container a.active').removeClass('active');
451	   $('input[type="radio"][name="event-day"]').prop('checked', false);
452      
453	   mixer.destroy();
454	   mixer = mixitup('#home-events', {
455			load: {
456				filter: 'all',
457			},
458			selectors: {
459				target: '.event-list-item'
460			}
461		});
462	
463		mixer.forceRefresh();
464		mixer.filter('all');
465		mixer.forceRender();
466		
467		$('#home-event-filters-applied').empty();
468		
469		$(this).removeClass('is-visible');
470    });
471    
472    $('#home-event-filters-clear').on('click', function(e){
473		e.preventDefault();
474     	window.location.href = window.location.pathname;
475      	return false;
476	   
477	   mixer.destroy();
478	   mixer = mixitup('#home-events', {
479			load: {
480				filter: 'all',
481			},
482			selectors: {
483				target: '.event-list-item'
484			}
485		});
486	
487		mixer.forceRefresh();
488		mixer.filter('all');
489		mixer.forceRender();
490		
491		$('#home-event-filters-applied').empty();
492		$(this).parent().removeClass('is-visible');
493    });
494    
495    $('#filter-button').on('click', function(e){
496	   e.preventDefault();
497	   
498	   var returnData = generateFilterList();
499	   var filterList = returnData['filterList'];
500	   var displayList = returnData['displayList'];
501	   
502	   if(filterList == 'all'){
503		   $('#home-event-filters-clear-all').removeClass('is-visible');
504	   } else {
505		   if(filterList != '')
506		   {
507		   	$('#home-event-filters-clear-all').addClass('is-visible');
508		   }
509	   }
510	   
511	   mixer.destroy();
512	   mixer = mixitup('#home-events', {
513			load: {
514				filter: filterList,
515			},
516			selectors: {
517				target: '.event-list-item'
518			}
519		});
520	
521		mixer.forceRefresh();
522		mixer.filter(filterList);
523		mixer.forceRender();
524		
525		$('#home-event-filters-applied').empty();
526		$('#home-event-filters-applied').append(displayList);
527		$('#home-events-filter-container').toggleClass('is-visible');
528		$('body').toggleClass('nav-menu-open');
529		setTimeout(function(){
530			$('#shadow').toggleClass('is-visible');
531		}, 500);
532    });
533    
534    $(document).on('click', '#home-event-filters-applied a', function(e){
535	   e.preventDefault();
536	   
537	   var id = $(this).attr('data-id');
538	   
539	   $('#home-events-filter-container .event-type-toggle.active').each(function(){
540			if($(this).attr('data-id') == id){
541				$(this).toggleClass('active');	
542			}
543	   });
544	   
545	   $('#home-events-filter-container .event-day-toggle.active').each(function(){
546			if($(this).attr('data-id') == id){
547				$(this).toggleClass('active');	
548				$(this).prop('checked', false);
549			}
550	   });
551	      
552	   var returnData = generateFilterList();
553	   var filterList = returnData['filterList'];
554	   var displayList = returnData['displayList'];
555	   
556	   if(filterList == 'all'){
557		   $('#home-event-filters-clear-all').removeClass('is-visible');
558	   } else {
559		   $('#home-event-filters-clear-all').addClass('is-visible');
560	   }
561	   
562	   mixer.destroy();
563	   mixer = mixitup('#home-events', {
564			load: {
565				filter: filterList,
566			},
567			selectors: {
568				target: '.event-list-item'
569			}
570		});
571	
572		mixer.forceRefresh();
573		mixer.filter(filterList);
574		mixer.forceRender();
575		
576		$('#home-event-filters-applied').empty();
577		$('#home-event-filters-applied').append(displayList);
578    });
579	
580	$('#home-event-city-filter').selectric({disableOnMobile: false}).on('change', function(){
581		var returnData = generateFilterList();
582		var filterList = returnData['filterList'];
583		
584		mixer.destroy();
585		mixer = mixitup('#home-events', {
586			load: {
587				filter: filterList,
588			},
589			selectors: {
590				target: '.event-list-item'
591			}
592		});
593	
594		mixer.forceRefresh();
595		mixer.filter(filterList);
596		mixer.forceRender();
597	});
598	
599	//Handle sorting on the front-end...
600    if($('#home-events').length) {	
601	    var filterList = 'all';
602	    
603		if(getUrlParameter("open")){
604			if(getUrlParameter("city")){
605			    filterList = '.' + getUrlParameter("city") + '.open-item';
606		    }
607		    
608		    if(getUrlParameter("eventday"))
609		    {
610			    var dayList = getUrlParameter("eventday").split(",");
611				var dayListItems = "";
612				
613			    for(var i = 0; i< dayList.length; i++){
614				    dayListItems += "." + dayList[i] + ".open-item";
615			    }
616				    
617			    if(filterList != 'all'){
618			    	filterList += ', ' + dayListItems;
619			    } else {
620				    filterList = dayListItems;
621			    }
622		    }
623		    
624		    if(getUrlParameter("type"))
625		    {
626			    var typeList = getUrlParameter("type").split(",");
627				var typeListItems = "";
628				
629			    for(var i = 0; i< typeList.length; i++){
630				    typeListItems += "." + typeList[i] + ".open-item";
631			    }
632				    
633			    if(filterList != 'all'){
634			    	filterList += ', ' + typeListItems;
635			    } else {
636				    filterList = typeListItems;
637			    }
638		    }
639		    
640		    if(filterList == 'all'){
641			    filterList =".open-item";
642		    }
643	    }
644	    else
645	    {
646		    if(getUrlParameter("city")){
647			    filterList = '.' + getUrlParameter("city");
648		    }
649		    
650		    if(getUrlParameter("eventday"))
651		    {
652			    var dayList = getUrlParameter("eventday").split(",");
653				var dayListItems = "";
654				
655			    for(var i = 0; i< dayList.length; i++){
656				    dayListItems += "." + dayList[i];
657			    }
658				    
659			    if(filterList != 'all'){
660			    	filterList += ', ' + dayListItems;
661			    } else {
662				    filterList = dayListItems;
663			    }
664		    }
665		    
666		    if(getUrlParameter("type"))
667		    {
668			    var typeList = getUrlParameter("type").split(",");
669				var typeListItems = "";
670				
671			    for(var i = 0; i< typeList.length; i++){
672				    typeListItems += "." + typeList[i];
673			    }
674				    
675			    if(filterList != 'all'){
676			    	filterList += ', ' + typeListItems;
677			    } else {
678				    filterList = typeListItems;
679			    }
680		    }
681		}
682	    
683		var mixer = mixitup('#home-events', {
684			load: {
685				filter: filterList,
686			},
687			selectors: {
688		        target: '.event-list-item'
689		    }
690		});
691	}
692	
693	$('#single-events-registration-button a.register-button').on('click', function(e){
694		e.preventDefault();
695		
696		if($(this).hasClass('active')){
697			$(this).find('.title').text('Register');
698		} else {
699			$(this).find('.title').text('Close');
700		}
701		
702		$(this).toggleClass('active');
703		$('#single-events-form').slideToggle(500);
704	});
705	
706	$('#single-event-tabs').responsiveTabs();
707	
708	var singleEventRelatedSlider = new Swiper('#single-event-related-content', {
709		loop: true,
710		speed: 1000,
711		slidesPerView: 4,
712		spaceBetween: 30,
713		navigation: {
714			nextEl: '.single-event-related-next',
715			prevEl: '.single-event-related-prev',
716		},
717		breakpoints: {
718			1000: {
719				slidesPerView: 3
720			},
721			800: {
722				slidesPerView: 2
723			},
724			500: {
725				slidesPerView: 1,
726				spaceBetween: 10
727			}
728		}
729	});
730	
731	$('#update-resources').on('click', function(e){
732		e.preventDefault();
733		
734		var id = $(this).data('id');
735		var resources = null;
736		
737		$('.resource-item').each(function(){
738			var resource;
739			
740			resource.title = $(this).find('.resource-item-title').val();
741		});
742	});
743});

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.