MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 448: | Строка 448: | ||
var $toc = $('#toc ul'); // Находим TOC | var $toc = $('#toc ul'); // Находим TOC | ||
$toc.empty(); | $toc.empty(); | ||
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 = [0]; | var tocCounters = [0]; | ||
var lastLevel = 1; | var lastLevel = 1; | ||
var $currentList = $toc; | var $currentList = $toc; | ||
function updateCounters(level) { | function updateCounters(level) { | ||
if (level > lastLevel) { | if (level > lastLevel) { | ||
tocCounters.push(0); | tocCounters.push(0); | ||
} else if (level < lastLevel) { | } else if (level < lastLevel) { | ||
tocCounters = tocCounters.slice(0, level); | tocCounters = tocCounters.slice(0, level); | ||
} | } | ||
tocCounters[level - 1]++; | tocCounters[level - 1]++; | ||
| Строка 465: | Строка 463: | ||
} | } | ||
function getSectionNumber() { | function getSectionNumber() { | ||
return tocCounters.join('.'); | return tocCounters.join('.'); | ||
} | } | ||
function createNestedList($parent) { | function createNestedList($parent) { | ||
var $nestedList = $('<ul>'); | var $nestedList = $('<ul>'); | ||
| Строка 477: | Строка 473: | ||
} | } | ||
$headings.each(function() { | $headings.each(function() { | ||
var $heading = $(this); | var $heading = $(this); | ||
var level; | var level; | ||
if ($heading.hasClass('custom-heading')) { | if ($heading.hasClass('custom-heading')) { | ||
level = 1; // | level = 1; // Настройка уровня | ||
var customId = $heading.attr('id') || 'custom-heading-' + getSectionNumber(); | var customId = $heading.attr('id') || 'custom-heading-' + getSectionNumber(); | ||
$heading.attr('id', customId); | $heading.attr('id', customId); | ||
} else { | } else { | ||
var $headlineSpan = $heading.find('span.mw-headline'); | var $headlineSpan = $heading.find('span.mw-headline'); | ||
if ($headlineSpan.length === 0) { | if ($headlineSpan.length === 0) { | ||
return; // Пропускаем заголовок | console.warn('No mw-headline found in:', $heading); // Отладочная информация | ||
return; // Пропускаем заголовок | |||
} | } | ||
var tagName = $heading.prop('tagName').toLowerCase(); | var tagName = $heading.prop('tagName').toLowerCase(); | ||
level = parseInt(tagName.charAt(1), 10); | level = parseInt(tagName.charAt(1), 10); | ||
var sectionId = 'heading-' + getSectionNumber(); | var sectionId = 'heading-' + getSectionNumber(); | ||
$headlineSpan.attr('id', sectionId); | $headlineSpan.attr('id', sectionId); | ||
} | } | ||
updateCounters(level); | updateCounters(level); | ||
var headingText = $headlineSpan.text().trim() || $heading.text().trim(); | var headingText = $headlineSpan.text().trim() || $heading.text().trim(); | ||
if (headingText.length > 0) { | if (headingText.length > 0) { | ||
if (level > 1) { | if (level > 1) { | ||
while (tocCounters.length > level) { | while (tocCounters.length > level) { | ||
$currentList = $currentList.parent(); | $currentList = $currentList.parent(); | ||
} | } | ||
if ($currentList.children('ul').length === 0) { | if ($currentList.children('ul').length === 0) { | ||
$currentList = createNestedList($currentList); | $currentList = createNestedList($currentList); | ||
} | } | ||
} else { | } else { | ||
$currentList = $toc; | $currentList = $toc; | ||
} | } | ||
var tocItem = $('<li>').addClass('toclevel-' + (level - 1)).append( | var tocItem = $('<li>').addClass('toclevel-' + (level - 1)).append( | ||
$('<a>').attr('href', '#' + ($headlineSpan.attr('id'))).append( | $('<a>').attr('href', '#' + ($headlineSpan.attr('id'))).append( | ||
| Строка 528: | Строка 514: | ||
) | ) | ||
); | ); | ||
$currentList.append(tocItem); | $currentList.append(tocItem); | ||
} else { | |||
console.warn('Heading text is empty:', $heading); // Отладочная информация | |||
} | } | ||
}); | }); | ||
| Строка 644: | Строка 631: | ||
var customHeadings = document.querySelectorAll('.custom-heading'); | var customHeadings = document.querySelectorAll('.custom-heading'); | ||
if (customHeadings.length > 0) { | if (customHeadings.length > 0) { | ||
addHeadingsWithTOC(); | |||
} | } | ||
if (currentPageTitle.includes("Kerisar")) { | if (currentPageTitle.includes("Kerisar")) { | ||