PageSourceSearch

https://www.wtatennis.com/resources/v7.52.1/scripts/rankings.js

js wtatennis.com collected 2026-10-02 02:21:11 UTC 31,581 bytes, 1 lines download raw bytes

1import{m as e}from"./moment.js";import{i as t}from"./isEqual.js";import{I as a,w as s,E as i,H as r,A as n,p as l,t as o,a6 as c,P as d,U as h,a as p,v as m,_ as u}from"./bundle-es.js";import{r as g,i as y}from"./templating.js";import{T as _}from"./tennis-player.js";import{i as k}from"./advert-utils.js";import{F as f}from"./filter-pane.js";import{w as v}from"./watch-filters.js";import{c as b}from"./content-api.js";import{F as w}from"./filter-set.js";import{RankingsDataService as D}from"./data-service2.js";import{DoublesTeam as S}from"./doubles-team.js";import{S as L}from"./single-choice-filter.js";import{F as C}from"./filter.js";import{B as j,f as Y,a as T}from"./filter-toggle.js";import{P as M}from"./player-search-filter.js";import{f as E}from"./filter-promo.js";import"./_commonjsHelpers.js";import"./underscore.js";import"./_createSizePropertyCheck.js";import"./escape.js";import"./tennis.js";import"./content.js";import"./tennis-tournament.js";import"./date.js";import"./index.esm.js";import"./store.js";import"./index.js";import"./tournament-player-service.js";import"./api-client.js";import"./search-api.js";import"./watch.js";import"./checkbox-filter.js";import"./player-search.js";import"./close-on-outside-click.js";import"./measurements.js";class P{constructor(e){this.message=e,this.render()}render(){document.querySelectorAll(".js-toast").forEach(e=>e.parentNode.removeChild(e));const e=g({message:this.message},"<div class=\"toast l-m-m js-toast\"> <%= render( {\n        cssClass: 'toast__icon',\n        name: 'info'\n    }, templates.renderSvg ) %> <span><%= typeof message !== 'undefined' ? message : '' %></span> </div>");document.body.insertAdjacentHTML("beforeend",e),this.toastEl=document.querySelector(".js-toast"),setTimeout(()=>{this.show()},100)}show(){this.toastEl.classList.add("is-visible"),clearTimeout(this.closeTimeout),this.remove()}remove(e=!1){e?this.toastEl.classList.remove("is-visible"):this.closeTimeout=setTimeout(()=>{this.toastEl.classList.remove("is-visible")},5e3)}}class x extends L{constructor(e){super(e,"ranking",["name","region","fav"])}shouldResetFilter(e,t){return"name"===t&&e&&""!==e||"region"===t&&e&&"ALL"!==e||"fav"===t&&e}}const N="date-picker__row--selected",A="date-picker__overlay--open";class q{constructor(t,a){this.container=t,this.isMobile=a,this.earliestDate=e("1982-01-01"),this.latestRankingsDate=e(t.dataset.rankingsDate),this.selectedDate=e(t.dataset.rankingsDate),this.viewingDate=e(t.dataset.rankingsDate),this.today=e(),this.mobileYear=Number(this.selectedDate.format("YYYY")),this.monthLabel=this.container.querySelector(".js-month-label"),this.yearLabel=this.container.querySelector(".js-year-label"),this.calendarMonths=this.container.querySelector(".js-calendar-months"),this.calendarYears=this.container.querySelector(".js-calendar-years"),this.calendarView=this.container.querySelector(".js-calendar-view"),this.init()}init(){a(this.monthLabel,B.bind(this,"months")),a(this.yearLabel,B.bind(this,"years")),I.call(this),H.call(this),F.call(this,this.latestRankingsDate)}resetDate(){this.viewingDate=e(this.latestRankingsDate).startOf("isoWeek"),R.call(this),z.call(this,null,!0)}setLatestDate(t,a=!1){this.latestRankingsDate=e(t).startOf("isoWeek"),a&&this.resetDate()}setViewingDate(t){this.viewingDate=e(t).startOf("isoWeek"),R.call(this),z.call(this,null,!0)}}const R=function(e){const t=this.viewingDate.format("YYYY");"prev"===e?this.viewingDate.subtract(1,"month"):"next"===e&&this.viewingDate.add(1,"month"),this.monthLabel.innerText=this.viewingDate.format("MMMM"),this.yearLabel.innerText=this.viewingDate.format("YYYY"),t!==this.viewingDate.format("YYYY")&&I.call(this),F.call(this,this.viewingDate)},F=function(e){const t=G.call(this,e);this.calendarView.innerHTML=g({calendar:t},'<table class="date-picker__calendar"> <thead> <% [ 1, 2, 3, 4, 5, 6, 0 ].forEach( function( day ) { %> <th class="date-picker__header-cell"><%= moment.weekdaysMin( day ) %></th> <% } ) %> </thead> <tbody> <% calendar.forEach(function( week ) { %> <%\n                var selectedWeekClass = week.isSelectedWeek ? \'date-picker__row--selected\'  : \'\';\n                var hasDataClass = week.hasData ? \'date-picker__row--data\'  : \'\';\n                var jsRowClass = week.hasData ? \'js-row\' : \'\';\n            %> <% const mondayDate = week.days[0].dayMoment.format(\'YYYY-MM-DD\') %> <tr class="date-picker__row <%= selectedWeekClass %> <%= hasDataClass %> <%= jsRowClass %>" data-monday="<%= mondayDate %>" data-tracking="true" data-tracking-component="filter" data-tracking-category="date picker" data-tracking-event="click_track" data-tracking-widget-type="Tennis Player Ranking List Widget" data-tracking-widget-name="Rankings" data-tracking-filter-type="date" data-tracking-filter-value="<%= mondayDate %>"> <% week.days.forEach(function( weekDay ) { %> <%\n                        var fadedClass = weekDay.isFuture || weekDay.isPastMonth ? \'date-picker__cell--faded\'  : \'\';\n                        var todayClass = weekDay.isToday ? \'date-picker__cell--today\'  : \'\';\n                        var mondayClass = weekDay.isMonday ? \'date-picker__cell--monday\'  : \'\';\n                    %> <td class="date-picker__cell <%= fadedClass %> <%= todayClass %> <%= mondayClass %>"> <span class="date-picker__cell-data"><%= weekDay.day %></span> </td> <% }) %> </tr> <% }) %> </tbody> </table>');[].slice.call(this.calendarView.querySelectorAll(".js-row")).forEac
1h(e=>a(e,z.bind(this)))},I=function t(){const s=[],i=this.viewingDate.clone().startOf("year");for(let e=0;e<12;e++)s.push({date:i.format("YYYY-MM-DD"),label:i.format("MMMM"),isSelectable:!i.isAfter(this.latestRankingsDate,"month")&&!i.isBefore(this.earliestDate,"month"),isSelected:i.isSame(this.viewingDate,"month")}),i.add(1,"month");this.calendarMonths.innerHTML=g({monthsList:s},"<% monthsList.forEach(function( month ) { %> <% var selectableCls = month.isSelectable ?'js-month-btn date-picker__button--selectable' : '' %> <% var selectedCls = month.isSelected ? 'date-picker__button--current is-active' : '' %> <div class=\"date-picker__overlay-item\"> <button class=\"sbtn sbtn--small sbtn--text date-picker__button <%= selectableCls %> <%= selectedCls %>\" data-month=\"<%= month.date %>\"> <%= month.label %> </button> </div> <% }) %>");[].slice.call(this.calendarMonths.querySelectorAll(".js-month-btn")).forEach(s=>a(s,a=>{a.stopPropagation(),this.viewingDate=e(a.currentTarget.dataset.month),R.call(this),B.call(this,"months"),t.call(this),H.call(this)}))},H=function(){if(this.isMobile)return void K.call(this);const e=Number(this.latestRankingsDate.format("YYYY")),t=Number(this.earliestDate.format("YYYY")),a=this.viewingDate.format("MM"),s=O.call(this,e,t,a);this.calendarYears.innerHTML=g({yearsList:s},'<% yearsList.forEach(function( year ) { %> <div class="date-picker__overlay-item"> <button class="sbtn sbtn--small sbtn--text date-picker__button date-picker__button--selectable <% if (year.selected) { %>date-picker__button--current is-active<% } %> js-year-btn" data-date="<%= year.date %>"> <%= year.label %> </button> </div> <% }) %>'),W.call(this)},K=function(){const e=this.mobileYear,t=e-10+1,s=this.viewingDate.format("MM"),i=O.call(this,e,t,s),r={hasPrevYears:i[i.length-1].label!==Number(this.earliestDate.format("YYYY")),hasNextYears:i[0].label!==Number(this.latestRankingsDate.format("YYYY")),years:i.reverse()};this.calendarYears.innerHTML=g(r,'<div class="date-picker__overlay-item"> <button class="sbtn sbtn--small sbtn--text date-picker__button <% if (hasPrevYears) { %>date-picker__button--selectable js-year-previous<% } %> date-picker__button--nav"> <%= translator.lookupKey( \'label.datePicker.previous\' ) %> </button> </div> <%=hasNextYears.label%> <% years.forEach(function( year ) { %> <div class="date-picker__overlay-item"> <button class="sbtn sbtn--small sbtn--text date-picker__button date-picker__button--selectable <% if (year.selected) { %>date-picker__button--current is-active<% } %> js-year-btn" data-date="<%= year.date %>"> <%= year.label %> </button> </div> <% }) %> <div class="date-picker__overlay-item"> <button class="sbtn sbtn--small sbtn--text date-picker__button <% if (hasNextYears) { %>date-picker__button--selectable js-year-next<% } %> date-picker__button--nav"> <%= translator.lookupKey( \'label.datePicker.next\' ) %> </button> </div>'),W.call(this);const n=this.calendarYears.querySelector(".js-year-previous"),l=this.calendarYears.querySelector(".js-year-next");n&&a(n,()=>{this.mobileYear-=10,H.call(this)}),l&&a(l,()=>{this.mobileYear+=10,H.call(this)})},O=function(e,t,a){const s=[];for(let i=e;i>=t;i--)s.push({date:`${i}-${a}-01`,label:i,selected:i===Number(this.viewingDate.format("YYYY"))});return s},W=function(){[].slice.call(this.calendarYears.querySelectorAll(".js-year-btn")).forEach(t=>a(t,t=>{t.stopPropagation(),this.viewingDate=e(t.currentTarget.dataset.date),R.call(this),B.call(this,"years"),I.call(this),H.call(this)}))},z=function(t,a){let r,n;if(a?(r=this.viewingDate,n=this.calendarView.querySelector('[data-monday="'+this.viewingDate.startOf("isoWeek").format("YYYY-MM-DD")+'"]')):(r=e(t.currentTarget.dataset.monday),n=t.currentTarget),r.isSame(this.selectedDate,"day"))return;this.selectedDate=r;const l=this.calendarView.querySelector(`.${N}`);if(l&&l.classList.remove(N),n.classList.add(N),this.isMobile){const e={label:this.selectedDate.format("YYYY MMMM DD"),value:this.selectedDate.clone(),filter:"date",resetDate:a};s(i.MOBILE_FILTERS.UPDATE,e,document)}else{const e={date:{value:this.selectedDate.clone(),updated:!0},resetDate:a};s(i.RANKINGS_FILTERS.CHANGED,e,document)}s(i.DATE_PICKER.CHANGED,{date:this.selectedDate.clone()},document)},B=function(e){"months"===e?(this.calendarMonths.classList.contains(A)?this.calendarMonths.classList.remove(A):this.calendarMonths.classList.add(A),this.calendarYears.classList.remove(A)):(this.calendarYears.classList.contains(A)?this.calendarYears.classList.remove(A):this.calendarYears.classList.add(A),this.calendarMonths.classList.remove(A))},G=function(e){const t=[],a=e.clone().startOf("month").startOf("isoWeek"),s=e.clone().endOf("month").endOf("isoWeek");let i=a.clone().subtract(1,"day");const r=e=>{const t=e.add(1,"day").clone();return{dayMoment:t,day:t.format("D"),isFuture:t.isAfter(this.today),isMonday:1===t.weekday(),isToday:t.isSame(this.today,"day"),isPastMonth:!t.isSame(this.viewingDate,"month")}};for(;i.isBefore(s,"day");)t.push({isSelectedWeek:i.isSame(this.selectedDate,"week"),hasData:!i.isAfter(this.latestRankingsDate,"week"),days:Array(7).fill(0).map(()=>r(i))});return t};class U extends C{constructor(e){super("date",{defaultValue:e.dataset.rankingsDate}),this.container=e,document.addEventListener(i.DATE_PICKER.CHANGED,this.onDateChanged.bind(this)),this.datePicker=new q(e,!0)}onDateChanged(e){super.change(e.detail.date.format("YYYY-MM-DD"))}updateUI(e){return this.datePicker.setViewingDate(e),!0}}class V extends C{constructor(e){super("sort",{defaultValue:`${e.dataset.type},${e.dataset.sort}
1`,dependency:"date"}),this.container=e,this.sortColumns=[].slice.call(e.querySelectorAll(".js-column-sort")),r(this.sortColumns,this.onColumnSortClick.bind(this))}onColumnSortClick(e){const t=e.currentTarget,a=t.dataset.sort;let s=t.dataset.dir||"asc";const i=function(e){if(e.classList.contains("rankings__sort-cell--asc"))return"asc";if(e.classList.contains("rankings__sort-cell--desc"))return"desc";return null}(t);i&&"asc"===i?s="desc":i&&"desc"===i&&(s="asc"),this.updateColumnLabels(t,s),super.change(`${a},${s}`)}updateColumnLabels(e,t){const a=this.container.querySelector(".js-column-sort.is-active");a.classList.remove(n),a.classList.remove("rankings__sort-cell--desc"),a.classList.remove("rankings__sort-cell--asc"),e.classList.add(n),e.classList.add(`rankings__sort-cell--${t}`),e.setAttribute("data-tracking-filter-value","asc"===t?"desc":"asc")}updateUI(e){if(!e)return!1;const[t,a]=e.split(","),s=this.sortColumns.find(e=>e.dataset.sort===t);return this.updateColumnLabels(s,a),!0}dependencyStaged(t){t!==e.utc().startOf("isoWeek").format("YYYY-MM-DD")?super.change(this.config.defaultValue):super.confirmFilters()}}const Q="is-active",$="rankings__list--overview",J="rankings__list--extended",X="rankings--loading",Z={SINGLES:"rankings_singles",DOUBLES:"rankings_doubles",CHAMPSINGLES:"rankings_race_singles"};class ee{constructor(t){if(this.container=t,this.tableContent=t.querySelector(".js-rankings-body"),this.loader=t.querySelector(".js-rankings-loader"),this.loadMoreBtn=t.querySelector(".js-load-more"),this.errorContainer=t.querySelector(".js-rankings-error"),this.tableToggles=[].slice.call(t.querySelectorAll(".js-table-toggle")),this.sortColumns=[].slice.call(t.querySelectorAll(".js-column-sort")),this.rankingsList=t.querySelector(".js-rankings-list"),this.isChampDoubles="true"===t.dataset.champDoubles,this.adUnitPath=this.container.dataset.adUnitPath,this.initialAdNumber=parseInt(this.container.dataset.initialAdNumber||"1",10),this.widgetName=t.dataset.trackingWidgetName,this.widgetType=t.dataset.trackingWidgetType,this.configuredDate=t.dataset.date,this.configuredType=this.container.dataset.type,this.configuredSort=this.container.dataset.sort,this.configuredPageSize=parseInt(this.container.dataset.pageSize)||50,this.currentPage=0,this.thisWeek=e.utc().startOf("isoWeek").format("YYYY-MM-DD"),this.activeToggle=this.tableToggles[0],this.templateName=this.isChampDoubles?'<tr class="player-row"> <td class="player-row__cell player-row__cell--rank"> <div class="player-row__rank-cell-inner"> <span class="player-row__rank h-xs-b dt:h-m-b"> <%= ranking %> </span> <span class="player-row__movement l-m-m dt:l-xl-m player-row__movement--<%=movementDirection %>"> <%= movementLabel %> </span> </div> </td> <td class="player-row__cell player-row__cell--team"> <div class="team-cell"> <a class="team-cell__row team-cell__row--player1" href="<%= player1.link %>" data-tracking="true" data-tracking-event="click_track" data-tracking-component="card click" data-tracking-category="stats card" data-tracking-type="<%= trackingType %>" data-tracking-detail="thumbnail" data-tracking-widget-type="<%= widgetType %>" data-tracking-widget-name="<%= widgetName %>" data-stat-type="ranking"> <%= render( {\n                    cssClass: \'team__player-picture\',\n                    id: player1.id,\n                    size: \'RANKINGS_TABLE_TEAM\',\n                    styleModifier: \'powered-up-circle-small\'\n                }, templates.playerHeadshot ) %> <span class="team-cell__name b-m-sb dt:b-xl-sb"> <%= player1.fullName %> </span> <% if( qualified && showQualified ) { %> <span class="qualified-label qualified-label--large u-hide-desktop">Qualified</span> <% } %> </a> <a class="team-cell__row team-cell__row--player2" href="<%= player2.link %>" data-tracking="true" data-tracking-event="click_track" data-tracking-component="card click" data-tracking-category="stats card" data-tracking-type="<%= trackingType %>" data-tracking-detail="thumbnail" data-tracking-widget-type="<%= widgetType %>" data-tracking-widget-name="<%= widgetName %>" data-stat-type="ranking">
1 <%= render( {\n                    cssClass: \'team__player-picture\',\n                    id: player2.id,\n                    size: \'RANKINGS_TABLE_TEAM\',\n                    styleModifier: \'powered-up-circle-small\'\n                }, templates.playerHeadshot ) %> <span class="team-cell__name b-m-sb dt:b-xl-sb"> <%= player2.fullName %> </span> <% if( qualified && showQualified ) { %> <span class="qualified-label qualified-label--large u-hide-desktop">Qualified</span> <% } %> </a> </div> </td> <td class="player-row__cell player-row__cell--country"> <div class="rankings__team-regions"> <div class="rankings__team-region rankings__country-container rankings__country-container--<%= player1.countryCode %>"> <%= render( {\n                    countryCode: player1.countryCode\n                }, templates.flagSvg ) %> <span class="rankings__team-region-name l-m-m"> <%= player1.countryCode %> </span> </div> <div class="rankings__team-region rankings__country-container rankings__country-container--<%= player2.countryCode %>"> <%= render( {\n                    countryCode: player2.countryCode\n                }, templates.flagSvg ) %> <span class="rankings__team-region-name l-m-m"> <%= player2.countryCode %> </span> </div> </div> </td> <td class="player-row__cell player-row__cell--age"> <div class="rankings__team-ages"> <span class="l-m-m"> <%= player1.age %> </span> <span class="l-m-m"> <%= player2.age %> </span> </div> </td> <td class="player-row__cell player-row__cell--tournaments l-m-m dt:l-xl-m"> <%= tournamentsPlayed %> </td> <td class="player-row__cell player-row__cell--points h-xs-b dt:h-m-b"> <%= points.toLocaleString() %> </td> </tr>':'<% const analyticsData = {\n    click_player_id: id,\n    click_player_name: fullName,\n    content_index_position: ranking,\n    widget_type: widgetType,\n    widget_name: widgetName\n} %> <tr class="player-row player-row--expandable js-player-item-favourite js-expand-btn" data-player-id="<%= id %>" data-player-name="<%= fullName %>" data-target-id="player_<%= id %>" data-analytics="<%= helper.template._escape(JSON.stringify(analyticsData)) %>"> <td class="player-row__cell player-row__cell--rank"> <div class="player-row__rank-cell-inner"> <span class="player-row__rank h-xs-b dt:h-m-b"> <%= ranking %> </span> <span class="player-row__movement l-m-m dt:l-xl-m player-row__movement--<%=movementDirection %> <% if(movementLongNumber){%>player-row__movement--long<%}%>"> <%= movementLabel %> </span> </div> </td> <td class="player-row__cell player-row__cell--player"> <div class="player-cell"> <div class="player-cell__photo-col"> <%= render( {\n                    cssClass: \'player-cell__player-picture\',\n                    id: id,\n                    size: \'RANKINGS_TABLE\',\n                    styleModifier: \'powered-up-square\'\n                }, templates.playerHeadshot ) %> <button class="fav-star-btn js-favourite-player-button" aria-label="<%= translator.lookupKey( \'label.favouriting.addtooltip\' ) %>" data-add-favourite-text="<%= translator.lookupKey( \'label.favouriting.addtooltip\' ) %>" data-remove-favourite-text="<%= translator.lookupKey( \'label.favouriting.removetooltip\' ) %>" data-player-name="<%= fullName %>" data-tracking="true" data-tracking-component="button click" data-tracking-category="control" data-tracking-type="make favourite" data-tracking-event="click_track" data-tracking-detail="" data-tracking-widget-type="<%= widgetType %>" data-tracking-widget-name="<%= widgetName %>"></button> </div> <div class="player-cell__meta-col"> <div class="player-cell__name-wrap"> <span class="player-cell__name b-m-sb dt:b-xl-sb"> <%= fullName %> </span> <% if( qualified && showQualified ) { %> <img class="player-cell__qualified-trophy u-hide-desktop" src="<%= environment.cdn %>i/elements/trophy-56.png" loading="lazy" aria-hidden="true" alt="" width="28" height="28"> <% } %> </div> <div class="player-cell__country-wrap"> <%= render( {\n                        cssClass: \'player-cell__flag player-cell__flag--\' + countryCode,\n                        countryCode: countryCode\n                    }, templates.flagSvg ) %> <span class="player-cell__country l-m-m player-cell__country--<%= countryCode %>"> <%= countryCode %> </span> <% if( qualified && showQualified ) { %> <span class="qualified-label qualified-label--large">Qualified</span> <span class="qualified-label qualified-label--small">Q</span> <% } %> </div> </div> </div> </td> <td class="player-row__cell player-row__cell--age l-xl-m"><%= age %></td> <td class="player-row__cell player-row__cell--tournaments l-xl-m"> <%= tournamentsPlayed %> </td> <td class="player-row__cell player-row__cell--points h-xs-b dt:h-m-b">
1 <%= points.toLocaleString() %> </td> <td class="player-row__cell"> <button class="player-row__expand-btn js-expand-btn" data-target-id="player_<%= id %>" data-match-type="<%= trackingType %>" aria-label="<%= translator.lookupKey(\'label.ranking.expandButton\') %>" aria-expanded="false" aria-controls="player_<%= id %>" data-analytics="<%= helper.template._escape(JSON.stringify(analyticsData)) %>"> <%= render( {\n                cssClass: \'player-row__expand-icon player-row__expand-icon--x\',\n                name: \'minus\'\n            }, templates.renderSvg ) %> <%= render( {\n                cssClass: \'player-row__expand-icon player-row__expand-icon--y\',\n                name: \'minus\'\n            }, templates.renderSvg ) %> </button> </td> </tr> <%\nvar form_title = trackingType === \'SINGLES\' || trackingType === \'CHAMPSINGLES\' ? translator.lookupKey(\'label.ranking.singleForm\') : translator.lookupKey(\'label.ranking.doubleForm\');\nvar matchTypes = trackingType === \'SINGLES\' || trackingType === \'CHAMPSINGLES\' ? \'singlesRanking\' : \'doublesRanking\';\n%> <tr class="player-row-drawer js-drawer-row" data-player-id="player_<%= id %>" id="player_<%= id %>" role="region" aria-live="polite" aria-hidden="true" tabindex="-1" inert> <td colspan="6"> <div class="player-row-drawer__inner js-drawer"> <div class="player-row-drawer__container"> <div class="player-row-drawer__container-inner"> <header class="widget-header widget-header__no-link-to"> <h2 class="widget-header__title h-m-sb"> <%= translator.lookupKey( \'label.ranking.rankingHistory\' ) %> </h2> </header> <%= render( {\n                        id: id,\n                        matchTypes: matchTypes,\n                        analyticsData: {\n                            event: "click_track",\n                            component: "button click",\n                            category: "control",\n                            type: "expand row",\n                            click_player_id: id,\n                            click_player_name: fullName,\n                            content_index_position: ranking,\n                            widget_type: widgetType,\n                            widget_name: widgetName\n                        }}, templates.rankingChart ) %> </div> <div class="player-row-drawer__container-inner"> <header class="widget-header"> <h2 class="widget-header__title h-m-sb"><%= form_title %></h2> <a href="<%= link %>/matches#main-content" class="widget-header__link sbtn sbtn--grad sbtn--small" data-text="Latest Matches" data-tracking="true" data-tracking-component="button click" data-tracking-event="click_track" ata-tracking-category="navigation" data-tracking-detail="Latest Matches" data-tracking-widget-type="Tennis Player Ranking List Widget" data-tracking-widget-name="Rankings"> <span class="sbtn__label"><%= translator.lookupKey( \'label.scores.latestMatches\' ) %></span> </a> </header> <div class="player-row-drawer__content"> <p class="player-row-drawer__error js-matches-error u-hide"> <%= translator.lookupKey( \'label.ranking.noMatches\' ) %> </p> <p class="player-row-drawer__error js-rankings-expand-error u-hide"> <%= translator.lookupKey( \'label.rankings.noResults\' ) %> </p> <div class="player-row-drawer__matches js-match-list" tabindex="0">\x3c!-- populated client-side --\x3e</div> <div class="player-row-drawer__performances js-performance-list">\x3c!-- populated client-side --\x3e</div> <%= render( {\n                            cssClass: \'player-row-drawer__loader t-dark js-expand-loader\',\n                            loadText: translator.lookupKey( \'label.loading\' )\n                            }, templates.loader ) %> </div> </div> </div> <div class="player-row-drawer__footer"> <a class="player-row-drawer__link sbtn sbtn--med dt:sbtn--large sbtn--fill" href="<%= link %>" data-tracking="true" data-tracking-event="click_track" data-tracking-component="button click" data-tracking-category="stats card" data-tracking-type="<%= trackingType.toLowerCase() %>" data-tracking-detail="view profile" data-tracking-widget-type="<%= widgetType %>" data-tracking-widget-name="<%= widgetName %>" data-stat-type="ranking"> <%= translator.lookupKey( \'label.viewProfile\' ) %> </a> </div> </div> </td> </tr>',this.resetButtons=t.querySelectorAll(".js-reset-button"),this.firstRen
1der=!0,!this.isChampDoubles){const e=t.querySelector(".js-filter-btn"),a=t.querySelector(".js-filter-pane");this.filterPane=new f(e,a,this.renderFilterPromo.bind(this))}this.historicalDisabledElements=t.querySelectorAll(".js-historical-disable"),this.filterDisabledElements=t.querySelectorAll(".js-filter-disable"),this.initDataService();const s=this.container.querySelectorAll(".rankings__header-cell");this.colSpan=s.length,this.homeFilterContainer=this.container.querySelector(".js-rankings-filter-home"),a(this.loadMoreBtn,()=>{this.loader.classList.remove(h),se.call(this),this.dataService.loadMore()}),this.init(),this.pageTarget=Z[this.container.dataset.metric],this.isChampDoubles&&(this.pageTarget="rankings_race_doubles")}init(){this.isChampDoubles?this.initUI():this.initFilterSet(),document.dispatchEvent(new CustomEvent(i.PLAYERS.RENDERED,{}))}initDataService(){const e={render:this.handleData.bind(this),page:this.currentPage,pageSize:this.configuredPageSize,type:this.configuredType,sort:this.configuredSort,isChampDoubles:this.isChampDoubles,name:"",noFirstRender:!0,fav:!1};this.isChampDoubles||(e.metric=this.container.dataset.metric,e.date=this.configuredDate),this.dataService=new D(this.container,e)}async initFilterSet(){const e=[{element:this.container.querySelector(".js-by-ranking-filter"),class:x},{element:this.container.querySelector(".js-date-picker"),class:U},{element:this.container.querySelector(".js-by-region-filter"),class:j},{element:this.container.querySelector(".js-filter-player-name"),class:M},{element:this.container.querySelector(".js-rankings-list"),class:V}];if(this.authenticated=await l.ready(),this.authenticated){const t=y({inputCssClass:"js-filter-checkbox",id:"by-favourite",icon:"star",label:o.lookup("label.filter.byFavourites"),widgetName:this.widgetName,widgetType:this.widgetType},Y);this.homeFilterContainer.appendChild(t),e.push({element:t,class:T})}this.filterSet=new w({filters:e}),this.initUI()}initUI(){this.tableToggles.forEach(e=>a(e,re.bind(this))),this.isChampDoubles||v(this.onFilterChange.bind(this)),this.adUnitPath.length>0&&this.setupAds()}async renderFilterPromo(){if(!this.authenticated&&!this.filterPromoRendered){const e=this.container.dataset?.filterPromo;if(!e)return;const t=await b.typeLangIdRequest({type:"PROMO",id:e});if(!t)return;const a=y(t,E);this.homeFilterContainer.appendChild(a),this.filterPromoRendered=!0}}async handleData(e,t=!1){let a=e;const s=this.dataService.dataParams.fav;if(0===this.currentPage&&(this.favPlayersFound=[],this.allFavPlayersFound=!1),s){if(await l.ready()){const e=await c.getPreference(d.FAVORITE_PLAYERS);if(e){const t=e.map(e=>parseInt(e.id));a=a.filter(e=>t.includes(e?.player?.id)),this.favPlayersFound=[...this.favPlayersFound,...a],this.allFavPlayersFound=this.favPlayersFound.length===e.length}}}this.render(a,t)}render(t,a=!1){const r=this.dataService.dataParams.fav;if(!t?.length){if(0===this.currentPage)return this.tableContent.innerHTML="",void ae.call(this);if(!r||r&&this.allFavPlayersFound)return se.call(this),void this.loader.classList.add(h)}let n="";t.forEach(a=>{if(a.showQualified=this.isChampDoubles||"RankChampSingles"===this.configuredType,this.isChampDoubles)n+=g({...new S(a),trackingType:this.trackingType,widgetName:this.widgetName,widgetType:this.widgetType},this.templateName);else{const s=e.utc(t[0].rankedAt).format("YYYY-MM-DD");n+=g({...new _(a,s),trackingType:this.trackingType,widgetName:this.widgetName,widgetType:this.widgetType},this.templateName)}document.dispatchEvent(new CustomEvent(i.PLAYERS.RENDERED,{}))}),a?this.tableContent.innerHTML=n:this.tableContent.insertAdjacentHTML("beforeend",n),s(i.PLAYERS.RENDERED,{}),p("player-headshot/player-headshot",this.tableContent),this.dataService.loading=!1,this.errorContainer.classList.add(h),this.currentPage++,this.adUnitPath.length>0&&this.setupAds(),t.length<this.configuredPageSize?se.call(this):ie.call(this),r&&!this.allFavPlayersFound&&this.currentPage<=10?this.dataService.loadMore():r&&this.allFavPlayersFound||r&&this.currentPage>=10?(this.loader.classList.add(h),this.container.classList.remove(X),se.call(this)):(this.loader.classList.add(h),this.container.classList.remove(X))}setupAds(){const e=this.container.querySelectorAll(".js-advert");[].forEach.call(e,e=>{"true"!==e.getAttribute("data-activated")&&(k(e,"JS"),e.setAttribute("data-activated",!0))})}onFilterChange(e){if(this.dataService.loading)return;se.call(this);const[a,s]=e.sort.split(",");this.trackingType=this.isChampDoubles?"champdoubles":this.container.dataset.metric||"";const i=this.formatDataServiceParams({ranking:e.ranking,sort:s||this.configuredSort,type:a||this.configuredType,name:e.name,at:e.date,nationality:"ALL"===e.region?"":e.region,fav:e.fav||!1});e.fav?le.call(this):oe.call(this),this.historicalRankings=this.thisWeek!==e.date,ne.call(this,e),t(this.dataService.dataParams,i)?ie.call(this):(this.currentPage=i.page,te.call(this),i.fav?this.dataService.dataParams.pageSize=100:this.dataService.dataParams.pageSize=this.configuredPageSize,this.dataService.load(i),se.call(this))}formatDataServiceParams({type:e,sort:t,name:a,at:s,nationality:i,ranking:r,fav:n}){let l=0;try{const e=r.split("-")[0];l=Math.floor(e/this.configuredPageSize)}catch(e){console.error("[Rankings] Error parsing by ranking, defaulting to page 0.",e)}const o={page:l,pageSize:this.configuredPageSize,type:e,sort:t,name:a,nationality:i,fav:n};return this.isChampDoubles||(o.metric=this.container.dataset.metric,o.at=s),o}}const te=function(){this.container.classList.add(X),this.errorContainer.classList.add(h),this.loader.classList.remove(h)},ae=function(){this.dataService.loading=!1,this.container.classList.remove(X),this.loader.classList.add(h),this.loadMoreBtn.classList.add(h),this.errorContainer.classList.remove(h),m({event:"impression_track",component:"error message viewed",detail
1:o.lookup("label.rankings.noResults")})},se=function(){this.dataService.loading=!1,this.loadMoreBtn.classList.add(h)},ie=function(){this.loadMoreBtn.classList.remove(h)},re=function(e){const t=e.currentTarget,a=t.dataset.view;this.activeToggle.classList.remove(Q),t.classList.add(Q),"overview"===a?(this.rankingsList.classList.remove(J),this.rankingsList.classList.add($)):(this.rankingsList.classList.add(J),this.rankingsList.classList.remove($)),this.activeToggle=t},ne=function(e){const t=ce;this.historicalRankings?(this.container.classList.add("rankings--historical"),le.call(this)):(this.container.classList.remove("rankings--historical"),e.fav||oe.call(this)),this.historicalDisabledElements.forEach(e=>{this.historicalRankings?(e.classList.add(u),e.addEventListener("click",t)):(e.classList.remove(u),e.removeEventListener("click",t))}),this.filterDisabledElements.forEach(a=>{e?.name&&""!==e.name||e?.region&&"ALL"!==e.region?(a.classList.add(u),a.addEventListener("click",t)):(a.classList.remove(u),a.removeEventListener("click",t))})};function le(){this.container.classList.add("rankings--disabled-sorting"),this.sortColumns.forEach(e=>{e.setAttribute("aria-disabled",!0)})}function oe(){this.container.classList.remove("rankings--disabled-sorting"),this.sortColumns.forEach(e=>{e.removeAttribute("aria-disabled")})}const ce=function(e){e.preventDefault();const t=e.currentTarget.getAttribute("data-disabled-msg")||o.lookup("label.filter.disabledHistorical");e.currentTarget.toast=new P(o.lookup(t))};export{ee 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.