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.