jQuery(window).on("elementor/frontend/init", function () { elementorFrontend.hooks.addAction( "frontend/element_ready/rkit-countdown.default", function ($scope, $) { function formatDate(dateString) { var parts = dateString.split(" "); if (parts.length === 2) { var datePart = parts[0]; var timePart = parts[1]; var timeParts = timePart.split(":"); if (timeParts.length === 3 && timeParts[2].length === 1) { timeParts[2] = "0" + timeParts[2]; } return datePart + "T" + timeParts.join(":"); } return ""; } function initFlipCountdown($countdown, endDate) { if ($countdown.data("skin") !== "flip") return; if (!endDate) return; const formattedDate = formatDate(endDate); const countDownDate = new Date(formattedDate).getTime(); if (isNaN(countDownDate)) return; const pieces = {}; $countdown.find(".flip-clock__piece").each(function () { const key = $(this).data("key"); const el = this; const top = el.querySelector(".card__top"); const bottom = el.querySelector(".card__bottom"); const back = el.querySelector(".card__back"); const backBottom = el.querySelector(".card__back .card__bottom"); pieces[key] = { el, update(val) { val = val < 10 ? "0" + val : String(val); if (val !== el.dataset.value) { if (el.dataset.value) { back.setAttribute("data-value", el.dataset.value); bottom.setAttribute("data-value", el.dataset.value); } el.dataset.value = val; top.innerText = val; backBottom.setAttribute("data-value", val); el.classList.remove("flip"); void el.offsetWidth; el.classList.add("flip"); } }, }; }); const timer = setInterval(() => { const now = new Date().getTime(); const distance = countDownDate - now; if (distance < 0) { clearInterval(timer); Object.values(pieces).forEach((p) => p.update(0)); var expiredSection = $scope.find(".expired-time-section"); var countdownWidget = $scope.find(".count"); if (expiredSection.length && countdownWidget.length) { expiredSection.show(); countdownWidget.hide(); } return; } const days = Math.floor(distance / (1000 * 60 * 60 * 24)); const hours = Math.floor((distance / (1000 * 60 * 60)) % 24); const minutes = Math.floor((distance / (1000 * 60)) % 60); const seconds = Math.floor((distance / 1000) % 60); if (pieces.days) pieces.days.update(days); if (pieces.hours) pieces.hours.update(hours); if (pieces.minutes) pieces.minutes.update(minutes); if (pieces.seconds) pieces.seconds.update(seconds); }, 1000); $countdown.data("interval", timer); } function updateCountdownNormal($element, endDate) { if (!endDate) return; var formattedDate = formatDate(endDate); var countDownDate = new Date(formattedDate).getTime(); if (isNaN(countDownDate)) return; $element.find(".countdown-days").text("00"); $element.find(".countdown-hours").text("00"); $element.find(".countdown-minutes").text("00"); $element.find(".countdown-seconds").text("00"); var x = setInterval(function () { var now = new Date().getTime(); var distance = countDownDate - now; var days = Math.floor(distance / (1000 * 60 * 60 * 24)); var hours = Math.floor( (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60), ); var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((distance % (1000 * 60)) / 1000); var daysStr = (days < 10 ? "0" + days : days).toString(); var hoursStr = (hours < 10 ? "0" + hours : hours).toString(); var minutesStr = (minutes < 10 ? "0" + minutes : minutes).toString(); var secondsStr = (seconds < 10 ? "0" + seconds : seconds).toString(); if ($element.find(".countdown-days").text() !== daysStr) $element.find(".countdown-days").text(daysStr); if ($element.find(".countdown-hours").text() !== hoursStr) $element.find(".countdown-hours").text(hoursStr); if ($element.find(".countdown-minutes").text() !== minutesStr) $element.find(".countdown-minutes").text(minutesStr); if ($element.find(".countdown-seconds").text() !== secondsStr) $element.find(".countdown-seconds").text(secondsStr); if (distance < 0) { clearInterval(x); $element.find(".countdown-days").text("00"); $element.find(".countdown-hours").text("00"); $element.find(".countdown-minutes").text("00"); $element.find(".countdown-seconds").text("00"); var expiredSection = $scope.find(".expired-time-section"); var countdownWidget = $scope.find(".count"); if (expiredSection.length && countdownWidget.length) { expiredSection.show(); countdownWidget.hide(); } } }, 1000); $element.data("interval", x); } const $countdown = $scope.find("#countdown"); const endDate = $countdown.data("date"); const skin = $countdown.data("skin"); const useFlip = skin === "flip"; const existingInterval = $countdown.data("interval"); if (existingInterval) clearInterval(existingInterval); if (useFlip) { initFlipCountdown($countdown, endDate); } else { updateCountdownNormal($countdown, endDate); } $countdown.on("change", function () { const newEndDate = $(this).data("date"); const prevInterval = $(this).data("interval"); if (prevInterval) clearInterval(prevInterval); if (useFlip) { initFlipCountdown($(this), newEndDate); } else { updateCountdownNormal($(this), newEndDate); } }); }, ); });