1/** Smoother bootstrap alert dismiss */ 2 3$('#alert-top').on('close.bs.alert', function () { 4 $(this).slideUp(200); 5}); 6 7/** Hamburger menu actions **/ 8 9$('#navbarNav').on('show.bs.collapse', function () { 10 $('.hamburger').addClass('is-active'); 11 $('.navbar-brand').addClass('is-active'); 12}).on('hide.bs.collapse', function () { 13 $('.hamburger').removeClass('is-active'); 14 $('.navbar-brand').removeClass('is-active'); 15}) 16 17/** Hide / Show navbar on scroll down / scroll up **/ 18 19// add padding top to show content behind navbar 20$('body').css('padding-top', $('.navbar').outerHeight() + 'px') 21 22// detect scroll top or down 23if ($('.smart-scroll').length > 0) { 24 var last_scroll_top = 0; 25 $(window).on('scroll', function() { 26 scroll_top = $(this).scrollTop(); 27 if (scroll_top > 100) { 28 if (scroll_top < last_scroll_top) { 29 $('.smart-scroll').removeClass('scrolled-down').addClass('scrolled-up'); 30 } else { 31 $('.smart-scroll').removeClass('scrolled-up').addClass('scrolled-down'); 32 } 33 } else { 34 $('.smart-scroll').removeClass('scrolled-up').removeClass('scrolled-down'); 35 } 36 last_scroll_top = scroll_top; 37 }); 38} 39 40/** Load images on intersection **/ 41 42let images = [...document.querySelectorAll('[data-lazy]')]; 43 44const options = { 45 root: null, 46 rootMargin: '0px 0px 200px 0px' 47} 48 49function onIntersection(imageEntities) { 50 imageEntities.forEach(image => { 51 if (image.isIntersecting) { 52 observer.unobserve(image.target); 53 if (image.target.src) { 54 image.target.src = image.target.dataset.lazy; 55 } else { 56 image.target.style.backgroundImage = 'url('+image.target.dataset.lazy+')'; 57 } 58 } 59 }) 60} 61 62let observer = new IntersectionObserver(onIntersection, options); 63 64images.forEach(image => observer.observe(image));
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.