ca-web-components
Version:
web components for Clínica Alemana
90 lines (83 loc) • 5.4 kB
JavaScript
var c=Object.defineProperty;var l=(a,e,t)=>e in a?c(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var n=(a,e,t)=>l(a,typeof e!="symbol"?e+"":e,t);import{r as d,i as p,x as h}from"../assets/unsafe-html-DS3AO1W7.js";const i=class i extends d{static get properties(){return{videoId:{type:String},uri:{type:String},uriEmbed:{type:String},playLabel:{type:String},posterUrl:{type:String}}}constructor(){super(),this.videoId=this.getAttribute("videoid"),this.uri=this.getAttribute("uri"),this.uriEmbed=this.getAttribute("uriembed"),this.playLabel=this.getAttribute("playlabel")||"Play"}connectedCallback(){super.connectedCallback(),this.init()}disconnectedCallback(){this.removeEventListener("pointerover",i.warmConnections),super.disconnectedCallback()}static addPrefetch(e,t,r){const o=document.createElement("link");o.rel=e,o.href=t,r&&(o.as=r),document.head.append(o)}static checkWebPSupport(){return typeof i.hasWebPSupport<"u"?Promise.resolve(i.hasWebPSupport):new Promise(e=>{const t=o=>{i.hasWebPSupport=o,e(o)},r=new window.Image;r.onload=()=>t(!0),r.onerror=()=>t(!1),r.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA="})}static warmConnections(){i.preconnected||(i.addPrefetch("preconnect","https://www.youtube-nocookie.com"),i.addPrefetch("preconnect","https://www.google.com"),i.addPrefetch("preconnect","https://googleads.g.doubleclick.net"),i.addPrefetch("preconnect","https://static.doubleclick.net"),i.preconnected=!0)}async init(){const e=await i.checkWebPSupport();if(this.uri){const t=new URL(this.uri);this.videoId=t.searchParams.get("v")}this.uriEmbed&&(this.videoId=this.uriEmbed.split("/").pop()),this.posterUrl=e?`https://i.ytimg.com/vi_webp/${this.videoId}/hqdefault.webp`:`https://i.ytimg.com/vi/${this.videoId}/hqdefault.jpg`,i.addPrefetch("preload",this.posterUrl,"image"),this.style.backgroundImage=`url("${this.posterUrl}")`,this.addEventListener("pointerover",i.warmConnections,{once:!0})}addIframe(){const e=new URLSearchParams(this.getAttribute("params")||[]);e.append("autoplay","1");const t=document.createElement("iframe");t.width=560,t.height=315,t.title=this.playLabel,t.allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",t.allowFullscreen=!0,t.src=`https://www.youtube-nocookie.com/embed/${this.videoId}?${e.toString()}`,this.renderRoot.appendChild(t),this.classList.add("lyt-activated"),this.renderRoot.querySelector(".lty-vid").remove(),this.renderRoot.querySelector(".lty-playbtn").remove()}render(){return h`
<button @click="${this.addIframe}" class="lty-playbtn" aria-label="Botón de reproducción"><svg height="100%" version="1.1" viewBox="0 0 68 48" width="100%"><path class="ytp-large-play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#f00"></path><path d="M 45,24 27,14 27,34" fill="#fff"></path></svg></button>
<div class="lty-vid" videoid="${this.videoId}" playlabel="${this.playLabel}" style='background-image: url("${this.posterUrl}")'></div>
`}};n(i,"styles",p`
:host {
background-color: #000;
position: relative;
display: block;
contain: content;
background-position: center center;
background-size: cover;
cursor: pointer;
max-width: 720px;
border-radius: 10px;
width: 100%;
}
/* gradient */
:host::before {
content: '';
display: block;
position: absolute;
top: 0;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==);
background-position: top;
background-repeat: repeat-x;
height: 60px;
padding-bottom: 50px;
width: 100%;
transition: all 0.2s cubic-bezier(0, 0, 0.2, 1);
}
:host::after {
content: "";
display: block;
padding-bottom: calc(100% / (16 / 9));
}
:host > iframe {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
border: 0;
}
/* play button */
:host > .lty-playbtn {
display: block;
width: 68px;
height: 48px;
position: absolute;
cursor: pointer;
transform: translate3d(-50%, -50%, 0);
top: 50%;
left: 50%;
z-index: 1;
background-color: transparent;
transition: filter .1s cubic-bezier(0, 0, 0.2, 1);
border: none;
padding: 0;
margin: 0;
}
:host:hover > .lty-playbtn,
:host .lty-playbtn:focus {
filter: none;
}
/* Post-click styles */
:host.lyt-activated {
cursor: unset;
}
:host.lyt-activated::before,
:host.lyt-activated > .lty-playbtn {
opacity: 0;
pointer-events: none;
}
.lyt-visually-hidden {
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap;
width: 1px;
}
`);let s=i;customElements.define("ca-youtube",s);