PageSourceSearch

https://www.wtatennis.com/resources/v7.50.45/scripts/live-stream-video.js

js wtatennis.com collected 2026-09-24 15:21:58 UTC 13,025 bytes, 1 lines download raw bytes

1import{O as e,u as t,p as a,o as s,N as i,aj as r}from"./bundle-es.js";import{r as l,v as n}from"./templating.js";import{c as o}from"./content-api.js";import{t as d}from"./tournament-player-service.js";import{T as c}from"./tennis-tournament.js";import{m as v}from"./moment.js";import{b as m}from"./content.js";import{m as u}from"./measurements.js";import"./template.js";import"./underscore.js";import"./template2.js";import"./escape.js";import"./tennis.js";import"./date.js";import"./api-client.js";import"./_commonjsHelpers.js";function b(t,a,s,i=!1){const r={states:`${e.LIVE}`};i&&(r.states+=`, ${e.COMPLETED}`),d.getTournamentMatches({tournamentGroupId:t,tournamentYear:v().year(),params:r}).then(e=>{!function(e,t,a,s,i=!1){const r=new c(e.tournament);let l=r.status;if(e.matches?.length)o.contentType({type:"VIDEO",params:{tagNames:"live-video",referenceExpression:`TENNIS_TOURNAMENTGROUP:${t}`}}).then(e=>{i||(e.content=[...e.content].filter(e=>"live_origin"===e.additionalInfo.deliveryType)),s(e,l,a)});else{const t=e;t.content=[],s(t,l,a)}}(e,t,a,s,i)})}const g=[{name:"mobile",maxWidth:u.mobile,size:{width:367,height:206},multipliers:[1,2]},{name:"tablet",maxWidth:u.tablet,size:{width:728,height:410},multipliers:[1,2]},{name:"desktop and up",minWidth:u.tablet+1,size:{width:1422,height:800},multipliers:[1,2]},{name:"default",size:{width:367,height:206},multipliers:[1],cssClass:""}];class p{constructor(e){if(this.container=e,this.tournamentId=this.container.dataset.tournamentId,this.liveTab=document.querySelector(".js-menu-watch-live"),this.forceLiveMatches="true"===this.container.dataset.forceLiveMatches,this.liveTab||this.forceLiveMatches){const e=this.liveTab.getBoundingClientRect().top;window.scrollTo({top:e-100,behavior:"smooth"}),this.initLiveStream()}else this.container.innerHTML=l({},'<div class="live-stream-video__container"> <div class="live-stream-video__header"> <div class="live-stream-video__title h-m-sb"> <%= translator.lookupKey( \'label.liveStream.noStreamsTitle\' ) %> </div> </div> <div class="live-stream-video__video theme-purple"> <div class="live-stream-video__sso-container"> <%= render({}, templates.unlockedBadge) %> <div class="live-stream-video__sso-text h-s-b dt:h-l-b"> <%= translator.lookupKey( \'label.liveStream.noStreams\' ) %> </div> <a href="<%= translator.lookupKey( \'url.liveStream.noStreamsButton\' ) %>" class="sbtn sbtn--grad sbtn--glass sbtn--med dt:sbtn--large js-register-button h-m-b"> <span class="sbtn__label"><%= translator.lookupKey( \'label.liveStream.noStreamsButton\' ) %></span> <%= render( {\n                    cssClass: \'sbtn__arrow u-hide-desktop\',\n                    name: \'arrow-right\'\n                }, templates.renderSvg ) %> </a> </div> </div> </div> '),t(this.container)}initLiveStream(){b(this.tournamentId,this.container,this.handleLiveStreamVideos.bind(this),this.forceLiveMatches)}async handleLiveStreamVideos(e,i){const r=i,o={};o.courts=e.content.map(e=>e.tags.find(e=>e.label.startsWith("court")).label);const d=h(e.content);this.foundLiveStreamVideos=d.map(e=>m(e,g)),o.videos=this.foundLiveStreamVideos,o.status=r;const c=await a.ready();o.isLoggedIn=!!c;const v={videoPlayer:n};"live"===r||"inProgress"===r||this.forceLiveMatches?(this.container.innerHTML=l({data:o,childTemplates:v},' <% if (data.videos.length) { %> <div class="live-stream-video__container"> <div class="live-stream-video__header"> <% const liveStreamLabel = data.videos.length > 1 ? \'label.liveMatches\' : \'label.liveMatch\'; %> <div class="live-stream-video__title h-m-sb"><%= translator.lookupKey( liveStreamLabel ) %></div> <% if (data.videos.length > 1) { %> <div class="live-stream-video__tab-container <%= !data.isLoggedIn ? \'is-disabled\' : \'\' %>"> <span class="l-s-m"><%= translator.lookupKey( \'label.liveVideo.choose\' ) %></span> <ul class="live-stream-video__tabs" data-pre-text="<%= data.isLoggedIn ? translator.lookupKey( \'label.courtTabsLabel\' ) : \'\'%>"> <% data.videos.forEach(function( video, index ) { %> <% const court = video.tags.find(tag => tag.label.startsWith(\'court\')).label; %> <li> <button class="live-stream-video__tabs-item sbtn sbtn--small js-court-tab <%= index === 0 ? \'is-active sbtn--fill\' : \'sbtn--gt\' %>" data-video-id="<%= video.mediaId %>" data-court="<%= court %>"> <%= translator.lookupKey( \'label.courts.\' + court ) %> </button> </li> <% } ); %> </ul> </div> <% } %> </div> <div class="live-stream-video__video theme-purple js-video-player-container"> <% const court = data.videos[0].tags.find(tag => tag.label.startsWith(\'court\')).label; %> <% if( data.isLoggedIn ) { %>
1 <%= render( {\n                    cssClass: \'live-stream-video__video-player js-live-stream-video-player\',\n                    video: data.videos[0],\n                    widget: \'live-stream/video-live\',\n                    playerName: \'live-stream-\' + data.videos[0].mediaId,\n                    playerId: window.BRIGHTCOVE_CONFIG.PLAYERS.LIVE_STREAM\n                }, childTemplates.videoPlayer ) %> <% } else { %> <div class="live-stream-video__image-wrapper"> <div class="live-stream-video__thumbnail-wrapper"> <%= render( { data : {\n                            mediaQueryConfig: data.videos[0].mediaQueryConfig,\n                            cssClass: \'live-stream-video__thumbnail\',\n                            objectFit: true\n                        } }, templates.lazyImage ) %> </div> <div class="live-stream-video__sso-container"> <%= render({}, templates.unlockedBadge) %> <div class="live-stream-video__sso-text h-s-b dt:h-l-b"> <%= translator.lookupKey( \'label.liveVideo.signedOutText\' ) %> </div> <div class="live-stream-video__sso-buttons"> <a href="/register" class="js-register-button sbtn sbtn--grad sbtn--glass sbtn--med dt:sbtn--large" data-tracking="true" data-tracking-event="click_track" data-tracking-component="button click" data-tracking-category="unlocked cta" data-tracking-type="gated video" data-tracking-detail="register"> <span class="sbtn__label"> <%= translator.lookupKey( \'label.register\' ) %></span> <%= render({\n                                    cssClass: \'icon sbtn__arrow u-hide-desktop\',\n                                    name: \'arrow-right\'\n                                }, templates.renderSvg ) %> </a> <a href="/login" class="js-login-button sbtn sbtn--text sbtn--med dt:sbtn--large" data-tracking="true" data-tracking-event="click_track" data-tracking-component="button click" data-tracking-category="unlocked cta" data-tracking-type="gated video" data-tracking-detail="login"> <%= translator.lookupKey( \'label.login\' ) %> </a> </div> </div> </div> <% } %> </div> </div> <% } else { %> <div class="live-stream-video__container"> <div class="live-stream-video__header"> <div class="live-stream-video__title h-m-sb"> <%= translator.lookupKey( \'label.liveVideo.futureTitle\' ) %> </div> </div> <div class="live-stream-video__video live-stream-video__video--not-live theme-purple"> <div class="live-stream-video__sso-container <%= data.isLoggedIn ? \'logged-in\' : \'\' %>"> <%= render({}, templates.unlockedBadge) %> <div class="live-stream-video__sso-text h-s-b dt:h-l-b"> <% if( data.isLoggedIn ) { %> <%= translator.lookupKey( \'label.liveVideo.signedInTextFuture\' ) %> <% } else { %> <%= translator.lookupKey( \'label.liveVideo.signedOutTextFuture\' ) %> <% } %> </div> <% if( !data.isLoggedIn ) { %> <div class="live-stream-video__sso-buttons"> <a href="/register?redirectURL=<%= encodeURIComponent(translator.lookupKey( \'label.liveVideo.redirect\' )) %>" class="js-register-button sbtn sbtn--grad sbtn--glass sbtn--med dt:sbtn--large"> <span class="sbtn__label"> <%= translator.lookupKey( \'label.register\' ) %></span> <%= render({\n                                cssClass: \'icon sbtn__arrow u-hide-desktop\',\n                                name: \'arrow-right\'\n                            }, templates.renderSvg ) %> </a> <a href="/login?redirectURL=<%= encodeURIComponent(translator.lookupKey( \'label.liveVideo.redirect\' )) %>" class="js-login-button sbtn sbtn--text sbtn--med dt:sbtn--large"> <%= translator.lookupKey( \'label.login\' ) %> </a> </div> <% } else { %> <a href="<%= translator.lookupKey(\'url.liveVideo.view125Calendar\') %>" class="sbtn sbtn--grad sbtn--glass sbtn--med dt:sbtn--large js-register-button h-m-b"> <span class="sbtn__label"> <%= translator.lookupKey( \'label.liveVideo.view125Calendar\' ) %></span> <%= render( {\n                            cssClass: \'sbtn__arrow u-hide-desktop\',\n                            name: \'arrow-right\'\n                        }, templates.renderSvg ) %> </a> <% } %> </div> </div> </div> <% } %>'),this.setCourtTabListeners(),o.videos?.length&&(s(this.container),this.setupAnalyticsListener(o.videos[0].mediaId))):this.container.innerHTML=l({data:o,childTemplates:v},'<div class="live-stream-video__container"> <div class="live-stream-video__header"> <div class="live-stream-video__title h-m-sb"> <% if( data.status === \'future\' ) { %> <%= translator.lookupKey( \'label.liveVideo.futureTitle\' ) %> <% } else { %> <%= translator.lookupKey( \'label.liveVideo.pastTitle\' ) %> <% } %> </div> </div> <div class="live-stream-video__video live-stream-video__video--not-live theme-purple"> <div class="live-stream-video__sso-container <%= data.isLoggedIn ? \'logged-in\' : \'\' %>"> <%= render({}, templates.unlockedBadge) %> <div class="live-stream-video__sso-text h-s-b dt:h-l-b"> <% if( data.isLoggedIn ) { %> <% if( data.status === \'future\' ) { %> <%= translator.lookupKey( \'label.liveVideo.signedInTextFuture\' ) %> <% } else { %> <%= translator.lookupKey( \'label.liveVideo.signedInTextPast\' ) %> <% } %> <% } else { %> <% if( data.status === \'future\' ) { %> <%= translator.lookupKey( \'label.liveVideo.signedOutTextFuture\' ) %> <% } else { %> <%= translator.lookupKey( \'label.liveVideo.signedOutTextPast\' ) %> <% } %> <% } %> </div> <% if( !data.isLoggedIn ) { %> <div class="live-stream-video__sso-buttons"> <a href="/register?redirectURL=<%= encodeURIComponent(translator.lookupKey( \'label.liveVideo.redirect\' )) %>
1" class="js-register-button sbtn sbtn--grad sbtn--glass sbtn--med dt:sbtn--large" data-tracking="true" data-tracking-event="click_track" data-tracking-component="button click" data-tracking-category="unlocked cta" data-tracking-type="gated video" data-tracking-detail="register"> <span class="sbtn__label"> <%= translator.lookupKey( \'label.register\' ) %></span> <%= render({\n                            cssClass: \'icon sbtn__arrow u-hide-desktop\',\n                            name: \'arrow-right\'\n                        }, templates.renderSvg ) %> </a> <a href="/login?redirectURL=<%= encodeURIComponent(translator.lookupKey( \'label.liveVideo.redirect\' )) %>" class="js-login-button sbtn sbtn--text sbtn--med dt:sbtn--large" data-tracking="true" data-tracking-event="click_track" data-tracking-component="button click" data-tracking-category="unlocked cta" data-tracking-type="gated video" data-tracking-detail="login"> <%= translator.lookupKey( \'label.login\' ) %> </a> </div> <% } else { %> <a href="<%= translator.lookupKey(\'url.liveVideo.view125Calendar\') %>" class="sbtn sbtn--grad sbtn--glass sbtn--med dt:sbtn--large js-register-button h-m-b"> <span class="sbtn__label"> <%= translator.lookupKey( \'label.liveVideo.view125Calendar\' ) %></span> <%= render( {\n                        cssClass: \'sbtn__arrow u-hide-desktop\',\n                        name: \'arrow-right\'\n                    }, templates.renderSvg ) %> </a> <% } %> </div> </div> </div> '),t(this.container)}async setupAnalyticsListener(e){try{const t=this.container.querySelector(`video[data-video-id='${e}']`),s=await a.ready();e&&s&&(t.currentTime>0?this.fireAnalytics(t.id):t.addEventListener("play",()=>{this.fireAnalytics(t.id)}))}catch(t){setTimeout(()=>{this.setupAnalyticsListener(e)},i.ONE_SECOND_IN_MS)}}fireAnalytics(e){const t=a.getUserId();try{window.videojs.getPlayer(e).ready(function(){this.bcAnalytics.client.user(t)})}catch(t){setTimeout(()=>{this.fireAnalytics(e)},i.ONE_SECOND_IN_MS)}}setCourtTabListeners(){const e=this.container.querySelectorAll(".js-court-tab");e.forEach(t=>{t.addEventListener("click",a=>{const s=a.target.dataset.videoId;this.changeVideo(s),e.forEach(e=>{e.classList.remove("is-active","sbtn--fill"),e.classList.add("sbtn--gt")}),t.classList.add("is-active","sbtn-fill")})})}changeVideo(e){const t=this.container.querySelector(".js-live-stream-video-player"),a=this.foundLiveStreamVideos.find(t=>t.mediaId===e);t&&a&&(t.innerHTML=l({cssClass:"live-stream-video__video-player js-live-stream-video-player",video:a,widget:"live-stream/video-live",playerName:"live-stream-"+a.mediaId,playerId:window.BRIGHTCOVE_CONFIG.PLAYERS.LIVE_STREAM},n),s(this.container),this.fireAnalytics(a.mediaId))}}const h=e=>e.map(e=>{const t=e.tags.find(e=>e.label.startsWith("court")).label.replace("-","_").toUpperCase();return{...e,order:r.ORDERING[t].order}}).sort((e,t)=>e.order-t.order);export{p as default};

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.