PageSourceSearch

https://www.tottenhamhotspur.com/resources/ver/v2.0.96/scripts/live-commentary-root.js

js tottenhamhotspur.com collected 2026-09-24 15:21:09 UTC 7,899 bytes, 1 lines download raw bytes

1import{P as e,be as a,v as t,w as l,x as n,bi as s,n as m,bj as i,bk as r,r as o,F as c,a7 as d,k as p,aZ as v}from"./bundle-es.js";import{i as y,l as u,s as _,m as h}from"./match-helpers.js";import{u as N}from"./use-match-centre.js";import{A as b}from"./avatar.js";import{r as f}from"./render-svg.js";function g({player:e,icon:n,teamId:s,isOwnGoal:m=!1,isSpursGoal:i=!1}){const r=function(e){return{id:e?.id?.playerId||e?.id,teamId:e?.id?.teamId||e?.teamId,firstName:e?.name?.first||e?.firstName,lastName:e?.name?.last||e?.lastName,displayName:e?.name?.display||e?.knownName||e?.firstName+" "+e?.lastName,shirtNum:e?.shirtNum||e?.shirtNumber}}(e),o=y(r.teamId)||y(s),c=a(r.id,r.firstName,r.lastName);return t(l,null,o?t("a",{className:"event-type-bar "+(i?"event-type-bar--highlighted":""),href:c,"data-testid":"eventTypeBar",onClick:e=>e.stopPropagation()},i&&t("div",{className:"live-commentary-event__goal-inner"}),t(b,{data:r,type:"player"}),t("span",{className:"event-type-bar__player","data-testid":"eventTypeBarPlayer"},r?.shirtNum&&t("span",{className:"event-type-bar__number"},r?.shirtNum),r?.displayName?`${r?.displayName} `:"",m?" (OG)":""),n&&t(f,{name:n})):t("div",{className:"event-type-bar","data-testid":"eventTypeBar"},t("span",{className:"event-type-bar__player","data-testid":"eventTypeBarPlayer"},r?.shirtNum&&t("span",{className:"event-type-bar__number"},r?.shirtNum),r?.displayName?`${r?.displayName} `:"",m?" (OG)":""),n&&t(f,{name:n})))}g.propTypes={player:e.object,icon:e.string,teamId:e.string,isOwnGoal:e.bool,isSpursGoal:e.bool};const T=e=>{const a=/([A-Za-z\s]{1,100}) (\d), ([A-Za-z\s]{1,100}) (\d)/.exec(e);if(!a)return{homeTeamScore:"",awayTeamScore:""};const[,t,l,n,s]=a;return{homeTeamScore:`${t.trim()} ${l}`,awayTeamScore:`${s} ${n.trim()}`}},E=(e,a)=>{if(e)for(const t of Object.values(e)){const e=t.players?.find(e=>e.id===a);if(e)return{...e,teamId:t.formation.teamId}}return null},{YELLOW_CARD:S,SECOND_YELLOW:w,RED_CARD:C,SUBSTITUTION:I,GOAL:D,OWN_GOAL:O,PENALTY_SAVED:k,PENALTY_MISS:L,PENALTY_GOAL:M,HALF_TIME:A,FULL_TIME:G}=s;function j({eventData:e,playerData:a}){const l={[S]:"yellow-card",[C]:"red-card",[w]:"yellow-red-card",[k]:"penalty-saved",[L]:"penalty-missed",[A]:"half-time",[G]:"full-time",[I]:"substitution",[D]:"goal",[O]:"own-goal",[M]:"penalty-goal"},s={[S]:"label.matchEvent.yellowCard",[C]:"label.matchEvent.redCard",[w]:"label.matchEvent.secondYellowCard",[k]:"label.matchEvent.penaltySaved",[L]:"label.matchEvent.penaltyMiss",[A]:"label.matchEvent.halfTime",[G]:"label.matchEvent.fullTime",[I]:"label.matchEvent.substitution",[D]:"label.matchEvent.goal",[O]:"label.matchEvent.ownGoal",[M]:"label.matchEvent.penaltyGoal"},{player1:m,player2:i,comment:r,time:o,type:c}=e,d=n.lookup(s[c])||null,p=[D,O,M,C,w,S,I].includes(c),v=T(r).homeTeamScore,u=T(r).awayTeamScore,_=E(a,m),h=E(a,i),N=y(_?.teamId);return t("div",{className:"live-commentary-event","data-testid":"liveCommentaryEvent"},t("div",{className:"live-commentary-event__card"},o&&" "!==o&&t("span",{className:"live-commentary-event__time","data-testid":"liveCommentaryEventTime"},o),d&&t("div",{className:"live-commentary-event__type","data-testid":"liveCommentaryEventType"},t("div",{className:"live-commentary-event__type-details"},t("div",{className:"live-commentary-event__type-header"},t(f,{name:l[c]?l[c]:""}),t("h3",{className:"live-commentary-event__type-title","data-testid":"eventTypeTitle"},c!==D&&c!==M||!N?d||"":n.lookup("label.matchEvent.spursGoal"))),p&&t("div",{className:"live-commentary-event__details"},(()=>{const e={playerOn:_,playerOff:h};switch(c){case D:return t("div",{className:"live-commentary-event__goal"},t("div",{className:"live-commentary-event__player","data-testid":"liveCommentaryEventScorer"},t(g,{player:_,icon:null,isOwnGoal:c===O,isSpursGoal:c===D&&N})),t(P,{homeTeamScore:v,awayTeamScore:u}));case M:return t("div",{className:"live-commentary-event__goal"},t("div",{className:"live-commentary-event__player","data-testid":"liveCommentaryPenaltyGoalPlayer"},t(g,{player:_,icon:null,isOwnGoal:!1,isSpursGoal:c===M&&N})),t(P,{homeTeamScore:v,awayTeamScore:u}));case I:return t("div",{className:"live-commentary-event__substitution","data-testid":"liveCommentaryEventSubstitution"},t(g,{player:e.playerOff,icon:"sub-off"}),t(g,{player:e.playerOn,icon:"sub-on"}));case S:case C:case w:return t("div",{className:"live-commentary-event__disciplinary","data-testid":"liveCommentaryEventDisciplinary"},t(g,{player:_,icon:l[c]}));default:return t("div",{className:"live-commentary-event__player","data-testid":"liveCommentaryEventPlayer"},t(g,{player:_,icon:l[c]}))}})()))),t("p",{className:"live-commentary-event__comment","data-testid":"liveCommentaryEventComment"},r)))}j.propTypes={eventData:e.object.isRequired,playerData:e.object};const P=({homeTeamScore:e,awayTeamScore:a})=>t("div",{className:"live-commentary-event__goal-detail"},t("div",{className:"live-commentary-event__type-scores","data-testid":"liveCommentaryEventScores"},t("span",{className:"live-commentary-event__type-score"},e)," - ",t("span",{className:"live-commentary-event__type-score"},a)));P.propTypes={homeTeamScore:e.string,awayTeamScore:e.string};const $="timestamp:desc";function B({matchData:e,lineupsData:a,matchId:l,loadMoreSize:s,isMiniBlog:v}){const[y,_]=m(0),[h,N]=m([]),[b,f]=m(""),{data:g,isLoading:T}=i({id:l,params:{_limit:s,_sort:$}},{skip:!l,pollingInterval:y,skipPollingIfUnfocused:!0}),[E]=r();o(()=>{e&&_(u(e,{preKickoffThreshold:30,preKickoffPolling:p.TEN_SECONDS_IN_MS,livePolling:p.TEN_SECONDS_IN_MS}))},[e]);const S=c((e,a)=>{if(!Array.isArray(e)||0===e.length)return;const t=[...h,...e],l=Array.from(new Map(t.map(e=>[`${e.timestamp}-${e.comment}`,e])).values()).sort((e,a)=>new Date(a.timestamp)-new Date(e.timestamp));
1l.length===h.length&&l.every((e,a)=>`${e.timestamp}-${e.comment}`==`${h[a]?.timestamp}-${h[a]?.comment}`)||(N(l),f(a||null))},[h]),w=c(async()=>{if(l&&b)try{const e=await E({id:l,params:{_limit:s,_sort:$,_next:b}}).unwrap();S(e.data,e.pagination?._next)}catch(e){console.error("Error fetching next data:",e)}},[l,b,E,S,s]);o(()=>{g?.data?.length&&S(g.data,g.pagination?._next)},[g,h.length,S]),o(()=>{if(h.length>0){const e=document.querySelector('[data-tab="liveblog"]');e?.parentElement&&e.parentElement.classList.remove("u-hide")}},[h.length]);return e&&h.length&&a&&0!==Object.keys(a).length?T?t("div",null,"Loading..."):t("div",{className:"l-widget l-widget--spaced"},v&&t("header",{className:"o-widget-header o-widget-header--no-cta"},t("h2",{className:"o-widget-header__title"},n.lookup("label.latestLiveCommentary"))),t("div",{className:"live-commentary","data-testid":"liveCommentary"},t("ul",{className:"live-commentary__container","data-testid":"allEventsLiveCommentary"},h.map(l=>{return t("li",{className:"live-commentary__event",key:`${(n=l).timestamp}-${s}`},t(j,{eventData:n,homeTeamData:e.homeTeam,awayTeamData:e.awayTeam,playerData:a}));var n,s})),v?t("button",{className:"live-commentary__cta o-cta o-cta--primary",onClick:()=>{document.dispatchEvent(new CustomEvent("Change-Tab",{detail:{dataTab:d.MATCH_CENTRE.LIVE_BLOG}}))}},t("span",null,n.lookup("label.matchCentre.seeAllCommentary"))):b&&t("button",{className:"live-commentary__cta o-cta o-cta--primary o-cta--has-icon",onClick:w,disabled:T},t("span",null,n.lookup("label.loadMore"))))):null}B.propTypes={matchData:e.object.isRequired,lineupsData:e.object,matchId:e.string,loadMoreSize:e.number,isMiniBlog:e.bool};function z({matchId:e,loadMoreSize:a,isMiniBlog:l}){const{match:n}=N(e);if(!n)return null;const s=_(n),m=n?.kickoff,i=h(m),{data:r}=v({id:e},{skip:i>75,pollingInterval:!!s&&3e4,skipPollingIfUnfocused:!0});return n?t(B,{matchId:e,matchData:n,lineupsData:r,loadMoreSize:a,isMiniBlog:l}):null}z.propTypes={matchId:e.string,loadMoreSize:e.number,isMiniBlog:e.bool};var x=Object.freeze({__proto__:null,default:z});export{g as E,z as L,x as l};

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.