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

мНет описания правки
мНет описания правки
Строка 450: Строка 450:
var $headings = $content.find('h1, h2, h3, h4, h5, h6, .custom-heading');
var $headings = $content.find('h1, h2, h3, h4, h5, h6, .custom-heading');
var tocCounters = [];  
var tocCounters = [];  
var lastLevel = 1;
var $currentList = $toc;  
var $currentList = $toc;  
var $nestedList = null; // Для хранения вложенного списка
var lastLevel = 1; // Уровень последнего заголовка
var lastHeadingLevel = 0; // Для отслеживания уровня предыдущего заголовка


function updateCounters(level) {
function updateCounters(level) {
Строка 462: Строка 460:
}
}
tocCounters[level - 1]++;
tocCounters[level - 1]++;
lastLevel = level;
}
}


function getSectionNumber() {
function getSectionNumber() {
return tocCounters.join('.');
return tocCounters.join('.');
}
function createNestedList($parent) {
var $nestedList = $('<ul>');
$parent.append($nestedList);
return $nestedList;
}
}


Строка 492: Строка 483:
var sectionId = 'heading-' + getSectionNumber();
var sectionId = 'heading-' + getSectionNumber();
$headlineSpan.attr('id', sectionId);
$headlineSpan.attr('id', sectionId);
} else {
var uniqueId = existingId;
var counter = 1;
while ($('#' + uniqueId).length > 0) {
uniqueId = existingId + '-' + counter;
counter++;
}
$headlineSpan.attr('id', uniqueId);
}
}
} else {
} else {
Строка 511: Строка 494:
if (headingText.length > 0) {
if (headingText.length > 0) {
// Обработка уровня заголовка
// Обработка уровня заголовка
if (level > 1) {
if (level > lastLevel) {
// Если уровень текущего элемента меньше предыдущего, возвращаемся на уровень вверх
// Если уровень увеличивается, создаем новый вложенный список
var $nestedList = $('<ul>').appendTo($currentList);
$currentList = $nestedList; // Переход в новый вложенный список
} else if (level < lastLevel) {
// Если уровень уменьшается, возвращаемся к родительскому списку
while (tocCounters.length > level) {
while (tocCounters.length > level) {
$currentList = $currentList.parent();
$currentList = $currentList.parent();
}
}
// Создаем вложенный список, если еще не создан
if (!$nestedList || $nestedList.parent().is($currentList) === false) {
$nestedList = createNestedList($currentList);
}
$currentList = $nestedList; // Переход в вложенный список
} else {
$currentList = $toc; // Сбрасываем на основной TOC
}
}


Строка 535: Строка 513:
);
);


// Если предыдущий заголовок имел такой же уровень, добавляем в текущий список
$currentList.append(tocItem); // Добавляем элемент в текущий список
if (lastHeadingLevel === level) {
lastLevel = level; // Обновляем уровень последнего заголовка
$currentList.append(tocItem);
} else {
$currentList.append(tocItem); // Добавляем элемент в текущий список
}
 
lastHeadingLevel = level; // Обновляем уровень последнего заголовка
}
}
});
});