PageSourceSearch

https://medibilbaosalud.com/scripts/doctoralia.js?v=auto-5

js medibilbaosalud.com collected 2026-10-08 19:51:36 UTC 3,331 bytes, 46 lines download raw bytes

1(()=>{
2 const widgets=[...document.querySelectorAll('[data-doctoralia]')];let loaded=false,automatic=true;
3 const origin='https://www.doctoralia.es';
4 const observer='IntersectionObserver' in window?new IntersectionObserver(entries=>{
5  if(automatic&&entries.some(entry=>entry.isIntersecting)){observer.disconnect();load();}
6 },{rootMargin:'150px 0px'}):null;
7 function fallback(message){
8  for(const widget of widgets){widget.querySelector('.mbs-doctoralia-fallback').hidden=false;widget.dataset.state='error';widget.querySelector('[data-doctoralia-placeholder]').hidden=false;widget.querySelector('[data-doctoralia-status]').textContent=message;widget.querySelector('[data-doctoralia-load]').hidden=false;}
9 }
10 function load(){
11  if(loaded)return;
12  let valid=0;
13  for(const widget of widgets){
14   const facility=widget.dataset.facility,type=widget.dataset.widgetType;
15   if(!/^[a-z0-9-]+$/.test(facility)||!/^facility-calendar(?:-listing)?(?:-with-saas-only)?$/.test(type))continue;
16   const anchor=document.createElement('a');anchor.href=widget.querySelector('a').href;anchor.textContent='MediBilbao Salud';anchor.dataset.zlWidgetFacility=facility;anchor.dataset.zlwType=type;anchor.dataset.placement='inline';anchor.dataset.zlwA11yTitle='Disponibilidad y reserva de cita · MediBilbao Salud';
17   widget.querySelector('[data-doctoralia-frame]').append(anchor);widget.dataset.state='loading';widget.querySelector('[data-doctoralia-load]').hidden=true;valid++;
18  }
19  if(!valid)return fallback('Consulta la agenda en Doctoralia.');
20  loaded=true;
21  const script=document.createElement('script');script.id='zl-facility-widget';script.src=origin+'/platform/js/widget.js';script.async=true;script.dataset.mbsDoctoralia='';
22  script.addEventListener('error',()=>{loaded=false;script.remove();for(const widget of widgets)widget.querySelector('[data-doctoralia-frame]').replaceChildren();fallback('No se pudo cargar la agenda. Puedes reintentarlo o abrir Doctoralia.');});
23  document.head.append(script);
24 }
25 function watch(widget){
26  const styles=document.querySelector('link[data-mbs-full-styles]');
27  const start=()=>{if(automatic){if(observer)observer.observe(widget);else load();}};
28  if(styles&&styles.media!=='all')styles.addEventListener('load',start,{once:true});else start();
29 }
30 for(const widget of widgets){
31  widget.querySelector('[data-doctoralia-load]').addEventListener('click',load);
32  new MutationObserver(()=>{
33   const frame=widget.querySelector('iframe');
34   if(frame&&!frame.dataset.mbsObserved){frame.dataset.mbsObserved='';frame.addEventListener('load',()=>{if(!frame.isConnected)return;widget.querySelector('.mbs-doctoralia-fallback').hidden=true;widget.dataset.state='ready';widget.querySelector('[data-doctoralia-placeholder]').hidden=true;});}
35  }).observe(widget.querySelector('[data-doctoralia-frame]'),{childList:true,subtree:true});
36  watch(widget);
37 }
38
39 function withdraw(){
40  automatic=false;observer?.disconnect();
41  for(const widget of widgets)widget.querySelector('[data-doctoralia-frame]').replaceChildren();
42  document.querySelector('script[data-mbs-doctoralia]')?.remove();loaded=false;fallback('Calendario externo desactivado.');
43 }
44 document.addEventListener('mbs:external-withdraw',withdraw);
45 document.addEventListener('mbs:consent',event=>{if(!event.detail?.advertising)withdraw();});
46})();

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.