"I was having my boyfriend help me a lot; It was awful; There were a lot of tears" – Danielle Collins on physical struggles in the days leading up to Miami Open triumph – Sportskeeda
Newly crowned 2024 Miami Open champion Danielle Collins recently shed light on her injury woes in the days leading up to the tournament.
Collins, who announced 2024 as her final season earlier this year, beat repeat finalist Elena Rybakina 7-5, 6-3 to win her first title at a WTA 1000 tournament on Saturday, March 30.
In her press conference following the victory, the Floridian was asked if she saw herself as a title contender before the tournament.
“Two weeks ago looked a little different,” she responded.
It’s worth noting that just before her Sunshine Double campaign, Danielle Collins suffered a back injury in the quarterfinals of the ATX Open, which forced her to retire from the tournament mid-match.
“I was coming off a back injury that happened in Austin. I was devastated not to be able to finish out that tournament,” Collins said.
Despite the setback, the American competed in Indian Wells, bowing out against eventual champion Iga Swiatek in the second round. She shared crushing behind-the-scenes details of her run in the desert.
“I went to Indian Wells and had multiple days off in a row. I had a few days, not exaggerating, I literally couldn’t walk. I was having to have my boyfriend help me a lot.
“It was awful. There were a lot of tears about, oh, my gosh, I have played all these tournaments, I have worked so hard for this, and now we’re at Indian Wells and Miami and this is happening, like, why?” Danielle Collins recalled.
Danielle Collins on battling injury to win Miami Open: “What makes these players the best in the world is they learn how to play around those things”
Danielle Collins said that her early Indian Wells exit allowed her a few good practices before the 2024 Miami Open. She also noted that her condition improved considerably with the help of physical therapy.
“Luckily with I think the help of the physical therapy and chiropractor we were able to kind of get it under control and make some adjustments too with some of my training and recovery and got it to a place where it was more manageable. After Indian Wells I was able to get a couple good days of practice,” Danielle Collins said in the aforementioned press conference.
“I felt pretty confident, but it was still the amount of time that I was practicing on court and the type of drills that we were doing, I was, like, this is going to be hard, going into Miami,” she added.
The former World No. 7 lost her opening set of the Miami Open against first-round opponent Bernarda Pera but won her next 14 sets en route the title.
After her comeback win against Pera, she beat Anastasia Potapova, Elina Avanesyan, Sorana Cirstea, Caroline Garcia and Ekaterina Alexandrova to book her place in the title clash.
“When I came out in the first round, I had a tough match against Pera. I was happy to really get through that. But I also did a great job of putting all that fear of, oh, am I doing enough, am I not doing enough, am I too injured, am I too this, too that?” she said.
Collins said that the main takeaway for her was how she overcame the challenges along the way at the Miami Open.
“I think what makes some of these players the best in the world is that they learn how to play around those things.
“That’s the thing that I have learned the most this tournament is, okay, it’s never going to be 100% and you’ve got to figure out a way to, even though you have those challenges, work through it and get through it.”
function KeedaCarousalControlsHelper(input)
threshold: 1
;
KeedaCarousalControlsHelper.prototype.observeTarget = function() {
var self = this;
var firstItem = this.target.firstElementChild;
var lastItem = this.target.lastElementChild;
var allChildren = this.target.children;
var firstItem, lastItem;
for (var i = 0; i = 0; i–)
if (!allChildren[i].classList.contains(“hidden”))
lastItem = allChildren[i];
break;
this.firstItemObserver = new IntersectionObserver(function(entries)
entries.forEach(function(entry)
if (entry.isIntersecting)
self.whenFistItemInViewport(entry);
else
self.whenFistItemNotInViewport(entry);
)
, this.options);
this.lastItemObserver = new IntersectionObserver(function(entries)
entries.forEach(function(entry)
if (entry.isIntersecting)
self.whenLastItemInViewport(entry);
else
self.whenLastItemNotInViewport(entry);
)
, this.options);
firstItem && this.firstItemObserver.observe(firstItem);
lastItem && this.lastItemObserver.observe(lastItem);
if (typeof self.whenCarouselInViewport == “function” && typeof self.whenCarouselNotInViewport == “function”)
this.carouselObserver = new IntersectionObserver(function(entries)
entries.forEach(function(entry)
if (entry.isIntersecting)
self.whenCarouselInViewport(entry);
else
self.whenCarouselNotInViewport(entry);
)
);
function closeAllDropDown()
var nodes = $all(".drop-down-menu");
var menu = $all(".wiki-menu-item .drop-down-icon");
if (menu && menu.length)
for(var i = 0; i < menu.length; i++)
menu[i].style.transform = "scale(1.5)";
if (nodes && nodes.length)
for(var i = 0; i < nodes.length; i++)
nodes[i].classList.add("hidden");
function trackScrollableMenuClick(name, pageType)
(function()
if (typeof initScrollableMenu === “function”)
initScrollableMenu();
var addratingAPI = ‘https://gotham.sportskeeda.com/post-rating’;
var getRatingCountBaseURL = ‘https://polls.sportskeeda.com/post-rating/’;
var ratingValue = 0;
var userRatedPostIds = getCookie(‘user_rated_post_ids’);
if (!userRatedPostIds) userRatedPostIds = [];
else
try
userRatedPostIds = JSON.parse(userRatedPostIds);
catch (err)
console.error(err);
userRatedPostIds = [];
if (userRatedPostIds.indexOf(1925503) >= 0)
$(“#post-rating-layout”).classList.add(“hidden”);
function ratePost(index)
ratingValue = index;
var theStarClasses = Array.from($(“#star-” + index).classList);
if (theStarClasses.indexOf(“active”) < 0)
for (var i=1; i index; i–)
$(“#star-” + i).classList.remove(“active”);
if (index <= 3)
var ratingStars = document.getElementsByClassName("rating-star");
var modalText = "
“;
modalText += “
“;
modalText += “
“;
modalText += “
“;
modalText += “
“;
modalText += “
“;
modalText += “
“;
modalText += “
“;
modalText += “
”
modalText += “
Please select an option.
Please provide your feedback.
”
modalText += “
”
modalPopup.closeOnEsc = false;
modalPopup.setHeader(“Why did you not like this content?”);
modalPopup.setContentText(modalText);
modalPopup.addCancelOkButton(“Submit”, resetRatingAndFeedbackForm, sendRating);
modalPopup.removeCloseModalIcon();
modalPopup.disableDismissPopup();
modalPopup.open();
else
sendRating(index);
function sendRating()
var requestPayload =
“post_id”: 1925503,
“rating_value”: ratingValue
function resetRatingAndFeedbackForm()
var activeStars = Array.from($all(‘.rating span.rating-star.active’));
for (var i=0; i = 0)
return true;
else
return false;
function getRatingCountByPostId(postId) {
return new Promise(function(resolve, reject)
pureJSAjaxGet(
getRatingCountBaseURL + postId + ‘/rating/count’,
function(data)
try
data = JSON.parse(data);
if (data.meta_value)
resolve(data.meta_value);
reject(“Failed to fetch rating count for the post:” + postId);
catch (err)
reject(“Failed to fetch rating count for the post:” + postId);
,
function(err)
reject(“Failed to fetch rating count for the post:” + postId);
, true);
);
}
function showErrorMessage(messageType)
var messageContainerId = ‘#’ + messageType + ‘-error’;
$(messageContainerId).classList.remove(‘hidden’);
window.setInterval(function ()
$(messageContainerId).classList.add(“hidden”);
, 5000);
(function() {
var callFired = false;
function lazyLoadPostRating()
if (callFired) return;
callFired = true;
if (!isPostRatedByUser())
getRatingCountByPostId(1925503)
.then(function(ratingCount)
if (ratingCount < 10)
$("#post-rating-widget").classList.remove("hidden");
if ($(".comments-total-container"))
$(".comments-total-container").addEventListener("click", function ()
var gaObject =
'event_category': "Comments",
'event_label': "No_of_comments",
var sessionCookieValue = getCookie("keeda-session-uuid");
if (sessionCookieValue)
gaObject['keeda-session-uuid'] = sessionCookieValue;
var userID = getCookie("fw_ID");
if (userID)
gaObject['loggedIn_user_id'] = userID;
gtag('event', 'click', gaObject);
)
if ($(".comments-total-container-bottom"))
$(".comments-total-container-bottom").addEventListener("click", function ()
var gaObject =
'event_category': "Comments",
'event_label': "No_of_comments_bottom",
var sessionCookieValue = getCookie("keeda-session-uuid");
if (sessionCookieValue)
gaObject['keeda-session-uuid'] = sessionCookieValue;
var userID = getCookie("fw_ID");
if (userID)
gaObject['loggedIn_user_id'] = userID;
gtag('event', 'click', gaObject);
)
document.addEventListener("click", trackBelowContentFeedClick.bind(this));
var followButtons = $all('.btn-follow');
var followButtons = $all('.follow-btn');
var authorId;
var source;
/* for user profile page */
function displayFollowContent()
addClass($('.follow-pc'),'hidden');
removeClass($('.follow-content .author-profile-info'), 'hidden');
removeClass($('.follow-content .follow-author'),'hidden');
function followCallback (resp) {
data = JSON.parse(resp);
displayFollowContent();
for(i=0;i<followButtons.length;i++)
if (data.status == true)
removeClass(followButtons[i], "follow");
addClass(followButtons[i], "following");
removeClass(followButtons[i], "hidden");
if(source == "article")
followButtons[i].querySelector('span').innerText = "Following";
if (followButtons[i].querySelector('img'))
followButtons[i].querySelector('img').remove();
function logCopyEvent()
var payload = event_type: "copy", post_id: 1925503 ;
pureJSAjaxPost(trackCopyURL, payload, function() , function ()
console.error('Failed to save copy event');
, null, true);
);
(function()
var followUsCTA = $(".follow-us-cta");
function followUsGoogleNews()
window.addEventListener(“scroll”, followUsGoogleNews);
)();
var followUsCTAs = $all(“.follow-action”);
for (var i = 0; i < followUsCTAs.length; i++)
followUsCTAs[i].addEventListener("click", function(e)
var element = e.currentTarget;
var elementClass = element.getAttribute("class");
var payload = "news-i-boyfriend-help-lot-it-awful-there-lot-tears-danielle-collins-physical-struggles-miami-open-triumph",
"device": "Desktop"
if (elementClass.includes("follow-us-cta"))
payload["position"] = "header";
else if (elementClass.includes("follow-action-bottom"))
payload["position"] = "bottom";
else
payload["position"] = "top";
gtag("event", "Follow_Us", payload);
);
(function()
var article_sponserd_links = $all(“.sponsored_link”);
for (var i = 0; i < article_sponserd_links.length; i++)
article_sponserd_links[i].addEventListener("click", function(element) "news-i-boyfriend-help-lot-it-awful-there-lot-tears-danielle-collins-physical-struggles-miami-open-triumph";
var isDesktop = "1";
var payload =
"sponsed_link": element.target.href,
"sponsed_link_text": element.target.innerHTML,
"page_url": window.location.href,
"category": sportCategory,
if (isDesktop)
payload["device"] = "Desktop"
else
payload["device"] = "Mobile"
var bottom_tagline_links = document.querySelectorAll('.bottom_tagline_link');
for (var i = 0; i < bottom_tagline_links.length; i++)
bottom_tagline_links[i].addEventListener('click', trackBottomTaglineClickEvent.bind(this));
var bottom_tagline_video_links = document.querySelectorAll('.bottom-tagline-video-link');
for (var i = 0; i < bottom_tagline_video_links.length; i++)
bottom_tagline_video_links[i].addEventListener('click', trackBottomTaglineClickEvent.bind(this));
function trackBottomTaglineClickEvent(element)
var taglinePosition = element.currentTarget.getAttribute("data-tab");
var taglineUrl = element.currentTarget.getAttribute("href");
var payload =
"tagline_position": taglinePosition,
"destination_url": taglineUrl
trackGAEvent("Clicks_BottomTagline", payload);
var bottom_tagline_text_container = document.querySelectorAll('.bottom-tagline');
for (var i = 0; i < bottom_tagline_text_container.length; i++)
trackBottomTaglineImpression(bottom_tagline_text_container[i]);
var bottom_tagline_video_container = document.querySelectorAll('.bottom-tagline-video');
for (var i = 0; i < bottom_tagline_video_container.length; i++)
trackBottomTaglineImpression(bottom_tagline_video_container[i]);
var bottom_tagline_promo_container = document.querySelectorAll('.bottom-tagline-banner');
for (var i = 0; i < bottom_tagline_promo_container.length; i++)
trackPromoBannerImpression(bottom_tagline_promo_container[i]);
var bannerLink = bottom_tagline_promo_container[i].querySelector('.bottom-tagline-banner-link');
if (bannerLink)
bannerLink.addEventListener('click', trackPromoBannerClickEvent);
function trackPromoBannerClickEvent(e)
var target = e.target.closest(".bottom-tagline-banner-link");
if (!target) return;
var taglinePosition = target.getAttribute("data-tab");
var taglineUrl = target.getAttribute("href");
trackGAEvent("TAGLINE_CLICK",
"position": taglinePosition,
"variant": "promo-banner",
"destination_url": taglineUrl
);
function trackBottomTaglineImpression(element)
var taglinePosition = element.getAttribute("data-tab");
trackImpressionGAEventWhenInViewport(
element: element,
identifier: "element_" + taglinePosition,
eventName: "Tagline_Impression",
eventParams:
"tagline_position": taglinePosition,
);
function trackPromoBannerImpression(element)
var taglinePosition = element.getAttribute("data-tab");
trackImpressionGAEventWhenInViewport(
element: element,
identifier: "tagline_promo_banner_" + taglinePosition,
eventName: "TAGLINE_IMPRESSION",
eventParams:
"position": taglinePosition,
"variant": "promo-banner",
);
// this will fire ga event on anchor tag clicks in article page
var hyperLinks = $all("#article-content p a, #article-content table a");
for (var i = 0; i < hyperLinks.length; i++)
var hyperLink = hyperLinks[i];
hyperLink.addEventListener("click", sendHyperlinkClickedGAEvent);
function sendHyperlinkClickedGAEvent()
trackGAEvent("Clicks_hyperlinks",
destURL: this.href,
);
)();
(function() {
var spotifyMonitor = setInterval(function()
var elem = document.activeElement;
if (elem && elem.tagName == “IFRAME”)
var src = elem.getAttribute(“src”);
if (src && src.indexOf(“open.spotify.com”) > -1)
clearInterval(spotifyMonitor);
gtag(“event”, “ARTICLE_EMBED_CLICK__SPOTIFY”,
link: window.location.href
);
, 100);
})();
(function() {
function lazyTweetLoader()
var twitterEmbeds = document.querySelectorAll(“.hidden-lazy”);
var intersectionObserverForLazyHidden = new IntersectionObserver(
function(entries)
entries.forEach(function(entry)
if (entry.isIntersecting)
var verifiedElement = entry.target.querySelector(“.verified”);
removeClass(verifiedElement, “hidden”);
var likeElement = entry.target.querySelector(“.tweet-like-icon”);
removeClass(likeElement, “hidden”);
var retweetElement = entry.target.querySelector(“.tweet-retweet-icon”);
removeClass(retweetElement, “hidden”);
var twitterLogoElement = entry.target.querySelector(“.tweet-logo”);
removeClass(twitterLogoElement, “hidden”);
(function() {
var postId = “1925503”;
if (!postId)
return;
var commentsBadgeElements = $all(“.comments–badge”);
document.addEventListener(“DOMContentLoaded”, function()
var apiURL = “https://www.sportskeeda.com/comments/count/” + postId + “/ajax”;
pureJSAjaxGetWithPromise(apiURL).then(function(res)
try
var data = JSON.parse(res);
if (data.comments_count)
updateCommentBadgeElements(data.comments_count);
catch (e)
console.error(e);
);
);
function updateCommentBadgeElements(count)
for (var i = 0; i < commentsBadgeElements.length; i++)
}
})();
#sk-timeline #stories-list
background:#fff;
.recommended-posts
margin:20px auto 0;
var taboolaScriptLoaded = false;
window._taboola = window._taboola || [];
_taboola.push( article: ‘auto’ );
(function()
var userCountry = getCookie(“country_code”);
var IS_GDPR_APPLICABLE = getCookie(COOKIE_GDPR) == “true”;
if (![“IN”].includes(userCountry))
if (window.performance && typeof window.performance.mark == ‘function’)
window.performance.mark(‘tbl_ic’);
var scriptInput =
src: “https://cdn.taboola.com/libtrc/sportskeedaindia/loader.js”,
loadWithDefer: true,
onUserInteraction: true,
attributes: [
key: “id”,
value: “tb_loader_script”
]
;
function loadTaboolaScript()
if (!taboolaScriptLoaded)
taboolaScriptLoaded = true;
asyncScriptLoader(scriptInput);
(function() {
var isOpera = “”;
var showAlsoReadSection = “”;
var showAlsoReadSectionV2 = “”;
var showAlsoReadTagBasedRecommendation = “”;
function renderRecommendedArticles(data)
var recommendedArticlesContainer = document.querySelector(‘.recommended-articles’);
data = JSON.parse(data);
if (showAlsoReadSection && !showAlsoReadSectionV2 && !showAlsoReadTagBasedRecommendation)
if (data.recommended_posts && data.recommended_posts.length > 2)
var alsoReadArticles = data.recommended_posts.splice(0, 2);
renderAlsoReadArticles(alsoReadArticles);
var recommendedPosts = data.recommended_posts;
if (recommendedPosts && recommendedPosts.length > 0)
recommendedPosts.forEach(function (story, index)
var storyTitle = encodeURIComponent(story.title);
var permalink = story.permalink;
if (isOpera)
permalink = permalink.replace(“https://www.sportskeeda.com/”, “/”);
function recommendedArticles()
var baseUrl = “https://cf-gotham.sportskeeda.com/recommendations/post/news-i-boyfriend-help-lot-it-awful-there-lot-tears-danielle-collins-physical-struggles-miami-open-triumph?lang=en&category=tennis”;
pureJSAjaxGet(baseUrl, function(data)
renderRecommendedArticles(data);
if (isOpera)
renderOperaFeedAd();
, function() , false);
var options =
root: null,
rootMargin: “0px 0px 70% 0px”,
threshold: 0.1
;
var observer = new IntersectionObserver(function (entries)
entries.forEach(function (entry)
if (entry.isIntersecting)
recommendedArticles();
observer.unobserve(entry.target);
);
, options);
var targetElement;
if (showAlsoReadSection && !showAlsoReadSectionV2)
targetElement = document.querySelector(‘.also-read-articles-container’);
else
targetElement = document.querySelector(‘.recommended-posts’);
if (targetElement)
observer.observe(targetElement);
@media screen and (max-width: 768px)
.spotlight-layout, .timless-posts-layout
margin: 8px 0;
Fetching more content…
var socialStoriesObserved = ;
var videoPlayedEventTriggered =
var socialStoriesIOConfig =
root: null,
rootMargin: “0px”,
threshold: 0.5
var socialStoriesIntersectionObserver = new IntersectionObserver(handlerForSocialStoryIO, socialStoriesIOConfig);
function handlerForSocialStoryIO(entries)
entries.forEach(function(entry)
var targetEle = entry.target;
if (entry.isIntersecting)
var videoEle = targetEle.querySelector(“video”);
if (videoEle)
var postId = targetEle.dataset.id;
socialStoriesIntersectionObserver.unobserve(targetEle);
setEventListenerForVideoPlay(videoEle, postId, targetEle.dataset);
else
targetEle.setAttribute(“data-visible-start”, Date.now());
targetEle.removeAttribute(“data-visible-end”);
return
if (entry.boundingClientRect.top 2000)
// post viewed for more than 2 seconds
sendPageViewTracking(dataset);
socialStoriesIntersectionObserver.unobserve(targetEle);
)
}
function sendPageViewTracking(dataset) “”) +
‘&tt_id_json=’ + (dataset.ttIds
// sends page view event for the social post to GA
function sendGAPageViewEventForSocialPost(url)
if (!gtag) return;
gtag(‘config’, ‘G-T41EZF14QW’, ‘page_path’: url );
function setIntersectionObserverSocialPosts()
var socialStories = $all(“.social-story-wrapper .list-story-link”);
for (var i = 0; i < socialStories.length; i++)
function setEventListenerForVideoPlay(videoEle, postId, dataset) !postId) return;
videoEle.addEventListener("play", function()
if (!!videoPlayedEventTriggered[postId])
return;
function getScrollHeight(elm)
var savedValue = elm.value;
elm.value = "";
elm._baseScrollHeight = elm.scrollHeight;
elm.value = savedValue;
function initGifTagScroll()
var tagsContainer = document.querySelector(".gif-display-tags");
var leftScrollButton = document.querySelector(".scroll-left-button");
var rightScrollButton = document.querySelector(".scroll-right-button");
leftScrollButton.onclick = function ()
tagsContainer.scrollBy(
behavior:"smooth",
top: 0,
left: -450
);
var isCommentsScriptLazyLoaded = false;
var isCommentPopupVisible = false;
var currentShownId = null;
function isValidURL(string)
var res = string.match(/(http(s)?://.)?(www.)?[-a-zA-Z0-9@:%._+~#=]2,256.[a-z]2,6b([-a-zA-Z0-9@:%_+.~#?&//=]*)/g);
return (res !== null)
;
function setUrlParam(key, value)
var url = new URL(window.location.href);
url.searchParams.set(key, value);
window.history.replaceState(null, null, url);
function getUrlParamByKey(key)
var url = new URL(window.location.href);
return url.searchParams.get(key);
function deleteUrlParam(key)
var url = new URL(window.location.href);
url.searchParams.delete(key);
window.history.replaceState(null, null, url);
function storeStoryDetailsAndToggleFeedComment(element, story)
var id = element.dataset.id;
if (!id) return;
var ssKey = new Date().getTime();
sessionStorage.setItem(“comment_meta_” + ssKey, JSON.stringify());
setUrlParam(“comment-meta-id”, ssKey);
setUrlParam(“comment-popup”, “1”);
toggleCommentsPopup(ssKey, false);
function toggleCommentsPopup(ssKey, doScroll)
var sessionStorageData = sessionStorage.getItem(“comment_meta_” + ssKey);
if (!sessionStorageData) return;
var commentData = ;
try
commentData = JSON.parse(sessionStorageData);
catch (e)
console.error(e);
return;
if (!commentData.id) return;
if (isCommentPopupVisible && commentData.id == currentShownId)
hideCommentsContainer(true);
return;
var popover = document.getElementById(“feed-comments-popover”);
if (!popover) return;
popover.classList.remove(“inactive”);
showCommentPopupArticleInfo(commentData.title, commentData.href);
var articleLink = commentData.href + window.location.search;
if (!isValidURL(articleLink))
articleLink = window.location.origin + articleLink;
var isDesktop = “1”;
if (commentData.id)
payload[“post_id”] = commentData.id;
if (articleLink)
payload[“destination_url”] = window.location.origin + commentData.href;
if (isDesktop)
payload[“device”] = “Desktop”;
else
payload[“device”] = “Mobile”;
if (typeof trackGAEvent != “undefined”)
trackGAEvent(“comment_icon_click”, payload);
if (doScroll && commentData.scrollY)
window.scrollTo(0, commentData.scrollY);
addListenerToCommentBox();
function getGALabelForFeedCommentClick(type)
if (type === “tweet”)
return “Social_Twitter_Comment_Button”;
else if (type === “youtube”)
return “Social_Youtube_Comment_Button”;
else if (type === “instagram”)
return “Social_Instagram_Comment_Button”;
return “Article_Comment_Button”;
function hideCommentsContainer(fromWindowPop)
if (!isCommentPopupVisible)
return;
isCommentPopupVisible = false;
currentShownId = null;
var popover = document.getElementById(“feed-comments-popover”);
if (!popover) return;
deleteUrlParam(‘comment-meta-id’);
deleteUrlParam(‘comment-popup’);
popover.classList.add(“inactive”);
if (!fromWindowPop)
window.history.back();
if (typeof trackGAEvent != “undefined”)
trackGAEvent(“comment_popup_close”);
function showCommentPopupArticleInfo(title, href)
var articleInfoContainer = document.getElementById(“comments-article-info”);
if (!articleInfoContainer) return;
if (!title)
articleInfoContainer.classList.add(“hidden”);
else
articleInfoContainer.classList.remove(“hidden”);
var titleEle = articleInfoContainer.querySelector(“.comments-article-title”);
if (titleEle)
try
titleEle.innerText = decodeURIComponent(title);
catch (e)
titleEle.innerText = title;
titleEle.dataset.href = href;
function toggleCommentsPopupOnPageLoad()
if (!getUrlParamByKey(“comment-popup”) == “1”)
return
var ssKey = getUrlParamByKey(‘comment-meta-id’);
if (!ssKey)
return;
toggleCommentsPopup(ssKey, true);
window.onpopstate = function()
// Back button handler, along with hash it’ll hide the popover comments UI
hideCommentsContainer(true);
function getScrollHeight(elm)
var savedValue = elm.value;
elm.value = “”;
elm._baseScrollHeight = elm.scrollHeight;
elm.value = savedValue;
var SKCampaignVideoPlayerManager = (function() {
var USER_COUNTRY = getCookie(“country_code”);
var PLAYERS_ON_INTERACTION = “”;
var SHOW_ADS = “”;
var videoPlayerInitObserver = new IntersectionObserver(function(entries)
entries.forEach(function(entry)
if (entry.target && entry.isIntersecting)
videoPlayerInitObserver.unobserve(entry.target);
loadVideoPlayer(entry.target);
);
,
threshold: 0.3
);
var videoPlayerIntersectionObserver = new IntersectionObserver(function(entries)
entries.forEach(function(entry)
if (entry.target)
if (entry.isIntersecting)
playVideo(entry.target);
else
pausePlayer(entry.target);
);
,
threshold: 0.0
);
function getPlayerById(playerId)
var player = videojs.players[playerId];
return player;
function playVideo(playerContainer)
var playerId = playerContainer.querySelector(“.sk-video-player-video-js”).id;
var player = getPlayerById(playerId);
player.play();
function pausePlayer(playerContainer)
var playerId = playerContainer.querySelector(“.sk-video-player-video-js”).id;
var player = getPlayerById(playerId);
player.pause();
function shuffleVideos(videos)
// Uses the Durstenfeld Shulffle Algo
for (var i = videos.length – 1; i > 0; i–)
var j = Math.floor(Math.random() * (i + 1));
var temp = videos[i];
videos[i] = videos[j];
videos[j] = temp;
function trackPlayerLoaded(playerId)
trackGAEvent(“sk_campaign_video_player”,
“video_player_id”: playerId,
“event_category”: “player_load”,
“country”: USER_COUNTRY
);
function trackVideoPlayed(playerId, videosConfig)
var player = getPlayerById(playerId);
var videoIdx = player.playlist.currentIndex();
var videoTitle = videosConfig[videoIdx].title;
trackGAEvent(“sk_campaign_video_player”,
“video_player_id”: playerId,
“event_category”: “video_played”,
“video_index”: videoIdx,
“video_title”: videoTitle,
“country”: USER_COUNTRY
);
function loadVideoPlayer(playerContainer) []);
var isMuted = videoPlayerElement.getAttribute(“muted”);
var autoPlay = videoPlayerElement.getAttribute(“autoplay”);
var closeBtnElement = playerContainer.querySelector(“.close-btn”);
var isPlayerApplicable = checkCountryRestriction(playerContainer, videoPlayerElement);
if (!isPlayerApplicable)
return;
if (videoPlayerElement.getAttribute(“shuffle”))
shuffleVideos(videosConfig);
player = videojs(videoPlayerId,
nativeControlsForTouch: true,
);
if (autoPlay)
videoPlayerIntersectionObserver.observe(playerContainer);
else
player.one(‘play’, function()
videoPlayerIntersectionObserver.observe(playerContainer);
);
player.fluid(true);
if (isMuted && autoPlay)
player.autoplay(‘muted’);
player.playlist(videosConfig);
player.playlist.autoadvance(0);
player.playlist.repeat(true);
player.addClass(‘vjs-sk-skin’);
player.on(‘fullscreenchange’, function(e)
if (player.isFullscreen())
screen.orientation.lock(‘landscape’);
);
player.one(‘ready’, function()
removeClass($(`#$ videoPlayerId `), “hidden”);
trackPlayerLoaded(videoPlayerId);
);
player.one(‘play’, function()
player.on(‘playlistitem’, function()
trackVideoPlayed(videoPlayerId, videosConfig);
);
// track video playing for first time
trackVideoPlayed(videoPlayerId, videosConfig);
);
closeBtnElement.addEventListener(“click”, function ()
removeVideoPlayer(playerContainer);
);
function hideVideoPlayer(playerContainer)
pausePlayer(playerContainer);
addClass(playerContainer, “hidden”);
function removeVideoPlayer(playerContainer)
playerContainer.remove();
function checkCountryRestriction(playerContainer, videoPlayerElement)
var user_country = getCookie(“country_code”);
var includeCountries = videoPlayerElement.getAttribute(“data-include-countries”);
var excludeCountries = videoPlayerElement.getAttribute(“data-exclude-countries”);
if (includeCountries)
includeCountries = includeCountries.split(“,”);
if (includeCountries.indexOf(user_country) == -1)
hideVideoPlayer(playerContainer);
return false;
else if (excludeCountries)
excludeCountries = excludeCountries.split(“,”);
if (excludeCountries.indexOf(user_country) >= 0)
hideVideoPlayer(playerContainer);
return false;
return true;
function initVideoPlayers(videoContainers)
videoContainers.forEach(function(videoContainer)
videoPlayerInitObserver.observe(videoContainer);
);
function init()
var videoContainers = $all(“.sk-video-player-container”);
if (!videoContainers)
return;
;
var promisesToEvaluate = [
asyncScriptLoader(
src: “https://www.sportskeeda.com/js/videojs/videojs-common-v1.js”,
loadWithDefer: true,
onUserInteraction: PLAYERS_ON_INTERACTION
)
];
if (SHOW_ADS)
promisesToEvaluate.push(asyncScriptLoader(
src: “https://imasdk.googleapis.com/js/sdkloader/ima3.js”,
loadWithDefer: true,
onUserInteraction: PLAYERS_ON_INTERACTION
));
(function()
function isPlayerApplicable()
var countryCode = getCookie(“country_code”);
if ([“IN”].includes(countryCode))
addClass($(“.sidebar-ad-top”), “hidden”);
addClass($(“.player_games-of-future-campaign-player_sidebar”), “active”);
var SKTrackingModule = (function () {
var COOKIE_NAME = ‘HP_ALGO_DATA_V2’;
var DATASET_SIZE = 10;
var CLIPPING_SIZE = 100;
function getTrackingCookie(cname, defaultValue)
var name = cname + “=”;
var ca = document.cookie.split(‘;’);
for(var i = 0; i = CLIPPING_SIZE)
item[‘value’] = CLIPPING_SIZE.toString();
var clipAll = true;
else
item[‘value’] = item[‘value’].toString();
return
‘value’: item,
‘clipAll’: clipAll
;
function clippingMechanism(data, key)
if (data[key].length >= DATASET_SIZE * 2)
return data[key].slice(0, DATASET_SIZE);
else
return data[key];
function track(cname, key, identifier, title) {
var data = getTrackingCookie(cname, ”);
data = JSON.parse(data);
if (!data.hasOwnProperty(key) || key == ‘sport’)
data = initializeJSONDataStructure(data, key, identifier, title);
else
var item = data[key].filter(function(item)
return item.name == identifier;
);
if (item.length > 0)
item = item[0];
var incrementResponse = incrementTrackingLogic(item);
item = incrementResponse[‘value’];
if (incrementResponse[‘clipAll’])
data[key].forEach(function(item)
item[‘value’] = parseInt(item[‘value’] / 2).toString();
);
else
data = initializeJSONDataStructure(data, key, identifier, title);
//see more logic
var contentHolder = $(‘.event-content’) || $(‘.taxonomy-content’);
var taxonomyImg = $(‘.taxonomy-img’);
var taxonomyInfo = $(‘.taxonomy-info’);
$(‘#hp_feed_select’) && $(‘#hp_feed_select’).addEventListener(‘change’, function()
document.body.scrollTop = document.documentElement.scrollTop = 0;
);
function seeMoreStats(ele) //show all stats rows
var rows = $all(‘.season-stats-tr’);
for (i in rows)
if(hasClass(rows[i], “hidden”))
removeClass(rows[i], “hidden”);
var toggleButton = $(‘.see-less-stats’);
if(hasClass(toggleButton, “hidden”))
removeClass(toggleButton, “hidden”);
addClass(ele, “hidden”);
function seeLessStats(ele) //show less stats rows
var rows = $all(‘.season-stats-tr’);
for (i in rows)
if(!hasClass(rows[i], “hidden”) && i >= 5)
addClass(rows[i], “hidden”);
var toggleButton = $(‘.see-more-stats’);
if(hasClass(toggleButton, “hidden”))
removeClass(toggleButton, “hidden”);
var NewCommentNotification = (function () {
var commentsLoaded = false;
var COMMENT_ACTION_STATUS =
APPROVED: “approved”,
REJECTED: “rejected”,
DELETE: “delete”
var commentsCount = 0;
var COMMENT_ACTION_RESPONSE_ITEMS =
“approved”:
“text”: “This comment is approved ????”,
“class”: “approved-text”
,
“delete”:
“text”: “This comment is deleted ❌”,
“class”: “rejected-text”
var moderationCountHTMLElement;
function getPendingCommentsCount()
return new Promise(function (resolve, reject)
pureJSAjaxGetWithCredentialsFlag(‘https://a-login.sportskeeda.com/en/comment-moderation/pending/count’, function (data)
try
var parsedData = JSON.parse(data);
resolve(parsedData);
catch (exception)
reject(exception)
, function (err)
reject(err)
, true)
)
function getIncomingComments()
return new Promise(function (resolve, reject)
pureJSAjaxGetWithCredentialsFlag(‘https://a-login.sportskeeda.com/en/comment-moderation/incoming’, function (data)
if (typeof data === “string”)
data = JSON.parse(data);
resolve(data);
, function (err)
reject(err)
, true)
);
function onCommentActionClick(container, comment, statusToBeUpdated)
// invalid status update check
if (!Object.values(COMMENT_ACTION_STATUS).includes(statusToBeUpdated))
return;
pureJSAjaxPut(‘https://a-login.sportskeeda.com/en/comment-moderation/update-status’,
Object.assign(comment, id: comment.ID, status: statusToBeUpdated ),
function (result)
commentsCount = Math.max(0, commentsCount – 1);
moderationCountHTMLElement.innerText = commentsCount > 0 ? commentsCount : ”;
var commentResponseItem = COMMENT_ACTION_RESPONSE_ITEMS && COMMENT_ACTION_RESPONSE_ITEMS[statusToBeUpdated];
if (commentResponseItem)
var card = container.querySelector(‘div[data-notification-id=”‘ + comment.ID + ‘”]’);
var cardActionResult = card.getElementsByClassName(‘kcn-action’)[0];
if (cardActionResult)
cardActionResult.innerText = commentResponseItem.text;
cardActionResult.classList.add(commentResponseItem.class);
,
function (err)
console.log(err);
,
null, true
);
function displayNewCommentNotifications(container) {
getIncomingComments().then(function (comments)
if (comments.error == true)
container.style.display = “none”;
return;
var cardsContainer = container.querySelector(‘.kcn-card-container’);
if(comments.length > 0)
container.style.display = “block”;
cardsContainer.innerHTML = ”;
comments.forEach(function (comment, index)
var notificationCardTemplate = container.querySelector(‘#kcn-card’);
var notificationCard = notificationCardTemplate.content.cloneNode(true);
var notificationCardWrapper = notificationCard.querySelector(‘.kcn-card-wrapper’);
notificationCardWrapper.setAttribute(‘data-notification-id’, comment.ID);
var notificationText = notificationCard.querySelector(‘.kcn-comment-text’);
notificationText.innerHTML = comment.comment_text;
var keedaPostLink = notificationCard.querySelector(‘.keeda-posts-link’);
keedaPostLink.href = comment.permalink;
notificationCardWrapper.querySelector(‘.approve’).addEventListener(‘click’, function ()
onCommentActionClick(container, comment, COMMENT_ACTION_STATUS.APPROVED);
);
notificationCardWrapper.querySelector(‘.delete’).addEventListener(‘click’, function ()
onCommentActionClick(container, comment, COMMENT_ACTION_STATUS.DELETE);
);
cardsContainer.appendChild(notificationCard);
);
else
container.style.display = “block”;
cardsContainer.innerHTML = “No new comments”;
function toggleContainerVisibility(container)
var kcnContentContainer = container.querySelector(‘#kcn-comment-container’);
var kcnPointer = container.querySelector(‘#kcn-pointer’);
if (kcnContentContainer)
kcnContentContainer.classList.toggle(‘hidden’);
if (kcnPointer)
kcnPointer.classList.toggle(‘hidden’);
function addClickHandler(container, clickCallback)
var iconContainerElement = container.querySelector(‘#kcn-comment-info-holder’);
iconContainerElement.addEventListener(“click”, function (event)
toggleContainerVisibility(container);
if (!commentsLoaded)
commentsLoaded = true;
var cardsContainer = container.querySelector(‘.kcn-card-container’);
if (cardsContainer)
cardsContainer.innerHTML = “Loading comments…”;
displayNewCommentNotifications(container);
);
function init (element)
addClickHandler(element);
displayPendingCommentsCount(element);
moderationCountHTMLElement = document.getElementById(“kcn-comment-count”);
return
init: init
})();
function initCommentNotifications(capabilities)
if(window.innerWidth < 340
TORONTO – Reigning PWHL MVP and scoring champ Natalie Spooner will miss the start of the regular season for the Toronto Sceptres, general manager Gina Kingsbury announced Tuesday on the first day of training camp.
The 33-year-old Spooner had knee surgery on her left anterior cruciate ligament (ACL) after she was checked into the boards by Minnesota’s Grace Zumwinkle in Game 3 of their best-of-five semifinal series on May 13.
She had a goal and an assist in three playoff games but did not finish the series. Toronto was up 2-1 in the semifinal at that time and eventually fell 3-2 in the series.
Spooner led the PWHL with 27 points in 24 games. Her 20 goals, including five game-winners, were nine more than the closest skater.
Kingsbury said there is no timeline, as the team wants the Toronto native at 100 per cent, but added that “she is doing really well” in her recovery.
The Sceptres open the PWHL season on Nov. 30 when they host the Boston Fleet.
This report by The Canadian Press was first published Nov. 12, 2024.
LAHORE, Pakistan (AP) — A top official of the Pakistan Cricket Board declined Friday to confirm media reports that India has decided against playing any games in host Pakistan during next year’s Champions Trophy.
“My view is if there’s any problems, they (India) should tell us in writing,” PCB chairman Mohsin Naqvi told reporters in Lahore. “I’ll share that with the media as well as with the government as soon as I get such a letter.”
Indian media reported Friday that the Board of Control for Cricket in India (BCCI) has communicated its concerns to all the Champions Trophy stakeholders, including the PCB, over the Feb. 19-March 9 tournament and would not play in arch-rival Pakistan.
The Times of India said that “Dubai is a strong candidate to host the fixtures involving the Men in Blue” for the 50-over tournament.
Such a solution would see Pakistan having to travel to a neutral venue to play India in a group match, with another potential meeting later in the tournament if both teams advanced from their group. The final is scheduled for March 9 in Pakistan with the specific venue not yet decided.
“Our stance is clear,” Naqvi said. “They need to give us in writing any objections they may have. Until now, no discussion of the hybrid model has happened, nor are we prepared to accept one.”
Political tensions have stopped bilateral cricket between the two nations since 2008 and they have competed in only multi-nation tournaments, including ICC World Cups.
“Cricket should be free of politics,” Naqvi said. “Any sport should not be entangled with politics. Our preparations for the Champions Trophy will continue unabated, and this will be a successful event.”
The PCB has already spent millions of dollars on the upgrade of stadiums in Karachi, Lahore and Rawalpindi which are due to host 15 Champions Trophy games. Naqvi hoped all the three stadiums will be ready over the next two months.
“Almost every country wants the Champions Trophy to be played here (in Pakistan),” Naqvi said. “I don’t think anyone should make this a political matter, and I don’t expect they will. I expect the tournament will be held at the home of the official hosts.”
Eight countries – Pakistan, India, Bangladesh, England, Australia, South Africa, New Zealand and Afghanistan – are due to compete in the tournament, the schedule of which is yet to be announced by the International Cricket Council.
“Normally the ICC announces the schedule of any major tournament 100 days before the event, and I hope they will announce it very soon,” Naqvi said.
RIYADH, Saudi Arabia – Ottawa‘s Gabriela Dabrowski and Erin Routliffe of New Zealand are through to the doubles final at the WTA Finals after a 7-6 (7), 6-1 victory over Nicole Melichar-Martinez of the United States and Australia’s Ellen Perez in semifinal action Friday.
Dabrowski and Routliffe won a hard-fought first set against serve when Routliffe’s quick reaction at the net to defend a Perez shot gave the duo set point, causing Perez to throw down her racket in frustration.
The second seeds then cruised through the second set, winning match point on serve when Melichar-Martinez couldn’t handle Routliffe’s shot.
The showdown was a rematch of last year’s semifinal, which Melichar-Martinez and Perez won in a super tiebreak.
Dabrowski and Routliffe will face the winner of a match between Katerina Siniakova and Taylor Townsend, and Hao-Ching Chan and Veronika Kudermetova in the final on Saturday.
Dabrowski is aiming to become the first Canadian to win a WTA Finals title.
This report by The Canadian Press was first published Nov. 8, 2024.
GIF