PageSourceSearch

https://authorservicesinc.com/wp-content/themes/enfold/config-temp…/tab_section/tab_section.js?ver=8.1

js authorservicesinc.com collected 2026-09-25 00:11:52 UTC 22,838 bytes, 771 lines download raw bytes

1// -------------------------------------------------------------------------------------------
2// Tab Section and Slideshow Section
3// =================================
4//
5// @since 5.0		extended to support slideshow section
6// -------------------------------------------------------------------------------------------
7(function($)
8{
9	"use strict";
10
11	$.fn.avia_sc_tab_section = function()
12	{
13		var win 			= $(window),
14			browserPrefix 	= $.avia_utilities.supports('transition'),
15			cssActive 		= this.browserPrefix !== false ? true : false,
16			isMobile 		= $.avia_utilities.isMobile,
17			isTouchDevice	= $.avia_utilities.isTouchDevice,
18			mobile_no_animation = $( 'body' ).hasClass( 'avia-mobile-no-animations' ),
19			transform3d		= document.documentElement.className.indexOf('avia_transform3d') !== -1 ? true : false,
20			transition		= {},
21			animations = [
22							'avia_animate_when_visible',
23							'avia_animate_when_almost_visible',
24							'av-animated-generic',
25							'av-animated-when-visible',
26							'av-animated-when-almost-visible',
27							'av-animated-when-visible-95'
28						];
29
30		return this.each( function()
31		{
32			var container 		= $(this),
33				tabs			= container.find('.av-section-tab-title'),
34				tab_outer		= container.find('.av-tab-section-outer-container'),
35				tab_wrap		= container.find('.av-tab-section-tab-title-container'),
36				tab_nav			= container.find('.av_tab_navigation'),		//	dummy structure used for sliding logic
37				arrows_wrap		= container.find('.av-tabsection-arrow'),	//	arrows to scroll tab buttons
38				arrows			= arrows_wrap.find('.av-tab-section-slide'),
39				slides_wrap		= container.find('.av-slide-section-container-wrap'),
40				slide_arrows_wrap = container.find('.av-tabsection-slides-arrow'),	//	arrows to scroll slides
41				slide_arrows	= slide_arrows_wrap.find('.av-tab-section-slide-content'),
42				slide_dots_wrap = container.find('.av-tabsection-slides-dots'),		//	dots to scroll slides
43				slide_dots		= slide_dots_wrap.find('.goto-slide'),
44				content_wrap	= container.find('.av-tab-section-inner-container'),
45				single_tabs		= container.find('.av-animation-delay-container'), //for elements inside the tab that receive waypoint animation
46				layout_tab_wrap = container.find('.av-layout-tab'),
47				inner_content	= container.find('.av-layout-tab-inner'),
48				flexible    	= container.is('.av-tab-content-auto'),
49				minimumBrowserHeight = container.hasClass( 'av-minimum-height'),
50				current_content = null,		// container.find('.__av_init_open') => .av-layout-tab,
51				current_tab_id  = '1',		// current_content.data( 'av-tab-section-content' ),
52				current_iTab_id = 1,		// 'undefined' != typeof current_tab_id ? parseInt( current_tab_id, 10 ) : 1,
53				min_width		= 0,
54				transition_action = 'none',
55				slideshowOptions = {
56								animation: 'av-tab-slide-transition',
57								autoplay: false,
58								loop_autoplay: 'once',			//	'endless' | 'once'
59								interval: 5,
60								loop_manual: 'manual-endless',	//	'manual-endless' | 'manual-once'
61								autoplay_stopper: false,
62								noNavigation: false
63							},
64				slideshowData = tab_outer.data( 'slideshow-data' ),		//	returns decoded json object
65				deepLinksToTabs = {},				//	deeplink: tabID  allows case insensitive retrieve of hash tag
66				timeoutIDAutoplay = null;
67
68			if( 'undefined' != typeof slideshowData )
69			{
70				slideshowOptions = $.extend( {}, slideshowOptions, slideshowData );
71			}
72
73			layout_tab_wrap.each( function ()
74			{
75				var tab = $( this ),
76					link = tab.data( 'av-deeplink-tabs' ),
77					id = tab.data( 'av-tab-section-content' );
78
79				if( link )
80				{
81					deepLinksToTabs[ link.toLowerCase() ] = id;
82				}
83			});
84
85			//	__av_init_open might not set because we cannot check for invalid initial open slide number in php - we set it here
86			current_tab_id = container.find( '.av-active-tab-title' ).data( 'av-tab-section-title' );
87			current_tab_id = 'undefined' != typeof current_tab_id ? current_tab_id : '1';
88			current_iTab_id = parseInt( current_tab_id, 10 );
89			current_content = container.find( '[data-av-tab-section-content="' + current_tab_id + '"]' );
90			current_content.addClass( '__av_init_open av-active-tab-content' );
91
92			if( 'av-tab-slide-transition' == slideshowOptions.animation )
93			{
94				transition_action = 'slide_sidewards';
95			}
96			else if( 'av-tab-slide-up-transition' == slideshowOptions.animation )
97			{
98				transition_action = 'slide_up';
99			}
100			else if( 'av-tab-fade-transition' == slideshowOptions.animation )
101			{
102				transition_action = 'fade';
103			}
104
105			//	due to translate animations are not working correctly with waypoint script we have to add this here
106			if( 'slide_up' == transition_action )
107			{
108				$.each( animations, function( index, value )
109				{
110					inner_content.find( '.' + value ).addClass( 'avia_start_animation_when_active' );
111				});
112			}
113
114			var change_tab = function( e, prevent_hash )
115				{
116					e.preventDefault();
117
118					//	ignore user click on tab buttons when slideshow
119					if( container.hasClass( 'av-is-slideshow' ) && e.originalEvent !== undefined )
120					{
121						return;
122					}
123
124					var current_tab = $( e.currentTarget ),
125//						current_arrow = current_tab.find('.av-tab-arrow-container span'),
126						tab_nr = current_tab.data('av-tab-section-title'),
127						iTab_nr = parseInt( tab_nr, 10 ),
128						prev_content = current_content;
129
130					tabs.removeClass( 'av-active-tab-title' );
131					prev_content.removeClass( 'av-active-tab-content' );
132
133					//	needed to avoid scroll on pageload when multiple tab sections on page
134					current_tab.removeClass( 'no-scroll' );
135
136					//	reset global scope !!
137					current_content = container.find( '[data-av-tab-section-content="' + tab_nr + '"]' );
138					current_tab_id = tab_nr;
139					current_iTab_id = iTab_nr;
140
141					current_tab.addClass( 'av-active-tab-title' );
142					current_content.addClass( 'av-active-tab-content' );
143
144					var new_pos = ( ( iTab_nr - 1 ) * -100 );
145
146					if( $('body').hasClass('rtl') )
147					{
148						new_pos = ( ( iTab_nr - 1 ) * 100 );
149					}
150
151					//	set height of section depending on current content
152					set_slide_height();
153
154					if( ['none', 'slide_sidewards'].indexOf( transition_action ) >= 0 )
155					{
156						//	default tab section slide behaviour
157						if( cssActive )
158						{
159							//move the slides
160							new_pos = new_pos / tabs.length;
161							transition['transform'] = transform3d ? "translate3d(" + new_pos  + "%, 0, 0)" : "translate(" + new_pos + "%,0)"; //3d or 2d transform?
162							transition['left'] = "0%";
163							content_wrap.css( transition );
164						}
165						else
166						{
167							content_wrap.css( 'left', new_pos + "%" );
168						}
169					}
170					else if( 'slide_up' == transition_action )
171					{
172						layout_tab_wrap.css( 'opacity', 1 );
173
174						//	default tab section slide behaviour
175						if( cssActive )
176						{
177							var top = current_content.data( 'slide-top' );
178
179							if( 'undefined' == typeof top )
180							{
181								top = 0;
182							}
183
184							//move the slides
185							transition['transform'] = transform3d ? "translate3d(0, -" + top + "px, 0)" : "translate(0, -" + top + "px ,0)"; //3d or 2d transform?
186							transition['left'] = "0";
187							content_wrap.css( transition );
188						}
189						else
190						{
191							content_wrap.css( 'top', '-' + new_pos + 'px' );
192						}
193
194						layout_tab_wrap.filter(':not(.av-active-tab-content)').css( 'opacity', 0 );
195					}
196
197					set_tab_title_pos();
198					set_slide_arrows_visibility( iTab_nr );
199					set_slide_dots_visibility( iTab_nr );
200
201					if( ! ( prevent_hash || slideshowOptions.autoplay ) )
202					{
203						var newHash = current_tab.attr( 'href' ),
204							deepLink = current_content.data( 'av-deeplink-tabs' );
205
206						if( 'undefined' != typeof( deepLink ) && '' != deepLink )
207						{
208							newHash = deepLink;
209						}
210
211						location.hash = newHash;
212					}
213
214					setTimeout( function()
215					{
216						current_content.trigger( 'avia_start_animation_if_current_slide_is_active' );
217
218						//	fixes bug that animations do not work due to fn.avia_waypoints()
219						if( ! isMobile || ( isMobile && ! mobile_no_animation ) )
220						{
221							single_tabs.not( current_content ).trigger( 'avia_remove_animation' );
222						}
223					}, 600 );
224				},
225
226				set_min_width = function()
227				{
228					min_width = 0;
229					tabs.each( function()
230					{
231						min_width += $(this).outerWidth();
232					});
233
234					tab_wrap.css( 'min-width', min_width );
235				},
236
237				set_slide_height = function()
238				{
239					var tab_wrap_height = container.hasClass( 'av-hide-tabs' ) ? 0 : tab_wrap.height(),
240						tab_wrap_add = tab_wrap_height ? tab_wrap.outerHeight() : 0,
241						min_el_height = 0,
242						cell_padding = 0,
243						same_slide_height = 0,
244						same_table_cell_height = 0,
245						calc_el_height = 0;
246
247					if( minimumBrowserHeight )
248					{
249						var css_height = container.hasClass( 'av-minimum-height-custom' ) ? container.data( 'av_minimum_height_px' ) : container.css( 'min-height' );
250						css_height = parseInt( css_height, 10 );
251						if( ! isNaN( css_height ) )
252						{
253							min_el_height = css_height;
254						}
255
256						if( ! min_el_height )
257						{
258							minimumBrowserHeight = false;
259						}
260					}
261
262					if( ! flexible )
263					{
264						//	reset all slide content to actual height
265						inner_content.css( 'height', '' );
266						content_wrap.css( 'min-height', '' );
267
268						var first = layout_tab_wrap.first();
269
270						cell_padding = first.outerHeight() - first.height();
271
272						layout_tab_wrap.each( function()
273						{
274							var content = $( this ),
275								inner = content.find( '.av-layout-tab-inner' );
276
277							same_slide_height = Math.max( same_slide_height, inner.height() );
278						});
279
280						same_table_cell_height = same_slide_height + cell_padding;
281						calc_el_height = same_table_cell_height + tab_wrap_add;
282
283						if( minimumBrowserHeight )
284						{
285							if( calc_el_height < min_el_height )
286							{
287								same_table_cell_height = min_el_height - tab_wrap_add;
288								calc_el_height = min_el_height;
289							}
290						}
291
292//						inner_content.height( same_table_cell_height );
293						content_wrap.css( 'min-height', same_table_cell_height );
294						content_wrap.css( 'height', same_table_cell_height );
295					}
296					else if( flexible && minimumBrowserHeight )
297					{
298						same_table_cell_height = min_el_height - tab_wrap_add;
299						calc_el_height = min_el_height;
300
301						content_wrap.css( 'min-height', same_table_cell_height );
302						content_wrap.css( 'height', same_table_cell_height );
303					}
304
305					if( ['none', 'slide_sidewards', 'fade'].indexOf( transition_action ) >= 0 )
306					{
307						if( ! current_content.length )
308						{
309							return;
310						}
311
312						//	table and table cell - only needs to be adjusted when content adjusted to content height
313						if( flexible )
314						{
315//							var old_height = inner_content.height();
316							inner_content.height( 'auto' );
317
318							//	since 4.8.9 changed to outerHeight because huge_padding is broken - padding is ignored
319							var content_height = current_content.find( '.av-layout-tab-inner' ).height(),
320								height = current_content.outerHeight(),
321								outer_height = height + tab_wrap_height + 100;
322
323							tab_outer.css( 'max-height', outer_height );
324//							inner_content.height( old_height );
325							inner_content.height( content_height );
326							inner_content.css( 'overflow', 'hidden' );
327						}
328
329						setTimeout( function() { win.trigger( 'av-height-change' ); }, 600 );
330
331						return;
332					}
333
334					//	'slide_up'
335					var top = 0;
336
337					layout_tab_wrap.each( function()
338					{
339						var content = $( this ),
340							inner = content.find( '.av-layout-tab-inner' ),
341							layout_tab_nr = content.data( 'av-tab-section-content' ),
342							layout_iTab_nr = parseInt( layout_tab_nr, 10 ),
343							outerHeight = content.outerHeight();
344
345						content.data( 'slide-top', top );
346						top += outerHeight;
347
348						if( flexible && layout_iTab_nr == current_iTab_id )
349						{
350							//	adjust height of section to visible element
351							tab_outer.css( 'max-height', outerHeight + tab_wrap_add );
352							inner.css( 'overflow', 'hidden' );
353						}
354					});
355				},
356
357				set_tab_title_pos = function()
358				{
359					//	scroll the tabs if there is not enough room to display them all - rtl allign right to left !!
360					var current_tab = container.find('.av-active-tab-title'),
361						viewport = container.width(),
362						left_pos = ( current_tab.position().left * - 1 ) - ( current_tab.outerWidth() / 2 ) + ( viewport / 2 );
363
364					if( ! $('body').hasClass('rtl') )
365					{
366						if( viewport >= min_width )
367						{
368							left_pos = 0;
369						}
370
371						if( left_pos + min_width < viewport )
372						{
373							left_pos = ( min_width - viewport ) * -1;
374						}
375
376						if( left_pos > 0 )
377						{
378							left_pos = 0;
379						}
380
381						tab_wrap.css( 'left', left_pos );
382
383						var show_prev = left_pos !== 0;
384						var show_next = left_pos + min_width > viewport;
385
386						set_arrows_visibility( show_prev, show_next );
387					}
388					else
389					{
390						var right_pos = 0;
391
392						if( viewport < min_width )
393						{
394							if( left_pos + min_width > viewport )
395							{
396								if( left_pos > 0 )
397								{
398									left_pos = 0;
399								}
400
401								right_pos = ( left_pos + min_width - viewport ) * -1;
402							}
403						}
404
405						tab_wrap.css( 'left', 'auto' );
406						tab_wrap.css( 'right', right_pos );
407
408						var show_prev = right_pos + min_width > viewport;
409						var show_next = right_pos !== 0;
410
411						set_arrows_visibility( show_prev, show_next );
412					}
413				},
414
415				set_arrows_visibility = function( show_prev, show_next )
416				{
417					if( show_prev )
418					{
419						arrows_wrap.addClass( 'av-visible-prev' );
420					}
421					else
422					{
423						arrows_wrap.removeClass( 'av-visible-prev' );
424					}
425
426					if( show_next )
427					{
428						arrows_wrap.addClass( 'av-visible-next' );
429					}
430					else
431					{
432						arrows_wrap.removeClass( 'av-visible-next' );
433					}
434				},
435
436				set_slide_arrows_visibility = function( current_tab )
437				{
438					if( current_tab > 1 )
439					{
440						slide_arrows_wrap.addClass( 'av-visible-prev' );
441					}
442					else
443					{
444						slide_arrows_wrap.removeClass( 'av-visible-prev' );
445					}
446
447					if( current_tab < tabs.length )
448					{
449						slide_arrows_wrap.addClass( 'av-visible-next' );
450					}
451					else
452					{
453						slide_arrows_wrap.removeClass( 'av-visible-next' );
454					}
455				},
456
457				set_slide_dots_visibility = function( current_tab )
458				{
459					slide_dots_wrap.find( 'a' ).removeClass( 'active' );
460					slide_dots_wrap.find( 'a' ).eq( current_tab - 1 ).addClass( 'active' );
461				},
462
463				swipe_to_next_prev = function(e)
464				{
465					//	ignore user interaction
466					if( slideshowOptions.noNavigation )
467					{
468						return;
469					}
470
471					switch_to_next_prev( e );
472				},
473
474				switch_to_next_prev = function( e )
475				{
476					e.preventDefault();
477
478					var clicked = $( e.currentTarget ),
479						current_tab = container.find('.av-active-tab-title');
480
481					//	handle slideshow section -> reroute to slideshow navigation arrows (might be hidden with CSS)
482					if( container.hasClass( 'av-slideshow-section' ) )
483					{
484						if( clicked.hasClass( 'av_prev_tab_section' ) )
485						{
486							slide_arrows_wrap.find( '.av_prev_tab_section' ).trigger( 'click' );
487						}
488						else
489						{
490							slide_arrows_wrap.find( '.av_next_tab_section' ).trigger( 'click' );
491						}
492
493						return;
494					}
495
496					if( clicked.is('.av_prev_tab_section') )
497					{
498						if( ! $('body').hasClass('rtl') )
499						{
500							current_tab.prev('.av-section-tab-title').trigger('click');
501						}
502						else
503						{
504							current_tab.next('.av-section-tab-title').trigger('click');
505						}
506					}
507					else
508					{
509						if( ! $('body').hasClass('rtl') )
510						{
511							current_tab.next('.av-section-tab-title').trigger('click');
512						}
513						else
514						{
515							current_tab.prev('.av-section-tab-title').trigger('click');
516						}
517					}
518				},
519
520				slide_arrows_next_prev = function( e )
521				{
522					e.preventDefault();
523
524					//	ignore user clicks on slideshow arrows
525					if( slideshowOptions.noNavigation && e.originalEvent !== undefined )
526					{
527						return;
528					}
529
530					var clicked = $( e.currentTarget ),
531						current_tab = container.find('.av-active-tab-title'),
532						tab_nr = current_tab.data('av-tab-section-title'),
533						iTab_nr = parseInt( tab_nr, 10 ),
534						next = 0;
535
536					if( clicked.hasClass( 'av_prev_tab_section' ) )
537					{
538						next = ! $('body').hasClass('rtl') ? -1 : 1;
539					}
540					else
541					{
542						next = ! $('body').hasClass('rtl') ? 1 : -1;
543					}
544
545					var pos = iTab_nr + next;
546
547					if( pos <= 0 || pos > tabs.length )
548					{
549						//	fallback, if arrows are visible for first or last slide
550						if( 'endless' != slideshowOptions.loop_autoplay && 'manual-endless' != slideshowOptions.loop_manual )
551						{
552							return;
553						}
554
555						pos = pos <= 0 ? tabs.length : 1;
556					}
557
558					clearTimeoutAutoplay();
559					tabs.eq( pos - 1 ).trigger( 'click' );
560					init_autoplay();
561				},
562
563				slide_dots_change_tab = function( e )
564				{
565					e.preventDefault();
566
567					var clicked = $( e.currentTarget );
568
569					if( clicked.hasClass( 'active' ) )
570					{
571						return;
572					}
573
574					var tab_nr = clicked.attr( 'href' ).replace( '#', '' ),
575						iTab_nr = parseInt( tab_nr, 10 );
576
577					if( iTab_nr > tabs.length )
578					{
579						return;
580					}
581
582					clearTimeoutAutoplay();
583					tabs.eq( iTab_nr - 1 ).trigger( 'click' );
584					init_autoplay();
585				},
586
587				get_init_open = function()
588				{
589//					removed 5.0
590//					if( ! hash && window.location.hash ) var hash = window.location.hash;
591
592					var hash = window.location.hash ? window.location.hash : '',
593						deepHash = hash.toLowerCase().replace( '#', '' ),
594						open = null;
595
596					if( 'undefined' != typeof( deepLinksToTabs[ deepHash ] ) && '' != deepLinksToTabs[ deepHash ] )
597					{
598						var hashID = deepLinksToTabs[ deepHash ];
599						open = tabs.filter( '[data-av-tab-section-title="' + hashID + '"]' );
600					}
601					else
602					{
603						open = tabs.filter( '[href="' + hash + '"]' );
604					}
605
606					if( open.length )
607					{
608						if( ! open.is( '.active_tab' ) )
609						{
610							open.trigger( 'click' );
611						}
612					}
613					else
614					{
615						//set correct color
616						container.find( '.av-active-tab-title' ).trigger( 'click', true );
617					}
618				},
619
620				clearTimeoutAutoplay = function()
621				{
622					if( typeof timeoutIDAutoplay === 'number' )
623					{
624						clearTimeout( timeoutIDAutoplay );
625					}
626
627					timeoutIDAutoplay = null;
628				},
629
630				init_autoplay = function()
631				{
632					if( ! container.hasClass( 'av-slideshow-section' ) )
633					{
634						return;
635					}
636
637					if( true !== slideshowOptions.autoplay )
638					{
639						tab_outer.removeClass( 'av-slideshow-autoplay' ).addClass( 'av-slideshow-manual' );
640					}
641
642					if( 'undefined' == typeof slideshowOptions.loop_autoplay || 'endless' != slideshowOptions.loop_autoplay  )
643					{
644						slideshowOptions.loop_autoplay = 'once';
645					}
646
647					if( 'undefined' == typeof slideshowOptions.interval )
648					{
649						slideshowOptions.interval = 5;
650					}
651
652					if( 'undefined' == typeof slideshowOptions.autoplay || true !== slideshowOptions.autoplay  )
653					{
654						slideshowOptions.autoplay = false;
655						tab_outer.removeClass( 'av-slideshow-autoplay' ).addClass( 'av-slideshow-manual' );
656						return;
657					}
658
659					clearTimeoutAutoplay();
660
661					timeoutIDAutoplay = setTimeout( function()
662					{
663						rotate_next_slide();
664					}, slideshowOptions.interval * 1000 );
665				},
666
667				rotate_next_slide = function()
668				{
669					var current_tab = container.find('.av-active-tab-title'),
670						tab_nr = current_tab.data('av-tab-section-title'),
671						iTab_nr = parseInt( tab_nr, 10 ),
672						stop = false,
673						next = 0;
674
675					timeoutIDAutoplay = null;
676
677					if( 'endless' == slideshowOptions.loop_autoplay )
678					{
679						if( ! $('body').hasClass('rtl') )
680						{
681							next = iTab_nr < tabs.length ? iTab_nr + 1 : 1;
682						}
683						else
684						{
685							next = iTab_nr > 1 ? iTab_nr - 1 : tabs.length;
686						}
687					}
688					else
689					{
690						if( ! $('body').hasClass('rtl') )
691						{
692							stop = iTab_nr == tabs.length;
693							next = iTab_nr + 1;
694						}
695						else
696						{
697							stop = iTab_nr == 1;
698							next = iTab_nr - 1;
699						}
700
701						if( stop )
702						{
703							slideshowOptions.autoplay = false;
704							slideshowOptions.loop_autoplay = 'manual';
705							tab_outer.removeClass( 'av-slideshow-autoplay' ).addClass( 'av-slideshow-manual' );
706							tab_outer.removeClass( 'av-loop-endless' ).addClass( 'av-loop-once' );
707							return;
708						}
709					}
710
711					tabs.eq( next - 1 ).trigger( 'click' );
712
713					timeoutIDAutoplay = setTimeout( function()
714					{
715						rotate_next_slide();
716					}, slideshowOptions.interval * 1000 );
717				};
718
719			$.avia_utilities.preload({
720
721				container: current_content,
722				single_callback: function()
723				{
724					tabs.on( 'click', change_tab );
725					arrows.on( 'click', switch_to_next_prev );
726					slide_arrows.on( 'click', slide_arrows_next_prev );
727					slide_dots.on( 'click', slide_dots_change_tab );
728
729					//	implement swipe event
730					if( isMobile || isTouchDevice )
731					{
732						tab_nav.on( 'click', swipe_to_next_prev );
733					}
734
735					win.on( 'debouncedresize', set_tab_title_pos );
736
737					win.on( 'hashchange', get_init_open );
738
739
740					/**
741					 * We had to remove av-height-change because this event is recursivly triggered in set_slide_height and lead to performance problems
742					 * AND broken layout - content was not displayed completly
743					 *
744					 * Content elements that can can change their height and trigger av-height-change should trigger this additional event after to
745					 * allow layout elements like tab section to react on this and then call av-height-change by themself
746					 *
747					 * @since 4.2.3
748					 */
749					win.on( 'debouncedresize av-content-el-height-changed', set_slide_height );
750
751					set_min_width();
752					set_slide_height();
753					get_init_open();
754					init_autoplay();
755				}
756			});
757
758			if( isMobile || isTouchDevice )
759			{
760				if( ! slideshowOptions.noNavigation )
761				{
762					content_wrap.avia_swipe_trigger( { prev:'.av_prev_tab_section', next:'.av_next_tab_section' } );
763				}
764			}
765
766			//	preload has some delay - try to build a correct layout
767			set_slide_height();
768		});
769	};
770
771}(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.