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

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

Страница интерфейса MediaWiki
Нет описания правки
Нет описания правки
Строка 2: Строка 2:
  * Этот скрипт автоматически разворачивает сворачиваемый блок (.collapsible-block),
  * Этот скрипт автоматически разворачивает сворачиваемый блок (.collapsible-block),
  * если пользователь переходит на страницу по ссылке с якорем (#).
  * если пользователь переходит на страницу по ссылке с якорем (#).
  * Версия 2.0 - Использует прямое изменение класса для большей надёжности.
  * Версия 2.1 - Добавлено декодирование кириллических и других символов в якоре.
  */
  */
mw.hook('wikipage.content').add(function($content) {
mw.hook('wikipage.content').add(function($content) {
     // Получаем якорь из URL (например, "Уровень_1"), если он есть
     // Получаем якорь из URL (например, "%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_5")
     var hash = window.location.hash.substring(1);
     var hash = window.location.hash.substring(1);
console.log(hash );
     if (!hash) {
     if (!hash) {
         return; // Выходим, если якоря нет
         return; // Выходим, если якоря нет
     }
     }


     // Находим на странице элемент с таким ID (это наш скрытый заголовок)
    // --- КЛЮЧЕВОЕ ИЗМЕНЕНИЕ ---
     var $targetAnchor = $content.find('#' + $.escapeSelector(hash));
    // Декодируем якорь, чтобы превратить "%D0%A3..." обратно в "Уровень_5"
    var decodedHash = decodeURIComponent(hash);
   
     // Находим на странице элемент с РАСШИФРОВАННЫМ ID
     var $targetAnchor = $content.find('#' + $.escapeSelector(decodedHash));
     if (!$targetAnchor.length) {
     if (!$targetAnchor.length) {
         return; // Выходим, если якорь не найден
         return; // Выходим, если якорь не найден
     }
     }
console.log($targetAnchor);


     // Находим блок для раскрытия.
     // Находим блок для раскрытия.
Строка 25: Строка 26:
     var $collapsibleBlock = $targetAnchor.closest('.visually-hidden').next('.collapsible-block');
     var $collapsibleBlock = $targetAnchor.closest('.visually-hidden').next('.collapsible-block');


    // Если блок найден...
     if ($collapsibleBlock.length) {
     if ($collapsibleBlock.length) {
         // Находим внутри него сам сворачиваемый контент
         // Находим внутри него сам сворачиваемый контент
Строка 31: Строка 31:
          
          
         // Прямым образом удаляем класс, который его скрывает.
         // Прямым образом удаляем класс, который его скрывает.
        // Это надёжнее, чем симулировать клик.
         if ($collapsibleContent.hasClass('mw-collapsed')) {
         if ($collapsibleContent.hasClass('mw-collapsed')) {
             $collapsibleContent.removeClass('mw-collapsed');
             $collapsibleContent.removeClass('mw-collapsed');

Версия от 16:31, 12 июля 2025

/**
 * Этот скрипт автоматически разворачивает сворачиваемый блок (.collapsible-block),
 * если пользователь переходит на страницу по ссылке с якорем (#).
 * Версия 2.1 - Добавлено декодирование кириллических и других символов в якоре.
 */
mw.hook('wikipage.content').add(function($content) {
    // Получаем якорь из URL (например, "%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_5")
    var hash = window.location.hash.substring(1);
    if (!hash) {
        return; // Выходим, если якоря нет
    }

    // --- КЛЮЧЕВОЕ ИЗМЕНЕНИЕ ---
    // Декодируем якорь, чтобы превратить "%D0%A3..." обратно в "Уровень_5"
    var decodedHash = decodeURIComponent(hash);
    
    // Находим на странице элемент с РАСШИФРОВАННЫМ ID
    var $targetAnchor = $content.find('#' + $.escapeSelector(decodedHash));
    if (!$targetAnchor.length) {
        return; // Выходим, если якорь не найден
    }

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

    if ($collapsibleBlock.length) {
        // Находим внутри него сам сворачиваемый контент
        var $collapsibleContent = $collapsibleBlock.find('.mw-collapsible');
        
        // Прямым образом удаляем класс, который его скрывает.
        if ($collapsibleContent.hasClass('mw-collapsed')) {
            $collapsibleContent.removeClass('mw-collapsed');
            
            // Также обновляем атрибут доступности для скринридеров
            $collapsibleContent.attr('aria-expanded', 'true');
        }
    }
});