1(function(){if(window.GBFVideoModalHandlerLoaded){return} 2window.GBFVideoModalHandlerLoaded=!0;window.GBFVideoModalFallbackEnhancedLoaded=!0;window.GBFVideoModalFallbackLoaded=!0;var triggerSelector='.partner-video, .jedburghpodcast_vid, .gbf-video-trigger, .play, .playcontainer, .playcontainersub, [data-video], [data-video-id], [data-video-url]';var containerSelector='.playcontainer, .playcontainersub, .play, .gbf-video-trigger, .partner-video, .jedburghpodcast_vid';function hasInteractiveParent(node){return!!(node&&node.closest&&node.closest('a, button'))} 3function getAttributeVideo(node){if(!node||!node.getAttribute){return''} 4return node.getAttribute('data-video')||node.getAttribute('data-video-id')||node.getAttribute('data-video-url')||''} 5function getYouTubeId(value){var rawValue=String(value||'').trim();var srcMatch;var parsedUrl;var queryId;var pathMatch;var fallbackMatch;if(!rawValue){return''} 6if(/^[A-Za-z0-9_-]{11}$/.test(rawValue)){return rawValue} 7srcMatch=rawValue.match(/\bsrc=["']([^"']+)["']/i);if(srcMatch){return getYouTubeId(srcMatch[1])} 8try{parsedUrl=new URL(rawValue,window.location.href);queryId=parsedUrl.searchParams.get('v');if(queryId&&/^[A-Za-z0-9_-]{11}$/.test(queryId)){return queryId} 9pathMatch=parsedUrl.pathname.match(/(?:embed|shorts|live)\/([A-Za-z0-9_-]{11})/);if(pathMatch){return pathMatch[1]} 10if(parsedUrl.hostname.indexOf('youtu.be')!==-1){pathMatch=parsedUrl.pathname.replace(/^\//,'').match(/^([A-Za-z0-9_-]{11})/);if(pathMatch){return pathMatch[1]}}}catch(error){} 11fallbackMatch=rawValue.match(/(?:v=|embed\/|embed%2F|shorts\/|shorts%2F|live\/|live%2F|youtu\.be\/|youtu\.be%2F)([A-Za-z0-9_-]{11})/i);if(fallbackMatch){return fallbackMatch[1]} 12if((rawValue.indexOf('youtube')!==-1||rawValue.indexOf('youtu.be')!==-1)&&rawValue.match(/[A-Za-z0-9_-]{11}/)){return rawValue.match(/[A-Za-z0-9_-]{11}/)[0]} 13return''} 14function getLegacyPlayVideo(trigger){var scope=trigger;var jsonNode;var lightboxData;var firstItem;if(!scope){return''} 15jsonNode=scope.querySelector?scope.querySelector('.w-json'):null;if(!jsonNode&&scope.closest){scope=scope.closest(containerSelector);jsonNode=scope&&scope.querySelector?scope.querySelector('.w-json'):null} 16if(!jsonNode){return''} 17try{lightboxData=JSON.parse(jsonNode.textContent||'{}');firstItem=lightboxData.items&&lightboxData.items[0];return firstItem?(firstItem.originalUrl||firstItem.url||firstItem.html||firstItem.thumbnailUrl||''):''}catch(error){return''}} 18function getTriggerVideoValue(trigger){var videoValue=getAttributeVideo(trigger);var parentWithVideo;var childWithVideo;if(videoValue){return videoValue} 19parentWithVideo=trigger&&trigger.closest?trigger.closest('[data-video], [data-video-id], [data-video-url]'):null;videoValue=getAttributeVideo(parentWithVideo);if(videoValue){return videoValue} 20childWithVideo=trigger&&trigger.querySelector?trigger.querySelector('[data-video], [data-video-id], [data-video-url]'):null;videoValue=getAttributeVideo(childWithVideo);if(videoValue){return videoValue} 21return getLegacyPlayVideo(trigger)} 22function ensureBackdrop(){var backdrop;if(document.querySelector('.modal-backdrop.gbf-video-backdrop')){return} 23backdrop=document.createElement('div');backdrop.className='modal-backdrop fade show gbf-video-backdrop';document.body.appendChild(backdrop)} 24function clearBackdrops(){document.querySelectorAll('.modal-backdrop.gbf-video-backdrop').forEach(function(backdrop){if(backdrop.parentNode){backdrop.parentNode.removeChild(backdrop)}})} 25function ensureVideoModal(){var modal=document.getElementById('videoModal');var modalBody;var iframe;if(!modal){modal=document.createElement('div');modal.className='modal fade video-modal';modal.id='videoModal';modal.tabIndex=-1;modal.setAttribute('aria-hidden','true');modal.innerHTML='<button type="button" class="close" data-dismiss="modal" aria-label="Close">'+'<span aria-hidden="true">×</span>'+'</button>'+'<div class="modal-dialog modal-dialog-centered modal-xl">'+'<div class="modal-content">'+'<div class="modal-body"></div>'+'</div>'+'</div>';document.body.appendChild(modal)} 26iframe=modal.querySelector('iframe');if(!iframe){modalBody=modal.querySelector('.modal-body')||modal;iframe=document.createElement('iframe');iframe.width='560';iframe.height='315';iframe.title='YouTube video player';iframe.frameBorder='0';iframe.allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share';iframe.referrerPolicy='strict-origin-when-cross-origin';iframe.allowFullscreen=!0;modalBody.appendChild(iframe)} 27return modal} 28function isModalOpen(){var modal=document.getElementById('videoModal');return!!(modal&&modal.classList.contains('show'))} 29function openVideoModal(videoValue){var videoId=getYouTubeId(videoValue);var modal;var iframe;
29if(!videoId){return!1} 30modal=ensureVideoModal();iframe=modal.querySelector('iframe');if(iframe){iframe.setAttribute('src','https://www.youtube.com/embed/'+encodeURIComponent(videoId)+'?autoplay=1&rel=0')} 31modal.style.display='block';modal.removeAttribute('aria-hidden');modal.setAttribute('aria-modal','true');modal.classList.add('show');document.body.classList.add('modal-open');ensureBackdrop();return!0} 32function closeVideoModal(){var modal=document.getElementById('videoModal');var iframe;if(!modal){return} 33modal.classList.remove('show');modal.style.display='none';modal.setAttribute('aria-hidden','true');modal.removeAttribute('aria-modal');document.body.classList.remove('modal-open');iframe=modal.querySelector('iframe');if(iframe){iframe.setAttribute('src','')} 34clearBackdrops()} 35function handleTrigger(event){var trigger=event.target.closest(triggerSelector);var videoValue;if(!trigger){return} 36videoValue=getTriggerVideoValue(trigger);if(!getYouTubeId(videoValue)){return} 37event.preventDefault();event.stopPropagation();openVideoModal(videoValue)} 38document.addEventListener('click',handleTrigger,!0);document.addEventListener('keydown',function(event){var trigger;var videoValue;if(event.key!=='Enter'&&event.key!==' '){return} 39trigger=event.target.closest(triggerSelector);if(!trigger||trigger.matches('a, button')){return} 40videoValue=getTriggerVideoValue(trigger);if(!getYouTubeId(videoValue)){return} 41event.preventDefault();openVideoModal(videoValue)},!0);document.addEventListener('click',function(event){var modal=document.getElementById('videoModal');if(!modal||!isModalOpen()){return} 42var isDismiss=!!event.target.closest('#videoModal .close, #videoModal [data-dismiss="modal"], .modal-backdrop.gbf-video-backdrop');var isOutside=event.target===modal;if(!isDismiss&&!isOutside){return} 43event.preventDefault();closeVideoModal()});document.addEventListener('keydown',function(event){if((event.key==='Escape'||event.key==='Esc')&&isModalOpen()){closeVideoModal()}});document.addEventListener('hidden.bs.modal',function(event){if(event.target&&event.target.id==='videoModal'){closeVideoModal()}});document.addEventListener('DOMContentLoaded',function(){document.querySelectorAll('.gbf-video-trigger, .play, .playcontainer, .playcontainersub').forEach(function(trigger){if(!getYouTubeId(getTriggerVideoValue(trigger))||hasInteractiveParent(trigger)){return} 44trigger.setAttribute('role','button');if(!trigger.hasAttribute('tabindex')){trigger.setAttribute('tabindex','0')}})})})()
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.