1(()=>{ 2 const widgets=[...document.querySelectorAll('[data-external-embed]')]; 3 let automatic=true; 4 const observer='IntersectionObserver' in window?new IntersectionObserver(entries=>{ 5 for(const entry of entries)if(entry.isIntersecting&&automatic){observer.unobserve(entry.target);load(entry.target);} 6 },{rootMargin:'150px 0px'}):null; 7 function fallback(widget,message){ 8 widget.dataset.state='error';widget.querySelector('[data-embed-placeholder]').hidden=false; 9 widget.querySelector('[data-embed-status]').textContent=message; 10 widget.querySelector('[data-embed-load]').hidden=false; 11 const link=widget.querySelector('.mbs-embed-fallback');if(link)link.hidden=false; 12 } 13 function load(widget){ 14 if(widget.querySelector('iframe'))return; 15 let url;try{url=new URL(widget.dataset.src);}catch{return fallback(widget,'No se pudo cargar este contenido.');} 16 if(!['www.google.com','maps.google.com','player.vimeo.com'].includes(url.hostname)||url.protocol!=='https:')return fallback(widget,'No se pudo cargar este contenido.'); 17 const frame=document.createElement('iframe');frame.title=widget.dataset.title;frame.referrerPolicy='no-referrer';frame.loading='eager'; 18 if(url.hostname==='player.vimeo.com')frame.allowFullscreen=true; 19 widget.dataset.state='loading';widget.querySelector('[data-embed-load]').hidden=true; 20 frame.addEventListener('load',()=>{widget.dataset.state='ready';widget.querySelector('[data-embed-placeholder]').hidden=true;}); 21 frame.addEventListener('error',()=>{frame.remove();fallback(widget,'No se pudo cargar este contenido. Puedes reintentarlo o abrir el enlace.');}); 22 frame.src=url.href;widget.querySelector('[data-embed-frame]').append(frame); 23 } 24 function watch(widget){ 25 const styles=document.querySelector('link[data-mbs-full-styles]'); 26 const start=()=>{if(automatic){if(observer)observer.observe(widget);else load(widget);}}; 27 if(styles&&styles.media!=='all')styles.addEventListener('load',start,{once:true});else start(); 28 } 29 for(const widget of widgets){ 30 widget.querySelector('[data-embed-load]').addEventListener('click',()=>load(widget)); 31 watch(widget); 32 } 33 const withdraw=()=>{ 34 automatic=false;observer?.disconnect(); 35 for(const widget of widgets){widget.querySelector('[data-embed-frame]').replaceChildren();fallback(widget,'Contenido externo desactivado.');widget.dataset.state='disabled';} 36 }; 37 document.addEventListener('mbs:consent',event=>{if(!event.detail?.advertising)withdraw();}); 38 document.addEventListener('mbs:external-withdraw',withdraw); 39})();
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.