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

мНет описания правки
Нет описания правки
Метка: ручная отмена
Строка 456: Строка 456:
         // Функция для обновления счётчиков для текущего уровня
         // Функция для обновления счётчиков для текущего уровня
         function updateCounters(level) {
         function updateCounters(level) {
             if (level > tocCounters.length) {
             if (level > lastLevel) {
                 tocCounters.push(0); // Добавляем новый уровень
                 tocCounters.push(0); // Добавляем новый уровень
             } else if (level < tocCounters.length) {
             } else if (level < lastLevel) {
                 tocCounters = tocCounters.slice(0, level); // Убираем лишние уровни
                 tocCounters = tocCounters.slice(0, level); // Убираем лишние уровни
             }
             }
Строка 481: Строка 481:
             var $heading = $(this);
             var $heading = $(this);
             var tagName = $heading.closest('h1, h2, h3, h4, h5, h6').prop('tagName').toLowerCase();
             var tagName = $heading.closest('h1, h2, h3, h4, h5, h6').prop('tagName').toLowerCase();
            var isCustomHeading = $heading.hasClass('custom-heading');
             var level = parseInt(tagName.charAt(1), 10); // Определяем уровень заголовка по тегу
             var level = isCustomHeading ? 1 : parseInt(tagName.charAt(1), 10); // Определяем уровень заголовка
 
            // Обрабатываем только заголовки с текстом
            var headingText = $heading.text().trim();
            if (headingText.length === 0) return;


             updateCounters(level); // Обновляем счётчики для текущего уровня
             updateCounters(level); // Обновляем счётчики для текущего уровня
Строка 493: Строка 488:
             $heading.attr('id', sectionId); // Присваиваем уникальный id заголовку
             $heading.attr('id', sectionId); // Присваиваем уникальный id заголовку


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


            // Если уровень заголовка выше текущего, создаём вложенный список <ul>
                // Если уровень заголовка выше, создаём вложенный список <ul>
            if (level > tocCounters.length) {
                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))
                .append(
                    .append(
                    $('<a>').attr('href', '#' + sectionId).append(
                        $('<a>').attr('href', '#' + sectionId).append(
                        $('<span>').addClass('tocnumber').text(getSectionNumber()),
                            $('<span>').addClass('tocnumber').text(getSectionNumber()),
                        $('<span>').addClass('toctext').text(headingText)
                            $('<span>').addClass('toctext').text(headingText)
                    )
                        )
                );
                    );


            // Добавляем элемент в текущий список
                // Добавляем элемент в текущий список
            $currentList.append(tocItem);
                $currentList.append(tocItem);
            }
         });
         });
        // Если после последнего заголовка остались открытые списки, закрываем их
        while ($currentList.parent().length > 0) {
            $currentList = $currentList.parent();
            $currentList.append($('<li>').addClass('toclevel-' + (tocCounters.length - 1)));
        }
     });
     });
}
}