Η… κατηφόρα της; Ντόρτμουντ στην Bundesliga συνεχίζεται.Η Μπορούσια γνώρισε την 3η της ήττα στην τελευταία τετράδα αγώνων που έδωσε, αυτή την φορά στην έδρα της Φράιμπουργκ με 2-1 και βρίσκεται στο -16 από την πρωτοπόρο Μπάγερν Μονάχου. Λόγος για τίτλο φυσικά δεν γίνεται, ωστόσο, έτσι όπως βαδίζει ο σύλλογος είναι πιθανό να χάσει και το «τρένο» για το Europa League της νέας περιόδου! Η Μπάγερ Λεβερκούζεν πέτυχε το σκορ της βραδιάς, συντρόβοντας στην «Μπάι Αρένα» με 5-2 την Στουτκάρδη, στην ενδεκάδα της οποία έπαιξε σε όλο το 90λεπτο ο Κωνσταντίνος Μαυροπάνος. Η Λειψία, τέλος, πιο δύσκολα απ΄ ότι δείχνει το τελιό 3-0 πέρασε από την έδρα της ουραγού, Σάλκε και μείωσε στο -7 από την πρωτοπόρο Μπάγερν, η οποία είχε περάσει χθες με «διπλό» από το «σπίτι» της Χέρτα Βερολίνου (1-0). Τα μέχρι τώρα αποτελέσματα και οι σκόρερ της 20ής αγωνιστικής του γερμανικού πρωταθλήματος έχουν ως εξής: Χέρτα Βερολίνου-Μπάγερν Μονάχου 0-1 (21΄ Κομάν)Λεβερκούζεν-Στουτγκάρδη 5-2 (18′, 31′ Ντεμιρμπάι, 57′ Μπέιλι, 68′ Βιρτζ, 84′ Γκρέι-50′, 77′ Κάλαϊτζιτς)Φράιμπουργκ-Ντόρτμουντ 2-1 (49′ Γέονγκ, 52′ Σμιντ-76′ Μουκόκο)Σάλκε-Λειψία 0-3 (45’+ Μουκιέλε, 73′ Σάμπιτζερ, 87′ Ορμπαν)Μάιντς-Ουνιόν Βερολίνου 1-0 (22′ πεν. Νιακατέ)Άουγκσμπουργκ-Βόλφσμπουργκ 0-2(38′ Βέγκχορστ, 59′ Μπακού)
');
}
},
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: 'b54193cd9e'
},
success: function(response) {
if (response.success && response.data.html) {
container.html(response.data.html);
initializeCarousel($('#carousel_684f6e5caf070'));
} 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();
}
});