Открыть меню
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

MediaWiki:Common.js

Страница интерфейса MediaWiki
Версия от 16:52, 20 февраля 2026; DimaYastrebov (обсуждение | вклад) (Новая страница: «mw.hook('wikipage.content').add(function($content) { $content.find('.yastre-carousel-container').each(function() { let $carousel = $(this); let $items = $carousel.find('.carousel-item'); if ($items.length < 2) return; function updateCarousel(newIndex) { $items.removeClass('active prev next hidden'); $items.addClass('hidden'); let total = $items.length; let prevIndex = (new...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
mw.hook('wikipage.content').add(function($content) {
    $content.find('.yastre-carousel-container').each(function() {
        let $carousel = $(this);
        let $items = $carousel.find('.carousel-item');
        if ($items.length < 2) return; 

        function updateCarousel(newIndex) {
            $items.removeClass('active prev next hidden');
            $items.addClass('hidden');

            let total = $items.length;
            let prevIndex = (newIndex - 1 + total) % total;
            let nextIndex = (newIndex + 1) % total;

            $items.eq(newIndex).removeClass('hidden').addClass('active');
            
            if (total > 2) {
                $items.eq(prevIndex).removeClass('hidden').addClass('prev');
                $items.eq(nextIndex).removeClass('hidden').addClass('next');
            } else if (total === 2) {
                $items.eq(nextIndex).removeClass('hidden').addClass('next');
            }
        }

        $carousel.on('click', '.carousel-item.prev, .carousel-item.next', function(e) {
            e.preventDefault();
            e.stopPropagation();

            let currIndex = $items.index($carousel.find('.active'));
            if ($(this).hasClass('prev')) {
                updateCarousel((currIndex - 1 + $items.length) % $items.length);
            } else {
                updateCarousel((currIndex + 1) % $items.length);
            }
        });

        let touchstartX = 0;
        let touchendX = 0;

        $carousel.on('touchstart', function(e) {
            touchstartX = e.changedTouches.screenX;
        }, { passive: true });

        $carousel.on('touchend', function(e) {
            touchendX = e.changedTouches.screenX;
            handleSwipe();
        }, { passive: true });

        function handleSwipe() {
            let currIndex = $items.index($carousel.find('.active'));
            if (touchendX < touchstartX - 40) {
                updateCarousel((currIndex + 1) % $items.length);
            }
            if (touchendX > touchstartX + 40) {
                updateCarousel((currIndex - 1 + $items.length) % $items.length);
            }
        }
    });
});