1( function () { 2 'use strict'; 3 4 document.addEventListener( 'DOMContentLoaded', function () { 5 var blocks = document.querySelectorAll( '[data-pjp]' ); 6 if ( ! blocks.length ) return; 7 8 // Scroll-in animation 9 var observer = new IntersectionObserver( 10 function ( entries ) { 11 entries.forEach( function ( entry ) { 12 if ( entry.isIntersecting ) { 13 entry.target.classList.add( 'is-animating' ); 14 observer.unobserve( entry.target ); 15 } 16 } ); 17 }, 18 { threshold: 0.2 } 19 ); 20 21 blocks.forEach( function ( block ) { 22 observer.observe( block ); 23 24 // Hover: add pjp--hover-N to block root so CSS can scale 25 // both the SVG step group and the matching HTML caption. 26 function addHover( n ) { block.classList.add( 'pjp--hover-' + n ); } 27 function removeHover( n ) { block.classList.remove( 'pjp--hover-' + n ); } 28 29 block.querySelectorAll( '[data-step]' ).forEach( function ( el ) { 30 var n = el.dataset.step; 31 el.addEventListener( 'mouseenter', function () { addHover( n ); } ); 32 el.addEventListener( 'mouseleave', function () { removeHover( n ); } ); 33 } ); 34 35 block.querySelectorAll( '[data-cap]' ).forEach( function ( el ) { 36 var n = el.dataset.cap; 37 el.addEventListener( 'mouseenter', function () { addHover( n ); } ); 38 el.addEventListener( 'mouseleave', function () { removeHover( n ); } ); 39 } ); 40 } ); 41 } ); 42} )();
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.