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

мНет описания правки
мНет описания правки
Строка 449: Строка 449:
         $toc.empty();
         $toc.empty();


         var $headings = $content.find('.custom-heading'); // Заголовки
         var $headings = $content.find('.custom-heading'); // Ищем все элементы с классом .custom-heading
         var tocCounters = [0]; // Счётчики для уровней заголовков, начиная с 1-го уровня
         var tocCounters = [0]; // Счётчики для уровней заголовков, начиная с 1-го уровня
         var lastLevel = 1; // Уровень предыдущего заголовка
         var lastLevel = 1; // Уровень предыдущего заголовка
Строка 477: Строка 477:
         }
         }


         // Перебираем все заголовки в порядке их появления
         // Перебираем все заголовки с классом .custom-heading
         $headings.each(function() {
         $headings.each(function() {
             var $heading = $(this);
             var $heading = $(this);
            var level = 2; // Уровень по умолчанию


             // Проверяем, является ли элемент заголовком h1-h6
             // Обновляем счётчики для текущего уровня
            var tagName = $heading.prop('tagName').toLowerCase();
             updateCounters(level);
            var level;
 
            if (tagName.match(/^h[1-6]$/)) {
                // Если это h1-h6, получаем уровень заголовка
                level = parseInt(tagName.charAt(1), 10);
            } else {
                // Если это не h1-h6, задаём уровень по умолчанию
                level = 2; // Можете задать свой уровень по умолчанию
            }
 
             updateCounters(level); // Обновляем счётчики для текущего уровня


             var sectionId = $heading.attr('id') || 'heading-' + getSectionNumber();
             var sectionId = $heading.attr('id') || 'heading-' + getSectionNumber();
             $heading.attr('id', sectionId); // Присваиваем уникальный id заголовку
             $heading.attr('id', sectionId); // Присваиваем уникальный id заголовку


             // Извлекаем только текстовое содержимое заголовка, игнорируя вложенные элементы
             // Извлекаем только текстовое содержимое заголовка
             var headingText = $heading.text().trim();
             var headingText = $heading.text().trim();


             // Проверяем, что текст заголовка не пустой
             // Проверяем, что текст заголовка не пустой
             if (headingText.length > 0) {
             if (headingText.length > 0) {
                // Если уровень заголовка ниже текущего, возвращаемся на уровень выше
                 while (tocCounters.length > level) {
                 while (tocCounters.length > level) {
                     $currentList = $currentList.parent(); // Переходим к родительскому <ul>
                     $currentList = $currentList.parent(); // Переходим к родительскому <ul>
                 }
                 }


                // Если уровень заголовка выше, создаём вложенный список <ul>
                 if (level > lastLevel) {
                 if (level > lastLevel) {
                     $currentList = createNestedList($currentList); // Создаём новый вложенный список
                     $currentList = createNestedList($currentList); // Создаём новый вложенный список
                 }
                 }


                 // Создаём элемент списка в оглавлении (TOC) с классами для вложенности
                 // Создаём элемент списка в оглавлении (TOC)
                 var tocItem = $('<li>')
                 var tocItem = $('<li>')
                     .addClass('toclevel-' + (level - 1))
                     .addClass('toclevel-' + (level - 1))