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

MediaWiki:Common.js: различия между версиями

Страница интерфейса MediaWiki
Дополнительные действия
Нет описания правки
Нет описания правки
 
(не показаны 3 промежуточные версии этого же участника)
Строка 33: Строка 33:
});
});


// Автоскролл при открытии выпадающих блоков
// Автоскролл после открытия спойлера в меню Citizen
document.addEventListener("DOMContentLoaded", function () {
$(document).on('click', '.dropdown .dropbtn', function () {
    const dropdowns = document.querySelectorAll(".dropdown");


     dropdowns.forEach(dropdown => {
     var $dropdown = $(this).closest('.dropdown');
        const btn = dropdown.querySelector(".dropbtn");
    var $content = $dropdown.find('.dropdown-content');


        btn.addEventListener("click", function () {
    // Даем CSS-анимации завершиться, если она есть
    setTimeout(function () {


            // закрываем другие спойлеры
        // Если блок теперь виден — скроллим к нему
            dropdowns.forEach(d => {
        if ($content.is(':visible')) {
                if (d !== dropdown) d.classList.remove("active");
            var top = $dropdown.offset().top - 80; // отступ сверху (регулируется)
             });
             $('html, body').animate({ scrollTop: top }, 300);
        }


            // переключаем текущий
    }, 200);
            dropdown.classList.toggle("active");
 
            // если открыт — скроллим к нему
            if (dropdown.classList.contains("active")) {
                setTimeout(() => {
                    dropdown.scrollIntoView({
                        behavior: "smooth",
                        block: "start"
                    });
                }, 150); // ждем пока CSS-анимация начнёт увеличивать высоту
            }
        });
    });
});
});

Текущая версия от 21:38, 2 декабря 2025

/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */

mw.loader.using('mediawiki.util').then(function() {
    var isMobile = mw.config.get('skin') === 'minerva';

    if (isMobile) {
        // Мобильная версия
        $('.mobile-hide').hide();
    } else {
        // Десктопная версия
        $('.desktop-hide').hide();
    }
});

mw.hook('wikipage.content').add(function($content) {
    $content.find('.dropbtn').on('click', function(event) {
        event.preventDefault();
        var dropdown = $(this).closest('.dropdown');
        var content = dropdown.find('.dropdown-content');

        // Закрываем все открытые списки
        $('.dropdown').not(dropdown).removeClass('active').find('.dropdown-content').css('max-height', '0px');

        // Открываем/закрываем текущий список
        if (dropdown.hasClass('active')) {
            dropdown.removeClass('active');
            content.css('max-height', '0px');
        } else {
            dropdown.addClass('active');
            content.css('max-height', content[0].scrollHeight + 'px'); // Автоматическая высота
        }
    });
});

// Автоскролл после открытия спойлера в меню Citizen
$(document).on('click', '.dropdown .dropbtn', function () {

    var $dropdown = $(this).closest('.dropdown');
    var $content = $dropdown.find('.dropdown-content');

    // Даем CSS-анимации завершиться, если она есть
    setTimeout(function () {

        // Если блок теперь виден — скроллим к нему
        if ($content.is(':visible')) {
            var top = $dropdown.offset().top - 80; // отступ сверху (регулируется)
            $('html, body').animate({ scrollTop: top }, 300);
        }

    }, 200);
});