MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 453: | Строка 453: | ||
var levelStack = []; // Стек для отслеживания уровней заголовков | var levelStack = []; // Стек для отслеживания уровней заголовков | ||
var maxLevel = 7; // Изначально максимальный уровень не определён | var maxLevel = 7; // Изначально максимальный уровень не определён | ||
var skipTOC = false; // Флаг для пропуска добавления заголовков | |||
// | // Первый проход для нахождения минимального уровня заголовков | ||
$headings.each(function() { | $headings.each(function() { | ||
var $heading = $(this); | var $heading = $(this); | ||
var level = | var level; | ||
if ($heading.hasClass('custom-heading')) { | |||
level = 1; // Для кастомных заголовков | |||
skipTOC = true; // Устанавливаем флаг, чтобы пропустить заголовки ниже | |||
} else { | |||
var tagName = $heading.prop('tagName').toLowerCase(); | |||
level = parseInt(tagName.charAt(1), 10); // Определяем уровень h1-h6 | |||
if (skipTOC) { | |||
return; // Если установлен флаг, пропускаем заголовки | |||
} | |||
} | |||
if (level < maxLevel) { | if (level < maxLevel) { | ||
maxLevel = level; // Находим минимальный уровень заголовков | maxLevel = level; // Находим минимальный уровень заголовков | ||
} | } | ||
}); | }); | ||
function updateCounters(level) { | function updateCounters(level) { | ||
| Строка 500: | Строка 502: | ||
$headings.each(function() { | $headings.each(function() { | ||
var $heading = $(this); | var $heading = $(this); | ||
var level | var level; | ||
var $headlineSpan = $heading.find('span.mw-headline'); | var $headlineSpan = $heading.find('span.mw-headline'); | ||
if ($headlineSpan.length > 0) { | if ($heading.hasClass('custom-heading')) { | ||
level = 1; | |||
var customId = $heading.attr('id') || 'custom-heading-' + getSectionNumber(); | |||
$heading.attr('id', customId); | |||
skipTOC = true; // Устанавливаем флаг для пропуска заголовков ниже | |||
} 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 { | } else { | ||
return; // Пропускаем элементы без заголовков | return; // Пропускаем элементы без заголовков | ||
} | |||
if (skipTOC) { | |||
return; // Если установлен флаг, пропускаем заголовки | |||
} | } | ||
| Строка 521: | Строка 532: | ||
if (headingText.length > 0) { | if (headingText.length > 0) { | ||
// Закрываем вложенные списки, если текущий уровень меньше | |||
closeNestedLists(level); | closeNestedLists(level); | ||
| Строка 530: | Строка 542: | ||
); | ); | ||
if (level > | // Если текущий уровень равен максимальному (высший уровень), добавляем его в основной список | ||
if (level === maxLevel) { | |||
$toc.append(tocItem); // Главный список | |||
$currentList = $toc; // Сбрасываем на основной список | |||
} else { | |||
// Если уровень ниже максимального, создаем вложенный список | |||
if (level > levelStack[levelStack.length - 1]) { | |||
var $nestedList = createNestedList($currentList); | |||
$currentList = $nestedList; | |||
} | |||
$currentList.append(tocItem); | |||
} | } | ||
// Добавляем уровень в стек для дальнейшего отслеживания | |||
levelStack.push(level); | levelStack.push(level); | ||
} | } | ||
}); | }); | ||
}); | }); | ||
} | } | ||