Russia says captured east Ukrainian town of Velyka Novosilka

An elderly woman stands in a deserted alley in Pokrovsk yesterday as Russian troops advance close to the city (AFP photo)

MOSCOW — Russia on Sunday said its forces had captured the east Ukrainian town of Velyka Novosilka in the embattled Donetsk region, almost three years into their offensive. 

 

Russia has made steady advances on the battlefield in eastern Ukraine for months. 

 

Moscow's defence ministry said Russian troops led "active offensive actions" and "liberated the settlement of Velyka Novosilka", which lies in the west of the Donetsk region. 

 

Velyka Novosilka is close to the southern front line in Ukraine, which has remained largely static but where fears of a fresh Russian offensive have risen for weeks.

 

Both sides have raced to gain an advantage in the almost three-year as Donald Trump, who has vowed to hold talks to end the conflict, returns to the White House. 

.col-lg-12.second .opinion-widget{border-top:1px solid #D0D0D0;} #widget_1623 .opinions-title {font-size:32px;} #widget_1623 .opinions-title a{font-size:32px;} .first-author{ background-color:#ecedef; } .first-opinion-author-name{ background-color:white; width:max-content; padding:5px; }
.epaper-separator{ height: 1px; width: 100%; background-color: #D0D0D0; margin: 15px 0; }

Today’s Paper

.related-articles .article-widget-sm .article-title{font-size:16px;-webkit-line-clamp:3;} .related-articles .layout-ratio{padding-bottom:55%;}
.alert-success { color :#A3656F ; } .alert-danger { color : red ; } .footer { font-family:Myriad Pro,Arial; } .newspaper-footer{ visibility:hidden; } .socialFixOuter { position: fixed; top: 50%; margin-top: 40px; right: 0; transition: .2s; z-index: 20; height: 217px; width: 40px; } .socialFix { height: 30px; width: 30px; display: block; position: relative; cursor: pointer; background-size: 18px 18px; transition: .2s; background-position: center; background-repeat: no-repeat; border-radius: 2px; margin-top: 1px; } .socialFix:hover { width: 40px; margin-left: -10px; } .app-badge-img { height: 36px; width: auto; } @media (max-width: 768px) { .app-badge-img { height: 32px; } .app-badges { justify-content: center !important; } }
document.addEventListener("DOMContentLoaded", function () { const socialFix = document.querySelector(".socialFixOuter"); if (!socialFix) return; let firstInteraction = false; let hideTimeout = null; function checkMobileScreen() { if (window.innerWidth < 768) { socialFix.style.display = "none"; } else { socialFix.style.display = "block"; } } checkMobileScreen(); window.addEventListener("resize", checkMobileScreen); function handleFirstInteraction() { if (firstInteraction) return; if (window.innerWidth < 768) return; firstInteraction = true; socialFix.style.right = "-25px"; } socialFix.addEventListener("mouseenter", function () { if (window.innerWidth < 768) return; if (hideTimeout) clearTimeout(hideTimeout); socialFix.style.right = "0"; }); socialFix.addEventListener("mouseleave", function () { if (window.innerWidth < 768) return; if (hideTimeout) clearTimeout(hideTimeout); hideTimeout = setTimeout(() => { socialFix.style.right = "-25px"; }, 500); }); ["click", "touchstart"].forEach((evt) => { socialFix.addEventListener(evt, handleFirstInteraction); }); }); function validateEmail(email) { if (email.length > 255) return false; const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; if (!emailRegex.test(email)) return false; if (email.includes('..') || email.startsWith('.') || email.endsWith('.')) return false; return true; } function sanitizeInput(input) { input = input.replace(/<[^>]*>/g, ''); input = input.replace(/javascript:/gi, ''); input = input.replace(/on\w+\s*=/gi, ''); input = input.replace(/[<>"'&(){}[\]]/g, ''); return input.trim(); } document.addEventListener('DOMContentLoaded', function () { function showModal(message, type) { const messageContainer = document.getElementById("messageContainerFooter"); messageContainer.textContent = message; messageContainer.className = `alert alert-${type} mt-3`; messageContainer.classList.remove("d-none"); setTimeout(() => { messageContainer.classList.add("d-none"); }, 5000); } document.getElementById("emailFormFooter").addEventListener("submit", function(event) { event.preventDefault(); const emailInput = document.getElementById("emailFooter"); const email = sanitizeInput(emailInput.value.trim()); if (!validateEmail(email)) { showModal('Invalid email format', 'danger'); return; } const formData = new FormData(); formData.append('email', email); fetch('/subscribeNewsletter', { method: "POST", body: formData, headers: { "Accept": "application/json", "X-Requested-With": "XMLHttpRequest" } }) .then(response => { if (!response.ok) { showModal("Error submitting email. Try again.", 'danger'); } return response.json(); }) .then(data => { showModal(data.message, 'success'); }) .catch(error => { showModal("Error submitting email. Try again.", 'danger'); }); }); });