PageSourceSearch

https://www.metrolisboa.pt/wp-content/plugins/post-carousel/blocks…/video-and-gallery-slider.min.js?ver=4.0.8

js metrolisboa.pt collected 2026-10-01 08:59:40 UTC 9,117 bytes, 21 lines download raw bytes

1class SPSlider{constructor(t,{loop:e=!0,autoplay:i=!0,interval:s=4e3,speed:a=600}={}){let r=t.closest("a");this.imageWrapper=t.closest(".sp-smart-post-card-image, .sp-smart-post-featured-image"),r&&r.addEventListener("click",t=>t.preventDefault()),this.wrapper=t,this.track=t.querySelector(".sp-slider-track"),this.originalSlides=Array.from(t.querySelectorAll(".sp-slide")),this.prevBtn=this.imageWrapper.querySelector(".sp-prev"),this.nextBtn=this.imageWrapper.querySelector(".sp-next"),this.loop=e,this.autoplay=i,this.interval=s,this.speed=a,this.autoplayInterval=null,this.isDragging=!1,this.startX=0,this.currentX=0,this.setupClones(),this.slides=Array.from(this.track.querySelectorAll(".sp-slide")),this.total=this.slides.length,this.index=this.loop?1:0,this.init()}setupClones(){if(!this.loop)return;let t=this.originalSlides[0].cloneNode(!0),e=this.originalSlides[this.originalSlides.length-1].cloneNode(!0);t.classList.add("sp-clone"),e.classList.add("sp-clone"),this.track.innerHTML="",this.track.appendChild(e),this.originalSlides.forEach(t=>this.track.appendChild(t)),this.track.appendChild(t)}init(){this.setupSlides(),this.updateSlides(!1),this.bindEvents(),this.slides.forEach(t=>{let e=t.querySelector("img");e&&e.addEventListener("dragstart",t=>t.preventDefault())}),this.autoplay&&this.startAutoplay(),window.addEventListener("resize",()=>this.updateSlides(!1))}setupSlides(){this.track.style.position="relative",this.track.style.overflow="hidden",this.slides.forEach(t=>{this.track.style.height=`${t.clientHeight||""}px`,t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.width="100%",t.style.transition=`transform ${this.speed}ms ease, opacity ${this.speed}ms ease`})}updateSlides(t=!0){this.slides.forEach((e,i)=>{t?e.style.transition=`transform ${this.speed}ms ease, opacity ${this.speed}ms ease`:e.style.transition="none";let s=i-this.index;e.style.transform=`translateX(${100*s}%)`,e.style.opacity=1>=Math.abs(s)?"1":"0",e.style.zIndex=0===s?"2":"1"})}next(){this.index++,this.updateSlides(),this.loop&&this.index===this.total-1&&setTimeout(()=>{this.index=1,this.updateSlides(!1)},this.speed)}prev(){this.index--,this.updateSlides(),this.loop&&0===this.index&&setTimeout(()=>{this.index=this.total-2,this.updateSlides(!1)},this.speed)}startAutoplay(){this.stopAutoplay(),this.autoplay&&(this.autoplayInterval=setInterval(()=>this.next(),this.interval))}stopAutoplay(){clearInterval(this.autoplayInterval)}bindEvents(){this.nextBtn?.addEventListener("click",()=>this.next()),this.prevBtn?.addEventListener("click",()=>this.prev()),this.imageWrapper.addEventListener("mouseenter",()=>this.stopAutoplay()),this.imageWrapper.addEventListener("mouseleave",()=>this.startAutoplay()),this.track.addEventListener("mousedown",this.startDrag.bind(this)),this.track.addEventListener("touchstart",this.startDrag.bind(this),{passive:!0}),window.addEventListener("mousemove",this.onDrag.bind(this)),window.addEventListener("touchmove",this.onDrag.bind(this),{passive:!0}),window.addEventListener("mouseup",this.endDrag.bind(this)),window.addEventListener("touchend",this.endDrag.bind(this))}startDrag(t){this.isDragging=!0,this.startX=this.getX(t),this.currentX=this.startX,this.stopAutoplay(),this.slides.forEach(t=>t.style.transition="none")}onDrag(t){if(!this.isDragging)return;this.currentX=this.getX(t);let e=(this.currentX-this.startX)/this.wrapper.clientWidth*100;this.slides.forEach((t,i)=>{let s=i-this.index;t.style.transform=`translateX(${100*s+e}%)`,t.style.opacity=1>=Math.abs(s+e/100)?"1":"0"})}endDrag(){if(!this.isDragging)return;this.isDragging=!1;let t=(this.currentX-this.startX)/this.wrapper.clientWidth*100;this.slides.forEach(t=>{t.style.transition=`transform ${this.speed}ms ease, opacity ${this.speed}ms ease`}),t<-15?this.next():t>15?this.prev():this.updateSlides(),this.autoplay&&this.startAutoplay()}getX(t){return t.type.includes("mouse")?t.pageX:t.touches[0].clientX}destroy(){if(this.autoplayInterval&&(clearInterval(this.autoplayInterval),this.autoplayInterval=null),this.track){let t=this.track.cloneNode(!0);this.track.parentNode.replaceChild(t,this.track),this.track=t}if(this.prevBtn){let e=this.prevBtn.cloneNode(!0);this.prevBtn.parentNode.replaceChild(e,this.prevBtn),this.prevBtn=e}if(this.nextBtn){let i=this.nextBtn.cloneNode(!0);this.nextBtn.parentNode.replaceChild(i,this.nextBtn),this.nextBtn=i}if(this.imageWrapper){let s=this.imageWrapper.cloneNode(!0);this.imageWrapper.parentNode.replaceChild(s,this.imageWrapper),this.imageWrapper=s}this.track&&this.originalSlides&&(this.track.innerHTML="",this.originalSlides.forEac
1h(t=>{t.style="",this.track.appendChild(t)})),this.wrapper=null,this.slides=null,this.originalSlides=null,this.isDragging=!1,this.startX=0,this.currentX=0}}class SpSmartVideoPlayer{constructor(t,e,i={}){let s=t.closest("a");if(s&&(this.link=s,this.preventLink=t=>t.preventDefault(),s.addEventListener("click",this.preventLink)),this.container="string"==typeof t?document.querySelector(t):t,this.url=e,this.options=Object.assign({featureImage:null,videoCaption:null,showFeatureImage:!0,width:"100%",height:"",transitionSpeed:400},i),!this.container){console.error("SmartVideoPlayer: container not found!");return}this.init()}init(){this.container.classList.add("svp-container"),Object.assign(this.container.style,{position:"relative",width:this.options.width,height:this.options.height,overflow:"hidden",background:"#000"}),this.options.showFeatureImage&&this.options.featureImage?this.createFeatureImage():this.loadVideo()}createFeatureImage(){let t=document.createElement("img"),e=this.container.closest(".sp-smart-post-card-image, .sp-smart-post-featured-image");this.featureImg=t,this.imageArea=e,t.src=this.options.featureImage,t.className="sp-video-feature-image",Object.assign(t.style,{width:"100%",height:"100%",objectFit:"cover",display:"block",transition:`opacity ${this.options.transitionSpeed}ms ease, transform ${this.options.transitionSpeed}ms ease`});let i=document.createElement("div");i.className="sp-video-play-btn",i.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="9" height="12" viewBox="0 0 9 12" fill="none"><path d="M0 11.842V0l8.882 5.921z" fill="#fff"/></svg>',i.title=this.options.videoCaption||"",this.playBtn=i,this.onPlayClick=()=>{i.style.pointerEvents="none",t.style.opacity="0",t.style.transform="scale(1.1)",i.style.opacity="0",i.style.transform="translate(-50%, -50%) scale(0.7)",this.playTimeout=setTimeout(()=>{this.container&&(this.container.innerHTML="",this.loadVideo())},this.options.transitionSpeed)},i.addEventListener("click",this.onPlayClick),this.container.appendChild(t);let s=e.querySelector(".sp-video-play-btn");s||e.appendChild(i),this.container.style.height=e.clientHeight>0?e.clientHeight+"px":""}loadVideo(){this.container.innerHTML=this.getEmbedHTML(this.url)}getEmbedHTML(t){if(!t)return`<p style="color:red;">⚠️ No video URL provided.</p>`;if(t.includes("youtube.com")||t.includes("youtu.be")){let e=(t.match(/(?:v=|\/)([0-9A-Za-z_-]{11})/)||[])[1];if(e)return`
2					<iframe
3						width="100%"
4						height="100%"
5						src="https://www.youtube.com/embed/${e}?autoplay=1"
6						frameborder="0"
7						allow="autoplay; encrypted-media"
8						allowfullscreen
9					></iframe>`}if(t.includes("vimeo.com")){let i=t.split("/").pop();return`
10				<iframe
11					width="100%"
12					height="100%"
13					src="https://player.vimeo.com/video/${i}?autoplay=1"
14					frameborder="0"
15					allow="autoplay; fullscreen"
16					allowfullscreen
17				></iframe>`}return t.match(/\.(mp4|webm|ogg)$/)?`
18				<video width="100%" height="100%" controls autoplay>
19					<source src="${t}" type="video/mp4">
20					Your browser does not support the video tag.
21				</video>`:`<p style="color:red;">⚠️ Unsupported video link!</p>`}destroy(){if(this.playTimeout&&(clearTimeout(this.playTimeout),this.playTimeout=null),this.playBtn&&this.onPlayClick&&(this.playBtn.removeEventListener("click",this.onPlayClick),this.playBtn.parentNode&&this.playBtn.parentNode.removeChild(this.playBtn)),this.link&&this.preventLink&&this.link.removeEventListener("click",this.preventLink),this.container){let t=this.container.querySelector("iframe"),e=this.container.querySelector("video");t&&(t.src=""),e&&(e.pause(),e.removeAttribute("src"),e.load()),this.container.innerHTML="",this.container.classReminder?.remove?.("svp-container")}this.container=null,this.url=null,this.options=null,this.playBtn=null,this.featureImg=null,this.imageArea=null,this.link=null,this.onPlayClick=null}}document.addEventListener("DOMContentLoaded",()=>{let t=(t=document)=>{let e=t.querySelectorAll(".sp-slider-wrapper");e.forEach(t=>{t.classList.contains("sp-slider-initialized")||(new SPSlider(t,{loop:!0,autoplay:!0,interval:3e3,speed:600}),t.classList.add("sp-slider-initialized"))});let i=t.querySelectorAll(".sp-smart-video-player");
21i.forEach(t=>{if(!t.classList.contains("sp-video-initialized")){let e=t.dataset.video_url,i=t.dataset.image_url,s=t.dataset.video_caption;new SpSmartVideoPlayer(t,e,{featureImage:i,videoCaption:s,showFeatureImage:!0,transitionSpeed:500}),t.classList.add("sp-video-initialized")}})};t()});

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.