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

мНет описания правки
мНет описания правки
Строка 454: Строка 454:
         var maxLevel = 7; // Изначально максимальный уровень не определён
         var maxLevel = 7; // Изначально максимальный уровень не определён


         // Первый проход для нахождения минимального уровня заголовков
         // Определяем максимальный уровень заголовков
         $headings.each(function() {
         $headings.each(function() {
             var $heading = $(this);
             var $heading = $(this);
             var level;
             var level = getHeadingLevel($heading);
            if (level < maxLevel) {
                maxLevel = level; // Находим минимальный уровень заголовков
            }
        });
 
        function getHeadingLevel($heading) {
             if ($heading.hasClass('custom-heading')) {
             if ($heading.hasClass('custom-heading')) {
                 level = 1; // Для кастомных заголовков
                 return 1; // Для кастомных заголовков
             } else {
             } else {
                 var tagName = $heading.prop('tagName').toLowerCase();
                 var tagName = $heading.prop('tagName').toLowerCase();
                 level = parseInt(tagName.charAt(1), 10); // Определяем уровень h1-h6
                 return parseInt(tagName.charAt(1), 10); // Определяем уровень h1-h6
             }
             }
            if (level < maxLevel) {
         }
                maxLevel = level; // Находим минимальный уровень заголовков
            }
         });


         function updateCounters(level) {
         function updateCounters(level) {
Строка 497: Строка 500:
         $headings.each(function() {
         $headings.each(function() {
             var $heading = $(this);
             var $heading = $(this);
             var level;
             var level = getHeadingLevel($heading);
             var $headlineSpan = $heading.find('span.mw-headline');
             var $headlineSpan = $heading.find('span.mw-headline');


             if ($heading.hasClass('custom-heading')) {
             if ($headlineSpan.length > 0) {
                level = 1;
                var customId = $heading.attr('id') || 'custom-heading-' + getSectionNumber();
                $heading.attr('id', customId);
            } else if ($headlineSpan.length > 0) {
                var tagName = $heading.prop('tagName').toLowerCase();
                level = parseInt(tagName.charAt(1), 10);
                 var existingId = $headlineSpan.attr('id');
                 var existingId = $headlineSpan.attr('id');
                 if (!existingId) {
                 if (!existingId) {
                     var sectionId = 'heading-' + getSectionNumber();
                     var sectionId = 'heading-' + getSectionNumber();
                     $headlineSpan.attr('id', sectionId);
                     $headlineSpan.attr('id', sectionId);
                 }
                 }
            } else if ($heading.hasClass('custom-heading')) {
                var customId = $heading.attr('id') || 'custom-heading-' + getSectionNumber();
                $heading.attr('id', customId);
             } else {
             } else {
                 return; // Пропускаем элементы без заголовков
                 return; // Пропускаем элементы без заголовков
Строка 522: Строка 521:


             if (headingText.length > 0) {
             if (headingText.length > 0) {
                // Закрываем вложенные списки, если текущий уровень меньше
                 closeNestedLists(level);
                 closeNestedLists(level);


Строка 532: Строка 530:
                 );
                 );


                // Если текущий уровень равен максимальному (высший уровень), добавляем его в основной список
                 if (level > (levelStack[levelStack.length - 1] || 0)) {
                 if (level === maxLevel) {
                    var $nestedList = createNestedList($currentList);
                    $toc.append(tocItem); // Главный список
                    $currentList = $nestedList;
                    $currentList = $toc; // Сбрасываем на основной список
                } else {
                    // Если уровень ниже максимального, создаем вложенный список
                    if (level > (levelStack[levelStack.length - 1] || maxLevel)) {
                        var $nestedList = createNestedList($currentList);
                        $currentList = $nestedList;
                    }
                    $currentList.append(tocItem);
                 }
                 }


                 // Добавляем уровень в стек для дальнейшего отслеживания
                 $currentList.append(tocItem);
                 levelStack.push(level);
                 levelStack.push(level);
             }
             }
         });
         });
        // Закрываем все оставшиеся открытые списки после обработки заголовков
        closeNestedLists(0);
     });
     });
}
}