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

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

Страница интерфейса MediaWiki
Нет описания правки
Нет описания правки
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
/**
jQuery(function($) {
* Этот скрипт автоматически разворачивает сворачиваемый блок (.collapsible-block),
    /**
* если пользователь переходит на страницу по ссылке с якорем (#).
    * Функция, которая находит якорь в URL, ищет соответствующий
* Версия 2.0 - Использует прямое изменение класса для большей надёжности.
    * сворачиваемый блок и раскрывает его, симулируя клик.
*/
    * Версия 3.0 - Добавлена микро-задержка для синхронизации со скриптами MediaWiki.
mw.hook('wikipage.content').add(function($content) {
    */
    // Получаем якорь из URL (например, "Уровень_1"), если он есть
    function expandSectionFromHash() {
    var hash = window.location.hash.substring(1);
        var hash = window.location.hash.substring(1);
    if (!hash) {
        if (!hash) {
         return; // Выходим, если якоря нет
            return;
    }
        }
 
         var decodedHash = decodeURIComponent(hash);
        var $targetAnchor = $('#' + $.escapeSelector(decodedHash));
        if (!$targetAnchor.length) {
            return;
        }


    // Находим на странице элемент с таким ID (это наш скрытый заголовок)
        var $collapsibleBlock = $targetAnchor.closest('.visually-hidden').next('.collapsible-block');
    var $targetAnchor = $content.find('#' + $.escapeSelector(hash));
    if (!$targetAnchor.length) {
        return; // Выходим, если якорь не найден
    }
console.log($targetAnchor);


    // Находим блок для раскрытия.
        if ($collapsibleBlock.length) {
    // Логика: ищем родителя нашего якоря (.visually-hidden)
            var $header = $collapsibleBlock.find('.collapsible-header');
    // и берём СЛЕДУЮЩИЙ за ним элемент .collapsible-block.
            var $collapsibleContent = $collapsibleBlock.find('.mw-collapsible');
    var $collapsibleBlock = $targetAnchor.closest('.visually-hidden').next('.collapsible-block');


    // Если блок найден...
            // Раскрываем блок, только если он действительно свёрнут
    if ($collapsibleBlock.length) {
            if ($collapsibleContent.hasClass('mw-collapsed')) {
        // Находим внутри него сам сворачиваемый контент
                // Используем минимальную задержку, чтобы скрипт MediaWiki
        var $collapsibleContent = $collapsibleBlock.find('.mw-collapsible');
                // успел "повесить" свой обработчик клика на элемент.
       
                setTimeout(function() {
        // Прямым образом удаляем класс, который его скрывает.
                    $header.trigger('click');
        // Это надёжнее, чем симулировать клик.
                }, 50); // 50 миллисекунд - незаметно для глаза, но достаточно для техники.
        if ($collapsibleContent.hasClass('mw-collapsed')) {
             }
            $collapsibleContent.removeClass('mw-collapsed');
           
            // Также обновляем атрибут доступности для скринридеров
             $collapsibleContent.attr('aria-expanded', 'true');
         }
         }
     }
     }
    // Выполняем функцию при первоначальной загрузке страницы
    mw.hook('wikipage.content').add(expandSectionFromHash);
    // Выполняем ТУ ЖЕ САМУЮ функцию каждый раз, когда меняется якорь в URL
    $(window).on('hashchange', expandSectionFromHash);
});
});

Текущая версия от 16:36, 12 июля 2025

jQuery(function($) {
    /**
     * Функция, которая находит якорь в URL, ищет соответствующий
     * сворачиваемый блок и раскрывает его, симулируя клик.
     * Версия 3.0 - Добавлена микро-задержка для синхронизации со скриптами MediaWiki.
     */
    function expandSectionFromHash() {
        var hash = window.location.hash.substring(1);
        if (!hash) {
            return;
        }

        var decodedHash = decodeURIComponent(hash);
        var $targetAnchor = $('#' + $.escapeSelector(decodedHash));
        if (!$targetAnchor.length) {
            return;
        }

        var $collapsibleBlock = $targetAnchor.closest('.visually-hidden').next('.collapsible-block');

        if ($collapsibleBlock.length) {
            var $header = $collapsibleBlock.find('.collapsible-header');
            var $collapsibleContent = $collapsibleBlock.find('.mw-collapsible');

            // Раскрываем блок, только если он действительно свёрнут
            if ($collapsibleContent.hasClass('mw-collapsed')) {
                // Используем минимальную задержку, чтобы скрипт MediaWiki
                // успел "повесить" свой обработчик клика на элемент.
                setTimeout(function() {
                    $header.trigger('click');
                }, 50); // 50 миллисекунд - незаметно для глаза, но достаточно для техники.
            }
        }
    }

    // Выполняем функцию при первоначальной загрузке страницы
    mw.hook('wikipage.content').add(expandSectionFromHash);

    // Выполняем ТУ ЖЕ САМУЮ функцию каждый раз, когда меняется якорь в URL
    $(window).on('hashchange', expandSectionFromHash);
});