PageSourceSearch

https://wasserfallen.news/wp-content/themes/authentic/js/scripts.js?ver=7.1.7

js wasserfallen.news collected 2026-10-02 23:39:14 UTC 61,468 bytes, 2,464 lines download raw bytes

1( function( $ ) {
2	"use strict";
3
4	/**
5	 * Global Vars
6	 */
7	var windowWidth = window.innerWidth,
8		windowHeight = window.innerHeight,
9		adminBarHeight = $( '#wpadminbar' ).innerHeight(),
10		headerHeight = $( '.site-header' ).innerHeight(),
11		navBarHeight = $( '.navbar-primary' ).innerHeight();
12
13	if ( $( 'body' ).hasClass( 'admin-bar' ) ) {
14		if ( window.innerWidth > 782 ) {
15			adminBarHeight = 32;
16		} else {
17			adminBarHeight = 46;
18		}
19	}
20
21	$( document ).ready( function() {
22		headerHeight = $( '.site-header' ).innerHeight();
23		navBarHeight = $( '.navbar-primary' ).innerHeight();
24	} );
25
26	$( window ).resize( function() {
27		windowWidth = window.innerWidth;
28		windowHeight = window.innerHeight;
29		adminBarHeight = $( '#wpadminbar' ).innerHeight();
30		headerHeight = $( '.site-header' ).innerHeight();
31		navBarHeight = $( '.navbar-primary' ).innerHeight();
32	} );
33
34	var isIE = /MSIE|Trident/i.test( navigator.userAgent );
35
36	var isRetina = false;
37
38	if ( window.matchMedia ) {
39		var mq = window.matchMedia( "only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 2.6/2), only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen  and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 1.3dppx)" );
40		if ( mq && mq.matches || ( window.devicePixelRatio > 1 ) ) {
41			isRetina = true;
42		}
43	}
44
45	var rtl = false;
46
47	if ( $( 'body' ).hasClass( 'rtl' ) ) {
48		rtl = true;
49	}
50
51	// Create csco object.
52	var csco = {
53		addAction: function( x, y, z ) {
54			return;
55		}
56	};
57
58	if ( 'undefined' !== typeof wp && 'undefined' !== typeof wp.hooks ) {
59		csco.addAction = wp.hooks.addAction;
60	}
61
62	/**
63	 * Cookies
64	 */
65	function csGetCookie( name ) {
66		let matches = document.cookie.match( new RegExp(
67			"(?:^|; )" + name.replace( /([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1' ) + "=([^;]*)"
68		) );
69		return matches ? decodeURIComponent( matches[ 1 ] ) : undefined;
70	}
71
72	function csSetCookie( name, value, props = {} ) {
73
74		props = {
75			path: '/'
76		};
77
78		if ( props.expires instanceof Date ) {
79			props.expires = props.expires.toUTCString();
80		}
81
82		let updatedCookie = encodeURIComponent( name ) + "=" + encodeURIComponent( value );
83
84		for ( let optionKey in props ) {
85			updatedCookie += "; " + optionKey;
86			let optionValue = props[ optionKey ];
87			if ( optionValue !== true ) {
88				updatedCookie += "=" + optionValue;
89			}
90		}
91
92		document.cookie = updatedCookie;
93	}
94
95	/**
96	 * Google AdSense
97	 */
98
99	try {
100		$( '.adsbygoogle' ).each( function() {
101			( adsbygoogle = window.adsbygoogle || [] ).push( {} );
102		} );
103	} catch ( ex ) {}
104	/**
105	 * Carousel
106	 */
107
108	function initCarouselLoop() {
109		var CarouselLoop = $( '.cs-block-carousel .slider-loop' );
110
111		CarouselLoop.each( function() {
112
113			var container = this;
114			var owl = $( '.owl-carousel', this );
115
116			$( owl ).imagesLoaded( function() {
117
118				owl.owlCarousel( {
119					dragEndSpeed: 250,
120					smartSpeed: 250,
121					autoHeight: true,
122					dots: true,
123					dotsContainer: $( '> .owl-dots', container ),
124					rtl: rtl,
125					responsive: {
126						0: {
127							items: 1,
128							margin: 0,
129						},
130						760: {
131							items: 2,
132							margin: 40,
133						},
134						1020: {
135							items: 3,
136							margin: 30,
137						},
138						1120: {
139							items: 3,
140							margin: 40,
141						},
142						1240: {
143							items: $( container ).data( 'columns' ),
144							margin: 30,
145						},
146						1640: {
147							items: $( container ).data( 'columns' ),
148							margin: 40,
149						},
150					},
151				} );
152
153			} );
154
155		} );
156	}
157
158	$( document ).ready( function() {
159		initCarouselLoop();
160		$( document.body ).on( 'post-load', function() {
161			initCarouselLoop();
162		} );
163
164		csco.addAction( 'canvas.components.serverSideRender.onChange', 'posts-init-carousel', function( props ) {
165			if ( 'canvas/posts' === props.block ) {
166				initCarouselLoop();
167			}
168		} );
169	} );
170	/*
171	 * ----------------------------------------------------------------------------
172	 * Block Sliders
173	 */
174
175	var cscoBlockSliders = {};
176
177	( function() {
178		var $this;
179
180		cscoBlockSliders = {
181
182			windowWidth: 0,
183
184			/*
185			 * Initialize
186			 */
187			init: function( e ) {
188				$this = cscoBlockSliders;
189
190				// Init events.
191				$this.events( e );
192			},
193
194			/*
195			 * Events
196			 */
197			events: function( e ) {
198				// DOM Load
199				window.addEventListener( 'load', function( e ) {
200					$this.initSliderCenter();
201					$this.initSliderBoxed();
202					$this.initSliderWide();
203					$this.initSliderMultiple();
204					$this.initSliderLarge();
205				} );
206
207				// Triggers.
208				window.addEventListener( 'post-load', function( e ) {
209					$this.initSliderCenter();
210					$this.initSliderBoxed();
211					$this.initSliderWide();
212					$this.initSliderMultiple();
213					$this.initSliderLarge();
214				} );
215
216				// Gutenberg.
217				csco.addAction( 'canvas.components.serverSideRender.onChange', 'init-slider', function( props ) {
218					if ( 'canvas/posts' === props.block ) {
219						$this.initSliderCenter();
220						$this.initSliderBoxed();
221						$this.initSliderWide();
222						$this.initSliderMultiple();
223						$this.initSliderLarge();
224					}
225				} );
226
227				// Resize
228				window.addEventListener( 'resize', function( event ) {
229					if ( $( window ).width() === $this.windowWidth ) {
230						return;
231					}
232
233					$this.windowWidth = $( window ).width();
234
235					$this.sliderLargeResized( event );
236				} );
237			},
238
239			/*
240			 * Initialized Hook
241			 */
242			onInitialized: function( event ) {
243
244				if ( $( 'body' ).hasClass( 'parallax-enabled' ) ) {
245
246					var $container = $( event.target );
247
248					$( $container ).closest( '.cs-block-slider-featured' ).find( 'article' ).each( function() {
249						var $article = $( this );
250
251						// Slide media.
252						$article.find( '.slide-parallax:not(.slide-video) .overlay-media' ).each( function() {
253
254							$( this ).jarallax( {
255								speed: 0.8,
256								elementInViewport: $container,
257								noIos: false,
258							} );
259
260							$( this ).attr( 'data-parallax', 'image' );
261
262						} );
263
264						// Slide Video.
265						$article.find( '.slide-video' ).each( function() {
266
267							var videoSrc = $( this ).data( 'video' ),
268								videoStartTime = $( this ).data( 'start' ),
269								videoEndTime = $( this ).data( 'end' ),
270								speed = 0.8;
271
272							if ( !$( this ).hasClass( 'slide-parallax' ) ) {
273								speed = 1;
274							}
275
276							$( '.overlay-media', this ).jarallax( {
277								speed: speed,
278								videoSrc: videoSrc,
279								videoStartTime: videoStartTime,
280								videoEndTime: videoEndTime,
281								elementInViewport: $container,
282								videoPlayOnlyVisible: true,
283								noIos: false,
284							} );
285
286							$( '.overlay-media', this ).attr( 'data-parallax', 'video' );
287						} );
288					} );
289				}
290
291				// Recalc.
292				$( window ).trigger( 'slider-refresh' );
293			},
294
295			/*
296			 * Resize Hook
297			 */
298			onResized: function( event ) {
299
300				if ( $( 'body' ).hasClass( 'parallax-enabled' ) ) {
301					// Reinit Parallax.
302					$( event.target ).find( '.slide-parallax .overlay-media' ).each( function() {
303
304						if ( $( this ).attr( 'data-parallax' ) ) {
305							$( this ).jarallax( 'clipContainer' ).jarallax( 'coverImage' ).jarallax( 'onScroll' );
306						}
307					} );
308				}
309			},
310
311			/*
312			 * Slider Center
313			 */
314			initSliderCenter: function() {
315				var sliderCenter = $( '.cs-block-slider-center' );
316
317				sliderCenter.imagesLoaded( function( instance ) {
318
319					$( instance.elements ).each( function() {
320
321						function setArrowWidth( event ) {
322							var carousel = $( event.target );
323							$( '.owl-arrows > button', carousel.parent() ).css( 'width', ( carousel.innerWidth() - $( '.owl-item.center', carousel ).innerWidth() - carousel.parent().data( 'padding' ) * 2 ) / 2 + 'px' );
324						}
325
326						function sliderCenterInitialized( event ) {
327							setArrowWidth( event );
328
329							$this.onInitialized( event );
330						}
331
332						function sliderCenterResized( event ) {
333							setArrowWidth( event );
334
335							$this.onResized( event );
336						}
337
338						var container = $( this );
339
340						var owl = $( '.owl-carousel', container );
341
342						owl.owlCarousel( {
343							autoplayHoverPause: true,
344							dragEndSpeed: 500,
345							smartSpeed: 500,
346							dotsContainer: $( '.owl-dots', container ),
347							navContainer: $( '.owl-arrows', container ),
348							navText: [ '', '' ],
349							autoHeight: true,
350							rtl: rtl,
351							responsive: {
352								0: {
353									items: 1,
354									loop: false,
355									margin: 0,
356									dots: true,
357									nav: false,
358								},
359								1020: {
360									autoplay: $( this ).data( 'autoplay' ),
361									autoplayTimeout: $( this ).data( 'timeout' ),
362									loop: false,
363									margin: 0,
364									items: 1,
365									dots: true,
366									nav: false,
367								},
368								1240: {
369									autoplay: $( this ).data( 'autoplay' ),
370									autoplayTimeout: $( this ).data( 'timeout' ),
371									margin: $( this ).data( 'padding' ),
372									center: true,
373									items: 3,
374									loop: true,
375									autoWidth: true,
376									dots: false,
377									nav: true,
378								}
379							},
380							onInitialized: sliderCenterInitialized,
381							onResized: sliderCenterResized,
382							onRefresh: sliderCenterResized,
383							onChanged: sliderCenterResized,
384						} );
385					} );
386				} );
387			},
388
389			/*
390			 * Slider Boxed
391			 */
392			initSliderBoxed: function() {
393				var sliderBoxed = $( '.cs-block-slider-boxed' );
394
395				sliderBoxed.imagesLoaded( function( instance ) {
396
397					$( instance.elements ).each( function() {
398
399						var container = this;
400
401						var owl = $( '.owl-carousel', this );
402
403						owl.owlCarousel( {
404							autoplayHoverPause: true,
405							dragEndSpeed: 500,
406							smartSpeed: 500,
407							items: 1,
408							margin: 0,
409							autoHeight: true,
410							navText: [
411								'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.previous + '</span></div>',
412								'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.next + '</span></div>'
413							],
414							dots: true,
415							dotsContainer: $( '.owl-dots', container ),
416							navContainer: $( '.owl-arrows', container ),
417							rtl: rtl,
418							responsive: {
419								0: {
420									nav: false,
421								},
422								1020: {
423									autoplay: $( this ).data( 'autoplay' ),
424									autoplayTimeout: $( this ).data( 'timeout' ),
425									nav: true,
426									loop: true
427								}
428							},
429							onInitialized: $this.onInitialized,
430							onResized: $this.onResized,
431							onRefresh: $this.onResized,
432							onChanged: $this.onResized,
433						} );
434
435					} );
436				} );
437			},
438
439			/*
440			 * Slider Wide
441			 */
442			initSliderWide: function() {
443				var sliderWide = $( '.cs-block-slider-wide' );
444
445				sliderWide.imagesLoaded( function( instance ) {
446
447					$( instance.elements ).each( function() {
448
449						var container = this;
450						var owl = $( '.owl-carousel', this );
451
452						owl.owlCarousel( {
453							autoplayHoverPause: true,
454							dragEndSpeed: 500,
455							smartSpeed: 500,
456							items: 1,
457							margin: 0,
458							autoHeight: true,
459							navText: [
460								'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.previous + '</span></div>',
461								'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.next + '</span></div>'
462							],
463							dots: true,
464							dotsContainer: $( '.owl-dots', container ),
465							navContainer: $( '.owl-arrows', container ),
466							rtl: rtl,
467							responsive: {
468								0: {
469									nav: false,
470								},
471								1020: {
472									autoplay: $( this ).data( 'autoplay' ),
473									autoplayTimeout: $( this ).data( 'timeout' ),
474									nav: true,
475									loop: true
476								}
477							},
478							onInitialized: $this.onInitialized,
479							onResized: $this.onResized,
480							onRefresh: $this.onResized,
481							onChanged: $this.onResized,
482						} );
483
484					} );
485				} );
486			},
487
488			/*
489			 * Slider Multiple
490			 */
491			initSliderMultiple: function() {
492				var sliderMultiple = $( '.cs-block-slider-multiple' );
493
494				sliderMultiple.imagesLoaded( function( instance ) {
495
496					$( instance.elements ).each( function() {
497
498						var container = this;
499
500						var owl = $( '.owl-carousel', this );
501
502						owl.owlCarousel( {
503							autoplayHoverPause: true,
504							dragEndSpeed: 500,
505							smartSpeed: 500,
506							navContainer: $( '.owl-arrows', container ),
507							navText: [ '', '' ],
508							dots: true,
509							dotsContainer: $( '.owl-dots', container ),
510							autoHeight: true,
511							rtl: rtl,
512							responsive: {
513								0: {
514									nav: false,
515									loop: false,
516									margin: 0,
517									stagePadding: 0,
518									items: 1,
519								},
520								1020: {
521									autoplay: $( this ).data( 'autoplay' ),
522									autoplayTimeout: $( this ).data( 'timeout' ),
523								},
524								1120: {
525									autoplay: $( this ).data( 'autoplay' ),
526									autoplayTimeout: $( this ).data( 'timeout' ),
527									margin: $( this ).data( 'padding' ),
528									items: $( this ).data( 'slides-visible' ),
529									nav: true,
530									loop: true,
531									stagePadding: 90,
532								}
533							},
534							onInitialized: $this.onInitialized,
535							onResized: $this.onResized,
536							onRefresh: $this.onResized,
537							onChanged: $this.onResized,
538						} );
539
540					} );
541				} );
542			},
543
544			/*
545			 * Slider Large
546			 */
547			initSliderLarge: function() {
548				var sliderLarge = $( '.cs-block-slider-large' );
549
550				sliderLarge.imagesLoaded( function( instance ) {
551
552					$( instance.elements ).each( function() {
553
554						var container = this,
555							owl = $( '.owl-carousel', this ),
556							autoHeight = false;
557
558						if ( $( document.body ).hasClass( 'style-type-classic' ) ) {
559							autoHeight = true;
560						}
561
562						owl.owlCarousel( {
563							autoplayHoverPause: true,
564							dragEndSpeed: 500,
565							smartSpeed: 500,
566							autoHeight: autoHeight,
567							items: 1,
568							margin: 0,
569							navText: [
570								'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.previous + '</span></div>',
571								'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.next + '</span></div>'
572							],
573							dots: true,
574							dotsContainer: $( '.owl-dots', container ),
575							navContainer: $( '.owl-arrows', container ),
576							rtl: rtl,
577							responsive: {
578								0: {
579									nav: false,
580								},
581								1020: {
582									autoplay: $( this ).data( 'autoplay' ),
583									autoplayTimeout: $( this ).data( 'timeout' ),
584									nav: true,
585									loop: true,
586								}
587							},
588							onInitialized: $this.sliderLargeInitialized,
589							onTranslated: $this.sliderLargePosition,
590							onResized: $this.sliderLargeResized,
591							onRefresh: $this.sliderLargeResized,
592							onChanged: $this.sliderLargeResized,
593						} );
594					} );
595				} );
596			},
597
598			/*
599			 * Slider Large Change Position
600			 */
601			sliderLargePosition: function() {
602
603				var siteContentTop = 0;
604
605				// Redefine variables.
606				var sectionLarge = $( '.has-slider-large .cnvs-block-section-layout-align-full:first-child' );
607				var sliderLarge = $( sectionLarge ).find( '.cnvs-block-posts-layout-slider-large:first-child .cs-block-slider-large' );
608				var sliderLargeOuter = $( '.overlay-outer', sliderLarge );
609
610				if ( $( '.site-content' ).length > 0 ) {
611					siteContentTop = $( '.site-content' ).css( 'margin-top' ).replace( 'px', '' );
612				}
613
614				// Define heights.
615				var owlSlide = $( '.post-outer', sliderLarge ),
616					contentHeight = $( '.overlay-inner', owlSlide ).innerHeight(),
617					offsetHeight = ( parseInt( adminBarHeight ) || 0 ) + ( parseInt( siteContentTop ) || 0 ) + ( parseInt( headerHeight ) || 0 ),
618					availableHeight = windowHeight - offsetHeight,
619					viewPortHeight = '100vh';
620
621				// Offset page header.
622				sliderLarge.css( 'margin-top', -offsetHeight + 'px' );
623				sliderLargeOuter.css( 'padding-top', offsetHeight + 'px' );
624
625				// Set the slider height.
626				if ( availableHeight >= contentHeight ) {
627					sliderLargeOuter.css( 'height', viewPortHeight );
628				} else {
629					sliderLargeOuter.css( 'height', contentHeight + offsetHeight + 'px' );
630				}
631
632				// Return if overlay variant is set to bottom.
633				if ( $( document.body ).hasClass( 'style-align-left' ) ) {
634					return;
635				}
636
637				// Add extra padding, if possible.
638				if ( availableHeight - offsetHeight >= contentHeight ) {
639					sliderLargeOuter.css( 'padding-bottom', offsetHeight + 'px' );
640				} else {
641					sliderLargeOuter.css( 'padding-bottom', 0 );
642				}
643			},
644
645			/*
646			 * Slider Large Initialized
647			 */
648			sliderLargeInitialized: function( event ) {
649				$this.sliderLargePosition();
650
651				$this.onInitialized( event );
652			},
653
654			/*
655			 * Slider Large Resized
656			 */
657			sliderLargeResized: function( event ) {
658				$this.sliderLargePosition();
659
660				$this.onResized( event );
661			}
662		};
663
664	} )();
665
666	// Initialize.
667	cscoBlockSliders.init();
668
669	( function() {
670		var ticking = false;
671
672		var update = function() {
673
674			// Sidebar.
675			// -----------------------------------.
676			$( '.content-area .site-main' ).each( function() {
677
678				var content = $( this ).find( '.entry-content' );
679				var sidebar = $( this ).find( '.post-sidebar .pk-share-buttons-wrap' );
680
681				// Vars offset.
682				var offsetTop = 20;
683				var offsetBottom = -20;
684
685				// Search elements.
686				var elements = [];
687
688				elements.push( '> .alignfull' );
689				elements.push( '> .alignwide' );
690
691				var layouts = $( content ).find( elements.join( ',' ) );
692
693				if ( 0 === sidebar.length ) {
694					return;
695				}
696				if ( 0 === layouts.length ) {
697					return;
698				}
699
700				var disabled = false;
701
702				// Get sidebar values.
703				var sidebarTop = $( sidebar ).offset().top;
704				var sidebarHeight = $( sidebar ).outerHeight( true );
705
706				for ( let i = 0; i < $( layouts ).length; ++i ) {
707					if ( 'none' === $( layouts[ i ] ).css( 'transform' ) ) {
708						continue;
709					}
710
711					// Get layout values.
712					let layoutTop = $( layouts[ i ] ).offset().top;
713					let layoutHeight = $( layouts[ i ] ).outerHeight( true );
714
715					// Calc points.
716					let pointTop = layoutTop - offsetTop;
717					let pointBottom = layoutTop + layoutHeight + offsetBottom;
718
719					// Detect sidebar location.
720					if ( sidebarTop + sidebarHeight >= pointTop && sidebarTop <= pointBottom ) {
721						disabled = true;
722					}
723				}
724
725
726				if ( disabled ) {
727					$( sidebar ).css( 'opacity', '0' );
728				} else {
729					$( sidebar ).css( 'opacity', '1' );
730				}
731			} );
732
733			// Pagination.
734			// -----------------------------------.
735			$( '.content-area .site-main' ).each( function() {
736
737				var content = $( this ).find( '.entry-content' );
738				var pagination = $( this ).find( '.posts-pagination article:first-child' );
739
740				// Vars offset.
741				var offsetTop = -20;
742				var offsetBottom = -140;
743
744				// Search elements.
745				var elements = [];
746
747				elements.push( '> .alignfull' );
748
749				var layouts = $( content ).find( elements.join( ',' ) );
750
751				if ( 0 === pagination.length ) {
752					return;
753				}
754				if ( 0 === layouts.length ) {
755					return;
756				}
757
758				var disabled = false;
759
760				// Get pagination values.
761				var paginationTop = $( pagination ).find( '> a' ).offset().top;
762				var paginationHeight = $( pagination ).find( '> a' ).outerWidth( true );
763
764				for ( let i = 0; i < $( layouts ).length; ++i ) {
765					if ( 'none' === $( layouts[ i ] ).css( 'transform' ) ) {
766						continue;
767					}
768
769					// Get layout values.
770					let layoutTop = $( layouts[ i ] ).offset().top;
771					let layoutHeight = $( layouts[ i ] ).outerHeight( true );
772
773					// Calc points.
774					let pointTop = layoutTop - offsetTop;
775					let pointBottom = layoutTop + layoutHeight + offsetBottom;
776
777					// Detect pagination location.
778					if ( paginationTop + paginationHeight >= pointTop && paginationTop <= pointBottom ) {
779						disabled = true;
780					}
781				}
782
783				if ( disabled ) {
784					$( pagination ).parent().css( 'opacity', '0' );
785					$( pagination ).parent().css( 'visibility', 'hidden' );
786				} else {
787					$( pagination ).parent().css( 'opacity', '1' );
788					$( pagination ).parent().css( 'visibility', 'visible' );
789				}
790			} );
791
792			// Ticking.
793			ticking = false;
794		};
795
796		var requestTick = function() {
797			if ( !ticking ) {
798				window.requestAnimationFrame( update );
799				ticking = true;
800			}
801		};
802
803		var onProcess = function() {
804			requestTick();
805		};
806
807		$( window ).on( 'scroll', onProcess );
808		$( window ).on( 'resize', onProcess );
809		$( window ).on( 'image-load', onProcess );
810		$( window ).on( 'post-load', onProcess );
811		$( window ).on( 'slider-refresh', onProcess );
812
813	} )();
814
815	// Init slider for powerkit featured posts.
816
817	function initFeaturedSlider() {
818		// Widget Post Featured
819		$( '.pk-widget-posts-template-slider, .cnvs-block-posts-sidebar-slider .cnvs-block-posts-sidebar-inner' ).each( function() {
820			if ( $( this ).hasClass( 'init-slider' ) ) {
821				return;
822			}
823
824			$( this ).addClass( 'init-slider' );
825
826			// Wrap inner of slider-container.
827			$( this ).wrapInner( '<div class="slider-container slider-flip"></div>' );
828
829			// Add owl-carousel class.
830			$( this ).find( '.slider-flip > ul' ).addClass( 'owl-carousel' );
831
832			// Add owl dots.
833			$( this ).find( '.slider-flip' ).append( '<div class="owl-dots"></div>' );
834		} );
835	}
836
837	$( document ).ready( function() {
838		initFeaturedSlider();
839		initSliderFlip();
840
841		$( document.body ).on( 'post-load', function() {
842			initFeaturedSlider();
843			initSliderFlip();
844		} );
845
846		csco.addAction( 'canvas.components.serverSideRender.onChange', 'initFeaturedSlider', function( props ) {
847			initFeaturedSlider();
848			initSliderFlip();
849		} );
850
851	} );
852
853	/**
854	 * AJAX Load More.
855	 *
856	 * Contains functions for AJAX Load More.
857	 */
858
859	$( function() {
860
861		if ( 'undefined' === typeof window.load_more_query ) {
862			window.load_more_query = [];
863		}
864
865		/**
866		 * Get next posts
867		 */
868		function csco_ajax_get_posts( object ) {
869			var container = $( object ).closest( '.post-archive' );
870
871			var settings = $( object ).data( 'settings' );
872			var page = $( object ).data( 'page' );
873
874			$( object ).data( 'loading', true );
875
876			// Set button text to Load More.
877			$( object ).text( settings.translation.loading );
878
879			var data = {
880				action: 'csco_ajax_load_more',
881				page: page,
882				posts_per_page: settings.posts_per_page,
883				query_data: settings.query_data,
884				attributes: settings.attributes,
885				options: settings.options,
886				_ajax_nonce: settings.nonce,
887			};
888
889			// Request Url.
890			var csco_pagination_url;
891
892			if ( 'ajax_restapi' === settings.type ) {
893				csco_pagination_url = settings.rest_url;
894			} else {
895				csco_pagination_url = settings.url;
896			}
897
898			// Send Request.
899			$.post( csco_pagination_url, data, function( res ) {
900				if ( res.success ) {
901
902					// Get the posts.
903					var data = $( res.data.content );
904
905					// Check if there're any posts.
906					if ( data.length ) {
907
908						data.imagesLoaded( function() {
909
910							// Append new posts to list, standard and grid archives.
911							$( container ).find( '.archive-main.archive-list, .archive-main.archive-standard, .archive-main.archive-grid' ).append( data );
912
913							// Append new posts to masonry layout.
914							$( container ).find( '.archive-main.archive-masonry' ).colcade( 'append', data );
915
916							// WP Post Load trigger.
917							$( document.body ).trigger( 'post-load' );
918
919							// Reinit Facebook widgets.
920							if ( $( '#fb-root' ).length && 'object' === typeof FB ) {
921								FB.XFBML.parse();
922							}
923
924							// Set button text to Load More.
925							$( object ).text( settings.translation.load_more );
926
927							// Increment a page.
928							page = page + 1;
929
930							$( object ).data( 'page', page );
931
932							// Set the loading state.
933							$( object ).data( 'loading', false );
934						} );
935
936					}
937
938					// Remove Button on Posts End.
939					if ( res.data.posts_end || !data.length ) {
940
941						// Remove Load More button.
942						$( object ).remove();
943					}
944
945				} else {
946					// console.log(res);
947				}
948			} ).fail( function( xhr, textStatus, e ) {
949				// console.log(xhr.responseText);
950			} );
951		}
952
953		/**
954		 * Initialization Load More
955		 */
956		function csco_load_more_init( infinite ) {
957			$( '.post-archive' ).each( function() {
958
959				if ( $( this ).data( 'init' ) ) {
960					return;
961				}
962
963				var csco_ajax_settings;
964
965				if ( typeof csco_ajax_pagination !== 'undefined' ) {
966					csco_ajax_settings = csco_ajax_pagination;
967				}
968
969				var archive_data = $( this ).data( 'archive-data' );
970
971				if ( archive_data ) {
972					csco_ajax_settings = JSON.parse( window.atob( archive_data ) );
973				}
974
975				if ( csco_ajax_settings ) {
976
977					if ( !infinite && csco_ajax_settings.infinite_load ) {
978						return;
979					}
980
981					// Add load more button.
982					$( this ).find( '.archive-pagination' ).append( '<span class="load-more button btn-lg button-primary">' + csco_ajax_settings.translation.load_more + '</span>' );
983
984					// Set load more settings.
985					$( this ).find( '.load-more' ).data( 'settings', csco_ajax_settings );
986					$( this ).find( '.load-more' ).data( 'page', 2 );
987					$( this ).find( '.load-more' ).data( 'loading', false );
988					$( this ).find( '.load-more' ).data( 'scrollHandling', {
989						allow: $.parseJSON( csco_ajax_settings.infinite_load ),
990						delay: 400
991					} );
992				}
993
994				$( this ).data( 'init', true );
995			} );
996		}
997
998		csco_load_more_init( true );
999
1000		csco.addAction( 'canvas.components.serverSideRender.onChange', 'posts-init-loadmore', function( props ) {
1001			if ( 'canvas/posts' === props.block ) {
1002				csco_load_more_init( false );
1003			}
1004		} );
1005
1006		// On Scroll Event.
1007		$( window ).scroll( function() {
1008
1009			$( '.post-archive .load-more' ).each( function() {
1010
1011				var loading = $( this ).data( 'loading' );
1012				var scrollHandling = $( this ).data( 'scrollHandling' );
1013
1014				if ( $( this ).length && !loading && scrollHandling.allow ) {
1015					scrollHandling.allow = false;
1016
1017					$( this ).data( 'scrollHandling', scrollHandling );
1018
1019					var object = this;
1020
1021					setTimeout( function() {
1022						var scrollHandling = $( object ).data( 'scrollHandling' );
1023
1024						scrollHandling.allow = true;
1025
1026						$( object ).data( 'scrollHandling', scrollHandling );
1027					}, scrollHandling.delay );
1028
1029					var offset = $( this ).offset().top - $( window ).scrollTop();
1030					if ( 4000 > offset ) {
1031						csco_ajax_get_posts( this );
1032					}
1033				}
1034			} );
1035		} );
1036
1037		// On Click Event.
1038		$( 'body' ).on( 'click', '.load-more', function() {
1039			var loading = $( this ).data( 'loading' );
1040
1041			if ( !loading ) {
1042				csco_ajax_get_posts( this );
1043			}
1044		} );
1045	} );
1046
1047	/**
1048	 * AJAX Auto Load Next Post.
1049	 *
1050	 * Contains functions for AJAX Auto Load Next Post.
1051	 */
1052
1053	( function() {
1054		/**
1055		 * Check if Load Nextpost is defined by the wp_localize_script
1056		 */
1057		if ( typeof csco_ajax_nextpost !== 'undefined' ) {
1058
1059			var objNextparent = $( '.site-inner > .site-content' ),
1060				objNextsect = '.cs-nextpost-section',
1061				objNextpost = null,
1062				currentNTitle = document.title,
1063				currentNLink = window.location.href,
1064				loadingNextpost = false,
1065				scrollNextpost = {
1066					allow: true,
1067					reallow: function() {
1068						scrollNextpost.allow = true;
1069					},
1070					delay: 400 //(milliseconds) adjust to the highest acceptable value
1071				};
1072
1073			// Init.
1074			if ( csco_ajax_nextpost.next_post ) {
1075				$( objNextparent ).after( '<div class="cs-nextpost-inner"></div>' );
1076
1077				objNextpost = $( '.cs-nextpost-inner' );
1078			}
1079		}
1080
1081		/**
1082		 * Get next post
1083		 */
1084		function csco_ajax_get_nextpost() {
1085			loadingNextpost = true;
1086
1087			// Set class loading.
1088			var data = {
1089				action: 'csco_ajax_load_nextpost',
1090				not_in: csco_ajax_nextpost.not_in,
1091				current_user: csco_ajax_nextpost.current_user,
1092				nonce: csco_ajax_nextpost.nonce,
1093				next_post: csco_ajax_nextpost.next_post,
1094			};
1095
1096			// Request Url.
1097			var csco_ajax_nextpost_url;
1098			if ( 'ajax_restapi' === csco_ajax_nextpost.type ) {
1099				csco_ajax_nextpost_url = csco_ajax_nextpost.rest_url;
1100			} else {
1101				csco_ajax_nextpost_url = csco_ajax_nextpost.url;
1102			}
1103
1104			// Send Request.
1105			$.post( csco_ajax_nextpost_url, data, function( res ) {
1106
1107				csco_ajax_nextpost.next_post = false;
1108
1109				if ( res.success ) {
1110
1111					// Get the posts.
1112					var data = $( res.data.content );
1113
1114					// Check if there're any posts.
1115					if ( data.length ) {
1116						// Set the loading state.
1117						loadingNextpost = false;
1118
1119						// Set not_in.
1120						csco_ajax_nextpost.not_in = res.data.not_in;
1121
1122						// Set next data.
1123						csco_ajax_nextpost.next_post = res.data.next_post;
1124
1125						// Remove loader.
1126						$( objNextpost ).siblings( '.cs-nextpost-loading' ).remove();
1127
1128						// Append new post.
1129						$( objNextpost ).append( data );
1130
1131						// Reinit facebook.
1132						if ( $( '#fb-root' ).length && 'object' === typeof FB ) {
1133							FB.XFBML.parse();
1134						}
1135
1136						$( document.body ).trigger( 'post-load' );
1137					}
1138				} else {
1139					// console.log(res);
1140				}
1141			} ).fail( function( xhr, textStatus, e ) {
1142				// console.log(xhr.responseText);
1143			} );
1144		}
1145
1146		/**
1147		 * Check if Load Nextpost is defined by the wp_localize_script
1148		 */
1149		if ( typeof csco_ajax_nextpost !== 'undefined' ) {
1150
1151			// On Scroll Event.
1152			$( window ).scroll( function() {
1153				var scrollTop = $( window ).scrollTop();
1154
1155				// Init nextpost.
1156				if ( csco_ajax_nextpost.next_post ) {
1157
1158					if ( objNextpost.length && !loadingNextpost && scrollNextpost.allow ) {
1159						scrollNextpost.allow = false;
1160						setTimeout( scrollNextpost.reallow, scrollNextpost.delay );
1161						// Calc current offset.
1162						let offset = objNextpost.offset().top + objNextpost.innerHeight() - scrollTop;
1163						// Load nextpost.
1164						if ( 4000 > offset ) {
1165							$( objNextpost ).after( '<div class="cs-nextpost-loading"></div>' );
1166
1167							csco_ajax_get_nextpost();
1168						}
1169					}
1170				}
1171
1172				// Reset browser data link.
1173				let objFirst = $( objNextsect ).first();
1174
1175				if ( objFirst.length ) {
1176					let firstTop = $( objFirst ).offset().top;
1177					// If there has been a change.
1178					if ( scrollTop < firstTop && window.location.href !== currentNLink ) {
1179						document.title = currentNTitle;
1180						window.history.pushState( null, currentNTitle, currentNLink );
1181					}
1182				}
1183
1184				// Set browser data link.
1185				$( objNextsect ).each( function( index, elem ) {
1186
1187					let elemTop = $( elem ).offset().top;
1188					let elemHeight = $( elem ).innerHeight();
1189
1190					if ( scrollTop > elemTop && scrollTop < elemTop + elemHeight ) {
1191						// If there has been a change.
1192						if ( window.location.href !== $( elem ).data( 'url' ) ) {
1193							// New title.
1194							document.title = $( elem ).data( 'title' );
1195							// New link.
1196							window.history.pushState( null, $( elem ).data( 'title' ), $( elem ).data( 'url' ) );
1197							// Google Analytics.
1198							if ( typeof gtag === 'function' && typeof window.gaData === 'object' ) {
1199
1200								var trackingId = Object.keys( window.gaData )[ 0 ];
1201								if ( trackingId ) {
1202									gtag( 'config', trackingId, {
1203										'page_title': $( elem ).data( 'title' ),
1204										'page_location': $( elem ).data( 'url' )
1205									} );
1206
1207									gtag( 'event', 'page_view', { 'send_to': trackingId } );
1208								}
1209							}
1210						}
1211					}
1212				} );
1213			} );
1214		}
1215
1216	} )();
1217
1218	/**
1219	 * Masonry Archive
1220	 */
1221
1222	function initMasonry() {
1223
1224		var masonryArchive = $( '.archive-masonry' ),
1225			masonryArchiveOptions = {
1226				columns: '.archive-col',
1227				items: '.post-masonry, .post-featured, .widget'
1228			};
1229
1230		$( masonryArchive ).imagesLoaded( function() {
1231			$( masonryArchive ).colcade( masonryArchiveOptions );
1232		} );
1233
1234		/**
1235		 * Masonry Sidebar
1236		 */
1237
1238		var masonrySidebar = $( '.sidebar-area' ),
1239			masonrySidebarOptions = {
1240				columns: '.sidebar',
1241				items: ' .widget'
1242			};
1243
1244		$( masonrySidebar ).imagesLoaded( function() {
1245			$( masonrySidebar ).colcade( masonrySidebarOptions );
1246		} );
1247
1248	}
1249
1250	$( document ).ready( function() {
1251		initMasonry();
1252
1253		csco.addAction( 'canvas.components.serverSideRender.onChange', 'posts-init-masonry', function( props ) {
1254			if ( 'canvas/posts' === props.block ) {
1255				initMasonry();
1256			}
1257		} );
1258	} );
1259
1260	/*
1261	 * Load Mega Menu Posts
1262	 */
1263	function cscoLoadMenuPosts( menuItem ) {
1264		var dataTerm = menuItem.children( 'a' ).data( 'term' ),
1265			dataPosts = menuItem.children( 'a' ).data( 'posts' ),
1266			dataNumberposts = menuItem.children( 'a' ).data( 'numberposts' ),
1267			menuContainer,
1268			postsContainer;
1269
1270		// Containers.
1271		if ( menuItem.hasClass( 'csco-mega-menu-term' ) ) {
1272			menuContainer = menuItem;
1273			postsContainer = menuContainer.find( '.cs-mm-posts' );
1274		}
1275
1276		if ( menuItem.hasClass( 'csco-mega-menu-posts' ) ) {
1277			menuContainer = menuItem;
1278			postsContainer = menuContainer.find( '.cs-mm-posts' );
1279		}
1280
1281		if ( menuItem.hasClass( 'csco-mega-menu-child-term' ) ) {
1282			menuContainer = menuItem.closest( '.sub-menu' );
1283			postsContainer = menuContainer.find( '.cs-mm-posts[data-term="' + dataTerm + '"]' );
1284		}
1285
1286		// Check Menu Container.
1287		if ( !menuContainer || typeof menuContainer === 'undefined' ) {
1288			return false;
1289		}
1290
1291		// Check Container.
1292		if ( !postsContainer || typeof postsContainer === 'undefined' ) {
1293			return false;
1294		}
1295
1296		// Set Active.
1297		menuContainer.find( '.menu-item, .cs-mm-posts' ).removeClass( 'active-item' );
1298
1299		menuItem.addClass( 'active-item' );
1300
1301		if ( postsContainer ) {
1302			postsContainer.addClass( 'active-item' );
1303		}
1304
1305		// Check Loading.
1306		if ( menuItem.hasClass( 'cs-mm-loading' ) || menuItem.hasClass( 'loaded' ) ) {
1307			return false;
1308		}
1309
1310		// Create Data.
1311		var data = {
1312			'term': dataTerm,
1313			'posts': dataPosts,
1314			'per_page': dataNumberposts
1315		};
1316
1317		// Get Results.
1318		$.ajax( {
1319			url: csco_mega_menu.rest_url,
1320			type: 'GET',
1321			data: data,
1322			global: false,
1323			async: true,
1324			beforeSend: function() {
1325				menuItem.addClass( 'cs-mm-loading' );
1326				postsContainer.addClass( 'cs-mm-loading' );
1327			},
1328			success: function( res ) {
1329				if ( res.status && 'success' === res.status ) {
1330
1331					// Set the loaded state.
1332					menuItem.addClass( 'loaded' );
1333					postsContainer.addClass( 'loaded' );
1334
1335					// Check if there're any posts.
1336					if ( res.content && res.content.length ) {
1337
1338						$( res.content ).imagesLoaded( function() {
1339
1340							// Append Data.
1341							postsContainer.html( res.content );
1342						} );
1343					}
1344				}
1345			},
1346			complete: function() {
1347				// Set the loading state.
1348				menuItem.removeClass( 'cs-mm-loading' );
1349				postsContainer.removeClass( 'cs-mm-loading' );
1350			}
1351		} );
1352	}
1353
1354	/*
1355	 * Get First Tab
1356	 */
1357	function cscoGetFirstTab( container ) {
1358
1359		var firstTab = false;
1360
1361		container.find( '.csco-mega-menu-child' ).each( function( index, el ) {
1362			if ( $( el ).hasClass( 'csco-mega-menu-child' ) ) {
1363				firstTab = $( el );
1364				return false;
1365			}
1366		} );
1367
1368		return firstTab;
1369	}
1370
1371	/*
1372	 * Menu on document ready
1373	 */
1374	$( document ).ready( function() {
1375
1376		/*
1377		 * Get Menu Posts on Hover
1378		 */
1379		$( '.navbar-nav .menu-item.csco-mega-menu-posts' ).on( 'mouseenter', function() {
1380			cscoLoadMenuPosts( $( this ) );
1381		} );
1382		$( '.navbar-nav .menu-item.csco-mega-menu-term' ).on( 'mouseenter', function() {
1383			cscoLoadMenuPosts( $( this ) );
1384		} );
1385		$( '.navbar-nav .menu-item.csco-mega-menu-child' ).on( 'mouseenter', function() {
1386			cscoLoadMenuPosts( $( this ) );
1387		} );
1388
1389		/*
1390		 * Load First Tab on Mega Menu Hover
1391		 */
1392		$( '.navbar-nav .menu-item.csco-mega-menu-terms' ).on( 'mouseenter', function() {
1393			var tab = cscoGetFirstTab( $( this ) );
1394
1395			if ( tab ) {
1396				cscoLoadMenuPosts( tab );
1397			}
1398		} );
1399	} );
1400
1401	/*
1402	 * Load First Tab on Navbar Ready.
1403	 */
1404	$( document, '.navbar-nav' ).ready( function() {
1405		var tab = false;
1406
1407		// Autoload First Tab.
1408		$( '.navbar-nav .menu-item.csco-mega-menu-terms' ).each( function( index, el ) {
1409			tab = cscoGetFirstTab( $( this ) );
1410
1411			if ( tab ) {
1412				cscoLoadMenuPosts( tab );
1413			}
1414		} );
1415
1416		// Autoload Posts.
1417		$( '.navbar-nav .menu-item.csco-mega-menu-posts' ).each( function( index, el ) {
1418			cscoLoadMenuPosts( $( this ) );
1419		} );
1420
1421		// Autoload Term.
1422		$( '.navbar-nav .menu-item.csco-mega-menu-term' ).each( function( index, el ) {
1423			cscoLoadMenuPosts( $( this ) );
1424		} );
1425	} );
1426
1427	/**
1428	 * Responsive Navigation Menu
1429	 */
1430
1431	$.fn.responsiveNav = function() {
1432		this.removeClass( 'menu-item-expanded' );
1433		if ( this.prev().hasClass( 'submenu-visible' ) ) {
1434			this.prev().removeClass( 'submenu-visible' ).slideUp( 350 );
1435			this.parent().removeClass( 'menu-item-expanded' );
1436		} else {
1437			this.parent().parent().find( '.menu-item .sub-menu' ).removeClass( 'submenu-visible' ).slideUp( 350 );
1438			this.parent().parent().find( '.menu-item-expanded' ).removeClass( 'menu-item-expanded' );
1439			this.prev().toggleClass( 'submenu-visible' ).hide().slideToggle( 350 );
1440			this.parent().toggleClass( 'menu-item-expanded' );
1441		}
1442	};
1443
1444	function initNavMenu() {
1445		$( '.widget_nav_menu .menu-item-has-children' ).each( function( e ) {
1446
1447			if ( $( this ).data( 'init' ) ) {
1448				return;
1449			}
1450
1451			$( this ).data( 'init', true );
1452
1453			// Add a caret.
1454			$( this ).append( '<span></span>' );
1455
1456			// Fire responsiveNav() when clicking a caret.
1457			$( '> span', this ).on( 'click', function( e ) {
1458				e.preventDefault();
1459				$( this ).responsiveNav();
1460			} );
1461
1462			// Fire responsiveNav() when clicking a parent item with # href attribute.
1463			if ( '#' === $( '> a', this ).attr( 'href' ) ) {
1464				$( '> a', this ).on( 'click', function( e ) {
1465					e.preventDefault();
1466					$( this ).next().next().responsiveNav();
1467				} );
1468			}
1469
1470		} );
1471	}
1472
1473	// Make widget nav responsive.
1474	$( document ).ready( function() {
1475		initNavMenu();
1476
1477		$( 'body' ).on( 'post-load', function() {
1478			initNavMenu();
1479		} );
1480
1481		csco.addAction( 'canvas.components.serverSideRender.onChange', 'initNavMenu', function( props ) {
1482			initNavMenu();
1483		} );
1484	} );
1485
1486	/*
1487	 * ----------------------------------------------------------------------------
1488	 * Navigation
1489	 */
1490
1491	var cscoNavigation = {};
1492
1493	( function() {
1494		var $this;
1495
1496		cscoNavigation = {
1497			sScrollAllow: false,
1498			sInFirst: true,
1499			sInterval: 0,
1500			sPrevious: 0,
1501			sDirection: 0,
1502
1503			loadStickyOffset: 0,
1504			loadAdminBar: false,
1505
1506			Sticky: $( 'body' ).hasClass( 'navbar-sticky-enabled' ),
1507			StickyUp: $( 'body' ).hasClass( 'navbar-smart-enabled' ),
1508			StickyNav: $( '.site-header .navbar-primary' ),
1509			StickyHeader: $( '.site-header' ),
1510			StickyOffsetType: 'auto',
1511			StickyOffset: 0,
1512			StickyOffsetFull: 0,
1513
1514			/*
1515			 * Initialize
1516			 */
1517			init: function( e ) {
1518				$this = cscoNavigation;
1519
1520				// Init events.
1521				$this.events( e );
1522			},
1523
1524			/*
1525			 * Events
1526			 */
1527			events: function( e ) {
1528				// DOM Load
1529				window.addEventListener( 'load', function( e ) {
1530					$this.stickyInit( e );
1531					$this.smartLevels( e );
1532					$this.adaptTablet( e );
1533				} );
1534				// Resize
1535				window.addEventListener( 'resize', function( e ) {
1536					$this.stickyInit( e );
1537					$this.smartLevels( e );
1538					$this.adaptTablet( e );
1539				} );
1540				// Scroll
1541				window.addEventListener( 'scroll', function( e ) {
1542					window.requestAnimationFrame( $this.stickyScroll );
1543				} );
1544			},
1545
1546			/*
1547			 * Init nav bar sticky
1548			 */
1549			stickyInit: function( e ) {
1550
1551				if ( !$this.Sticky ) {
1552					return;
1553				}
1554
1555				$this.sScrollAllow = false;
1556
1557				// Calc sticky offset.
1558				if ( $this.StickyOffsetType !== 'size' ) {
1559
1560					var calcbar = 0;
1561					var wpadminbar = 0;
1562
1563					if ( $( '#wpadminbar' ).length > 0 ) {
1564						calcbar = $( '#wpadminbar' ).outerHeight();
1565
1566						wpadminbar = calcbar;
1567
1568						if ( 'resize' !== e.type ) {
1569							$this.loadAdminBar = wpadminbar;
1570						}
1571
1572						if ( 'absolute' === $( '#wpadminbar' ).css( 'position' ) ) {
1573							wpadminbar = 0;
1574
1575							if ( 'resize' !== e.type ) {
1576								$this.loadAdminBar = 0;
1577							}
1578						}
1579					}
1580
1581					// Calc outside header.
1582					$this.StickyOffsetFull = $this.StickyHeader.outerHeight();
1583
1584					// Calc on load offset top.
1585					var elOffset = $this.StickyNav.not( '.sticky-nav' ).offset();
1586
1587					if ( elOffset && !$this.StickyNav.hasClass( '.sticky-nav' ) ) {
1588
1589						$this.StickyOffset = elOffset.top;
1590
1591						$this.loadStickyOffset = elOffset.top;
1592					} else {
1593						$this.StickyOffset = $this.loadStickyOffset;
1594					}
1595
1596					// Consider the size of the wpadminbar.
1597					if ( 32 === $this.loadAdminBar ) {
1598						if ( 46 === calcbar ) {
1599							$this.StickyOffset = $this.StickyOffset - wpadminbar + 14;
1600						} else {
1601							$this.StickyOffset = $this.StickyOffset - wpadminbar;
1602						}
1603					} else if ( 46 === $this.loadAdminBar || 0 === $this.loadAdminBar ) {
1604
1605						if ( 32 === calcbar ) {
1606							$this.StickyOffset = $this.StickyOffset - wpadminbar - 14;
1607						} else {
1608							$this.StickyOffset = $this.StickyOffset - wpadminbar;
1609						}
1610					}
1611				}
1612
1613				// Nav Height.
1614				var navHeight = $this.StickyNav.outerHeight();
1615
1616				// Set the min-height default of the header.
1617				$this.StickyHeader.data( 'min-height', $this.StickyOffsetFull - navHeight );
1618
1619				// Document ready.
1620				if ( 'resize' !== e.type ) {
1621
1622					// Add nav dummy.
1623					$this.StickyNav.after( '<div class="navbar-dummy"></div>' );
1624					$this.StickyHeader.find( '.navbar-dummy' ).height( navHeight );
1625
1626					// Set type slide.
1627					if ( $this.StickyUp ) {
1628						$this.StickyHeader.addClass( 'sticky-type-slide' );
1629					}
1630				}
1631
1632				// Allow.
1633				$this.sScrollAllow = true;
1634			},
1635
1636			/*
1637			 * Make nav bar sticky
1638			 */
1639			stickyScroll: function( e ) {
1640				if ( !$this.sScrollAllow ) {
1641					return;
1642				}
1643
1644				var scrollCurrent = $( window ).scrollTop();
1645
1646				if ( $this.StickyUp ) {
1647
1648					if ( scrollCurrent > $this.StickyOffsetFull ) {
1649						$this.StickyNav.addClass( 'sticky-nav' );
1650					}
1651
1652					if ( scrollCurrent <= $this.StickyOffset ) {
1653						$this.StickyNav.removeClass( 'sticky-nav' );
1654					}
1655
1656					// Set scroll temporary vars.
1657					if ( scrollCurrent > $this.sPrevious ) {
1658						$this.sInterval = 0;
1659						$this.sDirection = 'down';
1660
1661						$this.StickyNav.addClass( 'sticky-down' ).removeClass( 'sticky-up' );
1662					} else {
1663						$this.sInterval += $this.sPrevious - scrollCurrent;
1664						$this.sDirection = 'up';
1665
1666						$this.StickyNav.addClass( 'sticky-up' ).removeClass( 'sticky-down' );
1667					}
1668
1669					// Сonditions.
1670					if ( $this.sInterval > 150 && 'up' === $this.sDirection ) {
1671						$this.StickyNav.addClass( 'sticky-nav-slide-visible' );
1672
1673						$( document ).trigger( 'sticky-nav-visible' );
1674					} else {
1675						$this.StickyNav.removeClass( 'sticky-nav-slide-visible' );
1676
1677						$( document ).trigger( 'sticky-nav-hide' );
1678					}
1679
1680					if ( scrollCurrent > $this.StickyOffsetFull + 150 ) {
1681						$this.StickyNav.addClass( 'sticky-nav-slide' );
1682					} else {
1683						$this.StickyNav.removeClass( 'sticky-nav-slide' );
1684					}
1685
1686					// Show onload document.
1687					if ( $this.sInFirst && scrollCurrent > $this.StickyOffsetFull + 150 ) {
1688						$this.StickyNav.addClass( ' sticky-nav-slide-visible sticky-up' );
1689						$this.StickyNav.addClass( 'sticky-nav-slide' );
1690
1691						$( document ).trigger( 'sticky-nav-visible' );
1692
1693						$this.sDirection = 'up';
1694						$this.sInterval = 151;
1695						$this.sInFirst = false;
1696					}
1697				} else {
1698					// Сonditions.
1699					if ( scrollCurrent > $this.StickyOffset ) {
1700						$this.StickyNav.addClass( 'sticky-nav' );
1701
1702						$( document ).trigger( 'sticky-nav-visible' );
1703					} else {
1704						$this.StickyNav.removeClass( 'sticky-nav' );
1705						$( document ).trigger( 'sticky-nav-hide' );
1706					}
1707				}
1708
1709				$this.sPrevious = scrollCurrent;
1710			},
1711
1712			/*
1713			 * Smart multi-Level menu
1714			 */
1715			smartLevels: function( e ) {
1716
1717				var windowWidth = $( window ).width();
1718
1719				// Reset Calc.
1720				$( '.navbar-nav li' ).removeClass( 'cs-mm-level' );
1721				$( '.navbar-nav li' ).removeClass( 'cs-mm-position-left cs-mm-position-right' );
1722				$( '.navbar-nav li .sub-menu' ).removeClass( 'cs-mm-position-init' );
1723
1724				// Set Settings.
1725				$( '.navbar-nav > li.menu-item' ).not( '.cs-mega-menu' ).each( function( index, parent ) {
1726					var position = 'cs-mm-position-right';
1727					var objPrevWidth = 0;
1728
1729					$( parent ).find( '.sub-menu' ).each( function( index, el ) {
1730
1731						// Reset child levels.
1732						$( el ).parent().next( 'li' ).addClass( 'cs-mm-level' );
1733
1734						if ( $( el ).parent().hasClass( 'cs-mm-level' ) ) {
1735
1736							$( el ).parent().removeClass( 'cs-mm-level' );
1737
1738							position = 'cs-mm-position-right';
1739							objPrevWidth = 0;
1740						}
1741
1742						// Find out position items.
1743						var offset = $( el ).offset();
1744						var objOffset = offset.left;
1745
1746						if ( 'cs-mm-position-right' === position && $( el ).outerWidth() + objOffset > windowWidth ) {
1747							position = 'cs-mm-position-left';
1748						}
1749
1750						if ( 'cs-mm-position-left' === position && objOffset - ( $( el ).outerWidth() + objPrevWidth ) < 0 ) {
1751							position = 'cs-mm-position-right';
1752						}
1753
1754						objPrevWidth = $( el ).outerWidth();
1755
1756						$( el ).addClass( 'cs-mm-position-init' ).parent().addClass( position );
1757					} );
1758
1759				} );
1760			},
1761
1762			/*
1763			 * Adapting nav bar for tablet
1764			 */
1765			adaptTablet: function( e ) {
1766				// Click outside.
1767				$( document ).on( 'touchstart', function( e ) {
1768
1769					if ( !$( e.target ).closest( '.navbar-nav' ).length ) {
1770						$( '.navbar-nav .menu-item-has-children' ).removeClass( 'submenu-visible' );
1771					} else {
1772						$( e.target ).parents( '.menu-item' ).siblings().find( '.menu-item' ).removeClass( 'submenu-visible' );
1773						$( e.target ).parents( '.menu-item' ).siblings().closest( '.menu-item' ).removeClass( 'submenu-visible' );
1774					}
1775				} );
1776
1777				$( '.navbar-nav .menu-item-has-children' ).each( function( e ) {
1778
1779					// Reset class.
1780					$( this ).removeClass( 'submenu-visible' );
1781
1782					// Remove expanded.
1783					$( this ).find( '> a > .expanded' ).remove();
1784
1785					// Add a caret.
1786					if ( 'ontouchstart' in document.documentElement ) {
1787						$( this ).find( '> a' ).append( '<span class="expanded"></span>' );
1788					}
1789
1790					// Check touch device.
1791					$( this ).addClass( 'ontouchstart' in document.documentElement ? 'touch-device' : '' );
1792
1793					$( '> a .expanded', this ).on( 'touchstart', function( e ) {
1794						e.preventDefault();
1795
1796						$( this ).closest( '.menu-item-has-children' ).toggleClass( 'submenu-visible' );
1797					} );
1798
1799
1800					if ( '#' === $( '> a', this ).attr( 'href' ) ) {
1801						$( '> a', this ).on( 'touchstart', function( e ) {
1802							e.preventDefault();
1803
1804							if ( !$( e.target ).hasClass( 'expanded' ) ) {
1805								$( this ).closest( '.menu-item-has-children' ).toggleClass( 'submenu-visible' );
1806							}
1807						} );
1808					}
1809				} );
1810			}
1811		};
1812
1813	} )();
1814
1815	// Initialize.
1816	cscoNavigation.init();
1817
1818	/**
1819	 * Offcanvas Navigation
1820	 */
1821
1822	$( '.offcanvas-toggle, .site-overlay' ).on( 'click', function( e ) {
1823		e.preventDefault();
1824		$( 'body' ).toggleClass( 'offcanvas-active' );
1825
1826		// recalc sticky sidebar by simulating window resize
1827		//  with a delay equal to the animation speed
1828		setTimeout( function() { $( window ).trigger( 'resize' ); }, 401 );
1829	} );
1830
1831	/**
1832	 * Large Page Header
1833	 */
1834
1835	var pageHeader = $( '.page-header-large' ),
1836		pageHeaderOuter = $( '.overlay-outer', pageHeader );
1837
1838	// Function for calculating Page Header height.
1839
1840	function setPageHeaderHeight() {
1841
1842		// Redefine variables.
1843		pageHeader = $( '.page-header-large' );
1844		pageHeaderOuter = $( '.overlay-outer', pageHeader );
1845
1846		// Define heights.
1847		var contentHeight = $( '.overlay-inner', pageHeader ).innerHeight(),
1848			offsetHeight = adminBarHeight + headerHeight,
1849			availableHeight = windowHeight - offsetHeight,
1850			viewPortHeight = '100vh';
1851
1852		// Offset page header.
1853		pageHeader.css( 'margin-top', '-' + offsetHeight + 'px' );
1854		pageHeaderOuter.css( 'padding-top', offsetHeight + 'px' );
1855
1856		// Set the page header height.
1857		if ( availableHeight >= contentHeight ) {
1858			pageHeaderOuter.css( 'height', viewPortHeight );
1859		} else {
1860			pageHeaderOuter.css( 'height', contentHeight + offsetHeight + 'px' );
1861		}
1862
1863		// Return if overlay position is set to bottom.
1864		if ( $( 'body' ).hasClass( 'style-align-left' ) ) {
1865			return;
1866		}
1867
1868		// Add extra padding, if possible.
1869		if ( availableHeight - offsetHeight >= contentHeight ) {
1870			pageHeaderOuter.css( 'padding-bottom', offsetHeight + 'px' );
1871		} else {
1872			pageHeaderOuter.css( 'padding-bottom', 0 );
1873		}
1874	}
1875
1876	// Set initial height.
1877
1878	$( document ).ready( function() {
1879		setPageHeaderHeight();
1880	} );
1881
1882	// Recalculate height on resize.
1883
1884	$( window ).resize( function() {
1885		setPageHeaderHeight();
1886	} );
1887
1888	/**
1889	 * Parallax
1890	 */
1891
1892	function initParallax() {
1893
1894		$( '.parallax-enabled .parallax:not(.parallax-video)' ).each( function() {
1895
1896			$( this ).jarallax( {
1897				speed: 0.8,
1898			} );
1899
1900		} );
1901
1902		var parallaxVideo = $( '.parallax-video' ),
1903			speed = 0.8;
1904
1905		if ( !$( 'body' ).hasClass( 'parallax-enabled' ) ) {
1906			speed = 1;
1907		}
1908
1909		$( parallaxVideo ).each( function() {
1910
1911			if ( !$( this ).hasClass( 'parallax' ) ) {
1912				speed = 1;
1913			}
1914
1915			$( this ).jarallax( {
1916				speed: speed,
1917				videoSrc: $( this ).attr( 'data-video' ),
1918				videoStartTime: $( this ).data( 'start' ),
1919				videoEndTime: $( this ).data( 'end' ),
1920				videoPlayOnlyVisible: true,
1921			} );
1922
1923		} );
1924
1925	}
1926
1927	$( document ).ready( function() {
1928		initParallax();
1929
1930		$( 'body' ).on( 'post-load', function() {
1931			initParallax();
1932		} );
1933
1934		csco.addAction( 'canvas.components.serverSideRender.onChange', 'initParallax', function( props ) {
1935			initParallax();
1936		} );
1937	} );
1938
1939	/**
1940	 * Object Fit Images
1941	 */
1942
1943	jQuery( document ).ready( function( $ ) {
1944		objectFitImages();
1945	} );
1946
1947	( function() {
1948		var viewport = $( window ).height();
1949		var lastScrollY = 0;
1950		var ticking = false;
1951		var offset = 200;
1952
1953		var update = function() {
1954			var article = $( '.single-post .site-main > article' );
1955
1956			if ( 1 === article.length ) {
1957				let articleHeight = $( article ).innerHeight();
1958
1959				// Pagination points.
1960				let topPoint = $( article ).offset().top;
1961				let bottomPoint = topPoint + articleHeight + offset;
1962
1963				if ( lastScrollY > topPoint && lastScrollY + viewport < bottomPoint ) {
1964					$( '.post-pagination' ).addClass( 'pagination-visible' );
1965				} else {
1966					$( '.post-pagination' ).removeClass( 'pagination-visible' );
1967				}
1968			}
1969
1970			ticking = false;
1971		};
1972
1973		var requestTick = function() {
1974			if ( !ticking ) {
1975				window.requestAnimationFrame( update );
1976				ticking = true;
1977			}
1978		};
1979
1980		var onProcess = function() {
1981			lastScrollY = window.scrollY;
1982
1983			requestTick();
1984		};
1985
1986		$( window ).on( 'scroll', onProcess );
1987		$( window ).on( 'resize', onProcess );
1988		$( window ).on( 'slider-refresh', onProcess );
1989
1990	} )();
1991
1992	/**
1993	 * Responsive Embeds
1994	 */
1995
1996	( function() {
1997		/**
1998		 * Add max-width & max-height to <iframe> elements, depending on their width & height props.
1999		 */
2000		function initResponsiveEmbeds() {
2001			var proportion, parentWidth;
2002
2003			// Loop iframe elements.
2004			$( '.entry-content' ).find( 'figure iframe, p iframe' ).each( function( index, iframe ) {
2005				// Don't handle if the parent automatically resizes itself.
2006				if ( $( iframe ).closest( 'div' ).is( '[data-video], [data-video-start], [data-video-end]' ) ) {
2007					return;
2008				}
2009				// Only continue if the iframe has a width & height defined.
2010				if ( iframe.width && iframe.height ) {
2011					// Calculate the proportion/ratio based on the width & height.
2012					proportion = parseFloat( iframe.width ) / parseFloat( iframe.height );
2013					// Get the parent element's width.
2014					parentWidth = parseFloat( window.getComputedStyle( iframe.parentElement, null ).width.replace( 'px', '' ) );
2015					// Set the max-width & height.
2016					iframe.style.maxWidth = '100%';
2017					iframe.style.maxHeight = Math.round( parentWidth / proportion ).toString() + 'px';
2018				}
2019			} );
2020		}
2021
2022		// Document ready.
2023		$( document ).ready( function() {
2024			initResponsiveEmbeds();
2025		} );
2026
2027		// Document resize.
2028		$( window ).on( 'resize', function() {
2029			initResponsiveEmbeds();
2030		} );
2031
2032		// Post load.
2033		$( 'body' ).on( 'post-load', function() {
2034			initResponsiveEmbeds();
2035		} );
2036
2037		// Run on initial load.
2038		initResponsiveEmbeds();
2039	} )();
2040
2041	/** ----------------------------------------------------------------------------
2042	 * Color Scheme Toogle */
2043
2044	var cscoDarkMode = {};
2045
2046	( function() {
2047		var $this;
2048
2049		cscoDarkMode = {
2050
2051			/** Initialize */
2052			init: function( e ) {
2053				$this = cscoDarkMode;
2054
2055				if ( 'undefined' === typeof csSchemeLocalize ) {
2056					return;
2057				}
2058
2059				// Init events.
2060				$this.events( e );
2061			},
2062
2063			/** Events */
2064			events: function( e ) {
2065				if ( $( 'body' ).hasClass( 'wp-admin' ) ) {
2066					return;
2067				}
2068
2069				// DOM Load
2070				window.addEventListener( 'load', function( e ) {
2071					$this.initMode( e );
2072				} );
2073
2074				window.matchMedia( '(prefers-color-scheme: dark)' ).addListener( ( e ) => {
2075					$this.initMode( e );
2076				} );
2077
2078				// Switch
2079				$( document ).on( 'click', '.cs-site-scheme-toggle', function( e ) {
2080					$this.changeMode( e );
2081				} );
2082			},
2083
2084			/** Init Mode */
2085			initMode: function( e ) {
2086
2087				// Get system scheme.
2088				var systemSchema = 'default';
2089
2090				if ( window.matchMedia && window.matchMedia( '(prefers-color-scheme: dark)' ).matches ) {
2091					systemSchema = 'dark';
2092				}
2093
2094				csSetCookie( '_color_system_schema', systemSchema, { expires: 2592000 } );
2095
2096				// Set site scheme.
2097				var siteScheme = 'default';
2098
2099				switch ( csSchemeLocalize.siteSchemeMode ) {
2100					case 'dark':
2101						siteScheme = 'dark';
2102						break;
2103					case 'light':
2104						siteScheme = 'default';
2105						break;
2106					case 'system':
2107						siteScheme = systemSchema;
2108						break;
2109				}
2110
2111				if ( csSchemeLocalize.siteSchemeToogle ) {
2112					if ( 'default' === csGetCookie( '_color_schema' ) ) {
2113						siteScheme = 'default';
2114					}
2115					if ( 'dark' === csGetCookie( '_color_schema' ) ) {
2116						siteScheme = 'dark';
2117					}
2118				}
2119
2120				// Change site scheme
2121				if ( siteScheme !== $( 'html' ).attr( 'data-scheme' ) ) {
2122					$this.changeScheme( siteScheme, false );
2123				}
2124			},
2125
2126			/** Change Mode */
2127			changeMode: function( e ) {
2128				if ( 'dark' === $( 'html' ).attr( 'data-scheme' ) ) {
2129					$this.changeScheme( 'default', true );
2130				} else {
2131					$this.changeScheme( 'dark', true );
2132				}
2133			},
2134
2135			/** Change Scheme */
2136			changeScheme: function( scheme, cookie ) {
2137				$( 'html' ).addClass( 'cs-scheme-toggled' );
2138
2139				$( 'html' ).attr( 'data-scheme', scheme );
2140
2141				if ( 'dark' === scheme ) {
2142					document.getElementById( 'csco-customizer-output-dark-styles' ).removeAttribute( 'media' );
2143					document.getElementById( 'csco-customizer-output-default-styles' ).setAttribute( 'media', "max-width: 1px" );
2144				} else {
2145					document.getElementById( 'csco-customizer-output-default-styles' ).removeAttribute( 'media' );
2146					document.getElementById( 'csco-customizer-output-dark-styles' ).setAttribute( 'media', "max-width: 1px" );
2147				}
2148
2149				if ( cookie ) {
2150					csSetCookie( '_color_schema', scheme, { expires: 2592000 } );
2151					csSetCookie( '_color_system_schema', null, { expires: 2592000 } );
2152				}
2153
2154				setTimeout( () => {
2155					$( 'html' ).removeClass( 'cs-scheme-toggled' );
2156				}, 100 );
2157			}
2158		};
2159
2160	} )();
2161
2162	// Initialize.
2163	cscoDarkMode.init();
2164
2165	/**
2166	 * Fullscreen Search
2167	 */
2168
2169	$( 'a[href="#search"]' ).on( 'click', function( event ) {
2170		event.preventDefault();
2171		$( '#search' ).addClass( 'open' );
2172		$( '#search input[type="search"]' ).focus();
2173		$( 'body' ).addClass( 'search-open' );
2174	} );
2175
2176	$( '#search, #search button.close' ).on( 'click keyup', function( event ) {
2177		if ( event.target === this || event.target.className === 'close' || event.keyCode === 27 ) {
2178			event.preventDefault();
2179			$( this ).removeClass( 'open' );
2180			$( 'body' ).removeClass( 'search-open' );
2181		}
2182	} );
2183
2184	/**
2185	 * Sliders
2186	 */
2187
2188	// Simple
2189
2190	function initSliderSimple() {
2191
2192		var sliderSimple = $( '.gallery-type-slider' );
2193
2194		function onTranslated( event ) {
2195			setTimeout( function() {
2196				$( window ).trigger( 'slider-refresh' );
2197			}, 1000 );
2198		}
2199
2200		function onInitialized( event ) {
2201			$( window ).trigger( 'slider-refresh' );
2202		}
2203
2204		sliderSimple.each( function() {
2205
2206			$( this ).wrapInner( '<div class="owl-carousel"></div>' );
2207
2208			$( this ).append( '<div class="owl-arrows"></div>' );
2209			$( this ).append( '<div class="owl-dots"></div>' );
2210
2211			var container = this,
2212				owl = $( this ).find( '.owl-carousel' );
2213
2214			if ( $( owl ).hasClass( 'owl-loaded' ) ) {
2215				return;
2216			}
2217
2218			$( owl ).imagesLoaded( function() {
2219
2220				owl.owlCarousel( {
2221					dragEndSpeed: 250,
2222					smartSpeed: 250,
2223					autoHeight: true,
2224					items: 1,
2225					margin: 0,
2226					navText: [
2227						'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.previous + '</span></div>',
2228						'<div class="button button-primary button-effect"><span><i class="cs-icon cs-icon-chevron-up"></i></span><span>' + translation.next + '</span></div>'
2229					],
2230					navContainer: $( '.owl-arrows', container ),
2231					dots: true,
2232					dotsContainer: $( '.owl-dots', container ),
2233					rtl: rtl,
2234					responsive: {
2235						0: {
2236							nav: false,
2237						},
2238						1020: {
2239							nav: true,
2240						}
2241					},
2242					onInitialized: onInitialized,
2243					onTranslated: onTranslated,
2244				} );
2245
2246			} );
2247
2248		} );
2249	}
2250
2251	$( document ).ready( function() {
2252		initSliderSimple();
2253		$( document.body ).on( 'post-load', function() {
2254			initSliderSimple();
2255		} );
2256
2257		csco.addAction( 'canvas.components.serverSideRender.onChange', 'posts-init-slider', function( props ) {
2258			if ( 'canvas/posts' === props.block ) {
2259				initSliderSimple();
2260			}
2261		} );
2262	} );
2263
2264	// Flip
2265
2266	function initSliderFlip() {
2267
2268		var sliderFlip = $( '.slider-flip' );
2269
2270		function sliderFlipInitialized() {
2271			$( window ).trigger( 'slider-refresh' );
2272		}
2273
2274		sliderFlip.each( function() {
2275
2276			var container = this,
2277				owl = $( '.owl-carousel', this ),
2278				effectOut = 'flipOut',
2279				effectIn = 'flipIn';
2280
2281			if ( isIE ) {
2282				effectOut = 'fadeOut';
2283				effectIn = 'fadeIn';
2284			}
2285
2286			$( owl ).imagesLoaded( function() {
2287
2288				owl.owlCarousel( {
2289					dragEndSpeed: 250,
2290					smartSpeed: 250,
2291					autoHeight: true,
2292					animateOut: effectOut,
2293					animateIn: effectIn,
2294					items: 1,
2295					margin: 0,
2296					dots: true,
2297					dotsContainer: $( '> .owl-dots', container ),
2298					rtl: rtl,
2299					onInitialized: sliderFlipInitialized,
2300				} );
2301
2302			} );
2303
2304		} );
2305
2306	}
2307
2308	$( document ).ready( function() {
2309		initSliderFlip();
2310
2311		$( document.body ).on( 'post-load', function() {
2312			initSliderFlip();
2313		} );
2314
2315		csco.addAction( 'canvas.components.serverSideRender.onChange', 'initNavMenu', function( props ) {
2316			initSliderFlip();
2317		} );
2318	} );
2319
2320	/**
2321	 * Sticky Post Sidebar
2322	 */
2323
2324	var stickyPostElements = $( '.sticky-sidebar-enabled .post-sidebar .pk-s
2324hare-buttons-wrap' );
2325
2326	$( document ).ready( function() {
2327
2328		$( document ).on( 'sticky-nav-visible', function() {
2329			var navBarHeight = $( '.navbar-primary' ).innerHeight();
2330
2331			$( stickyPostElements ).css( 'top', 60 + navBarHeight + 'px' );
2332		} );
2333
2334		$( document ).on( 'sticky-nav-hide', function() {
2335			$( stickyPostElements ).css( 'top', 60 + 'px' );
2336		} );
2337
2338	} );
2339
2340	/**
2341	 * Sticky Sidebar
2342	 */
2343
2344	var stickyElements = [];
2345
2346	stickyElements.push( '.sticky-sidebar-enabled.stick-to-top .sidebar-1' );
2347	stickyElements.push( '.sticky-sidebar-enabled.stick-last .sidebar .widget:last-child' );
2348	stickyElements.push( '.cnvs-block-section-sidebar-sticky-top .cnvs-block-section-sidebar-inner' );
2349	stickyElements.push( '.cnvs-block-section-sidebar-sticky-top-last-block .cnvs-block-section-sidebar-inner > *:last-child' );
2350
2351	$( document ).ready( function() {
2352
2353		// Sticky sidebar for mozilla.
2354		if ( navigator.userAgent.toLowerCase().indexOf( 'firefox' ) > -1 ) {
2355			stickyElements.push( '.sticky-sidebar-enabled.stick-to-bottom .sidebar-1' );
2356		}
2357
2358		// Join elements.
2359		stickyElements = stickyElements.join( ',' );
2360
2361		// Sticky nav visible.
2362		$( document ).on( 'sticky-nav-visible', function() {
2363			var navBarHeight = $( '.navbar-primary' ).innerHeight();
2364
2365			$( stickyElements ).css( 'top', 32 + navBarHeight + 'px' );
2366		} );
2367
2368		// Sticky nav hide.
2369		$( document ).on( 'sticky-nav-hide', function() {
2370			$( stickyElements ).css( 'top', 32 + 'px' );
2371		} );
2372
2373	} );
2374
2375	// Init slider for powerkit twitter.
2376
2377	function initTwitterSlider() {
2378		$( '.pk-twitter-slider, .cnvs-block-twitter-layout-slider' ).each( function() {
2379			if ( $( this ).hasClass( 'init-slider' ) ) {
2380				return;
2381			}
2382
2383			$( this ).addClass( 'init-slider' );
2384
2385			// Wrap tweet of owl-slide.
2386			$( this ).find( '.pk-twitter-tweet' ).wrap( '<div class="owl-slide"></div>' );
2387
2388			// Wrap tweets of owl-carousel.
2389			$( this ).find( '.pk-tweets' ).wrapInner( '<div class="owl-carousel"></div>' );
2390
2391			// Add owl dots.
2392			$( this ).find( '.pk-tweets' ).append( '<div class="owl-dots"></div>' );
2393
2394			// Wrap tweets of slider-container.
2395			$( this ).find( '.pk-tweets' ).wrapInner( '<div class="slider-container slider-flip"></div>' );
2396		} );
2397	}
2398
2399	$( document ).ready( function() {
2400		initTwitterSlider();
2401		initSliderFlip();
2402
2403		$( document.body ).on( 'post-load', function() {
2404			initTwitterSlider();
2405			initSliderFlip();
2406		} );
2407
2408		csco.addAction( 'canvas.components.serverSideRender.onChange', 'initTwitterSlider', function( props ) {
2409			initTwitterSlider();
2410			initSliderFlip();
2411		} );
2412	} );
2413
2414	$( document ).ready( function() {
2415		$( document.body ).on( 'editor-render', function() {
2416			$( '.owl-carousel' ).trigger( 'refresh.owl.carousel' );
2417		} );
2418	} );
2419
2420	/**
2421	 * Product Thumbnail Slider
2422	 */
2423
2424	var owlProductGallery = $( '.product-gallery-wrapper' );
2425
2426	owlProductGallery.each( function() {
2427
2428		var container = this;
2429		var owl = $( '.owl-carousel', this );
2430
2431		$( owl ).imagesLoaded( function() {
2432
2433			owl.owlCarousel( {
2434				dragEndSpeed: 250,
2435				smartSpeed: 250,
2436				autoHeight: true,
2437				dots: true,
2438				dotsContainer: $( '> .owl-dots', container ),
2439				rtl: rtl,
2440				responsive: {
2441					0: {
2442						items: 1,
2443						margin: 0,
2444					},
2445					760: {
2446						items: 2,
2447						margin: 15,
2448					},
2449					1020: {
2450						items: 3,
2451						margin: 15,
2452					},
2453					1240: {
2454						items: 4,
2455						margin: 15,
2456					}
2457				},
2458			} );
2459
2460		} );
2461
2462	} );
2463
2464} )( jQuery );

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.