"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
EDMONTON – Teuvo Teravainen had two goals and two assists and Connor Bedard had a goal and two assists as the Chicago Blackhawks captured their first victory of the season, defeating the Edmonton Oilers 5-2 on Saturday.
Seth Jones also had a goal and two assists in his 800th career NHL game and Philipp Kurashev scored the other goal for the Blackhawks, who improved to 1-1-1 on the season.
Corey Perry and Leon Draisaitl scored for the Oilers, who fell to 0-2 to start the season on the heels of making it all the way to Game 7 of the Stanley Cup final last season before losing out to the Florida Panthers. Edmonton has been outscored 11-2 in its first two games.
Petr Mrazek had 35 saves in the Chicago net, while Calvin Pickard made 15 stops between the pipes for Edmonton.
TAKEAWAYS
Blackhawks: Former Oiler Taylor Hall now has eight points (2G, 6A) in 12 career games against the team that drafted him first overall in 2010, picking up an assist on Chicago’s first-period goal. There were four former first overall picks playing in the contest in Hall and Bedard for the Hawks and Connor McDavid and Ryan Nugent-Hopkins for Edmonton. Nugent-Hopkins picked up his 700th career point in the contest.
Oilers: Oilers defenceman and Edmonton-area product Brett Kulak suited up for his 500th career NHL game. The 30-year-old has been a mainstay since arriving from Montreal at the 2023 NHL trade deadline, playing in all 183 regular-season and 53 playoff games that he could. He has recorded an even 100 points in his career.
KEY MOMENT
The Blackhawks took a two-goal lead with six minutes to play in the middle frame as Bedard used a defender as a screen before ripping a perfect shot glove-side past Pickard for his first of the season.
KEY STAT
With his third period power-play goal, Oilers forward Draisaitl now has a 16-game point streak (13-18-31) against Chicago dating to Oct. 28, 2018 and passed teammate Connor McDavid (15-game streak versus New Jersey) for the NHL’s longest active point streak against one opponent.
UP NEXT
Blackhawks: Wrap up a four-game road trip in Calgary against the Flames on Tuesday.
Oilers: Host the Flames on Sunday in the third game of a season-starting four-game set at home.
This report by The Canadian Press was first published Oct. 12, 2024.
CALGARY – Jonathan Huberdeau had two goals and two assists for the Calgary Flames in a 6-3 win in their home-opener over the Philadelphia Flyers on Saturday.
Nazem Kadri scored twice, including an empty-netter with MacKenzie Weegar and Mikael Backlund each contributing a goal for Calgary (2-0-0).
Flames goalie Dustin Wolf stopped 37 of 40 shots in his season debut.
Travis Konecny scored twice, including one short-handed, and Joel Farabee also had a goal for Philadelphia (1-1-0).
Flyers starter Ivan Fedotov made 27 saves in his first start of the season.
The Flyers played their second road game in as many nights to start their season after a 3-2 shootout win over the Canucks in Vancouver.
The Flames overcame a three-goal deficit to beat the Canucks 6-5 in overtime to start their season Wednesday.
TAKEAWAYS
Flyers: Slow start after beating Vancouver in a shootout 24 hours earlier, but scored twice in the second period and trailed by a goal heading into the third.
Flames: Wolf was the difference early stopping all 18 shots he faced in the first period and 37 overall. Calgary’s first goal that deflected off Huberdeau’s shoulder was lucky, but the winger set up Weegar perfectly for a one-timer and a 2-0 lead after 20 minutes, assisted on a pair of power-play goals and generated the Flames’ fifth goal.
KEY MOMENT
The Flames converted a five-on-three in the second period into Kadri’s power-play goal and a two-goal lead. Wolf reached back into his crease during a scramble to clear the puck and deny Konecny a potential equalizing goal midway through the third period.
KEY STAT
Philadelphia’s power play, which was the worst in the NHL last season, was 1-for-4 on Saturday and 2-for-8 after two games. Calgary’s went 2-for-5 to be 4-for-9 after two games.
UP NEXT
Flames: Finish a back-to-back weekend on Sunday in Edmonton against the Oilers.
Flyers: Follow the Flames into Edmonton on Tuesday.
This report by The Canadian Press was first published Oct. 12, 2024.
MONTREAL – The Montreal Canadiens grabbed a 2-0 lead on first-period goals by Emil Heineman and Cole Caufield and went on to beat the Ottawa Senators 4-1 on Saturday at the Bell Centre.
After Alex Newhook boosted the Canadiens’ lead to 3-0 early in the third period, Tim Stutzle ended Sam Montembeault’s bid for a second consecutive shutout. Montembeault, who made 48 saves in a season-opening win over Toronto, made 24 saves.
Caufield completed the scoring with his second goal of the game and fourth of the season as the Canadiens improved to 2-1, while the Senators slipped to 1-1.
Montreal defenceman Mike Matheson was awarded a penalty shot when he was upended by Jake Sanderson on a rush to the net during a third-period power play. Linus Ullmark, who finished the game with 21 saves, got a piece of the shot which hit the post and went wide.
TAKEAWAYS
The Canadiens won the battle of special teams. Heineman scored a power-play goal with one second remaining in the advantage as Montreal went 1-for-4 with the extra man. Ottawa failed to score on four power plays and were held to three shots on goal.
KEY MOMENT
After facing only four shots in the first period, Montembeault was under pressure in the second period when the Senators outshot the Canadiens 12-3.
KEY STAT
The Canadiens have had one of the worst power plays in the NHL over the past three seasons and the outlook for this season wasn’t bright after the team went 0-for-30 in the pre-season. But Heineman scored his first NHL goal on a power play in the first period to give Montreal a power-play goal in each of its first three regular-season games.
UP NEXT
Senators: Host the Los Angeles Kings on Monday afternoon.
Canadiens: Host the Pittsburgh Penguins on Monday night.
This report by The Canadian Press was first published Oct. 12, 2024.
GIF