Το κόμμα Vetevendosje (“Αυτοδιάθεση”) του Κοσόβου προβλέπεται να κερδίσει τις βουλευτικές εκλογές, σύμφωνα με δημοσκόπηση κατά την έξοδο από τα εκλογικά τμήματα.Σύμφωνα με το έξιτ πολ του τηλεοπτικού δικτύου Pipos/Kosova Klan, το Vetevendosje προβλέπεται να εξασφαλίσει το 41,8%, ενώ ένα άλλο αντιπολιτευόμενο κόμμα, το Δημοκρατικό Κόμμα Κοσόβου (PDK), προβλέπεται να έρθει δεύτερο με ποσοστό 16,5% των ψήφων. Το κυβερνών κόμμα, Δημοκρατική Ένωση Κοσόβου (LDK), προβλέπεται ότι θα καταλάβει την τρίτη θέση με 15,2% των ψήφων. Η Συμμαχία για το Μέλλον του Κοσόβου (AAK), το οποίο αναλυτές θεωρούν ως ένα κόμμα που μπορεί να έχει ρυθμιστικό ρόλο, προβλέπεται να συγκεντρώσει το 7,2%. Σύμφωνα με τα έξιτ πολ, το Vetevendosje δεν είναι πιθανό να εξασφαλίσει την πλειοψηφία των 61 εδρών στο Κοινοβούλιο και θα πρέπει να βρει έναν εταίρο για να σχηματίσει κυβέρνηση συνασπισμού. Τα εκλογικά τμήματα αναμενόταν να κλείσουν στις 20:00 ώρα Ελλάδας και τα πρώτα επίσημα αποτελέσματα να ανακοινωθούν λίγες ώρες αργότερα. Πηγές: ΑΜΠΕ, Reuters
');
}
},
error: function() {
// Fallback to admin-ajax if REST API fails
$.ajax({
url: 'https://www.xtesini.gr/wp-admin/admin-ajax.php',
type: 'POST',
data: {
action: 'get_recommendations_carousel',
limit: limit,
nonce: '940da0b272'
},
success: function(response) {
if (response.success && response.data.html) {
container.html(response.data.html);
initializeCarousel($('#carousel_684e99bf8a760'));
} else {
container.html('
');
}
}
});
}
});
// Carousel initialization function
function initializeCarousel($wrapper) {
var $container = $wrapper.find(".carousel-container");
var $carousel = $wrapper.find(".related-articles-carousel");
var $items = $wrapper.find(".carousel-item");
var $prevBtn = $wrapper.find(".prev-arrow");
var $nextBtn = $wrapper.find(".next-arrow");
if ($items.length === 0) return;
var itemWidth = $items.first().outerWidth(true);
var visibleItems = Math.floor($container.parent().width() / itemWidth);
var position = 0;
var maxPosition = Math.max(0, $items.length - visibleItems);
// Touch handling variables
var isDragging = false;
var startX = 0;
var startY = 0;
var currentX = 0;
var currentTranslate = 0;
var startTranslate = 0;
var threshold = 10;
var isScrolling = null;
// Hide prev button initially
$prevBtn.css("opacity", "0.5");
// Navigation
$nextBtn.click(function() {
if (position < maxPosition) {
position++;
updatePosition();
}
});
$prevBtn.click(function() {
if (position > 0) {
position--;
updatePosition();
}
});
// Touch support
$carousel.on("touchstart", function(e) {
var touch = e.originalEvent.touches[0];
startX = touch.clientX;
startY = touch.clientY;
isDragging = true;
isScrolling = null;
var transform = $container.css("transform");
var matrix = transform.replace(/[^0-9,.\-]/g, "").split(",");
startTranslate = currentTranslate = matrix[4] ? parseInt(matrix[4]) : 0;
$container.css("transition", "none");
});
$carousel.on("touchmove", function(e) {
if (!isDragging) return;
var touch = e.originalEvent.touches[0];
var deltaX = touch.clientX - startX;
var deltaY = touch.clientY - startY;
if (isScrolling === null) {
if (Math.abs(deltaX) > threshold || Math.abs(deltaY) > threshold) {
isScrolling = Math.abs(deltaY) > Math.abs(deltaX) * 0.7;
}
}
if (isScrolling === true) {
isDragging = false;
$container.css("transition", "transform 0.3s ease");
return;
}
if (isScrolling === false) {
e.preventDefault();
currentX = deltaX;
var newTranslate = startTranslate + deltaX;
var minTranslate = -maxPosition * itemWidth;
var maxTranslate = 0;
if (newTranslate > maxTranslate) {
newTranslate = maxTranslate + (newTranslate - maxTranslate) * 0.3;
} else if (newTranslate < minTranslate) {
newTranslate = minTranslate + (newTranslate - minTranslate) * 0.3;
}
$container.css("transform", "translateX(" + newTranslate + "px)");
}
});
$carousel.on("touchend", function(e) {
if (!isDragging || isScrolling === true) return;
isDragging = false;
$container.css("transition", "transform 0.3s ease");
var prevPosition = position;
if (Math.abs(currentX) > itemWidth * 0.25) {
if (currentX > 0 && position > 0) {
position--;
} else if (currentX < 0 && position < maxPosition) {
position++;
}
}
if (position !== prevPosition && window.RecommendationTracker) {
var action = position > prevPosition ? 'next' : 'prev';
window.RecommendationTracker.trackCarouselInteraction(action);
}
updatePosition();
isScrolling = null;
currentX = 0;
});
function updatePosition() {
var translateX = -position * itemWidth;
currentTranslate = translateX;
$container.css({
"transition": "transform 0.3s ease",
"transform": "translateX(" + translateX + "px)"
});
$prevBtn.css("opacity", position <= 0 ? "0.5" : "1");
$nextBtn.css("opacity", position >= maxPosition ? "0.5" : "1");
}
// Responsive
$(window).on("resize", function() {
itemWidth = $items.first().outerWidth(true);
visibleItems = Math.floor($container.parent().width() / itemWidth);
maxPosition = Math.max(0, $items.length - visibleItems);
if (position > maxPosition) {
position = maxPosition;
}
updatePosition();
});
updatePosition();
}
});